Открытый каталог
GET /api/v1/catalog возвращает отобранный каталог сервисов и стран. Это описательные данные, а не поток реального наличия поставщиков. GET /openapi.json описывает текущие HTTP-маршруты. Учётные данные поставщиков никогда не отправляются в браузер.
Предложения пользователя
POST /api/v1/quotes принимает сервис и страну из авторизованной сессии того же origin. Предложения принадлежат пользователю и истекают через 60 секунд. Сумма USD рассчитывается на сервере с проверенной конвертацией исходной валюты, наценкой и минимальной ценой.
Идемпотентные заказы
POST /api/v1/orders принимает quoteId и Idempotency-Key. Повтор с тем же ключом возвращает тот же заказ вместо покупки другого номера. Резерв кошелька фиксируется атомарно. Неоднозначный ответ поставщика удерживает заказ для рассмотрения, а не запускает вторую покупку автоматически.
Состояние и завершение
GET /api/v1/orders/{id} читает собственный заказ и состояние SMS. POST на тот же маршрут с действием finish или cancel запрашивает переход состояния. Сервер соблюдает начальную блокировку отмены 120 секунд и фиксирует единственный возврат после подтверждения поставщика.
Подтверждение платежа
Stripe Checkout пополняет соответствующий рабочий или тестовый кошелёк только после проверенного webhook и аутентифицированной проверки платежа. Предоставленные рабочий и тестовый ключи принадлежат разным аккаунтам Stripe, поэтому ключи, секреты endpoint и пополнения хранятся раздельно. NOWPayments использует проверенную IPN, привязку к счёту и проверку окончательно проведённого платежа с допуском суммы ±0,50%. Успешное перенаправление в браузере никогда не является доказательством оплаты.
Доступ и наличие
Основной сайт и каталог открыты. Кошельки, предложения и заказы требуют аутентификации и проверки владельца. Реальные действия зависят от настроенных учётных данных, доступа поставщика и проверенных подтверждений. Примеры API не утверждают, что платная покупка или полный платёжный цикл уже проверены.
GET /api/v1/catalog
GET /api/v1/offers?service=whatsapp&country=usa
POST /api/v1/quotes
Content-Type: application/json
{"service":"whatsapp","country":"usa"}
POST /api/v1/orders
Idempotency-Key: <unique-request-key>
{"quoteId":"<owned-unexpired-quote-id>"}
GET /api/v1/orders/<order-id>
POST /api/v1/orders/<order-id>
{"action":"cancel"}Вернуться в панель