API documentation
| HTTP method | POST |
| Response format | JSON |
| API URL | https://pak-otp.com/api/v2 |
| API key | Get your API key on the Account page |
| Currency | All 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
| Parameter | Description |
key | Your API key |
action | balance |
Example response
{
"status": "success",
"balance": "12.4500",
"currency": "USD"
}
Countries list
| Parameter | Description |
key | Your API key |
action | countries |
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
| Parameter | Description |
key | Your API key |
action | services |
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
| Parameter | Description |
key | Your API key |
action | prices |
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
| Parameter | Description |
key | Your API key |
action | order |
service | Service code (e.g. whatsapp) |
country | Country code (e.g. england) |
operator | Operator 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
| Parameter | Description |
key | Your API key |
action | status |
order | Order 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
| Parameter | Description |
key | Your API key |
action | complete |
order | Order ID |
Use after you have received the code. The number is closed.
Example response
{
"status": "success"
}
Cancel order
| Parameter | Description |
key | Your API key |
action | cancel |
order | Order 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"
}