Для разработчиков

API Proxy5G

Управляйте своими мобильными прокси из скриптов: список портов и баланс, смена IP, интервал ротации и продление с баланса. Ключ выдаётся в кабинете за один клик.

К списку методов
  • 7методов
  • 60запросов в минуту на ключ
  • JSONзапросы и ответы
  • HTTPSключ в заголовке

Начало

Как начать

Три шага — и первый ответ у вас в консоли.

  1. Получите ключ

    В кабинете откройте «Профиль», карточку «API», нажмите «Выдать ключ». Ключ вида lte_… показывается один раз — сохраните его. Потеряли — перевыпустите там же; старый перестанет работать сразу.

  2. Передавайте ключ в заголовке

    X-Api-Key: lte_… или Authorization: Bearer lte_… — в каждом запросе. Кука кабинета для API не подходит.

  3. Запросите список портов

    Подойдёт любой HTTP-клиент. Ниже — пример на curl; в ответе будут все ваши порты с реквизитами подключения.

Список портов
curl https://proxy5g.ru/api/v1/proxies \
  -H "X-Api-Key: lte_ВАШ_КЛЮЧ"
Запрос с телом
curl -X PATCH https://proxy5g.ru/api/v1/proxies/{id}/rotation \
  -H "X-Api-Key: lte_ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{"intervalMinutes": 5}'

Правила

Общие правила

Одинаковы для всех методов.

  • Адрес

    Все пути ниже — относительно https://proxy5g.ru/api/v1. Только HTTPS.

  • Ключ

    В каждом запросе — заголовок X-Api-Key: lte_… или Authorization: Bearer lte_…. Без ключа, с чужим, отозванным или неверно набранным ключом ответ один: 401 UNAUTHORIZED.

  • Формат

    Ответы — JSON в UTF-8. Тело POST и PATCH — JSON с заголовком Content-Type: application/json.

  • Лимиты

    60 запросов в минуту на ключ и 60 в минуту с одного IP-адреса. Сверх лимита — 429 RATE_LIMIT и заголовок Retry-After с числом секунд до сброса.

  • Ошибки

    Любая ошибка — JSON с полями code, message и иногда details. Ориентируйтесь на code: он не меняется. Текст message — для человека, он может уточняться.

  • Деньги и время

    Суммы — строки с двумя знаками после точки, валюта всегда RUB; только баланс в GET /balance отдаётся числом. Время — ISO 8601 в UTC, например 2026-11-05T09:00:00.000Z.

Методы

Семь методов

Пути — относительно https://proxy5g.ru/api/v1. Вместо {id} подставьте id порта из списка.

МетодПутьЧто делает
GET/proxiesСписок портов
GET/proxies/{id}Один порт
GET/balanceБаланс счёта
POST/proxies/{id}/change-ipСменить IP сейчас
PATCH/proxies/{id}/rotationИнтервал ротации
GET/proxies/{id}/renewal-optionsСроки и цены продления
POST/proxies/{id}/renewПродлить с баланса
GET/proxies

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

Все порты аккаунта: работающие, ожидающие выдачи, истёкшие и возвращённые. Новые — сверху.

  • Состав полей — такой же, как у карточки порта в кабинете; описание полей ниже, в разделе «Объект порта».
  • У истёкших, отключённых и возвращённых портов поля login и password равны null.
Ответ 200
{
  "proxies": [
    {
      "id": "6f1c0d2e-8a4b-4c21-9b7d-3e5f1a2b3c4d",
      "status": "ACTIVE",
      "tariff": "Приватный",
      "tariffType": "private",
      "geo": "Москва",
      "operator": "Beeline",
      "host": "203.0.113.10",
      "port": 10101,
      "login": "u1234",
      "password": "s3cr3tPass",
      "protocol": "HTTP",
      "rotation": {
        "mode": "AUTOMATIC",
        "intervalMinutes": 5,
        "allowedIntervals": [0, 2, 5, 10, 30],
        "canRotateNow": true,
        "canChangeRotation": true
      },
      "expiresAt": "2026-11-05T09:00:00.000Z",
      "createdAt": "2026-10-06T09:00:00.000Z",
      "orderNumber": "10234",
      "renewAvailable": true
    }
  ]
}
GET/proxies/{id}

Один порт

Тот же объект, что в списке, по идентификатору id.

  • id — поле id из списка (UUID). Порт другого клиента или несуществующий id — 404 NOT_FOUND.
