neo-pays

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