Skip to content

Operations

List your operations, newest first

GET/api/v1/tenant/operations

Scope operations:read

Paginated. Every operation you created, in any state. customerUid and walletUid narrow within your own operations; a value outside your account matches nothing.

Query parameters

NameTypeRequiredDescription
customerUidstringnoCustomer the operation belongs to
walletUidstringnoWallet the operation touches (source or destination)
typestringnoOperation type code
statestringnoOperation state
fromstringnoISO-8601 instant, inclusive lower bound on createdAt
tostringnoISO-8601 instant, inclusive upper bound on createdAt
pagenumbernoPage to retrieve, 1-based. Example: 1 Default Value: 1
limitnumbernoRecords per page. Values above the maximum are clamped, not rejected. Default Value: 20 Max Value: 100
sortByenum[]noSort key. Repeat the param to sort by several fields; URL order sets precedence. Format: fieldName:DIRECTION Example: sortBy=createdAt:DESC&sortBy=id:ASC Default Value: createdAt:DESC,id:DESC Available Fields createdAt id Any other field is rejected with 400.

Response · 200

FieldTypeDescription
dataobject[]
data[].uidstring
data[].typestringOperation type, e.g. wallet_credit, wallet_debit, payout_b2c or topup_c2b.
data[].statestringOperation state: created, awaiting_authorization, authorized, held, processing, pending_provider, confirmed, failed, reversed or completed.
data[].amountMinornumberInteger minor units (e.g. 250000 = ETB 2,500.00).
data[].feeMinornumberMinor units.
data[].taxMinornumberMinor units.
data[].currencystringISO-4217.
data[].clientReferencestring | nullYour reference, exactly as you supplied it.
data[].createdAtstring
data[].completedAtstring | nullWhen the operation first reached a final state.
data[].linksobject
data[].links.selfstringAPI-relative path of this operation (GET /tenant/operations/{uid}).
data[].links.receiptstringAPI-relative path of its receipt (GET /tenant/operations/{uid}/receipt).
metaobject
meta.totalnumber
meta.pagenumber
meta.limitnumber
meta.totalPagesnumber
Example (generated from the schema)
json
{
  "data": [
    {
      "uid": "01J9Z3K5X8QW2R4T6V8Y0B1C3D",
      "type": "string",
      "state": "string",
      "amountMinor": 0,
      "feeMinor": 0,
      "taxMinor": 0,
      "currency": "ETB",
      "clientReference": "string",
      "createdAt": "2026-09-03T10:15:30.000Z",
      "completedAt": "2026-09-03T10:15:30.000Z",
      "links": {
        "self": "string",
        "receipt": "string"
      }
    }
  ],
  "meta": {
    "total": 42,
    "page": 1,
    "limit": 20,
    "totalPages": 3
  }
}

Errors

400 401 403 404 429 500 503 — one body shape for all of them, see Errors.

Get one operation's status and state timeline

GET/api/v1/tenant/operations/{uid}

Scope operations:read

The operation as it appears in the list, plus timeline (every state change in order) and, for an operation that went through a payment provider, provider (null for internal operations).

Path parameters

NameTypeRequiredDescription
uidstringyes

Response · 200

FieldTypeDescription
uidstring
typestringOperation type, e.g. wallet_credit, wallet_debit, payout_b2c or topup_c2b.
statestringOperation state: created, awaiting_authorization, authorized, held, processing, pending_provider, confirmed, failed, reversed or completed.
amountMinornumberInteger minor units (e.g. 250000 = ETB 2,500.00).
feeMinornumberMinor units.
taxMinornumberMinor units.
currencystringISO-4217.
clientReferencestring | nullYour reference, exactly as you supplied it.
createdAtstring
completedAtstring | nullWhen the operation first reached a final state.
linksobject
links.selfstringAPI-relative path of this operation (GET /tenant/operations/{uid}).
links.receiptstringAPI-relative path of its receipt (GET /tenant/operations/{uid}/receipt).
timelineobject[]State transitions of the operation, in sequenceNo order.
timeline[].sequenceNonumber0 for the creation event, then monotonically increasing.
timeline[].fromStatestring | nullState the operation moved from; null on the creation event.
timeline[].toStatestring | nullState the operation moved to.
timeline[].occurredAtstring
timeline[].actorTypeenum | nullKind of actor that drove the transition; the actor's identity is never included. One of api_client, admin, system, provider, customer.
providerobject | nullPayment provider status of a top-up or payout; null for operations that involve no payment provider.
provider.statestringStatus at the payment provider: created, initiated, pending, confirmed, failed, reversed, uncertain or reconciled.
provider.referencestring | nullThe provider's own reference, when known.
provider.lastUpdatedAtstringLast provider-side change Neo Wallet recorded.
Example (generated from the schema)
json
{
  "uid": "01J9Z3K5X8QW2R4T6V8Y0B1C3D",
  "type": "string",
  "state": "string",
  "amountMinor": 0,
  "feeMinor": 0,
  "taxMinor": 0,
  "currency": "ETB",
  "clientReference": "string",
  "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"
  }
}

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}/receipt

Scope 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.

Path parameters

NameTypeRequiredDescription
uidstringyes

Response · 200

FieldTypeDescription
operationUidstring
typestringOperation type, e.g. wallet_credit, wallet_debit, payout_b2c or topup_c2b.
occurredAtstringWhen the operation completed, otherwise when its money movement was first recorded.
amountMinornumberInteger minor units (e.g. 250000 = ETB 2,500.00).
feeMinornumberMinor units.
taxMinornumberMinor units.
totalDebitedMinornumberamountMinor + feeMinor + taxMinor, minor units.
currencystringISO-4217.
counterpartyobject
counterparty.hintstring | nullMasked counterparty; never the raw value.
referencesobject
references.clientReferencestring | nullYour reference, exactly as you supplied it.
references.providerReferencestring | nullThe provider's own reference, when known.
references.journalUidsstring[]References of the accounting entries the receipt is computed from.
feeBreakdownobject[]
feeBreakdown[].labelstring
feeBreakdown[].amountMinornumberMinor units.
statestringOperation state: created, awaiting_authorization, authorized, held, processing, pending_provider, confirmed, failed, reversed or completed.
receiptHashstringSHA-256 (hex) of the canonical receipt; identical on every read.
Example (generated from the schema)
json
{
  "operationUid": "01J9Z3K5X8QW2R4T6V8Y0B1C3D",
  "type": "string",
  "occurredAt": "2026-09-03T10:15:30.000Z",
  "amountMinor": 0,
  "feeMinor": 0,
  "taxMinor": 0,
  "totalDebitedMinor": 0,
  "currency": "ETB",
  "counterparty": {
    "hint": "string"
  },
  "references": {
    "clientReference": "string",
    "providerReference": "string",
    "journalUids": [
      "string"
    ]
  },
  "feeBreakdown": [
    {
      "label": "string",
      "amountMinor": 0
    }
  ],
  "state": "string",
  "receiptHash": "string"
}

Errors

400 401 403 404 429 500 503 — one body shape for all of them, see Errors.