Ответ 200
{
  "proxy": {
    "id": "6f1c0d2e-8a4b-4c21-9b7d-3e5f1a2b3c4d",
    "status": "ACTIVE",
    "tariff": "Приватный",
    "tariffType": "private",
    "geo": "Москва",
    "operator": "Beeline",
    "host": "203.0.113.10",
    "port": 10101,
    "login": "u1234",
    "password": "s3cr3tPass",
    "protocol": "HTTP",
    "rotation": {
      "mode": "AUTOMATIC",
      "intervalMinutes": 5,
      "allowedIntervals": [0, 2, 5, 10, 30],
      "canRotateNow": true,
      "canChangeRotation": true
    },
    "expiresAt": "2026-11-05T09:00:00.000Z",
    "createdAt": "2026-10-06T09:00:00.000Z",
    "orderNumber": "10234",
    "renewAvailable": true
  }
}
GET/balance

Баланс счёта

Сколько денег на счёте аккаунта. Продление через API списывает именно с него.

  • balance — число в рублях, копейки через точку. Пополнение — только в кабинете.
Ответ 200
{
  "balance": 1250.5,
  "currency": "RUB"
}
POST/proxies/{id}/change-ip

Сменить IP сейчас

Внеочередная смена внешнего адреса у приватного порта. Тело запроса не нужно.

  • Только тариф private (поле tariffType). На остальных тарифах адрес меняется по расписанию канала, запрос отвечает 409 ROTATION_UNAVAILABLE до обращения к поставщику.
  • Не чаще одного раза в минуту: пока не прошла минута с прошлой смены или идёт предыдущая — 429 RATE_LIMIT. Поле rotation.canRotateNow у порта показывает, можно ли сейчас.
  • Если ротация для порта не предусмотрена — 403 FORBIDDEN.
Ответ 200
{
  "changed": true,
  "message": "IP успешно изменён"
}
PATCH/proxies/{id}/rotation

Интервал ротации

Как часто порт меняет адрес сам. Тело — JSON с одним целым полем intervalMinutes.

  • Значение — одно из rotation.allowedIntervals у порта. 0 — ручная ротация: адрес меняется только по запросу change-ip. Другое значение — 400 VALIDATION_ERROR.
  • Только тариф private, иначе 409 ROTATION_UNAVAILABLE. Та же минута ожидания после смены IP — 429 RATE_LIMIT.
Тело запроса
{
  "intervalMinutes": 5
}
Ответ 200
{
  "message": "Интервал ротации обновлён",
  "rotation": {
    "mode": "AUTOMATIC",
    "intervalMinutes": 5,
    "allowedIntervals": [0, 2, 5, 10, 30]
  }
}
GET/proxies/{id}/renewal-options

Сроки и цены продления

Какие сроки можно купить порту и сколько это стоит — то же, что окно «Продлить» в кабинете. Ничего не создаёт и не списывает.

  • currentPeriodDays — срок исходной покупки; у него isCurrent: true. expiresAt у варианта — до какого момента порт будет работать после продления.
  • Суммы — строки с двумя знаками после точки. Значения в примере условные: действующие цены — только в ответе.
  • Если продлить нельзя (renewAvailable: false у порта) — 409 CONFLICT, в details.reason причина: NOT_ACTIVE, RETENTION_ELAPSED, CHANNEL_UNAVAILABLE или NO_ORDER_CONFIG.
Ответ 200
{
  "proxyId": "6f1c0d2e-8a4b-4c21-9b7d-3e5f1a2b3c4d",
  "currentPeriodDays": 30,
  "expiresAt": "2026-11-05T09:00:00.000Z",
  "options": [
    {
      "periodDays": 7,
      "amount": "150.00",
      "currency": "RUB",
      "isCurrent": false,
      "expiresAt": "2026-11-12T09:00:00.000Z"
    },
    {
      "periodDays": 30,
      "amount": "450.00",
      "currency": "RUB",
      "isCurrent": true,
      "expiresAt": "2026-12-05T09:00:00.000Z"
    }
  ]
}
POST/proxies/{id}/renew

Продлить с баланса

Продление одним запросом: заказ, счёт и списание с баланса — как три шага окна «Продлить». Оба поля тела необязательны.

  • periodDays — срок из renewal-options; без него берётся срок исходной покупки. Срока нет в списке — 409 CONFLICT с details.periodDays.
  • expectedAmount — цена, которую вы видели в renewal-options. Если она успела измениться, ответ 409 PRICE_CHANGED с обеими суммами в details, списания нет.
  • Денег на балансе не хватает — 409 INSUFFICIENT_FUNDS с суммами в details; заказ не создаётся. Пополнить баланс через API нельзя.
  • Нужна принятая в кабинете действующая оферта: без неё 400 LEGAL_ACCEPTANCE_REQUIRED, API оферту за вас не принимает.
  • Если оплата прошла, а продлить у поставщика не удалось: renewed: false, заказ со статусом NEEDS_SUPPORT передан в поддержку, в message — что случилось.
