API для приёма SMS
API BinOTP позволяет арендовать виртуальные номера, получать OTP-коды и отменять заказы прямо из вашего приложения или скрипта. Все методы возвращают JSON, авторизация — по API-ключу.
Быстрый старт
https://binotp.com/api/v1X-API-Key: YOUR_API_KEY
?apikey=... по-прежнему работает, чтобы не сломать существующие интеграции, но он не рекомендуется: ключ в URL попадает в записи в логах сервера, истории браузера и заголовке Referer.Ограничения и примечания
- 60 запросов в минуту на один API-ключ, суммарно по всем методам. При превышении — ошибка 429.
- Одновременно код могут ожидать не более 5 заказов.
- Вызывайте get-sms примерно раз в 5 секунд — частые запросы не ускорят приход кода.
- Если заказ истёк без кода, get-sms вернёт status "expired", а поле refunded покажет сумму, возвращённую на баланс.
Примеры кода
Арендуйте номер Google (opt4) в США и проверяйте код каждые 5 секунд, пока не будет результата.
# 1. Rent a Google (opt4) number in the US
curl -X POST "https://binotp.com/api/v1/rent-number" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"service": "opt4", "country": "US"}'
# 2. Check for the SMS code (repeat every 5 seconds until status is not "waiting_sms")
curl "https://binotp.com/api/v1/get-sms?orderId=ORDER_ID" \
-H "X-API-Key: YOUR_API_KEY"import time
import requests
API = "https://binotp.com/api/v1"
HEADERS = {"X-API-Key": "YOUR_API_KEY"}
# 1. Rent a Google (opt4) number in the US
order = requests.post(API + "/rent-number", headers=HEADERS,
json={"service": "opt4", "country": "US"}).json()
if not order["success"]:
raise SystemExit(order["error"])
print("Phone:", order["phone"])
# 2. Poll for the code every 5 seconds
while True:
sms = requests.get(API + "/get-sms", headers=HEADERS,
params={"orderId": order["orderId"]}).json()
if not sms["success"]:
raise SystemExit(sms["error"])
if sms["status"] != "waiting_sms":
print(sms["status"], sms.get("smsCode"))
break
time.sleep(5)// Node.js 18+ (built-in fetch), run as an ES module
const API = "https://binotp.com/api/v1";
const headers = { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" };
// 1. Rent a Google (opt4) number in the US
const order = await fetch(API + "/rent-number", {
method: "POST",
headers,
body: JSON.stringify({ service: "opt4", country: "US" }),
}).then((r) => r.json());
if (!order.success) throw new Error(order.error);
console.log("Phone:", order.phone);
// 2. Poll for the code every 5 seconds
while (true) {
const sms = await fetch(API + "/get-sms?orderId=" + order.orderId, { headers })
.then((r) => r.json());
if (!sms.success) throw new Error(sms.error);
if (sms.status !== "waiting_sms") {
console.log(sms.status, sms.smsCode);
break;
}
await new Promise((resolve) => setTimeout(resolve, 5000));
}<?php
$api = "https://binotp.com/api/v1";
$headers = ["X-API-Key: YOUR_API_KEY", "Content-Type: application/json"];
function call($method, $url, $headers, $body = null) {
$ch = curl_init($url);
$options = [
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true,
];
if ($body !== null) {
$options[CURLOPT_POSTFIELDS] = json_encode($body);
}
curl_setopt_array($ch, $options);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
return $result;
}
// 1. Rent a Google (opt4) number in the US
$order = call("POST", $api . "/rent-number", $headers, ["service" => "opt4", "country" => "US"]);
if (!$order["success"]) exit($order["error"]);
echo "Phone: " . $order["phone"] . PHP_EOL;
// 2. Poll for the code every 5 seconds
do {
sleep(5);
$sms = call("GET", $api . "/get-sms?orderId=" . $order["orderId"], $headers);
} while ($sms["success"] && $sms["status"] === "waiting_sms");
echo $sms["success"] ? $sms["status"] . " " . ($sms["smsCode"] ?? "") : $sms["error"];Методы API
8/api/v1/meИнформация об аккаунте
Возвращает ваш баланс и данные аккаунта.
apikeystringОбязательныйВаш ключ API{ "success": true, "balance": 10.00, "email": "user@example.com", "username": "demo" }/api/v1/servicesСписок доступных сервисов
Возвращает все активные сервисы OTP.
apikeystringОбязательныйВаш ключ API{ "success": true, "services": [{ "code": "opt4", "name": "Google" }, ...] }/api/v1/countriesСписок доступных стран
Возвращает все поддерживаемые страны.
apikeystringОбязательныйВаш ключ API{ "success": true, "countries": [{ "code": "US", "name": "United States", "flagEmoji": "🇺🇸" }, ...] }/api/v1/pricesПолучить цены
Возвращает цены сервисов. Можно фильтровать по коду сервиса и коду страны.
apikeystringОбязательныйВаш ключ APIservicestringНеобязательныйКод сервиса (напр. opt4)countrystringНеобязательныйКод страны (напр. US){ "success": true, "prices": [{ "service": "opt4", "serviceName": "Google", "country": "US", "price": 0.35 }] }/api/v1/rent-numberАрендовать номер
Покупает виртуальный номер для приёма OTP. Сумма списывается с баланса автоматически.
apikeystringОбязательныйВаш ключ APIservicestringОбязательныйКод сервиса (напр. opt4 для Google)countrystringОбязательныйКод страны (напр. US)maxPricenumberНеобязательныйМаксимальная цена (USD). Если текущая цена выше, заказ отклоняется и деньги не списываются.{ "success": true, "orderId": "abc123", "phone": "12025551234", "service": "opt4", "country": "US", "price": 0.35, "expiresAt": "..." }/api/v1/get-smsПроверить код SMS
Опрашивайте этот метод, чтобы узнать, пришёл ли код OTP. При истечении срока средства возвращаются автоматически.
apikeystringОбязательныйВаш ключ APIorderIdstringОбязательныйID заказа из rent-number{ "success": true, "orderId": "abc123", "phone": "12025551234", "smsCode": "123456", "status": "completed" }/api/v1/cancelОтменить заказ
Отменяет активный заказ и возвращает средства на баланс.
apikeystringОбязательныйВаш ключ APIorderIdstringОбязательныйID заказа для отмены{ "success": true, "orderId": "abc123", "refunded": 0.35, "status": "cancelled" }/api/v1/ordersИстория заказов
Список ваших прошлых заказов с постраничной навигацией.
apikeystringОбязательныйВаш ключ APIlimitnumberНеобязательныйРезультатов на страницу (по умолчанию 10, максимум 100)offsetnumberНеобязательныйПропустить N результатов (для постраничной навигации){ "success": true, "orders": [...], "total": 42, "limit": 10, "offset": 0 }Коды ошибок
При ошибке API возвращает один из HTTP-кодов ниже и JSON, где success = false, а поле error описывает проблему (всегда на английском):
{ "success": false, "error": "Insufficient balance" }Missing service or country codeНе указан или неверен обязательный параметр.Insufficient balanceНедостаточно средств — пополните баланс и повторите.Temporarily out of stock, please try againСейчас нет номеров для этого сервиса/страны — повторите позже или выберите другую страну.Price is $0.25 which exceeds your maxPrice of $0.20…Текущая цена выше вашего maxPrice — увеличьте maxPrice или проверьте /prices.Invalid or missing API keyAPI-ключ не передан или неверен, либо аккаунт заблокирован.Order not foundВ вашем аккаунте нет такого заказа.Cannot cancel: SMS code already received…По заказу уже пришёл код, отменить нельзя — вызовите get-sms, чтобы его получить.Cannot cancel yet: please wait about 2 minutes after purchase…Сразу после покупки отмена недоступна — повторите через несколько минут.Too many requests. Limit: 60/minБольше 60 запросов в минуту.You already have 5 active orders (max 5)…Слишком много заказов ожидают код — дождитесь кодов или истечения срока либо отмените часть.Cannot cancel yet: please wait … minute(s) after purchase…Сразу после покупки отмена недоступна — повторите через несколько минут.Service temporarily unavailableСервис временно недоступен — повторите позже.