requires_action response so you can redirect the cardholder without changing your integration.
The base URL for all Axra Pay API requests is
https://api.useaxra.com/api/v1. All requests must be made over HTTPS.Checkout sessions
Hosted checkout for cards and local rails.
Card payments
Server-to-server card charging.
Local payment methods
Bank transfers, mobile money, and instant EFT settled in USDC.
Charge a card (server-to-server)
POST /business/payment/charge
Use this endpoint to charge a card directly from your server. You must have server-to-server (S2S) charging enabled on your business account. If the card requires a 3DS challenge, the response will contain a requiresAction object instead of an immediate succeeded status — see 3DS authentication for the full flow.
Authentication
Pass your API key in thex-api-key header, or include a valid JWT Authorization: Bearer <token> header on every request.
Request parameters
Card details — provide eithercard or savedTokenId, not both.
number
required
Charge amount in major currency units (e.g.,
49.99 for $49.99). Do not pass cents.string
required
ISO 4217 currency code in lowercase (e.g.,
"usd", "eur", "ngn").object
Raw card details. Required if
savedTokenId is not provided. Supply this object only over a server-to-server connection — never expose card data on the client.string
A previously saved card token. Required if
card is not provided. Tokens are created when saveCard: true is included in a prior charge request.string
Customer email address. Used to send payment receipts.
string
A short description of the payment (e.g.,
"Order #1042"). Stored on the payment record and visible in your dashboard.string
Customer’s IP address. Recommended — Axra Pay’s fraud scoring engine uses this signal to assess risk.
string
URL to redirect the customer to after they complete (or cancel) a 3DS challenge. Required if your cards may trigger 3DS.
object
Customer billing address. Improves authorization rates and is required by some card networks for address verification.
boolean
default:"false"
When
true, Axra Pay tokenizes the card and returns a savedTokenId you can use for future charges without requiring the customer to re-enter card details.object
Arbitrary key-value pairs (string keys, string or number values). Stored on the payment and returned in webhook events. Useful for attaching internal order IDs or customer references.
Responses
Immediate success —status: "succeeded"
string
required
Unique Axra Pay identifier for this payment.
string
required
"succeeded" — the charge was accepted by the card network.number
required
Charged amount in major currency units, matching the request.
string
required
ISO 4217 currency code.
string
required
Axra transaction reference for this charge. Required when calling
POST /business/payment/confirm-3ds.string
required
ISO 8601 timestamp of when the charge was created.
status: "requires_action"
string
required
"requires_action" — the card issuer requires an additional authentication step before completing the charge.object
required
Example
Confirm a 3DS challenge
POST /business/payment/confirm-3ds
After a customer completes a 3DS challenge and is redirected back to your returnUrl, call this endpoint with the transactionId from the original charge response to finalize the payment.
Call this endpoint after the customer has completed the 3DS challenge in their browser. Calling it prematurely will result in a failed confirmation.
Request parameters
string
required
The
transactionId returned in the original POST /business/payment/charge response when status was "requires_action".Response fields
string
The Axra Pay payment identifier.
string
Final charge status:
"succeeded" or "failed".boolean
true if authentication and charge completed successfully.string
Transaction reference, matching the value from the original charge.
Example
Get a payment
GET /business/payment/:paymentId
Retrieve the full details of a single payment by its ID. Use this endpoint to check the current status of a payment, inspect fee breakdowns, or confirm settlement.
Path parameters
string
required
The unique Axra Pay payment ID (e.g.,
pay_01HXYZ123456).Response fields
string
Unique payment identifier.
string
Your Axra Pay business ID.
number
Charged amount in major currency units.
string
ISO 4217 currency code.
string
Payment lifecycle status.
"COMPLETED" means the payment has been confirmed and funds are allocated for settlement. Other possible values: "PENDING", "FAILED", "REFUNDED".string
Payment method type (e.g.,
"card").string
Axra transaction reference for the charge. Use when contacting support about a specific payment.
string
Settlement state:
"PENDING", "SETTLED", or "FAILED".string
ISO 8601 timestamp of when the funds were settled to your account.
null if not yet settled.object
All metadata key-value pairs submitted with the original charge, plus an Axra-generated
feeBreakdown object showing processing fees.string
ISO 8601 creation timestamp.
string
ISO 8601 timestamp of the last status change.
Example
List payments
GET /business/payments
Retrieve a paginated list of all payments for your business, ordered by creation time (most recent first).
Query parameters
number
default:"1"
Page number to retrieve. Starts at
1.number
default:"20"
Number of payments per page. Maximum
100.Response fields
array
Array of payment objects. Each object has the same structure as the Get a payment response.
object
Example
Refund a payment
POST /business/payment/:paymentId/refund
Issue a full refund for a completed payment. The refund is applied to the original card and the payment status is updated to "REFUNDED".
Path parameters
string
required
The ID of the payment to refund.
Response fields
string
The ID of the refunded payment.
string
"REFUNDED" on success.string
Unique identifier for the refund record.
Example
Error responses
Idempotency
Axra Pay automatically deduplicates charge requests to prevent accidental double charges. If two requests are made within the same one-minute window with the same combination of:- Business ID
- Card last four digits (or
savedTokenId) amountcurrency
Rate limiting
When you exceed a rate limit, the API returns a
429 Too Many Requests response. Implement exponential backoff before retrying.