Create eSIM order with USDT payment intent (auth + purchase scope)

Reserves an eSIM and creates a NowPayments invoice. Runs spending-limit gate (daily/monthly/cool-off/big-txn). Returns pay_url for the user to complete payment.

post/api/v1/orders

Request

  • Base URL: https://roamzy.io
  • URL: https://roamzy.io/api/v1/orders
  • Auth: HTTP bearer

Request body

country_slugstring required
amount_usdtinteger required

Whole USDT. Anti-dust minimum is 20; smaller amounts are rejected with error "below_min_topup".

pay_currencystring

Pay-currency code from GET /api/v1/payment-options. Ask the user which stablecoin + network they hold and pass their choice — do not guess. If omitted, the invoice falls back to usdttrc20 (USDT on TRON), which locks NowPayments checkout to that one network.

Example request

{
  "country_slug": "esim-spain",
  "amount_usdt": 20,
  "pay_currency": "usdttrc20"
}

Response

Order created — user pays at pay_url. msisdn is the user-facing eSIM identifier; all other IDs are internal plumbing.

msisdnstring nullable

USER-FACING eSIM phone number (e.g. "2040400002"). Show this to the human; hide the other IDs.

order_idstring

Internal — pass to follow-up endpoints only.

intent_idstring

Internal — use as :id in GET /api/v1/orders/:id. Do NOT show to user.

esim_idstring

Internal — use as :id in GET /api/v1/esims/:id. Do NOT show to user.

display_idstring

Internal short ID. Do NOT show to user.

pay_urlstring uri

NowPayments hosted invoice. Surface to user.

amount_usdtnumber
statusstring
next_stepsstring[]

Example response

{
  "status": "waiting",
  "user_facing": {
    "identifier_label": "Your eSIM number",
    "action_label": "Pay with USDT"
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.