OP-Proxy API · v1

REST API для автоматизации прокси

Покупайте ротационные IPv4 и IPv6 прокси, управляйте услугами и читайте состояние аккаунта из своего кода. Bearer-токены, предсказуемые JSON-ответы, спецификация OpenAPI 3.1 для генерации клиентов.

  • Bearer-авторизация

    Один токен на ключ. Опциональный allowlist IP. Создание ключей защищено 2FA.

  • Мгновенная выдача

    Ротационные прокси создаются сразу. Вебхуки не нужны.

  • OpenAPI 3.1

    Сгенерируйте клиент на TypeScript, Python или любом OAS-совместимом языке.

Тело запроса
POST /api/v1/purchase
Authorization: Bearer opx_live_••••

{ "type": "ipv4_rotating",
  "plan_id": "65a9…b8c9" }
OP-Proxyapi/v1
Ответ201 Created
{ "service_id": "65aa…b8d0",
  "threads": 100,
  "auth": { "login": "k3vq…",
            "password": "••••" } }

Быстрый старт

  1. 1Пополните баланс — покупка ротационных прокси через API списывается с баланса (RUB).
  2. 2Создайте API-ключ в личном кабинете. Полный токен показывается только один раз. Скопируйте его.
  3. 3Сделайте первый запрос:
curl https://op-proxy.com/api/v1/account \
  -H "Authorization: Bearer opx_live_..."

curl https://op-proxy.com/api/v1/catalog/plans \
  -H "Authorization: Bearer opx_live_..."

curl -X POST https://op-proxy.com/api/v1/purchase \
  -H "Authorization: Bearer opx_live_..." \
  -H "Content-Type: application/json" \
  -d '{"type":"ipv4_rotating","plan_id":"<from step 2>"}'

Авторизация

Передавайте API-ключ в заголовке Authorization в каждом запросе:

Authorization: Bearer opx_live_<32 hex characters>
  • Ключи привязаны к одному аккаунту и дают полный доступ к нему. Обращайтесь с ними как с паролями.
  • При создании можно ограничить ключ списком разрешённых исходящих IP.
  • Создание и отзыв ключа требуют пароль от аккаунта (и TOTP, если включена 2FA).
  • Оплата картой / криптой / через Robokassa недоступна по API — там нужен браузерный редирект. Пополняйте баланс через личный кабинет.

Повторы

Не повторяйте POST /purchase или POST /extend вслепую при таймауте.

Каждый вызов создаёт отдельную услугу или продлевает её ещё на один период. Если запрос упал на полпути — сначала вызовите GET /services , чтобы понять, что произошло, и только потом повторяйте.

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

Лимиты считаются по API-ключу. В каждом ответе возвращаются заголовки лимита (см. ниже). Ответ 429 содержит заголовок Retry-After.

КорзинаЛимит
Общий300 запросов/мин, 5 000 запросов/час
POST /purchase60 / час
POST /services/{id}/credentials30 / час

Эндпоинты

Все эндпоинты принимают и возвращают JSON, если не указано иное. Базовый URL: https://op-proxy.com/api/v1

GET/account

Сводка по аккаунту

Возвращает имя пользователя, email, баланс (RUB) и валюту. Вызовите перед /purchase, чтобы проверить средства.

curl https://op-proxy.com/api/v1/account \
  -H "Authorization: Bearer $OPX_TOKEN"
Ответ
{
  "status": "ok",
  "data": {
    "username": "alice",
    "email": "alice@example.com",
    "balance": 1500,
    "currency": "RUB"
  }
}
GET/catalog/plans

Список тарифов для покупки

Возвращает только ротационные тарифы. Фильтр: ?type=ipv4_rotating или ?type=ipv6_rotating.

Параметры запроса
  • typequerystring

    Фильтр каталога по типу услуги.

    Enum:ipv4_rotatingipv6_rotating
curl "https://op-proxy.com/api/v1/catalog/plans?type=ipv4_rotating" \
  -H "Authorization: Bearer $OPX_TOKEN"
Ответ
{
  "status": "ok",
  "data": {
    "plans": [
      {
        "plan_id": "65a9f0c1b2c3d4e5f6a7b8c9",
        "type": "ipv4_rotating",
        "name": "IPv4 Rotating 100 threads",
        "threads": 100,
        "days": 30,
        "price": 1500,
        "currency": "RUB"
      }
    ]
  }
}
POST/purchase

Купить пакет ротационных прокси

Списывает с баланса и сразу создаёт услугу. Каждый вызов создаёт отдельную услугу — НЕ повторяйте вслепую при ошибке сети; сначала проверьте GET /services. Для ipv6_rotating можно передать country (mixed, nl, de, at) и rotation. Для ipv4_rotating эти поля не передавайте — API ответит 400 unsupported_for_type.

