Пакеты
Всё, что вы покупаете, становится пакетом. Пакет трафика (family: traffic_gateway) - объём
гигабайт, из которого собираются подключения. Пакет фиксированных адресов (family: dedicated) -
N адресов на срок с одним логином и паролем. Маршруты этой страницы, кроме последнего раздела,
общие для обоих видов.
POST /api/v1/quote
Заголовок раздела «POST /api/v1/quote»Расчёт цены. Ничего не списывает. Право catalog:read. Тело - то же, что у покупки.
curl -X POST https://ipv.rent/api/v1/quote \ -H 'Authorization: Bearer YOUR_API_KEY' -H 'Content-Type: application/json' \ -d '{ "product": "ipv4", "country": "us", "operator": "united-states", "period": "month", "quantity": 10 }'{ "unit": "1.49", "unit_label": "per_ip", "quantity": 10, "discount": "0.00", "discount_percent": "0.00", "total": "14.90", "currency": "USD"}unit_label:per_gbу трафика,per_ipу фиксированных адресов.total = unit * quantity - discount;discount- скидка в деньгах,discount_percent- та же скидка в процентах, обе строками.- Рассчитанная сумма - ровно та, что спишется при покупке с тем же телом.
POST /api/v1/packages
Заголовок раздела «POST /api/v1/packages»Покупка. Право packages:write, заголовок Idempotency-Key обязателен. Покупка завершается
внутри запроса: ответ 201 несёт order_id, package_id и status: completed.
Какие поля нужны, зависит от продукта:
| Поле | Residential | IPv4 | Значение |
|---|---|---|---|
product | да | да | слаг из каталога |
volume | да | нельзя | целые гигабайты, integer или string |
country | - | да | код страны из параметров |
operator | - | да | локация из параметров |
period | - | да | week, 2_weeks, month, 2_months, 3_months - из периодов страны |
quantity | нельзя | нет, 1 | сколько адресов; все они станут одним пакетом |
plan | - | нет | тариф; нужен, только если в стране их несколько |
auto_renew | - | нет, true | продлевать пакет автоматически |
client_reference | нет | нет | ваша метка до 64 символов; не уникальна |
Поле, которое не относится к продукту, и настройки подключения (count, geo, protocol,
ttl_minutes и подобные) отклоняются по имени: 422 unsupported_field с полем field.
curl -X POST https://ipv.rent/api/v1/packages \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000' \ -H 'Content-Type: application/json' \ -d '{ "product": "residential", "volume": 25, "client_reference": "deal-8891" }'{ "order_id": 128, "package_id": 42, "status": "completed", "price": "50.00", "client_reference": "deal-8891"}У фиксированных адресов в ответе ещё три поля:
{ "order_id": 131, "package_id": 57, "status": "completed", "price": "14.90", "client_reference": null, "package_ids": [57], "requested": 10, "fulfilled": 10}requested - сколько адресов заказано, fulfilled - сколько выдано. Если выдано меньше, разница
уже вернулась на баланс.
Отказы:
- 400 -
invalid_body(нетvolumeу трафика; нетcountry,periodилиoperatorу адресов; тело не JSON),validation_failed,unknown_product - 409 -
idempotency_in_progress - 422 -
invalid_volume,invalid_quantity,country_unavailable,unknown_plan,unknown_operator,unknown_period,out_of_stock,type_unavailable,insufficient_balance,unsupported_field,purchase_refunded(деньги возвращены, повторите как новую покупку),idempotency_key_required,idempotency_key_invalid,idempotency_key_reused - 500 -
order_failed(деньги не тронуты, повтор с тем же ключом безопасен),order_needs_attention(деньги списаны, разбирается вручную, не повторять),operation_indeterminate(повтор с ключом операции, исход которой не определён)
GET /api/v1/packages
Заголовок раздела «GET /api/v1/packages»Пакеты владельца ключа, новые сверху. Право packages:read. Параметры: offset, limit (здесь
по умолчанию 200), family, product.
| Параметр | Значение |
|---|---|
family | traffic_gateway или dedicated; неизвестное значение - без фильтра |
product | слаг: residential, ipv4; слаг, которого у вас нет, даёт пустой список |
| Поле карточки | Значение |
|---|---|
family, product | вид и продукт пакета |
status | provisioning, active; у трафика ещё exhausted, у адресов - expired, closed, suspended |
name | tag, если задан, иначе собирается из продукта: residential · 25 GB, ipv4 · US · United States · x10 |
traffic | баланс трафика; у адресов null |
expires_at | конец срока; у трафика null - трафик не сгорает |
auto_renew | у адресов: продлевается ли пакет сам |
endpoint | у адресов: country, operator, addresses_count; у трафика null |
GET /api/v1/packages/{id}
Заголовок раздела «GET /api/v1/packages/{id}»Пакет и доступ к нему. Право packages:read.
Пакет трафика:
{ "id": 42, "order_id": 128, "product": "residential", "family": "traffic_gateway", "tag": null, "name": "residential · 25 GB", "status": "active", "traffic": { "purchased_gb": "25.000", "used_gb": "2.566", "left_gb": "22.434", "synced_at": "..." }, "expires_at": null, "created_at": "...", "endpoint": null, "credentials": { "username": "...", "password": "..." }, "connection_options": [ { "mode": "rotating", "protocol": "http", "host": "residential.ipv.rent", "port": 9000 }, { "mode": "rotating", "protocol": "socks5", "host": "residential.ipv.rent", "port": 11000 }, { "mode": "sticky", "protocol": "http", "host": "residential.ipv.rent", "port": 10000 }, { "mode": "sticky", "protocol": "socks5", "host": "residential.ipv.rent", "port": 12000 } ], "limits": { "lifetime_min_minutes": 3, "lifetime_max_minutes": 1440, "lifetime_default_minutes": 60, "modes": ["rotating", "sticky"], "protocols": ["http", "socks5"] }}credentials, connection_options и limits равны null вместе, пока пакет не выдан. Готовые
строки подключения берите из POST /api/v1/packages/{id}/proxies.
Пакет фиксированных адресов:
{ "id": 57, "order_id": 131, "product": "ipv4", "family": "dedicated", "name": "ipv4 · US · United States · x2", "status": "active", "traffic": null, "expires_at": "2026-11-04T12:00:00+00:00", "created_at": "...", "auto_renew": true, "endpoint": { "country": "us", "operator": "United States", "addresses_count": 2, "...": "..." }, "credentials": { "username": "...", "password": "..." }, "addresses": [ { "host": "198.51.100.11", "port_http": 10010, "port_socks": 10011 }, { "host": "198.51.100.12", "port_http": 10012, "port_socks": 10013 } ], "capabilities": ["prolong", "credentials", "replace", "fingerprint", "renewal"], "credentials_retired": false, "extendable_until": "2026-12-11T12:00:00+00:00", "replace_available_at": null, "replacement": null, "renewal": { "enabled": true, "period": "month", "next_charge_at": "2026-11-03T12:00:00+00:00", "next_charge_amount": "2.98", "last_failure": null, "disabled_at": null }, "fingerprint": { "profile": null, "profiles": [ { "value": "windows_chrome", "label": "Windows 11 · Chrome" }, "..." ] }}Что значит каждое поле фиксированных адресов - на странице Фиксированные адреса.
Отказы: 404 not_found.
POST /api/v1/packages/{id}/password
Заголовок раздела «POST /api/v1/packages/{id}/password»Перевыпуск пароля, для обоих видов. Право packages:write. Логин не меняется.
Старый пароль перестаёт работать немедленно; applies_in_seconds - верхняя граница, за которую
новый начинает приниматься.
Отказы: 404 not_found; 422 package_unavailable (пакет ещё не выдан), package_expired (срок
адресов закончился - сначала продлите); 500 package_failed.
Операции с пакетом трафика
Заголовок раздела «Операции с пакетом трафика»Маршруты ниже - только для Residential. На пакете фиксированных адресов они отвечают 422
unsupported_capability.
POST /api/v1/packages/{id}/proxies
Заголовок раздела «POST /api/v1/packages/{id}/proxies»Собрать подключения. Право packages:write, идемпотентность не нужна. Тело необязательно.
| Поле | Тип | По умолчанию | Значение |
|---|---|---|---|
count | integer 1..500 | 1 | сколько строк собрать |
mode | rotating | sticky | rotating | режим сессии |
protocol | http | socks5 | http | протокол |
ttl_minutes | integer | null | 60 | сколько держится адрес в sticky, 3..1440 |
geo.country, geo.state, geo.city, geo.asn | string | - | коды из гео-каталога; state, city, asn требуют country |
curl -X POST https://ipv.rent/api/v1/packages/42/proxies \ -H 'Authorization: Bearer YOUR_API_KEY' -H 'Content-Type: application/json' \ -d '{ "count": 3, "mode": "sticky", "protocol": "http", "ttl_minutes": 30, "geo": { "country": "us" } }'В режиме sticky каждая строка набора несёт свой ярлык сессии, то есть даёт отдельный выходной
адрес, и у каждой своя rotation_url.
В режиме rotating строки одинаковые: адрес выбирается на каждом подключении, поэтому N строк дают
N разных выходов, а ссылок смены IP там нет.
Отсутствующее поле берёт умолчание, а не значение прошлого вызова. Ранее выданные строки продолжают работать.
Отказы:
- 400 -
invalid_body(тип или диапазон поля) - 404 -
not_found - 422 -
invalid_targeting(сfieldиvalue: значение вне каталога, неизвестный ключgeo, сужение безcountry),package_unavailable(пакет ещё не выдан,ttl_minutesвнеlimits, режим или протокол не поддерживается),unsupported_capability
POST /api/v1/packages/{id}/topup
Заголовок раздела «POST /api/v1/packages/{id}/topup»Долить объём. Право packages:write, Idempotency-Key обязателен. Тело: {"volume": 10}.
Ответ - 202 и карточка пакета: новый объём в карточке виден сразу, трафик по новому лимиту начинает проходить примерно через две минуты.
Долив создаёт отдельный заказ с applied_to_package_id.
Отказы:
- 400 -
invalid_body - 404 -
not_found - 409 -
idempotency_in_progress - 422 -
invalid_volume,type_unavailable,insufficient_balance,package_unavailable,unsupported_capability,purchase_refunded,idempotency_key_required,idempotency_key_invalid,idempotency_key_reused - 500 -
package_failed(деньги не списаны, повтор уместен),order_needs_attention(списание прошло, повторять нельзя),operation_indeterminate(повтор с ключом операции, исход которой не определён)
POST /api/v1/packages/{id}/rotation-secret
Заголовок раздела «POST /api/v1/packages/{id}/rotation-secret»Перевыпуск секрета ссылок смены IP. Право packages:write. Обнуляет все ссылки /r/{token}
сразу; отозвать одну нельзя. Ответ - пакет целиком.
Отказы: 404 not_found; 422 unsupported_capability.