Business CollectionOn-Ramp

Create an order

POST
/openapi/v1/collections/on-ramp/orders

Create an On-Ramp order and return payment instructions. On success, the endpoint returns HTTP 200 and the new order has status AWAITING_PAYMENT.

The payer must transfer fiatAmount MXN to paymentInfo.clabe before expiresAt.

The provider sets the order price in real time. It can differ from the quote. The order creation response is authoritative.

Pass exactly one of fiatAmount and cryptoAmount.

When you create an order by fiatAmount, the provider confirms the USDT amount to be credited. The credited amount is the cryptoAmount in the response. Before the provider confirms, cryptoAmount can be empty.

An empty paymentInfo means the provider has not yet confirmed the collection. Retry the order creation with the same Idempotency-Key, or retrieve the order later.

If the provider rejects the request, the order is set to FAILED. A replay with the same Idempotency-Key returns that FAILED order.

Payer KYC is only forwarded to the provider. Stabo does not store it, and does not return the ID number or contact details in responses.

The payer's receive account must already be open. See the Open a receive account endpoint. If it is not open, order creation returns "receive account being opened" and does not create an order.

Authorization

bearerAuth
headerAuthorizationBearer <token>

The access_token obtained from POST /oauth2/token. Header format: Authorization: Bearer {accessToken}. The merchant identity comes from the token. The request body does not accept merchant or tenant fields.

Header Parameters

Idempotency-Key*string

Unique request identifier, up to 128 characters. We recommend a UUID. If the key already exists within the same merchant, the original order is returned and no new order is created

Lengthlength <= 128

Request Body

application/json
  1. body
referenceNo?string

Merchant order number, returned as is. Up to 64 characters

Lengthlength <= 64
country*"MX"

Fixed to MX

Value in"MX"
fiatCurrency*"MXN"

Fixed to MXN

Value in"MXN"
cryptoCurrency*"USDT"

Fixed to USDT

Value in"USDT"
fiatAmount?string

MXN amount paid by the payer. Must be greater than 0, with up to 2 decimal places. Pass either this or cryptoAmount. Accepts a number or a string. We recommend a string

cryptoAmount?string

USDT amount the merchant wants credited. Must be greater than 0. Pass either this or fiatAmount. Accepts a number or a string. We recommend a string

payerId*string

Unique payer identifier on the merchant side. Generated by the merchant, 1 to 64 characters, letters, digits, _, and - only. Do not use personal information such as email addresses, phone numbers, or ID numbers. The same payerId under the same merchant always maps to the same CLABE

Match^[A-Za-z0-9_-]{1,64}$
payer*

Payer KYC information.

payerAccount*

Payer's bank account.

remark?string

Remark. Up to 255 characters

Lengthlength <= 255

Response Body

Returns the order. All payer information in the example is fictitious.

application/json
  1. response
code?integer

Business status code

message?string
traceId?string

Request trace ID. Provide it when you contact technical support

data?

On-Ramp order. Order creation, order queries, and Webhooks use the same structure.

Example Request
curl -X POST 'https://api.test.stabofx.com/openapi/v1/collections/on-ramp/orders' \  -H 'Idempotency-Key: 7f9c2a1e-0b6d-4c2f-9d7e-1a2b3c4d5e6f' \  -H 'Content-Type: application/json' \  -d '{  "referenceNo": "merchant-order-0001",  "country": "MX",  "fiatCurrency": "MXN",  "cryptoCurrency": "USDT",  "cryptoAmount": "50.000000",  "payerId": "payer-0001",  "payer": {    "name": "Juan Perez Lopez",    "email": "juan@example.com",    "phone": "+5215512345678",    "country": "MX",    "address": "Av. Reforma 1, Ciudad de Mexico",    "dateOfBirth": "1990-01-31",    "idType": "NATIONAL_ID",    "idNumber": "XEXX010101HNEXXXA4"  },  "payerAccount": {    "accountType": "BANK",    "accountNumber": "012180001234567891",    "accountName": "Juan Perez Lopez"  },  "remark": "optional"}'
Example Response
{  "code": 200,  "message": "OK",  "traceId": "trace-uuid-string",  "data": {    "orderId": "bco_8f3k2m9q1x7z4t6w",    "referenceNo": "merchant-order-0001",    "status": "AWAITING_PAYMENT",    "country": "MX",    "fiatCurrency": "MXN",    "fiatAmount": "954.77",    "fiatFee": "13.50",    "cryptoCurrency": "USDT",    "cryptoAmount": "50.000000",    "price": "18.8253",    "paymentInfo": {      "method": "SPEI",      "clabe": "706180000000000001",      "reference": "REF123456"    },    "payer": {      "name": "Juan Perez Lopez"    },    "expiresAt": "2026-11-01T06:15:00Z",    "createdAt": "2026-11-01T10:15:00+08:00",    "completedAt": null,    "failureReason": null  }}