Skip to content

Reseller API

Buy temporary numbers and read verification codes programmatically. A small, predictable REST API — authenticate with a header, get JSON back. Create a key in your API keys page.

Base URL
https://smsxr.com/api/v1
Auth header
X-API-Key: sv_…
Rate limit
120 req / min
Examples in:
GET /api/v1/balance — Get wallet balance

Returns your current wallet balance, funds held by open orders, and spendable balance.

Request
Response
{
  "balance": 42.50,
  "held": 3.00,
  "available": 39.50,
  "currency": "USD"
}
GET /api/v1/services — List services

Every service you can buy a number for, with the cheapest starting price and how many countries offer it.

Request
Response
{
  "services": [
    { "slug": "telegram", "name": "Telegram", "from_price": 0.20, "countries": 174 }
  ]
}
GET /api/v1/prices/{service} — Prices for a service

Per-country price and live stock for one service, cheapest first.

Parameters
  • service (path) — Service slug, e.g. telegram
Request
Response
{
  "service": "telegram",
  "currency": "USD",
  "countries": [
    { "country": "gb", "name": "United Kingdom", "price": 0.30, "stock": 812 }
  ]
}
POST /api/v1/orders — Buy a number

Reserves a number for a service+country. Funds are held until a code arrives (captured) or the order expires (released).

Parameters
  • service (body) — Service slug, e.g. telegram
  • country (body) — ISO-2 country code, e.g. gb
Request
Response
{
  "id": "a1b2c3d4-…",
  "service": "telegram",
  "country": "gb",
  "phone_number": "+447700900123",
  "status": "pending",
  "price": 0.30,
  "currency": "USD",
  "expires_at": "2026-07-25T10:20:00+00:00",
  "sms": null
}
GET /api/v1/orders/{id} — Get order & SMS

Poll this until status is “received”. When the code arrives, the sms object is populated.

Parameters
  • id (path) — Order id returned by “Buy a number”
Request
Response
{
  "id": "a1b2c3d4-…",
  "status": "received",
  "phone_number": "+447700900123",
  "sms": {
    "code": "12345",
    "text": "Your code is 12345",
    "sender": "Telegram",
    "received_at": "2026-07-25T10:12:00+00:00"
  }
}
POST /api/v1/orders/{id}/cancel — Cancel & refund

Cancels an order that has not received a code (after the minimum wait) and releases the held funds.

Parameters
  • id (path) — Order id to cancel
Request
Response
{
  "id": "a1b2c3d4-…",
  "status": "cancelled",
  "sms": null
}

Try it live

Run a real GET request with your own API key. Your key stays in your browser and is sent straight to the API.

Typical flow

  1. 1. POST /orders with a service and country to reserve a number.
  2. 2. Show the returned phone_number to your user and poll GET /orders/{id}.
  3. 3. When status becomes received, read the code from the sms object.
  4. 4. If no code arrives, POST /orders/{id}/cancel (after the minimum wait) or let it expire — either way the hold is released.