OP-ProxyOP-Proxy/ API
openapi.json
API-ключи
Общее
  • Введение
  • Быстрый старт
  • Авторизация
  • Повторы
  • Лимиты
Эндпоинты
  • GET/account
  • GET/catalog/plans
  • POST/purchase
  • GET/services
  • GET/services/{id}
  • GET/services/{id}/proxies
  • POST/services/{id}/extend
  • PUT/services/{id}/whitelist
  • POST/services/{id}/credentials
  • PUT/services/{id}/country
  • PUT/services/{id}/rotation
  • GET/logs
Справочник
  • Коды ошибок
  • OpenAPI
  • FAQ
OP-Proxy API · v1

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

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

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

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

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

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

OpenAPI 3.1

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

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

  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.

Тело запроса
{
  "type": "ipv4_rotating",
  "plan_id": "65a9f0c1b2c3d4e5f6a7b8c9",
  "country": "mixed",
  "rotation": "instant"
}
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",
    "country": "mixed",
    "rotation": "instant"
  }'
Ответ
{
  "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"
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-адресом.
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.
На этой странице
  • Введение
  • Быстрый старт
  • Авторизация
  • Повторы
  • Лимиты
  • Эндпоинты
  • Коды ошибок
  • OpenAPI
  • FAQ