Developer API Documentation
Programmatically procure numbers, retrieve real-time SMS OTP codes, check live balances, query server rates, and automate activation flows at scale.
Quickstart & Base Endpoint
v1.0 RESTAll requests to the SMS Panel REST API are transmitted over HTTPS. Responses are uniformly formatted in JSON with industry-standard HTTP response status codes.
https://fastsmsotp.shop/api/v1
Both /api/v1/... and direct /api/... routes are fully supported across all endpoints.
Authentication
Authenticate your requests using your secret API Key. You can generate and view your API key in your API Credentials page. We support three convenient authentication formats:
Bearer Token Header
Authorization: Bearer YOUR_API_KEY
X-API-KEY Header
X-API-KEY: YOUR_API_KEY
URL Parameter
?api_key=YOUR_API_KEY
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Accept: application/json
/balance
Retrieve your account real-time balance, currency, and user identity.
curl -s -X GET "https://fastsmsotp.shop/api/v1/balance" \
-H "Authorization: Bearer YOUR_API_KEY"
<?php
$ch = curl_init("https://fastsmsotp.shop/api/v1/balance");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer YOUR_API_KEY"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res = json_decode(curl_exec($ch), true);
echo "Balance: $" . $res['data']['balance'];
curl_close($ch);
import requests
headers = {"Authorization": "Bearer YOUR_API_KEY"}
res = requests.get("https://fastsmsotp.shop/api/v1/balance", headers=headers).json()
print("Balance:", res['data']['balance'])
const res = await fetch("https://fastsmsotp.shop/api/v1/balance", {
headers: { "Authorization": "Bearer YOUR_API_KEY" }
});
const data = await res.json();
console.log("Balance:", data.data.balance);
Sample 200 OK Response:
{
"status": "1",
"success": true,
"msg": "Balance retrieved",
"balance": 24.50,
"currency": "USD",
"formatted_balance": "$24.50",
"data": {
"balance": 24.50,
"currency": "USD",
"user_id": 1420,
"formatted_balance": "$24.50"
}
}
/services/list
Retrieve all supported virtual number verification services along with their unique service slugs.
curl -s -X GET "https://fastsmsotp.shop/api/v1/services/list"
Sample 200 OK Response:
{
"status": "1",
"msg": "Services retrieved",
"data": [
{ "id": 1, "name": "WhatsApp", "slug": "whatsapp", "icon": "fa-brands fa-whatsapp", "sort_order": 1 },
{ "id": 2, "name": "Telegram", "slug": "telegram", "icon": "fa-brands fa-telegram", "sort_order": 2 },
{ "id": 3, "name": "Google / Gmail", "slug": "google-gmail-youtube", "icon": "fa-brands fa-google", "sort_order": 3 },
{ "id": 4, "name": "Instagram", "slug": "instagram-threads", "icon": "fa-brands fa-instagram", "sort_order": 4 },
{ "id": 5, "name": "Facebook", "slug": "facebook", "icon": "fa-brands fa-facebook", "sort_order": 5 }
]
}
/countries/list
Retrieve all supported countries with their numeric country IDs and ISO country codes.
curl -s -X GET "https://fastsmsotp.shop/api/v1/countries/list"
Sample 200 OK Response:
{
"status": "1",
"msg": "Countries retrieved",
"data": [
{ "id": 187, "name": "United States", "code": "us", "flag_code": "us" },
{ "id": 4, "name": "India", "code": "in", "flag_code": "in" },
{ "id": 12, "name": "Indonesia", "code": "id", "flag_code": "id" },
{ "id": 16, "name": "United Kingdom", "code": "gb", "flag_code": "gb" },
{ "id": 22, "name": "Russia", "code": "ru", "flag_code": "ru" }
]
}
/prices/list
Query real-time prices and available live number stock by service and country.
Query Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
service |
string | Optional | Service slug (e.g., whatsapp, telegram, wa). |
country |
integer / string | Optional | Numeric country ID or code (e.g., 187, 12, 4). |
server |
string | Optional | SMS Server slug (e.g., server-1 or server-2). |
curl -s -X GET "https://fastsmsotp.shop/api/v1/prices/list?service=whatsapp&country=187"
Sample 200 OK Response:
{
"status": "1",
"success": true,
"msg": "Prices retrieved successfully",
"count": 1,
"data": [
{
"service": "whatsapp",
"service_name": "Whatsapp",
"country_id": 187,
"country_name": "United States",
"price": 0.45,
"cost": 0.35,
"stock": 4200,
"server": "server-1"
}
]
}
/servers
Retrieve all active SMS Server routes, delivery health, and latency telemetry.
curl -s -X GET "https://fastsmsotp.shop/api/v1/servers"
Sample 200 OK Response:
{
"status": "1",
"data": [
{
"id": 1,
"name": "Server 1",
"slug": "server-1",
"status": "active",
"health": {
"ping_ms": 115,
"otp_success": "98.9%",
"avg_delivery": "22s",
"uptime": "99.9%"
}
},
{
"id": 2,
"name": "Server 2",
"slug": "server-2",
"status": "active",
"health": {
"ping_ms": 142,
"otp_success": "98.2%",
"avg_delivery": "25s",
"uptime": "99.8%"
}
}
]
}
/orders/create
Allocate and procure a fresh virtual number for an incoming OTP verification code.
Request Parameters (JSON Body or POST):
| Field | Type | Required | Description |
|---|---|---|---|
service_id |
string / int | Required | Service code or slug (e.g., wa or whatsapp, tg or telegram). |
country_id |
integer / string | Required | Numeric country ID (e.g., 187 for USA, 4 for India, 12 for Indonesia). |
server |
string | Optional | SMS Server route (e.g., server-1, server-2, server-4). If omitted, optimal server with automatic failover is auto-selected. |
curl -s -X POST "https://fastsmsotp.shop/api/v1/orders/create" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"service_id": "wa",
"country_id": 187
}'
Sample 200 OK Response:
{
"status": "1",
"msg": "Number retrieved successfully",
"data": {
"order_id": 98142,
"order_code": "ORD-98142",
"phone_number": "+12024561111",
"country_code": "187",
"service": "wa",
"cost": 0.45,
"status": "pending",
"expires_at": "2026-10-17 14:15:00",
"created_at": "2026-10-17 13:55:00",
"cancel_delay_minutes": 2,
"expiry_minutes": 20
},
"order_id": 98142,
"phone_number": "+12024561111",
"cost": 0.45
}
/orders/status
Poll for the incoming SMS verification code and message text associated with an active order ID.
curl -s -X GET "https://fastsmsotp.shop/api/v1/orders/status?order_id=98142" \
-H "Authorization: Bearer YOUR_API_KEY"
Sample Response: Code Received (status: "received")
{
"status": "1",
"msg": "Order completed",
"data": {
"order_id": 98142,
"order_code": "ORD-98142",
"status": "received",
"sms_code": "489201",
"full_sms": "Your WhatsApp verification code is 489-201. Do not share this code.",
"phone_number": "+12024561111",
"received_at": "2026-10-17 14:02:15"
},
"order_id": 98142,
"sms_code": "489201",
"status_text": "received"
}
Sample Response: Still Waiting (status: "waiting")
{
"status": "1",
"msg": "Status checked",
"data": {
"order_id": 98142,
"order_code": "ORD-98142",
"status": "waiting",
"sms_code": null,
"full_sms": null,
"phone_number": "+12024561111"
},
"order_id": 98142,
"sms_code": null,
"status_text": "waiting"
}
/orders/resend
Request a secondary or subsequent verification code within the active number activation window.
curl -s -X POST "https://fastsmsotp.shop/api/v1/orders/resend" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"order_id": 98142
}'
Sample 200 OK Response:
{
"status": "1",
"msg": "Secondary SMS requested! Waiting for the new code to arrive...",
"data": {
"order_id": 98142,
"status": "pending"
}
}
/orders/cancel
Cancel a pending order and release the number. Eligible orders are immediately refunded to your account balance.
Request Parameters:
| Field | Type | Required | Description |
|---|---|---|---|
order_id |
integer / string | Required | Numeric ID or string Order ID (e.g., 98142 or ORD-98142). |
curl -s -X POST "https://fastsmsotp.shop/api/v1/orders/cancel" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"order_id": 98142
}'
Sample 200 OK Response:
{
"status": "1",
"msg": "Order cancelled and refunded successfully",
"data": {
"new_balance": 24.50,
"refund_amount": 0.45
}
}
Error Codes Reference
The API uses standard HTTP error codes to communicate error states clearly.
| HTTP Status | Error Code | Description & Suggested Action |
|---|---|---|
400 |
BAD_REQUEST |
Missing or malformed payload. Verify request JSON and headers. |
401 |
UNAUTHORIZED |
Invalid or missing API key in Authorization header. Check your API credentials. |
402 |
INSUFFICIENT_BALANCE |
Your account balance is too low for this transaction. Please add funds to your wallet. |
404 |
NO_NUMBERS_AVAILABLE |
No temporary numbers are currently in stock for this service/country pair. Try another server or country. |
404 |
ORDER_NOT_FOUND |
Specified order ID was not found or does not belong to your account. |
422 |
VALIDATION_ERROR |
Required parameter is missing (e.g., service_id or country_id). |
429 |
RATE_LIMIT_EXCEEDED |
Request rate exceeds limit (60 requests/minute). Slow down polling interval. |