arrow-down-to-bracketOn Ramp

On-ramp operations (fiat to crypto) — partner initiates a buy order, vendor provides liquidity, end-user sends fiat

Get on-ramp price estimate

post
/api/v1/partner/onramp/estimate

Get indicative on-ramp pricing (fiat to crypto) without creating a quote. This endpoint is lightweight and does not reserve liquidity.

Use this when you need quick pricing discovery before calling /partner/onramp/quote. Optional filters: payment_method_slug, payment_network_slug, provider_scope, country_code. This endpoint is indicative and does not apply user/payment-details ownership checks; for executable pricing use quote.

Authorizations
X-API-KeystringRequired

Partner API key for authentication. Required for all partner account endpoints.

Body
anyOptional
or
anyOptional
Responses
chevron-right
200

Estimate retrieved successfully

application/json
successbooleanRequired

Indicates if the request was successful

Example: true
post
/api/v1/partner/onramp/estimate

Get on-ramp quote

post
/api/v1/partner/onramp/quote

Get a price quote for an on-ramp operation (fiat to crypto). Returns the exchange rate, amounts, and a quote ID that can be used to initiate the order. Quotes expire after 60 seconds.

The user_uuid is the public UUID returned by POST /partner/users (the id field).

Fee structure: The fee_breakdown object shows all fee components transparently: platform_fee (our fee in crypto), partner_fee (partner's markup, currently 0, configurable via dashboard in a future release), and total_fee (sum of both).

Payment method: Provide payment_method_slug and/or payment_network_slug to narrow routing. If omitted, the best available option for the pair is selected automatically.

Authorizations
X-API-KeystringRequired

Partner API key for authentication. Required for all partner account endpoints.

Body
anyOptional
or
anyOptional
Responses
chevron-right
200

Quote retrieved successfully

application/json
successbooleanRequired

Indicates if the request was successful

Example: true
post
/api/v1/partner/onramp/quote

Initiate on-ramp order

post
/api/v1/partner/onramp/initiate

Initiate an on-ramp order using a previously obtained quote. The quote must still be active (not expired or already used).

On success, returns the created order with status awaiting_liquidity_provider. Once a vendor accepts, the order moves to awaiting_vendor_escrow_funding, then awaiting_fiat_transfer when the crypto is locked in escrow.

At awaiting_fiat_transfer the partner must call confirm-payment-sent to advance the order. If the order type is payment_request, call submit-payer-details first before confirming.

Authorizations
X-API-KeystringRequired

Partner API key for authentication. Required for all partner account endpoints.

Body
quote_idstring · uuidRequired

Quote ID from the quote endpoint. Payment details are taken from the quote.

Example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
reference_idstringOptional

Optional partner-supplied external reference ID (e.g. your internal order ID). Stored on the order and echoed back in responses.

Example: your-internal-order-id
Responses
post
/api/v1/partner/onramp/initiate

Submit payer details

post
/api/v1/partner/orders/{order_id}/submit-payer-details

Submit the end-user's payment details for a payment_request on-ramp order. Only required when the order type is payment_request — regular on-ramp orders do not need this step.

Order types:

  • Regular on-ramp — the vendor sends fiat to the end-user directly. No payer details needed. The partner receives vendor payment details in the vendor_payment_details field of GET /orders/:id and forwards them to the end-user to initiate the transfer.

  • payment_request on-ramp — the vendor sends a payment request (e.g. M-Pesa push) to the end-user. The end-user's account details must be submitted here first so the vendor knows where to send the request. Check payment_request: true in the order response to identify this type.

Call this endpoint after initiating the order and before calling confirm-payment-sent. The order must be in awaiting_fiat_transfer status.

Provide either a payment_details_id (referencing a previously saved payment profile) or an inline payment_details object with the payer's account information.

Authorizations
X-API-KeystringRequired

Partner API key for authentication. Required for all partner account endpoints.

Path parameters
order_idstring · uuidRequired

Order UUID returned by the initiate endpoint

Example: ce3cfd6a-1234-5678-abcd-ef1234567890
Body

Submit the payer's payment details for a payment_request on-ramp order. Provide exactly one of payment_details_id (saved profile) or payment_details (inline object).

or
Responses
chevron-right
200

Payer details submitted successfully

application/json
successbooleanRequired

Indicates if the request was successful

Example: true
post
/api/v1/partner/orders/{order_id}/submit-payer-details

Confirm fiat payment sent

post
/api/v1/partner/orders/{order_id}/confirm-payment-sent

Confirm that the end-user has initiated the fiat payment to the vendor. This advances the order from awaiting_fiat_transfer to fiat_transfer_pending, signalling to the vendor that the fiat is on its way.

For payment_request orders, call submit-payer-details first. No request body required.

Authorizations
X-API-KeystringRequired

Partner API key for authentication. Required for all partner account endpoints.

Path parameters
order_idstring · uuidRequired

Order UUID

Example: ce3cfd6a-1234-5678-abcd-ef1234567890
Responses
chevron-right
200

Payment confirmed successfully

application/json
successbooleanRequired

Indicates if the request was successful

Example: true
post
/api/v1/partner/orders/{order_id}/confirm-payment-sent

Get send-out authorization parameters

get
/api/v1/partner/orders/{order_id}/bridge-authorization-parameters

After an on-ramp order reaches completed status (crypto on master wallet), the partner can optionally initiate a cross-chain send-out to transfer the USDT to an external network (e.g. Arbitrum).

This endpoint returns the EIP-712 ForwardRequest parameters required to authorize the transfer. The partner must sign the request locally and submit the signature to POST /api/v1/partner/orders/{order_id}/authorize-bridge.

Prerequisites:

  • Order status must be completed (internal: escrow_released_to_buyer)

  • destination_chain must be a supported chain slug (e.g. arbitrum, ethereum)

  • destination_address must be a valid EVM address

Response includes:

  • forward_request — pre-filled EIP-712 ForwardRequest object to sign

  • eip712_domain — domain parameters for EIP-712 signing

  • quote_id — Relay quote ID embedded in the transfer calldata

  • to_amount — estimated USDT amount to be received on the destination chain (atomic units)

  • forwarder_nonce — current on-chain nonce for the master wallet

Authorizations
X-API-KeystringRequired

Partner API key for authentication. Required for all partner account endpoints.

Path parameters
order_idstring · uuidRequired

Order UUID

Example: ce3cfd6a-1234-5678-abcd-ef1234567890
Query parameters
destination_chainstringRequired

Destination chain slug (e.g. arbitrum, ethereum)

Example: arbitrum
destination_addressstringRequired

Recipient EVM address on the destination chain

Example: 0x9B61e9b3aed5bbFa66d778854E3dE7AF3241F021
Responses
chevron-right
200

Authorization parameters returned successfully

application/json
get
/api/v1/partner/orders/{order_id}/bridge-authorization-parameters

Authorize send-out (cross-chain transfer)

post
/api/v1/partner/orders/{order_id}/authorize-bridge

Submit the signed EIP-712 ForwardRequest to initiate a cross-chain send-out. The signature is verified on-chain via the XAI forwarder contract.

Call GET bridge-authorization-parameters first to get the parameters to sign.

After submission the order transitions to send_out_pending. A background worker monitors the Relay bridge and updates the status to send_out_completed or send_out_failed when the transfer settles. The partner receives a webhook for each transition.

When the send-out completes, the send_out_tx_hash field in GET /orders/:id contains the destination-chain transaction hash.

This endpoint is idempotent at the on-chain level — the EIP-712 nonce prevents duplicate submissions. A second call with the same nonce will be rejected.

Authorizations
X-API-KeystringRequired

Partner API key for authentication. Required for all partner account endpoints.

Path parameters
order_idstring · uuidRequired

Order UUID

Example: ce3cfd6a-1234-5678-abcd-ef1234567890
Body
destination_chainstringRequired

Destination chain slug (must match the value used in bridge-authorization-parameters)

Example: arbitrum
destination_addressstringRequired

Recipient EVM address on the destination chain

Example: 0x9B61e9b3aed5bbFa66d778854E3dE7AF3241F021
signaturestringRequired

EIP-712 signature of the ForwardRequest (hex, with 0x prefix)

Example: 0xc9a69a67...
Responses
chevron-right
200

Send-out submitted successfully

application/json
post
/api/v1/partner/orders/{order_id}/authorize-bridge

Last updated