Base URL
All paths are relative to the API host:/v1 prefix. Indexer endpoints additionally live under /v1/indexer.
Response envelope
Successful responses are wrapped in a consistent envelope:| Field | Type | Description |
|---|---|---|
status | boolean | true on success, false on error. |
message | string | Human-readable summary of the result. |
data | object | array | null | The payload. Shape depends on the endpoint. |
status: false and no data (some
validation errors add an errors array). See Errors.
Content types
SendContent-Type: application/json on requests with a body, and
Accept: application/json to receive JSON. All request and response bodies are JSON.
Pagination
Two pagination styles are used depending on the service. Both are documented per endpoint, but they fall into these shapes:- Page / pageSize
- Limit / offset
Page-based (Payments, Subscriptions, Products, Indexer). Request with
Products and Indexer return a
page and pageSize (or limit) query parameters:meta block instead of inline fields:Page-size limitsDefaults are
page=1 and pageSize/limit=20. Maximums vary by service: Payments
and Subscriptions cap at 100; Products caps at 200; Indexer caps at 200.Data types & formats
| Type | Notes |
|---|---|
| Timestamps | ISO 8601 UTC strings, e.g. 2026-06-17T10:20:08.000Z. |
| Monetary amounts (fiat) | Integer major units unless noted — e.g. 1500 = ₦1,500. |
| Token amounts (on-chain) | Strings in the token’s smallest unit (e.g. "1000000"). |
| USD values | Decimal strings, e.g. "15.871500". |
| Identifiers | UUIDs, Mongo ObjectIds, or integers depending on the resource. |
| Addresses | Hex strings (0x...) for EVM; base58 for Solana. |
| Enums | Uppercase string constants (e.g. SUCCESS, MONTHLY, EVM). |
Idempotency
Value-moving wallet operations require anIdempotency-Key request header so a
retried request never executes twice:
| Endpoint | Header |
|---|---|
Initiate transfer (POST /v1/wallet/transaction/) | Idempotency-Key — required |
Sign transaction (POST /v1/wallet/hd/sign) | Idempotency-Key — required |
The exact key format, how long a key is retained, and the response when the header is
missing follow standard (Stripe-style) idempotency semantics here. Confirm these
details against your account’s configuration — this section will be tightened once
the precise contract is verified.
Rate limiting
Endpoints are throttled. When you exceed a limit you receive429 Too Many Requests:
retryAfter field (seconds) tells you when to retry. Back off and retry after
that interval. The token endpoint is limited to 30 requests/minute/IP.