API documentation
HTTP methodPOST
Response formatJSON
API URLhttps://pak-otp.com/api/v2
API keyGet your API key on the Account page
CurrencyAll prices are in USD
Rate limit: 180 requests per minute. The services, countries and prices lists are limited to 2 requests per minute each — fetch them once and cache on your side.
Balance
ParameterDescription
keyYour API key
actionbalance
Example response
{
  "status": "success",
  "balance": "12.4500",
  "currency": "USD"
}
Countries list
ParameterDescription
keyYour API key
actioncountries

All active countries in one request. country = country code (use it in Prices / Add order).

Example response
[
  {
    "country": "england",
    "name": "United Kingdom",
    "iso": "gb",
    "prefix": "+44"
  }
]
Services list
ParameterDescription
keyYour API key
actionservices

All active services in one request. service = service code (use it in Prices / Add order).

Example response
[
  {
    "service": "whatsapp",
    "name": "WhatsApp"
  },
  {
    "service": "telegram",
    "name": "Telegram"
  }
]
Prices list
ParameterDescription
keyYour API key
actionprices

All active prices in ONE request, grouped by country code → service code → operator. price = your price after discount (USD). Use gzip (Accept-Encoding: gzip) — the response is large.

Example response
{
  "england": {
    "whatsapp": {
      "virtual59": { "price": "0.9100", "stock": 120511, "rate": 46.97 },
      "virtual60": { "price": "1.1700", "stock": 35313, "rate": 17.39 }
    }
  }
}
Add order
ParameterDescription
keyYour API key
actionorder
serviceService code (e.g. whatsapp)
countryCountry code (e.g. england)
operatorOperator from the Prices list (e.g. virtual59)
Example response
{
  "status": "success",
  "order": 23501,
  "phone": "+447397940000",
  "charge": "0.9100",
  "expires": "2026-09-30 12:20:00",
  "currency": "USD"
}
Order status
ParameterDescription
keyYour API key
actionstatus
orderOrder ID

Status values: waiting (no SMS yet), received (SMS arrived), completed, canceled, timeout (expired). Canceled and timeout orders without an SMS are refunded automatically.

Example response
{
  "order": 23501,
  "status": "received",
  "phone": "+447397940000",
  "code": "482913",
  "sms": [
    {
      "sender": "WhatsApp",
      "text": "Your WhatsApp code is 482-913",
      "code": "482913"
    }
  ],
  "charge": "0.9100",
  "refunded": false,
  "expires": "2026-09-30 12:20:00",
  "currency": "USD"
}
Complete order
ParameterDescription
keyYour API key
actioncomplete
orderOrder ID

Use after you have received the code. The number is closed.

Example response
{
  "status": "success"
}
Cancel order
ParameterDescription
keyYour API key
actioncancel
orderOrder ID

Only possible before an SMS arrives. The full price returns to your balance.

Example response
{
  "status": "success",
  "refund": "0.9100"
}
Errors

If something goes wrong, every action returns status: error with a message.

Too many requests returns HTTP 429 with the message Too many requests. Please slow down. Wait a few seconds and try again.

{
  "status": "error",
  "message": "Insufficient balance"
}