Reference data
Generated page, from the OpenAPI specification the gateway serves (
GET /v1/openapi.json). Do not edit it by hand: it is rewritten on every build.
| Method | Path | Description |
|---|---|---|
GET |
/v1/assets |
Assets and their decimals |
GET |
/v1/balances |
Retrieve balances |
GET |
/v1/corridors |
Corridors open to your account |
GET /v1/assets
Assets and their decimals
Each asset carries its symbol and its number of decimals, which is what turns a minor unit into a readable amount.
⚠️ Do not hard-code the decimals — read them here. It is the only protection against being out by a factor of a hundred on a real amount.
Responses
200— OK (AssetList)401— API key missing or rejected (Error)403— The key does not carry the required scope, or the account is not active (Error)429— The key's request budget is exhausted (300/min) — honour Retry-After (Error)
GET /v1/balances
Retrieve balances
Available, pending and reserved balance, PER ASSET and per (platform, country).
⚠️ Balances never add up across assets: there is no currency conversion on this platform, so a total across all assets would mean nothing. The reserved amount covers outflows already committed; it is not spendable.
Each row names its platform (platform_code) and its pot (platform_account_handle, null for pot 0) — key your pots on the handle, never on the numeric id, which differs between environments.
Parameters
| Name | In | Required | Description |
|---|---|---|---|
asset_id |
query | yes | Required. The asset whose balances you want; its id comes from GET /v1/assets. Without it the route answers 422 invalid_request — balances are held by (asset, platform, country) and there is no all-assets total. |
Responses
200— OK (BalanceList)401— API key missing or rejected (Error)403— The key does not carry the required scope, or the account is not active (Error)429— The key's request budget is exhausted (300/min) — honour Retry-After (Error)
GET /v1/corridors
Corridors open to your account
The (asset, country, platform, direction) combinations YOUR account may use, in the order routing would pick them, with the identifiers to pass as asset_id and platform_id.
ⓘ Routing is inspectable, not guessable: if a payment is refused for a closed corridor, this list says which one was missing. It does NOT give a price — pricing depends on the client, the amount and the direction.
Parameters
| Name | In | Required | Description |
|---|---|---|---|
asset_id |
query | yes | Required. The corridor's asset; its id comes from GET /v1/assets. Without it the route answers 422 invalid_request — a corridor is a (country, asset) pair and there is no all-assets answer. |
country |
query | no | The corridor's country, ISO 3166-1 alpha-2. Omitted, it takes the account's. The route refuses only when BOTH are missing — an account with no configured country cannot be guessed. |
direction |
query | no | The corridor's direction. Omitted, it is INBOUND. Anything other than INBOUND or OUTBOUND is refused rather than ignored. |
Responses
200— OK (CorridorList)401— API key missing or rejected (Error)403— The key does not carry the required scope, or the account is not active (Error)429— The key's request budget is exhausted (300/min) — honour Retry-After (Error)
Schemas
The shapes the operations above return.
AssetList
| Field | Type | Description |
|---|---|---|
data |
Asset[] | |
data[].id |
integer | |
data[].symbol |
string | |
data[].decimals |
integer | |
page |
integer | |
per_page |
integer |
Error
| Field | Type | Description |
|---|---|---|
error |
object | |
error.code |
string | |
error.message |
string |
BalanceList
La réponse réelle de GET /v1/balances : une enveloppe data portant l'actif, ses sous-soldes et leur total disponible.
| Field | Type | Description |
|---|---|---|
data |
object | |
data.asset_id |
integer | |
data.balances |
Balance[] | |
data.balances[].platform_id |
integer | |
data.balances[].platform_code |
string | Le code STABLE de la plateforme ('wave', 'sn-ecobank-senegal'). null si la plateforme n'est pas (ou plus) active. Ajouté sans rupture ; platform_id reste la clé. |
data.balances[].country |
string | ISO 3166-1 alpha-2 |
data.balances[].platform_account_id |
integer | Le pot. 0 est une vraie valeur : NOTRE compte de plateforme, toujours émis. ⚠️ Non portable entre environnements — nommez un pot par platform_account_handle. |
data.balances[].platform_account_handle |
string | Le NOM stable du pot (client_platform_accounts.handle, ex. 'neo-card-card-programme'), celui qu'accepte platform_account_handle sur /v1/payouts et /v1/rebalances. null pour platform_account_id 0. |
data.balances[].available_minor |
string | |
data.balances[].reserved_minor |
string | Engagé par des sorties en cours ; non dépensable. |
data.balances[].held_minor |
string | Retenu par une revue (porte humaine) ; non dépensable. |
data.balances[].asset_id |
integer | Non émis par ligne : l'actif est porté une fois par l'enveloppe (data.asset_id). Conservé pour compatibilité de la documentation. |
data.balances[].pending_minor |
string | Jamais émis par GET /v1/balances (voir reserved_minor et held_minor). Conservé pour compatibilité de la documentation. |
data.total_available_minor |
string | Information seulement : rien ne s'autorise contre le total — chaque pot est distinct et toute dépense en nomme un. |
page |
integer | Jamais émis : la liste n'est pas paginée. |
per_page |
integer | Jamais émis : la liste n'est pas paginée. |
CorridorList
| Field | Type | Description |
|---|---|---|
data |
Corridor[] | |
data[].asset_id |
integer | |
data[].country |
string | |
data[].platform_id |
integer | |
data[].platform |
string | |
data[].direction |
string | |
data[].rails |
string[] | |
page |
integer | |
per_page |
integer |