Skip to main content
This is the primary action endpoint for AI agents. The agent calls this endpoint with recipient details; Axis runs six authorization checks in sequence and either approves the payment — debiting the wallet and processing settlement — or blocks it, recording the attempt for audit purposes. All amounts are expressed in kobo (1 NGN = 100 kobo).

Endpoint

Authentication

string
required
The wallet’s live API key, prefixed ax_live_.... Issued when the wallet is created. This key scopes the request to a specific wallet — there is no separate wallet ID in the request body.

Request Body

integer
required
Payment amount in kobo. Must be greater than 0. For example, 500000 kobo = ₦5,000.
string
required
Name of the merchant or recipient. Minimum 3 characters. Used for allowlist checks when wallet.useAllowlist is true.
string
required
Recipient’s Nigerian bank account number. Must be exactly 10 digits.
string
required
3-digit NIP bank code identifying the recipient’s bank. Common values:
  • "058" — GTBank
  • "044" — Access Bank
  • "011" — First Bank
string
Human-readable payment description. Maximum 200 characters. Stored on the transaction record and visible in transaction history.

Request Example

Authorization Checks

Before debiting the wallet, Axis runs the following checks in order. The first failure stops processing and returns the corresponding error code — subsequent checks are not evaluated.
  1. Wallet is activewallet.status must be ACTIVE
  2. Wallet has not expired — the current timestamp must be before wallet.expiry
  3. Per-transaction limitamount must be ≤ wallet.spendLimitPerTx
  4. Period spend limit — total approved spend in the last wallet.periodWindowDays days plus amount must be ≤ wallet.spendLimitPeriod
  5. Merchant allowlist — if wallet.useAllowlist is true, merchantName must appear in the wallet’s merchant allowlist
  6. Sufficient balanceamount must be ≤ wallet.balance

Response — 201 Created

A 201 is returned only when the payment is approved and settlement is initiated. The response body includes the full transaction record and a settlement reference.
boolean
Always true for a successful response.
object
Container for the transaction and settlement details.

Error Responses

All error responses share the same shape:

400 — Validation Error

Returned when a required field is missing, the wrong type, or fails a format constraint (e.g. recipientAccountNo is not 10 digits).

401 — Authentication Error

Returned when the x-api-key header is absent or does not match any wallet.

402 — Insufficient Funds

Returned when authorization check 6 fails: the requested amount exceeds the wallet’s current balance.

403 — Authorization Denied

Returned when authorization checks 1–5 fail. Each failure produces a distinct code. Wallet is inactive (check 1):
Wallet has expired (check 2):
Per-transaction spend limit exceeded (check 3):
Period spend limit exceeded (check 4):
Merchant not on allowlist (check 5):
Blocked payment intents (authorization checks 1–6 fail) still create a Transaction record with decision: "blocked" and a blockReason matching the error code. These records appear in wallet transaction history and audit logs — every payment attempt is traceable regardless of outcome.

TypeScript Example