REST API для автоматизации прокси
Покупайте ротационные IPv4 и IPv6 прокси, управляйте услугами и читайте состояние аккаунта из своего кода. Bearer-токены, предсказуемые JSON-ответы, спецификация OpenAPI 3.1 для генерации клиентов.
Один токен на ключ. Опциональный allowlist IP. Создание ключей защищено 2FA.
Ротационные прокси создаются сразу. Вебхуки не нужны.
Сгенерируйте клиент на TypeScript, Python или любом OAS-совместимом языке.
Быстрый старт
- 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.
{
"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": []
}
}/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}/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-адресом. |
| 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 если нужно подтвердить состояние.