Appearance
Operations
Get one operation's status and state timeline
GET
/api/v1/tenant/operations/{uid}Scope operations:read
The operation as every write returned it, plus timeline (every state change in order) and, for an operation that went through a payment provider, provider (null for internal operations). A top-up intent also carries intentReference and expiresAt.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
uid | string | yes |
Response · 200
| Field | Type | Description |
|---|---|---|
uid | string | |
type | string | Operation type, e.g. wallet_credit, wallet_debit, payout_b2c or topup_c2b. |
state | string | Operation state: created, awaiting_authorization, authorized, held, processing, pending_provider, confirmed, failed, reversed or completed. |
amount | string | A decimal amount with two decimal places. |
fee | string | A decimal amount with two decimal places. |
tax | string | A decimal amount with two decimal places. |
currency | string | ISO-4217. |
clientReference | string | null | Your reference, exactly as you supplied it. |
sourceWalletUid | string | null | Wallet transfers only: the wallet the money left. |
destinationWalletUid | string | null | Wallet transfers only: the wallet the money reached. |
createdAt | string | |
completedAt | string | null | When the operation first reached a final state. |
links | object | |
links.self | string | API-relative path of this operation (GET /tenant/operations/{uid}). |
links.receipt | string | API-relative path of its receipt (GET /tenant/operations/{uid}/receipt). |
timeline | object[] | State transitions of the operation, in sequenceNo order. |
timeline[].sequenceNo | number | 0 for the creation event, then monotonically increasing. |
timeline[].fromState | string | null | State the operation moved from; null on the creation event. |
timeline[].toState | string | null | State the operation moved to. |
timeline[].occurredAt | string | |
timeline[].actorType | enum | null | Kind of actor that drove the transition. One of api_client, admin, system, provider, customer. |
provider | object | null | Payment provider status of a top-up or payout; null for operations that involve no payment provider. |
provider.state | string | Status at the payment provider: created, initiated, pending, confirmed, failed, reversed, uncertain or reconciled. |
provider.reference | string | null | The provider's own reference, when known. |
provider.lastUpdatedAt | string | Last provider-side change Neo Wallet recorded. |
intentReference | string | null | For a top-up intent (type = topup_c2b), the reference the payer quotes to the provider; null for every other operation. |
expiresAt | string | null | For a top-up intent, the instant after which a payment against the reference is not matched; null for every other operation. |
Example (placeholder values)
json
{
"uid": "01J9Z3K5X8QW2R4T6V8Y0B1C3D",
"type": "string",
"state": "string",
"amount": "2500.00",
"fee": "12.50",
"tax": "1.88",
"currency": "ETB",
"clientReference": "string",
"sourceWalletUid": "01J9Z3K5X8QW2R4T6V8Y0B1C3D",
"destinationWalletUid": "01J9Z3K5X8QW2R4T6V8Y0B1C3D",
"createdAt": "2026-09-03T10:15:30.000Z",
"completedAt": "2026-09-03T10:15:30.000Z",
"links": {
"self": "string",
"receipt": "string"
},
"timeline": [
{
"sequenceNo": 0,
"fromState": "string",
"toState": "string",
"occurredAt": "2026-09-03T10:15:30.000Z",
"actorType": "api_client"
}
],
"provider": {
"state": "string",
"reference": "string",
"lastUpdatedAt": "2026-09-03T10:15:30.000Z"
},
"intentReference": "string",
"expiresAt": "2026-09-03T10:15:30.000Z"
}Errors
400 401 403 404 429 500 503 — one body shape for all of them, see Errors.
Get the receipt of one operation
GET
/api/v1/tenant/operations/{uid}/receiptScope operations:read
Amounts, fee breakdown, masked counterparty and references, plus receiptHash over the canonical receipt so any copy can be verified. 404 until the operation has moved funds. A wallet transfer has two receipts: by default the sender's, with the fee and tax; with walletUid set to the wallet that was paid, the recipient's, which is the amount alone with no fee lines. walletUid must be one of the operation's wallets.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
uid | string | yes |
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
walletUid | string | no | The wallet the receipt is for; defaults to the wallet the money left |
Response · 200
| Field | Type | Description |
|---|---|---|
operationUid | string | |
type | string | Operation type, e.g. wallet_credit, wallet_debit, payout_b2c or topup_c2b. |
occurredAt | string | When the operation completed, otherwise when its money movement was first recorded. |
amount | string | A decimal amount with two decimal places. |
fee | string | A decimal amount with two decimal places. |
tax | string | A decimal amount with two decimal places. |
totalDebited | string | What left the customer's wallet: amount + fee + tax. For a failed or reversed operation, only the charges that are not refunded — 0.00 when every charge is refunded. |
currency | string | ISO-4217. |
counterparty | object | |
counterparty.hint | string | null | The counterparty, masked. |
references | object | |
references.clientReference | string | null | Your reference, exactly as you supplied it. |
references.providerReference | string | null | The provider's own reference, when known. |
feeBreakdown | object[] | |
feeBreakdown[].label | string | |
feeBreakdown[].amount | string | A decimal amount with two decimal places. |
state | string | Operation state: created, awaiting_authorization, authorized, held, processing, pending_provider, confirmed, failed, reversed or completed. |
receiptHash | string | SHA-256 (hex) of the canonical receipt; identical on every read. |
Example (placeholder values)
json
{
"operationUid": "01J9Z3K5X8QW2R4T6V8Y0B1C3D",
"type": "string",
"occurredAt": "2026-09-03T10:15:30.000Z",
"amount": "2500.00",
"fee": "12.50",
"tax": "1.88",
"totalDebited": "2514.38",
"currency": "ETB",
"counterparty": {
"hint": "string"
},
"references": {
"clientReference": "string",
"providerReference": "string"
},
"feeBreakdown": [
{
"label": "string",
"amount": "12.50"
}
],
"state": "string",
"receiptHash": "string"
}Errors
400 401 403 404 429 500 503 — one body shape for all of them, see Errors.