Тело запроса
{
  "periodDays": 30,
  "expectedAmount": "450.00"
}
Ответ 200
{
  "renewed": true,
  "message": "Прокси продлён на 30 дн.",
  "order": {
    "id": "0c9d2e3f-1a2b-4c5d-8e9f-0a1b2c3d4e5f",
    "number": "10234",
    "status": "PAID",
    "amount": "450.00",
    "currency": "RUB"
  },
  "payment": {
    "id": "7a8b9c0d-1e2f-4a3b-9c4d-5e6f7a8b9c0d",
    "status": "PAID"
  },
  "balance": {
    "amount": "800.50",
    "currency": "RUB"
  },
  "proxy": { "...": "объект порта, как в GET /proxies/{id}" }
}

Данные

Объект порта

Так порт описан в GET /proxies, GET /proxies/{id} и в поле proxy ответа на продление.

ПолеЗначение
idСтрока UUID. Идентификатор порта для остальных методов.
statusACTIVE — работает; PENDING — ждёт выдачи; EXPIRED — срок вышел; DISABLED — отключён; REFUNDED — возвращён.
tariffНазвание тарифа текстом, как в кабинете.
tariffTypeТип тарифа словом: shared, shared_no_wait, private, private_no_wait, multiport, multiregion. У старых тестовых прокси — null.
geo, operatorГород и оператор текстом.
host, portАдрес и порт для подключения.
login, passwordРеквизиты подключения. null, если порт истёк, отключён или возвращён.
protocolHTTP или SOCKS5. Переключается в кабинете.
rotation.modeMANUAL — адрес меняется только по запросу; AUTOMATIC — по интервалу.
rotation.intervalMinutesИнтервал в минутах; 0 — ручная ротация.
rotation.allowedIntervalsКакие значения примет PATCH …/rotation. Пустой список — интервал менять нельзя.
rotation.canRotateNowМожно ли сменить IP прямо сейчас (приватный тариф, минута с прошлой смены прошла).
rotation.canChangeRotationМожно ли сейчас менять интервал.
expiresAt, createdAtДо какого момента порт оплачен и когда выдан. ISO 8601, UTC.
orderNumberНомер заказа текстом или null.
renewAvailableПримет ли порт POST …/renew.

Ошибки

Коды ошибок

Проверяйте HTTP-статус и поле code. Поле details есть не у всех ошибок.

Пример ошибки
{
  "code": "INSUFFICIENT_FUNDS",
  "message": "На балансе не хватает денег для продления",
  "details": {
    "currentBalance": "120.00",
    "requiredAmount": "450.00"
  }
}
HTTPcodeКогдаdetails
400VALIDATION_ERRORТело запроса не прошло проверку: intervalMinutes не целое или не из allowedIntervals, periodDays не больше нуля, expectedAmount не похож на сумму.—
400LEGAL_ACCEPTANCE_REQUIREDПродление: в кабинете не принята действующая оферта.—
401UNAUTHORIZEDКлюч не передан, неверной формы, отозван или перевыпущен.—
403FORBIDDENСмена IP или интервала не предусмотрена для этого порта.—
404NOT_FOUNDПорта с таким id у вашего аккаунта нет.—
409ROTATION_UNAVAILABLEСмена IP или интервала на тарифе, где адрес меняется по расписанию канала.tariffType
409CONFLICTПродление недоступно (details.reason), срока нет в списке (details.periodDays) или счёт на продление не создан.reason или periodDays
409PRICE_CHANGEDЦена продления отличается от expectedAmount. Списания нет.expectedAmount, currentAmount
409INSUFFICIENT_FUNDSНа балансе не хватает на продление. Заказ не создан.currentBalance, requiredAmount
429RATE_LIMITБольше 60 запросов в минуту, смена IP чаще раза в минуту или предыдущая смена ещё идёт.заголовок Retry-After у лимита запросов
500INTERNAL_ERRORСбой на нашей стороне. Повторите позже; если повторяется — напишите в поддержку.—

Границы

Чего в API нет

Эти действия делаются только в кабинете.

  • Покупка и пополнение

    Новые прокси покупаются и баланс пополняется только в кабинете. API тратит то, что уже на счёте.

  • Ключ

    Выдача, перевыпуск и отзыв ключа — в профиле кабинета под вашим входом. Через сам API ключом управлять нельзя.

  • Оферта

    Согласие с офертой даётся один раз в кабинете. Скрипт не может принять её за вас — поэтому продление без принятой оферты отвечает 400.

  • Протокол порта

    Переключение HTTP ⇄ SOCKS5 — в кабинете, на карточке порта.

  • Вход без ключа

    API принимает только ключ. Логин и пароль кабинета, кука сессии или IP-адрес вместо ключа не работают.

  • Бесплатный тест

    Тестовый прокси запрашивается в кабинете. Выданный тест в списке портов виден, продлению через API не подлежит.