A valid request URL is required to generate request examples{
"wallet": {
"accountId": "network",
"smsCreditBalance": 500,
"planTier": "starter",
"planRenewsAt": "2026-08-28T00:00:00.000Z",
"updatedAt": "2026-07-28T09:12:00.000Z"
},
"ledger": [
{
"id": "3f1c8a6e-1d2b-4f7a-9c33-5b0e2a8d41f6",
"accountId": "network",
"type": "adjustment",
"amount": 500,
"balanceAfter": 500,
"source": "pilot seed",
"createdAt": "2026-07-28T09:12:00.000Z"
}
],
"usage": [
{
"id": "9a4d1e77-6b02-4c15-8f39-2ad7c0e5b183",
"accountId": "network",
"storeId": "store-lyon-1",
"channel": "sms",
"kind": "receipt",
"recipientHash": "b94d27b9934d3e08a52e52d7da7dabfa",
"status": "sent",
"creditsCharged": 1,
"createdAt": "2026-07-28T09:30:00.000Z"
}
],
"byStore": [
{
"storeId": "store-lyon-1",
"sends": 1,
"creditsSpent": 1
}
],
"lowBalance": false,
"lowBalanceThreshold": 100
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123,
"fieldErrors": [
{
"field": "<string>",
"message": "<string>"
}
]
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}Read the credit wallet, ledger and usage (crédit, recharge)
Returns everything the Centrale credits-and-notifications page renders in one call: the current wallet (materialized balance, subscribed plan tier and renewal date), every ledger movement (top-ups, plan grants, debits, refunds, adjustments), the usage events each send produced, the per-store byStore ventilation of sends and credits spent, and a lowBalance flag tripped at lowBalanceThreshold. Reach for this to answer how many credits are left, where they went, or why the low-balance banner is showing; it takes no parameters and returns the whole (unpaginated) history.
A valid request URL is required to generate request examples{
"wallet": {
"accountId": "network",
"smsCreditBalance": 500,
"planTier": "starter",
"planRenewsAt": "2026-08-28T00:00:00.000Z",
"updatedAt": "2026-07-28T09:12:00.000Z"
},
"ledger": [
{
"id": "3f1c8a6e-1d2b-4f7a-9c33-5b0e2a8d41f6",
"accountId": "network",
"type": "adjustment",
"amount": 500,
"balanceAfter": 500,
"source": "pilot seed",
"createdAt": "2026-07-28T09:12:00.000Z"
}
],
"usage": [
{
"id": "9a4d1e77-6b02-4c15-8f39-2ad7c0e5b183",
"accountId": "network",
"storeId": "store-lyon-1",
"channel": "sms",
"kind": "receipt",
"recipientHash": "b94d27b9934d3e08a52e52d7da7dabfa",
"status": "sent",
"creditsCharged": 1,
"createdAt": "2026-07-28T09:30:00.000Z"
}
],
"byStore": [
{
"storeId": "store-lyon-1",
"sends": 1,
"creditsSpent": 1
}
],
"lowBalance": false,
"lowBalanceThreshold": 100
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123,
"fieldErrors": [
{
"field": "<string>",
"message": "<string>"
}
]
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}Authorizations
Authorization: Bearer <token>. Accepts EITHER a Keycloak access token (scopes-in-token) OR an opaque POS session token; both resolve to the same pos.* scope vocabulary the route guards enforce.
Response
The wallet, its ledger, the usage events, the per-store split and the flag.
The wallet, its ledger, the usage events, the per-store split and the flag.