Тело запроса
{
  "type": "ipv4_rotating",
  "plan_id": "65a9f0c1b2c3d4e5f6a7b8c9"
}
curl -X POST https://op-proxy.com/api/v1/purchase \
  -H "Authorization: Bearer $OPX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "ipv4_rotating",
    "plan_id": "65a9f0c1b2c3d4e5f6a7b8c9"
  }'
Ответ
{
  "status": "ok",
  "data": {
    "service_id": "65aa1100b2c3d4e5f6a7b8d0",
    "type": "ipv4_rotating",
    "threads": 100,
    "expires_at": "2026-06-17T12:34:56.000Z",
    "country": "mixed",
    "rotation": "instant",
    "auth": { "login": "abc...", "password": "def..." },
    "whitelist": []
  }
}
GET/services

Список ваших услуг

Курсорная пагинация. ?status=active (по умолчанию), expired или all. Фильтр ?type, ?limit до 100.

Параметры запроса
  • typequerystring

    Фильтр по типу услуги.

    Enum:ipv4_rotatingipv6_rotating
  • statusquerystring

    Фильтр по состоянию жизненного цикла.

    Default: activeEnum:activeexpiredall
  • limitqueryinteger

    Размер страницы. Максимум 100.

    Default: 50
  • cursorquerystring

    service_id из next_cursor предыдущей страницы.

curl "https://op-proxy.com/api/v1/services?status=active&limit=50" \
  -H "Authorization: Bearer $OPX_TOKEN"
GET/services/{id}

Получить услугу по id

Возвращает учётные данные, whitelist, срок, страну, режим ротации.

Параметры пути
  • idpathstringrequired

    24-символьный hex-id услуги из POST /purchase или GET /services.

curl https://op-proxy.com/api/v1/services/65aa1100b2c3d4e5f6a7b8d0 \
  -H "Authorization: Bearer $OPX_TOKEN"
GET/services/{id}/proxies

Скачать список прокси

Услуги IPv6 распределены по 3 шлюзам стран (nl/de/at), IPv4 использует шлюз nl. Если страна услуги — «mixed», возвращаются прокси со всех доступных стран. Фильтр: ?country=nl|de|at. ?format=txt (по умолчанию) — text/plain. ?format=json — JSON с массивом servers. ?layout=user_pass_at_host_port — URL-стиль. ?auth=false — без учётных данных.

Параметры пути
  • idpathstringrequired

    24-символьный hex-id услуги из POST /purchase или GET /services.

Параметры запроса
  • formatquerystring

    Формат ответа. txt — text/plain. json — структурированный envelope.

    Default: txtEnum:txtjson
  • layoutquerystring

    Формат строки прокси. host_port_user_pass = host:port:login:password. user_pass_at_host_port = login:password@host:port.

    Default: host_port_user_passEnum:host_port_user_passuser_pass_at_host_port
  • authqueryboolean

    Включать логин/пароль в каждую строку. false — для использования по whitelist IP.

    Default: true
  • countryquerystring

    Фильтр по шлюзу страны. IPv6 поддерживает nl/de/at. IPv4 — только nl.

    Enum:nldeat
curl "https://op-proxy.com/api/v1/services/65aa1100b2c3d4e5f6a7b8d0/proxies?format=txt" \
  -H "Authorization: Bearer $OPX_TOKEN"
GET/services/{id}/stats

Статистика нагрузки

Для IPv4- и IPv6-Rotating: одновременные подключения и новые запросы в секунду — сейчас (now) и история за период (range). Те же данные, что на графиках в личном кабинете. Замеры раз в минуту, хранятся 30 дней; в истории — среднее и пик по интервалам длиной bucket_seconds. Пустой интервал — null: данных нет, а не нулевая нагрузка. Если живые данные временно недоступны, now = null, а история всё равно отдаётся.

Параметры пути
  • idpathstringrequired

    24-символьный hex-id услуги из POST /purchase или GET /services.

Параметры запроса
  • rangequerystring

    Период истории: 1h (интервалы по минуте), 6h (5 минут), 1d (15 минут), 7d (час), 30d (6 часов).

    Default: 1dEnum:1h6h1d7d30d
curl "https://op-proxy.com/api/v1/services/65aa1100b2c3d4e5f6a7b8d0/stats?range=1d" \
  -H "Authorization: Bearer $OPX_TOKEN"
