403). No money moves until every authorization check passes.
Authorization checks
Axis evaluates these checks in strict order. The first check that fails blocks the payment immediately — the remaining checks are not evaluated.- Wallet
statusmust beactive— inactive wallets cannot make payments - Current time must be before
wallet.expiry— expired wallets are permanently blocked amountmust not exceed the wallet’sspendLimitPerTx— per-transaction captotalSpentin the current rolling window +amountmust not exceedspendLimitPeriod— period cap using theperiodWindowDaysrolling window- If
useAllowlististrue:merchantNamemust appear in the wallet’s merchant allowlist amountmust not exceed the wallet’s currentbalance— insufficient funds check
POST /api/payment-intent
Requires anx-api-key header. See API key authentication for how to obtain and pass your key.
Request body
Approved response — 200 OK
When every authorization check passes, Axis debits the wallet and returns the transaction record alongside a settlement reference.
Blocked response — 403 Forbidden
When a check fails, Axis returns a structured error with a machine-readable errorCode. The transaction is still recorded with decision: "blocked" for audit purposes.
errorCode values, in the order the checks are evaluated:
Blocked transactions are still recorded
A blocked attempt is never silently discarded. Axis creates a transaction record withdecision: "blocked" and a blockReason field explaining which check failed. This is intentional — the audit trail is complete regardless of outcome, so you can always inspect why a payment was denied.
TypeScript example — calling from an AI agent tool
The snippet below shows how to wrap the endpoint as a tool function in an AI agent. Handle both the approved and blocked paths explicitly so your agent can react appropriately.See API key authentication for how to create and pass your
x-api-key header.