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" }
{ "service_id": "65aa…b8d0",
"threads": 100,
"auth": { "login": "k3vq…",
"password": "••••" } }Быстрый старт
- 1Пополните баланс — покупка ротационных прокси через API списывается с баланса (RUB).
- 2Создайте API-ключ в личном кабинете. Полный токен показывается только один раз. Скопируйте его.
- 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 /purchase | 60 / час |
| POST /services/{id}/credentials | 30 / час |
Эндпоинты
Все эндпоинты принимают и возвращают JSON, если не указано иное. Базовый URL: https://op-proxy.com/api/v1
/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"
}
}/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"
}
]
}
}/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": []
}
}/servicesСписок ваших услуг
Курсорная пагинация. ?status=active (по умолчанию), expired или all. Фильтр ?type, ?limit до 100.
typequerystringФильтр по типу услуги.
Enum:ipv4_rotatingipv6_rotatingstatusquerystringФильтр по состоянию жизненного цикла.
Default:activeEnum:activeexpiredalllimitqueryintegerРазмер страницы. Максимум 100.
Default:50cursorquerystringservice_id из next_cursor предыдущей страницы.
curl "https://op-proxy.com/api/v1/services?status=active&limit=50" \
-H "Authorization: Bearer $OPX_TOKEN"/services/{id}Получить услугу по id
Возвращает учётные данные, whitelist, срок, страну, режим ротации.
idpathstringrequired24-символьный hex-id услуги из POST /purchase или GET /services.
curl https://op-proxy.com/api/v1/services/65aa1100b2c3d4e5f6a7b8d0 \
-H "Authorization: Bearer $OPX_TOKEN"/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 — без учётных данных.
idpathstringrequired24-символьный hex-id услуги из POST /purchase или GET /services.
formatquerystringФормат ответа. txt — text/plain. json — структурированный envelope.
Default:txtEnum:txtjsonlayoutquerystringФормат строки прокси. 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_portauthquerybooleanВключать логин/пароль в каждую строку. false — для использования по whitelist IP.
Default:truecountryquerystringФильтр по шлюзу страны. 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"/services/{id}/statsСтатистика нагрузки
Для IPv4- и IPv6-Rotating: одновременные подключения и новые запросы в секунду — сейчас (now) и история за период (range). Те же данные, что на графиках в личном кабинете. Замеры раз в минуту, хранятся 30 дней; в истории — среднее и пик по интервалам длиной bucket_seconds. Пустой интервал — null: данных нет, а не нулевая нагрузка. Если живые данные временно недоступны, now = null, а история всё равно отдаётся.
idpathstringrequired24-символьный 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 }
]
}
}
}/services/{id}/extendПродлить услугу на 30 дней
Списывает цену тарифа с баланса. Каждый вызов добавляет ещё один период — не повторяйте вслепую при ошибке сети.
idpathstringrequired24-символьный hex-id услуги из POST /purchase или GET /services.
curl -X POST https://op-proxy.com/api/v1/services/65aa1100b2c3d4e5f6a7b8d0/extend \
-H "Authorization: Bearer $OPX_TOKEN"/services/{id}/whitelistЗаменить whitelist IP
Полная замена (PUT, не PATCH). Максимум 50 записей. Опциональный параллельный массив labels[].
idpathstringrequired24-символьный 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"]
}'/services/{id}/credentialsПерегенерировать логин и пароль
Лимит: 30/час на API-ключ. Старые учётные данные перестают работать немедленно. Используйте, чтобы перегенерировать логин/пароль прокси при утечке.
idpathstringrequired24-символьный hex-id услуги из POST /purchase или GET /services.
curl -X POST https://op-proxy.com/api/v1/services/65aa1100b2c3d4e5f6a7b8d0/credentials \
-H "Authorization: Bearer $OPX_TOKEN"/services/{id}/countryИзменить страну/регион
Только для IPv6-Rotating. IPv4-Rotating всегда работает через шлюз nl и возвращает 400 unsupported_for_type.
idpathstringrequired24-символьный 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"}'/services/{id}/rotationИзменить режим ротации
Только для IPv6-Rotating. У IPv4-Rotating ротация всегда instant — endpoint возвращает 400 unsupported_for_type.
idpathstringrequired24-символьный 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"}'/logsЖурнал API-запросов
Курсорная пагинация. ISO-таймштампы ?since= / ?until=. Хранит каждый API-запрос к вашему аккаунту.
sincequerystring (ISO 8601)ISO-8601 таймштамп. Только логи с этого момента или позже.
untilquerystring (ISO 8601)ISO-8601 таймштамп. Только логи до этого момента или раньше.
limitqueryintegerРазмер страницы. Максимум 200.
Default:50cursorquerystringservice_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_token | 401 | Отсутствующий, некорректный, истёкший или отозванный API-ключ. Либо исходный IP не входит в allowlist. |
| invalid_request | 400 | Тело запроса не является валидным JSON или в нём нет обязательных полей. |
| invalid_id | 400 | Параметр id в пути не является корректным 24-символьным hex-id. |
| invalid_plan_id | 400 | plan_id не существует или не соответствует запрошенному type. |
| invalid_type | 400 | type должен быть ipv4_rotating или ipv6_rotating. |
| invalid_country | 400 | country должен быть строкой длиной 2-32 символа из латиницы/цифр. |
| invalid_rotation | 400 | rotation должен быть строкой длиной 2-32 символа из латиницы/цифр. |
| invalid_ip | 400 | Одна из записей в whitelisted_ips не является валидным IPv4-адресом. |
| invalid_range | 400 | range должен быть одним из: 1h, 6h, 1d, 7d, 30d. |
| too_many_ips | 400 | Whitelist превышает лимит в 50 записей. |
| insufficient_balance | 402 | Баланс ниже цены тарифа. Пополните его через личный кабинет. |
| not_found | 404 | Услуга с таким id не принадлежит вашему аккаунту или не существует. |
| method_not_allowed | 405 | Неверный HTTP-метод для этого эндпоинта. |
| rate_limited | 429 | Превышен лимит запросов. Смотрите заголовок Retry-After. |
| server_error | 500 | Неожиданная ошибка. Повторите запрос через некоторое время. |
| unsupported_for_type | 400 | Операция недоступна для этого типа услуги (например, страна/ротация для IPv4-Rotating). |
| country_unavailable | 400 | Запрошенная страна недоступна для этого типа услуги. |
Спецификация OpenAPI
Строгая спецификация OpenAPI 3.1 опубликована по адресу /api/v1/openapi.json. Используйте её для автоматической генерации клиентов:
Сгенерирует типизированные `fetch`-определения через openapi-typescript.
npx openapi-typescript \
https://op-proxy.com/api/v1/openapi.json \
-o opx-types.tsСгенерирует типизированный async-клиент через openapi-python-client.
openapi-python-client generate \
--url https://op-proxy.com/api/v1/openapi.jsonВставьте в 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?
Можно ли купить IPv4-Static или Datacenter IPv4 через API?
Почему нет вебхуков?
GET /services если нужно подтвердить состояние.