Перейти к основному содержимому
100+
Страны
1000+ сервисов. Оплата криптовалютой, без KYC.
Купить номер

Документация API

Автоматизируйте процессы SMS-верификации с помощью API SimNoKYC. Покупайте виртуальные номера телефонов, получайте SMS-коды, арендуйте выделенные номера и управляйте заказами — всё программно.

Требуется аутентификация. Все запросы к API используют аутентификацию сессий на основе cookies. Вы должны быть авторизованы в своём аккаунте SimNoKYC для использования API. Войдите через веб-интерфейс или используйте конечную точку авторизации для установки сессии.

Аутентификация

API использует аутентификацию сессий на основе cookies. Для программной аутентификации:

  1. Отправьте POST-запрос на /auth-api.php с вашей seed-фразой
  2. Сохраните cookie сессии из ответа
  3. Включайте cookie во все последующие API-запросы
POST /auth-api.php

Аутентифицируйтесь с помощью вашей seed-фразы и установите сессию.

ПараметрТипОбязательныйОписание
actionstringобязательныйДолжно быть "login"
seedstringобязательныйВаш 16-символьный seed доступа (напр. AbC3-dEf4-gHj5-kLm6)
cURL
Python
JavaScript
# Login and save session cookie curl -X POST https://simnokyc.com/auth-api.php \ -d "action=login&seed=AbC3-dEf4-gHj5-kLm6" \ -c cookies.txt
import requests session = requests.Session() resp = session.post("https://simnokyc.com/auth-api.php", data={ "action": "login", "seed": "AbC3-dEf4-gHj5-kLm6" }) data = resp.json() print(data) # {"success": true, "user": {...}} # session object now holds the cookie for all future requests
const resp = await fetch("https://simnokyc.com/auth-api.php", { method: "POST", credentials: "include", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: "action=login&seed=AbC3-dEf4-gHj5-kLm6" }); const data = await resp.json(); console.log(data); // {success: true, user: {...}}
Успешный ответ
{ "success": true, "user": { "id": 42, "prefix": "AbC3", "balance": "74.50" } }
Ответ с ошибкой
{ "success": false, "error": "Invalid seed." }

Базовый URL

Все конечные точки API относятся к:

https://simnokyc.com/api.php?action={action}

Все ответы в формате JSON. Конечные точки POST принимают тела запросов application/json и application/x-www-form-urlencoded.

Лимиты запросов

API применяет следующие ограничения по частоте запросов:

ЭндпоинтЛимитОкно
Аутентификация5 попыток15 минут
Все остальные endpointsБез строгого лимита

Ограничение частоты запросов: Аутентификация ограничена 5 попытками за 15 минут. Другие endpoints в настоящее время не ограничены, но чрезмерное использование может быть замедлено. Используйте разумные интервалы между запросами.

Обработка ошибок

Все ошибки возвращают объект JSON с полем <code>error</code>:

{ "error": "Description of what went wrong" }
HTTP кодЗначение
200Успех (проверьте тело ответа на ошибки уровня приложения)
403Недействительный CSRF-токен
405Неверный HTTP-метод (напр. GET на endpoint только для POST)
429Лимит запросов превышен

Распространённые ошибки на уровне приложения:

ОшибкаПричина
"Login required"Сессия истекла или не аутентифицирован
"Insufficient balance"Недостаточно средств — включает поля need и have
"Service not available for this country"Нет в наличии или сервис неактивен для выбранной страны
"Missing country or service"Обязательные параметры не были предоставлены

Список стран

GET /api.php?action=countries

Возвращает все активные страны с доступными виртуальными номерами. Аутентификация не требуется.

cURL
Python
JavaScript
curl https://simnokyc.com/api.php?action=countries
resp = session.get("https://simnokyc.com/api.php", params={"action": "countries"}) countries = resp.json() for c in countries: print(c["code"], c["name"])
const resp = await fetch("https://simnokyc.com/api.php?action=countries"); const countries = await resp.json();
Ответ
[ { "id": 1, "code": "us", "name": "USA" }, { "id": 2, "code": "gb", "name": "UK" }, { "id": 3, "code": "de", "name": "Germany" } ]

Список сервисов

GET /api.php?action=services&country={code}

Возвращает доступные сервисы для конкретной страны, включая цены и наличие. Без кода страны возвращает все сервисы без цен.

ПараметрТипОбязательныйОписание
countrystringнеобязательныйКод страны ISO 3166-1 alpha-2 (напр. us, gb, de)
Ответ (с указанием страны)
[ { "id": 12, "name": "WhatsApp", "slug": "whatsapp", "icon_code": "WA", "icon_color": "#25d366", "category": "social", "price": "0.35", "stock": 847 } ]

Список операторов

GET /api.php?action=operators&country={code}

Возвращает доступных операторов (провайдеров) для конкретной страны. У каждого оператора есть тип и ценовой множитель, применяемый к базовой цене сервиса.

ПараметрТипОбязательныйОписание
countrystringобязательныйКод страны ISO 3166-1 alpha-2
Ответ
[ { "id": 5, "name": "T-Mobile", "type": "physical", "price_multiplier": "1.50", "icon_slug": "tmobile", "icon_domain": "t-mobile.com" } ]