Ответ
{
  "status": "ok",
  "data": {
    "service_id": "65aa1100b2c3d4e5f6a7b8d0",
    "type": "ipv6_rotating",
    "threads": 300,
    "now": {
      "connections": 142,
      "rps": 37.5,
      "measured_at": "2026-10-03T14:05:12.000Z"
    },
    "range": "1d",
    "bucket_seconds": 900,
    "from": "2026-10-02T14:15:00.000Z",
    "to": "2026-10-03T14:15:00.000Z",
    "connections": {
      "summary": {
        "avg": 118.4,
        "peak": 211,
        "peak_at": "2026-10-03T09:30:00.000Z",
        "samples": 1418
      },
      "points": [
        { "t": "2026-10-02T14:15:00.000Z", "avg": 96.2, "peak": 120 },
        { "t": "2026-10-02T14:30:00.000Z", "avg": null, "peak": null }
      ]
    },
    "rps": {
      "summary": { "avg": 31.7, "peak": 88, "peak_at": "2026-10-03T09:31:00.000Z", "samples": 1418 },
      "points": [
        { "t": "2026-10-02T14:15:00.000Z", "avg": 24.9, "peak": 41 },
        { "t": "2026-10-02T14:30:00.000Z", "avg": null, "peak": null }
      ]
    }
  }
}
POST/services/{id}/extend

Продлить услугу на 30 дней

Списывает цену тарифа с баланса. Каждый вызов добавляет ещё один период — не повторяйте вслепую при ошибке сети.

Параметры пути
  • idpathstringrequired

    24-символьный hex-id услуги из POST /purchase или GET /services.

curl -X POST https://op-proxy.com/api/v1/services/65aa1100b2c3d4e5f6a7b8d0/extend \
  -H "Authorization: Bearer $OPX_TOKEN"
PUT/services/{id}/whitelist

Заменить whitelist IP

Полная замена (PUT, не PATCH). Максимум 50 записей. Опциональный параллельный массив labels[].

Параметры пути
  • idpathstringrequired

    24-символьный hex-id услуги из POST /purchase или GET /services.

Тело запроса
{
  "whitelisted_ips": ["203.0.113.10", "198.51.100.4"],
  "labels": ["home", "office"]
}
curl -X PUT https://op-proxy.com/api/v1/services/65aa1100b2c3d4e5f6a7b8d0/whitelist \
  -H "Authorization: Bearer $OPX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "whitelisted_ips": ["203.0.113.10", "198.51.100.4"],
    "labels": ["home", "office"]
  }'
POST/services/{id}/credentials

Перегенерировать логин и пароль

Лимит: 30/час на API-ключ. Старые учётные данные перестают работать немедленно. Используйте, чтобы перегенерировать логин/пароль прокси при утечке.

Параметры пути
  • idpathstringrequired

    24-символьный hex-id услуги из POST /purchase или GET /services.

curl -X POST https://op-proxy.com/api/v1/services/65aa1100b2c3d4e5f6a7b8d0/credentials \
  -H "Authorization: Bearer $OPX_TOKEN"
PUT/services/{id}/country

Изменить страну/регион

Только для IPv6-Rotating. IPv4-Rotating всегда работает через шлюз nl и возвращает 400 unsupported_for_type.

Параметры пути
  • idpathstringrequired

    24-символьный hex-id услуги из POST /purchase или GET /services.

Тело запроса
{ "country": "us" }
curl -X PUT https://op-proxy.com/api/v1/services/65aa1100b2c3d4e5f6a7b8d0/country \
  -H "Authorization: Bearer $OPX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"country": "us"}'
PUT/services/{id}/rotation

Изменить режим ротации

Только для IPv6-Rotating. У IPv4-Rotating ротация всегда instant — endpoint возвращает 400 unsupported_for_type.

Параметры пути
  • idpathstringrequired

    24-символьный hex-id услуги из POST /purchase или GET /services.

Тело запроса
{ "rotation": "instant" }
curl -X PUT https://op-proxy.com/api/v1/services/65aa1100b2c3d4e5f6a7b8d0/rotation \
  -H "Authorization: Bearer $OPX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"rotation": "instant"}'
GET/logs

Журнал API-запросов

Курсорная пагинация. ISO-таймштампы ?since= / ?until=. Хранит каждый API-запрос к вашему аккаунту.

Параметры запроса
  • sincequerystring (ISO 8601)

    ISO-8601 таймштамп. Только логи с этого момента или позже.

  • untilquerystring (ISO 8601)

    ISO-8601 таймштамп. Только логи до этого момента или раньше.

  • limitqueryinteger

    Размер страницы. Максимум 200.

    Default: 50
  • cursorquerystring

    service_id из next_cursor предыдущей страницы.

curl "https://op-proxy.com/api/v1/logs?limit=20" \
  -H "Authorization: Bearer $OPX_TOKEN"

Коды ошибок

Все ошибки имеют форму { status: "error", error: { code, message } }. Поле code стабильное и пригодное для машинной обработки.

