Skip to main content

Cashier — Looking up and activating the wallet on the participant's behalf

Two regional routes (wallet-api, /v1/events/{eventId}/...):

EndpointWhat it does
GET /v1/events/{eventId}/cashier/wallets/{userId}Read-only lookup: this participant's wallet balance and status in this event. 404 WALLET_NOT_FOUND if they haven't activated yet.
POST /v1/events/{eventId}/cashier/wallets/activateCreates the wallet, using the activationAuthorization obtained in the previous step (see Find or register a participant). Idempotent. The authorization can only be used once — even if activation fails for another reason, it's consumed; request a new one on error.
GET /v1/events/{eventId}/cashier/wallets/{userId}/statementPaginated statement of this wallet's movements (recharges today; sales/refunds once those exist).
curl -X POST http://127.0.0.1:8787/v1/events/{eventId}/cashier/wallets/activate \
-H "Authorization: Bearer <cashier accessToken>" \
-H "Content-Type: application/json" \
-d '{ "userId": "<userId returned in the previous step>", "activationAuthorization": "<token returned in the previous step>" }'

Statement​

curl "http://127.0.0.1:8787/v1/events/{eventId}/cashier/wallets/{userId}/statement?limit=20&sortDirection=desc" \
-H "Authorization: Bearer <cashier accessToken>"
Response
{
"items": [
{
"entryId": "018f26d7-...",
"transactionId": "018f26d7-...",
"type": "recharge",
"accountType": "WALLET_AVAILABLE",
"amountMinor": 5000,
"occurredAt": "2026-09-03T16:30:29.377Z",
"paymentMethod": "cash",
"note": null,
"createdByOperatorUsername": "CX-55130771",
"createdByOperatorDescription": "Entrada Principal"
}
],
"nextCursor": null
}

createdByOperatorUsername/createdByOperatorDescription identify who performed the movement (the cashier, or the PDV in the future) — they're snapshotted onto the ledger entry at the moment it happens, so they keep showing who the operator was at the time even if the account gets renamed later. Both are null when there's no operator, or when the account has no description set.

Cursor-paginated (not numbered pages): when nextCursor comes back non-null, call again with ?cursor=<value> for the next batch — keep the same sortDirection/filters as the original call, or the API rejects with WALLET_STATEMENT_CURSOR_SORT_MISMATCH.

Available filters, all optional and combinable:

ParameterWhat it does
typeOnly one movement type (today only recharge exists).
occurredAfter / occurredBeforeDate range, ISO 8601, inclusive on both ends.
sortDirectionasc or desc (default: desc, newest first).
limit1 to 100 (default 50).

amountMinor is signed — positive is a credit (money coming in), negative is a debit. paymentMethod/note only appear on recharge entries; they'll be null for other movement types in the future.