Аутентификация
Все endpoint требуют Bearer-токен в заголовке Authorization.
Как получить API-ключ
- Войдите в аккаунт Proxnum и откройте страницу профиля
- Прокрутите до раздела «Управление API-ключами»
- Нажмите «Создать API-ключ»
- Скопируйте отображённый токен
Включайте API-токен в каждый запрос:
Authorization: Bearer YOUR_API_TOKEN_HERE Accept: application/json Content-Type: application/json
Быстрые ссылки:
Общий формат ответа
Ошибки используют нормализованную структуру с полем code. Все ошибки следуют этому шаблону:
{
"success": false,
"code": "no_numbers",
"message": "No numbers available for the selected service and country"
}
Endpoints
GET /api/v1/resell/price?service=&country=
Получить базовую и продажную цену для сервиса и страны. Используйте для оценки стоимости перед заказом.
Параметры (query): service (string), country (int)
Пример запроса:
curl -s -X GET "https://proxnum.com/api/v1/resell/price?service=ig&country=6" \ -H "Authorization: Bearer $TOKEN" \ -H "Accept: application/json"
Успешный ответ:
{
"country": "6",
"service": "ig",
"base_price": 0.0334,
"sell_price": 0.1114892
}
GET /api/v1/prices
Полная ценовая информация по всем сервисам и странам. Возвращает базовые и реселлерские цены.
Параметры (query, необязательные):
serviceservice (string) — фильтр по коду сервиса (например ig, wa, tg)countrycountry (int) — фильтр по коду страны
Пример запроса (все цены):
curl -s -X GET "https://proxnum.com/api/v1/prices" \ -H "Authorization: Bearer $TOKEN" \ -H "Accept: application/json"
Пример запроса (фильтр по стране):
curl -s -X GET "https://proxnum.com/api/v1/prices?country=6" \ -H "Authorization: Bearer $TOKEN" \ -H "Accept: application/json"
Успешный ответ (фильтр по стране):
{
"success": true,
"prices": {
"6": {
"ig": {
"base_price": 0.0334,
"sell_price": 0.1114892,
"available": 245
},
"wa": {
"base_price": 0.0389,
"sell_price": 0.1298737,
"available": 189
},
"tg": {
"base_price": 0.0223,
"sell_price": 0.0744551,
"available": 521
},
"go": {
"base_price": 0.0278,
"sell_price": 0.0928206,
"available": 312
}
}
}
}
Примечание: Ответ — вложенный объект: первый уровень — коды стран, второй — коды сервисов. Каждый сервис содержит base_price, sell_price и available (или null).
POST /api/v1/resell/virtual/buy
Купить временный (виртуальный) номер. Попытка выделить номер и списать средства.
Тело (JSON): {"service":"ig","country":6}
Пример запроса:
curl -s -X POST "https://proxnum.com/api/v1/resell/virtual/buy" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"service":"ig","country":6}'
Успешный ответ (нормализованный):
{
"success": true,
"activation": {
"id": 737,
"phone": "62895406203932",
"activation_id": "4390520873",
"msg": "Waiting Sms",
"date_created": "2025-11-08 21:50:34",
"amount_paid": 0.111489,
"status": 1
}
}
Частые коды ошибок:
{
"success": false,
"code": "no_numbers",
"message": "No numbers available for this service in the selected country"
}
{
"success": false,
"code": "insufficient_balance",
"message": "Not enough balance to place the order"
}
GET /api/v1/resell/virtual/{id}/status
Проверить статус активации. {id} — строка activation id из покупки.
Пример запроса:
curl -s -X GET "https://proxnum.com/api/v1/resell/virtual/4390520873/status" \ -H "Authorization: Bearer $TOKEN" \ -H "Accept: application/json"
Успех (когда код доступен):
{
"success": true,
"status": "completed",
"code": "1234",
"activation": { "id": 737, "phone": "628...", "activation_id": "4390520873" }
}
POST /api/v1/resell/virtual/resend
Запросить повтор/реактивацию. Передайте activation id в теле запроса.
Тело: {"activation_id":"4390520873"}
curl -s -X POST "https://proxnum.com/api/v1/resell/virtual/resend" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"activation_id":"4390520873"}'
Ответ (принято):
{
"success": true,
"message": "Resend requested; new activation created",
"activation": { "id": 738, "activation_id": "4390520874", "phone": "628..." }
}
POST /api/v1/resell/virtual/cancel
Запросить отмену и возврат. Сервер проверяет возможность возврата.
Тело: {"activation_id":"4390520873"}
curl -s -X POST "https://proxnum.com/api/v1/resell/virtual/cancel" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"activation_id":"4390520873"}'
Принято:
{
"success": true,
"code": "cancel_accepted",
"message": "Cancellation accepted, refund processed"
}
Отклонено:
{
"success": false,
"code": "cancel_rejected",
"message": "Cancellation rejected — activation already completed or not refundable"
}
GET /api/v1/resell/activations
Список активаций пользователя (с пагинацией). Поддерживает page и per_page.
curl -s -X GET "https://proxnum.com/api/v1/resell/activations?page=1&per_page=25" \ -H "Authorization: Bearer $TOKEN" \ -H "Accept: application/json"
Аренда номеров
Арендованные номера закреплены за вашим аккаунтом на купленный срок и принимают все отправленные на них SMS. С помощью этих методов можно показывать клиентам доступные сроки и цены, арендовать номера, читать входящие SMS, отменять аренду в допустимое окно и продлевать активные аренды.
Все методы аренды доступны и без префикса /resell (например, /api/v1/rental/catalog). Публичный каталог /api/v1/rental/catalog не требует токена.
Ответы содержат "ok" (true или false), код "error" при ошибке и понятное сообщение "message" на языке вашего аккаунта. HTTP-код отражает результат (200 успех, 202 принято и в обработке, 4xx ошибка запроса, 503 временно недоступно).
Статусы аренды
active— Номер ваш и принимает SMS до expires_at.cancelling— Отмена запрошена и ожидает подтверждения. Возврат ещё не выполнен.cancelled— Отмена подтверждена, amount_paid возвращено на баланс.expired— Срок аренды закончился.
GET /api/v1/resell/rental/catalog?country=&hours=
Возвращает доступные сейчас сроки аренды, страны и сервисы с вашей ценой и наличием для одной страны и срока. Список сроков приходит в реальном времени от поставщика номеров, поэтому всегда берите его из durations[], а не задавайте вручную.
Параметры запроса: country (необязательно, числовой id страны, см. страницу кодов стран) и hours (необязательно, одно из значений durations[].hours). Неверные или отсутствующие значения заменяются значениями по умолчанию из ответа.
Пример запроса:
curl -s "https://proxnum.com/api/v1/resell/rental/catalog?country=187&hours=168" \ -H "Authorization: Bearer $TOKEN" \ -H "Accept: application/json"
{
"ok": true,
"country": "187",
"hours": 168,
"durations": [
{ "hours": 24, "label": "1 day" },
{ "hours": 72, "label": "3 days" },
{ "hours": 168, "label": "1 week" },
{ "hours": 720, "label": "30 days" }
],
"countries": [ { "id": "187", "name": "USA" }, { "id": "16", "name": "United Kingdom" } ],
"services": [
{ "code": "wa", "name": "WhatsApp", "icon": "...", "price": 4.2, "stock": 35 }
],
"cancel_window_seconds": 120
}
POST /api/v1/resell/rental/buy
Арендует номер и списывает средства с баланса. hours должно быть одним из значений durations[].hours из каталога. Можно передать max_price: если текущая цена выше, ничего не списывается и возвращается ошибка price_changed с новой ценой.
Тело (JSON): {"service":"wa","country":187,"hours":168,"max_price":4.20}
curl -s -X POST "https://proxnum.com/api/v1/resell/rental/buy" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"service":"wa","country":187,"hours":168,"max_price":4.20}'
{
"ok": true,
"error": null,
"message": "Your rental number is ready.",
"price": 4.2,
"balance": 25.8,
"rental": {
"id": 512,
"phone": "14155550123",
"service": "wa",
"service_name": "WhatsApp",
"country": "187",
"country_name": "USA",
"status": "active",
"amount_paid": 4.2,
"hours": 168,
"purchased_at": "2026-10-03T12:00:00+03:00",
"expires_at": "2026-10-10T12:00:00+03:00",
"cancel_until": "2026-10-03T12:02:00+03:00",
"can_cancel": true,
"cancel_pending": false,
"can_extend": true
}
}
Частые ошибки: invalid_period (422), no_numbers (409), price_changed (409), insufficient_funds (402), option_unavailable (422), unavailable или provider_unreachable (503, средства не списаны).
GET /api/v1/resell/rental/{id}/status
Возвращает аренду с полученными SMS (новые сверху). Каждое сообщение содержит текст и, если найден, code. Во время ожидания сообщения опрашивайте метод каждые 5–10 секунд. id может быть нашим id аренды или id активации, полученным при покупке.
curl -s "https://proxnum.com/api/v1/resell/rental/512/status" \ -H "Authorization: Bearer $TOKEN" \ -H "Accept: application/json"
{
"ok": true,
"rental": {
"id": 512,
"phone": "14155550123",
"status": "active",
"expires_at": "2026-10-10T12:00:00+03:00",
"can_cancel": false,
"can_extend": true,
"messages": [
{ "id": 9001, "sender": "WhatsApp", "text": "Your WhatsApp code: 123-456", "code": "123456", "date": "2026-10-03T12:05:10+03:00" }
]
}
}
POST /api/v1/resell/rental/cancel
Аренду можно отменить только в течение 2 минут после покупки, если на номер не пришло ни одного SMS и он не продлевался. Отмена подтверждается у поставщика номеров, это может занять несколько минут.
Тело: {"id":512}
curl -s -X POST "https://proxnum.com/api/v1/resell/rental/cancel" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"id":512}'
HTTP/1.1 202 Accepted
{
"ok": true,
"pending": true,
"refunded": 0,
"message": "Cancellation requested. Your refund will be added once the cancellation is confirmed, usually within a few minutes.",
"rental": { "id": 512, "status": "cancelling", "cancel_pending": true }
}
HTTP/1.1 200 OK
{
"ok": true,
"pending": false,
"refunded": 4.2,
"balance": 30,
"rental": { "id": 512, "status": "cancelled" }
}
HTTP/1.1 409 Conflict
{
"ok": false,
"error": "sms_received",
"message": "This number has already received an SMS, so it cannot be cancelled."
}
Частые ошибки: window_closed, sms_received, extended, cancel_pending (запрос уже обрабатывается), not_active (все 409).
GET /api/v1/resell/rental/{id}/extend-options
Список сроков и цен продления для одной активной аренды. Цены запрашиваются в реальном времени для конкретного номера.
curl -s "https://proxnum.com/api/v1/resell/rental/512/extend-options" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
{
"ok": true,
"options": [
{ "hours": 24, "label": "1 day", "price": 1.1 },
{ "hours": 168, "label": "1 week", "price": 5.0 }
]
}
POST /api/v1/resell/rental/{id}/extend
Продлевает активную аренду на один из сроков, полученных из вариантов продления, и списывает средства с баланса. Передайте max_price, чтобы никогда не списать больше цены, показанной клиенту. Продлённую аренду отменить нельзя.
Тело (JSON): {"hours":168,"max_price":5.00}
curl -s -X POST "https://proxnum.com/api/v1/resell/rental/512/extend" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"hours":168,"max_price":5.00}'
{
"ok": true,
"message": "Rental extended by 1 week.",
"price": 5,
"balance": 25,
"rental": { "id": 512, "status": "active", "expires_at": "2026-10-17T12:00:00+03:00", "can_cancel": false }
}
Частые ошибки: invalid_period (422), price_changed (409), insufficient_funds (402), not_active (409), unavailable (503).
GET /api/v1/resell/rentals
Постраничный список ваших аренд, новые сверху. Параметры запроса: page и per_page (от 1 до 100).
curl -s "https://proxnum.com/api/v1/resell/rentals?page=1&per_page=25" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
{ "ok": true, "total": 3, "page": 1, "per_page": 25, "data": [ { "id": 512, "phone": "14155550123", "status": "active", "...": "..." } ] }
Примечания по реализации
- Операции списания идемпотентны по заказу; проверяйте поля order или transaction.
- Используйте endpoint price для пробного расчёта перед оплатой.
- Коды ошибок: no_numbers, insufficient_balance, service_unavailable, cancel_rejected.
- Обрабатывайте успешные и ошибочные ответы
- Реализуйте обработку сетевых таймаутов
- Кэшируйте списки стран и сервисов
- Используйте webhooks для обновлений в реальном времени