Типы операторов: virtual — VoIP-номера, самые дешёвые, могут быть заблокированы некоторыми сервисами. physical — реальные SIM-карты, более высокий процент успеха. premium — самая быстрая доставка (~10 сек), наивысший процент успеха.

Купить номер (SMS-активация)

POST /api.php?action=buy

Купите виртуальный номер для одноразовой SMS-верификации. Номер активен 20 минут. Если SMS не получено, ваш баланс автоматически возвращается.

ПараметрТипОбязательныйОписание
countrystringобязательныйКод страны (напр. us)
service_idintegerобязательныйID сервиса из Список сервисов
operator_idintegerнеобязательныйID оператора из Список операторов. Не указывайте для оператора по умолчанию.
cURL
Python
JavaScript
curl -X POST https://simnokyc.com/api.php?action=buy \ -b cookies.txt \ -H "Content-Type: application/json" \ -d '{"country":"us","service_id":12,"operator_id":5}'
resp = session.post("https://simnokyc.com/api.php?action=buy", json={ "country": "us", "service_id": 12, "operator_id": 5 }) order = resp.json() print(f"Order #{order['order_id']} — ${order['price']}")
const resp = await fetch("https://simnokyc.com/api.php?action=buy", { method: "POST", credentials: "include", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ country: "us", service_id: 12, operator_id: 5 }) }); const order = await resp.json();
Успешный ответ
{ "success": true, "order_id": 1847, "price": 0.53, "balance": "73.97" }
Ошибка: Недостаточный баланс
{ "error": "Insufficient balance", "need": 0.53, "have": "0.10" }

Список заказов

GET /api.php?action=orders

Возвращает ваши 50 последних заказов, включая номера телефонов и SMS-коды. Опрашивайте этот endpoint для проверки входящих SMS-кодов по активным заказам.

Ответ
[ { "id": 1847, "price": "0.53", "status": "completed", "phone_number": "+12025551234", "sms_code": "847293", "created_at": "2026-04-09 14:32:00", "country_code": "us", "country_name": "USA", "service_name": "WhatsApp", "operator_name": "T-Mobile" } ]

Статусы заказов: active — ожидание SMS. completed — SMS получено. cancelled — отменён пользователем. refunded — автовозврат (SMS не получено до таймаута). expired — истёк срок.

Получить цену аренды

GET /api.php?action=rental_price&country={code}&operator_id={id}&duration={days}

Получите цену аренды выделенного номера у конкретного оператора на указанный срок.

ПараметрТипОбязательныйОписание
countrystringобязательныйКод страны
operator_idintegerобязательныйID оператора
durationintegerобязательныйСрок аренды в днях: 7, 14, 30 или 90
Ответ
{ "price": "12.50", "duration": 30, "operator": "T-Mobile", "type": "physical", "country": "USA" }

Арендовать номер

POST /api.php?action=rental_buy

Арендуйте один или несколько выделенных телефонных номеров. Номер принадлежит исключительно вам на весь период аренды и принимает неограниченное количество входящих SMS.

ПараметрТипОбязательныйОписание
countrystringобязательныйКод страны
operator_idintegerобязательныйID оператора
durationintegerобязательный7, 14, 30 или 90 дней
qtyintegerнеобязательныйКоличество номеров для аренды (1–10, по умолчанию: 1)
Успешный ответ
{ "success": true, "order_ids": [1848, 1849], "total": 25.00, "qty": 2, "unit_price": 12.50, "duration": 30, "balance": "49.50" }

Получить информацию о пользователе

GET /api.php?action=user

Возвращает информацию об аккаунте и балансе текущего пользователя. Используйте для проверки статуса аутентификации и доступных средств.

Аутентифицирован
{ "logged_in": true, "id": 42, "prefix": "AbC3", "balance": "74.50" }
Не аутентифицирован
{ "logged_in": false }

Полный пример рабочего процесса

Вот полный пример на Python, который выполняет аутентификацию, находит сервис, покупает номер и запрашивает SMS-код:

Python
import requests, time BASE = "https://simnokyc.com" SEED = "AbC3-dEf4-gHj5-kLm6" s = requests.Session() # 1. Authenticate s.post(f"{BASE}/auth-api.php", data={"action": "login", "seed": SEED}) # 2. Check balance user = s.get(f"{BASE}/api.php?action=user").json() print(f"Balance: ${user['balance']}") # 3. Get services for USA services = s.get(f"{BASE}/api.php?action=services&country=us").json() whatsapp = next(svc for svc in services if svc["name"] == "WhatsApp") print(f"WhatsApp: ${whatsapp['price']} ({whatsapp['stock']} in stock)") # 4. Buy a number order = s.post(f"{BASE}/api.php?action=buy", json={ "country": "us", "service_id": whatsapp["id"] }).json() print(f"Order #{order['order_id']} created") # 5. Poll for SMS code for _ in range(60): orders = s.get(f"{BASE}/api.php?action=orders").json() my_order = next(o for o in orders if o["id"] == order["order_id"]) if my_order["sms_code"]: print(f"SMS code: {my_order['sms_code']}") print(f"Phone: {my_order['phone_number']}") break print("Waiting for SMS...") time.sleep(5) else: print("Timeout — balance will be refunded automatically")