КодHTTPЗначение
invalid_token401Отсутствующий, некорректный, истёкший или отозванный API-ключ. Либо исходный IP не входит в allowlist.
invalid_request400Тело запроса не является валидным JSON или в нём нет обязательных полей.
invalid_id400Параметр id в пути не является корректным 24-символьным hex-id.
invalid_plan_id400plan_id не существует или не соответствует запрошенному type.
invalid_type400type должен быть ipv4_rotating или ipv6_rotating.
invalid_country400country должен быть строкой длиной 2-32 символа из латиницы/цифр.
invalid_rotation400rotation должен быть строкой длиной 2-32 символа из латиницы/цифр.
invalid_ip400Одна из записей в whitelisted_ips не является валидным IPv4-адресом.
invalid_range400range должен быть одним из: 1h, 6h, 1d, 7d, 30d.
too_many_ips400Whitelist превышает лимит в 50 записей.
insufficient_balance402Баланс ниже цены тарифа. Пополните его через личный кабинет.
not_found404Услуга с таким id не принадлежит вашему аккаунту или не существует.
method_not_allowed405Неверный HTTP-метод для этого эндпоинта.
rate_limited429Превышен лимит запросов. Смотрите заголовок Retry-After.
server_error500Неожиданная ошибка. Повторите запрос через некоторое время.
unsupported_for_type400Операция недоступна для этого типа услуги (например, страна/ротация для IPv4-Rotating).
country_unavailable400Запрошенная страна недоступна для этого типа услуги.

Спецификация OpenAPI

Строгая спецификация OpenAPI 3.1 опубликована по адресу /api/v1/openapi.json. Используйте её для автоматической генерации клиентов:

Клиент на TypeScript

Сгенерирует типизированные `fetch`-определения через openapi-typescript.

npx openapi-typescript \
  https://op-proxy.com/api/v1/openapi.json \
  -o opx-types.ts
Клиент на Python

Сгенерирует типизированный async-клиент через openapi-python-client.

openapi-python-client generate \
  --url https://op-proxy.com/api/v1/openapi.json
Промпт для AI-ассистента

Вставьте в Cursor, Claude, ChatGPT или любой AI-инструмент, умеющий загружать URL. Получите готовый к использованию типизированный клиент.

Напиши типизированный TypeScript-клиент для REST API OP-Proxy v1.

Спецификация: https://op-proxy.com/api/v1/openapi.json
Базовый URL:  https://op-proxy.com/api/v1
Авторизация:  в каждом запросе нужен заголовок  Authorization: Bearer YOUR_TOKEN  где YOUR_TOKEN читается из process.env.OPX_TOKEN на старте.

Требования:
1. Сгенерируй типы из OpenAPI-схемы (openapi-typescript или аналогичный инструмент).
2. Сделай одну async-функцию на каждый operationId, имя в camelCase.
3. Читай токен из process.env.OPX_TOKEN; брось ошибку, если он не задан.
4. На 2xx возвращай только распарсенное поле data. На non-2xx бросай ApiError с полями code, message и httpStatus. API использует единый envelope: status и объект error c полями code и message.
5. 429 маппируй на RateLimitError, который выставляет значение заголовка Retry-After в секундах.
6. НЕ повторяй автоматически POST /purchase и POST /services/:id/extend при сетевой ошибке. Обе операции неидемпотентны — каждая попытка создаёт новую услугу или продлевает её ещё на один период. Если повтор всё-таки нужен, сначала вызывай GET /services, чтобы понять, что произошло.
7. Для GET /services/:id/proxies?format=txt возвращай сырой текст, а не JSON-envelope.
8. Все цены и балансы — целые числа в RUB (российских рублях).
9. Уважай X-RateLimit-Remaining: если стало 0 — пробрасывай это вызывающему коду, не повторяй запрос молча.

Результат: один файл клиента плюс отдельный файл со сгенерированными типами. В конце добавь короткий пример использования (проверка баланса, список ротационных тарифов, покупка самого дешёвого, скачивание списка прокси в виде plain text).

FAQ

Можно ли платить картой или криптой через API?
Нет. Карта / крипта / Robokassa требуют браузерного редиректа. API списывает только с баланса. Пополняйте баланс через личный кабинет, потом используйте.
Можно ли купить IPv4-Static или Datacenter IPv4 через API?
Нет — эти типы требуют ручной выдачи и в v1 API не реализованы. Покупайте их через личный кабинет.
Почему нет вебхуков?
Это сделано специально. Все ротационные прокси выдаются мгновенно. Опрашивайте GET /services если нужно подтвердить состояние.
В какой валюте баланс и цены?
Российские рубли (RUB). Все цены и значения баланса — в RUB.
Что делать, если ключ утёк?
Сразу отзовите его в /dashboard/api-keys. Прошлые запросы видны в GET /logs.

Первый запрос — за пять минут

Создайте API-ключ в личном кабинете, пополните баланс — и покупайте прокси, выгружайте списки и управляйте услугами из своего кода.