Партнёрский API
API для интеграции мобильных прокси: заказ и продление портов, управление доступами и расчёты.
Значения в примерах условные. Актуальные цены, ID и данные подключения возвращаются в ответах API.
Авторизация
API доступен после активации партнёрского аккаунта. Создание и отзыв токена доступны только в кабинете GIGABIT. Новый токен заменяет предыдущий и отображается один раз.
Токен передаётся в заголовке HTTP-запроса Authorization по схеме Bearer.
Authorization: Bearer gbp_PARTNER_TOKENФормат запросов и ответов
Тело запроса передаётся в формате JSON. Примеры запросов и ответов находятся у каждого метода.
| Параметр | Формат и значение |
|---|---|
| Тело запроса | JSON-объект и Content-Type: application/json. Если параметров нет, тело можно не передавать. |
| HTTP 202 | Операция принята. Сервер возвращает id и status_url для проверки статуса. |
| GET /operations/{id} | queued: в очереди; processing: выполняется; ready: завершена; failed: ошибка. Результат находится в result, причина ошибки в error. |
| Даты | ISO 8601 с часовым поясом, например 2026-12-09T22:59:59+00:00. |
| Суммы | Поля _cents: целые евроценты. 4500 = 45,00 EUR. |
| Лимиты | Тело до 16 KiB; 600 запросов в час на аккаунт. При HTTP 429 задержка указана в Retry-After. |
Успешный ответ
{
"success": true,
"data": {
"currency": "EUR",
"balance_cents": 10000
}
}Ответ с ошибкой
{
"success": false,
"error": "unauthenticated"
}Баланс и оплата
Заказ и продление через API рассчитаны на один порт на 30 дней. Стоимость с индивидуальной скидкой списывается с нетто-баланса. Доступная сумма с учётом кредитного лимита и резервов указана в available_cents.
VAT определяется по реквизитам профиля и добавляется при пополнении через Stripe. При покупке портов VAT повторно не начисляется.
Ошибки
| HTTP | error | Описание |
|---|---|---|
| 400 | invalid_rotation_token_request | Сброс токена не принимает дополнительных параметров. |
| 400 | invalid_json | Некорректный JSON в теле запроса. |
| 400 | invalid_payment_request | Неподдерживаемые или некорректные параметры запроса. |
| 400 | invalid_payment_orders | Некорректный номер или ID порта. |
| 400 | invalid_partner_amount | Сумма не соответствует ограничениям. |
| 400 | invalid_pagination | Некорректные параметры пагинации. |
| 400 | invalid_partner_prefix | Префикс логинов не соответствует ограничениям. |
| 400 | invalid_rotation_interval | Некорректные поля rotation или rotation_seconds. |
| 401 | unauthenticated | Токен отсутствует, недействителен или отозван. |
| 403 | partner_required | Требуется активный партнёрский аккаунт. |
| 403 | payment_method_unavailable | Способ оплаты недоступен для аккаунта. |
| 403 | origin_not_allowed | Источник запроса не разрешён. |
| 404 | not_found | Объект не найден или недоступен этому аккаунту. |
| 409 | insufficient_partner_balance | Недостаточно средств с учётом кредитного лимита и резервов. |
| 409 | insufficient_withdrawable_balance | Недостаточно средств, доступных для возврата. |
| 409 | inventory_changed | Наличие портов изменилось с момента просмотра каталога. |
| 409 | partner_prefix_taken | Префикс уже занят. |
| 409 | record_changed_or_in_use | Запись изменена или используется другой операцией. |
| 409 | payment_busy | Связанная операция ещё выполняется. |
| 409 | rotation_busy | Смена IP ещё выполняется. |
| 409 | billing_required | В профиле не заполнены платёжные реквизиты. |
| 409 | rotation_interval_too_short | Интервал меньше 20 секунд или ограничения сервера порта. |
| 403 / 409 | order_expired | Аренда неактивна. Смена доступов и IP доступна после продления. |
| 429 | too_many_requests | Лимит запросов исчерпан. Задержка указана в Retry-After. |
| 502 | proxy_server_unavailable | Сервер прокси временно недоступен. |
| 502 | rotation_sync_pending | Применение настройки смены IP ещё не подтверждено. |
| 503 | database_unavailable | Хранилище данных временно недоступно. |
| 503 | stripe_unavailable | Платёжный сервис временно недоступен. |
Статус операции
Возвращает состояние и результат операции аккаунта. Быстрая проверка, без повторного выполнения.
Параметры
| Поле | Тип | Описание |
|---|---|---|
idВ пути · Обязательно | string | ID операции из ответа HTTP 202. |
Пример запроса
curl --request GET \
--url 'https://api.gigabit.ltd/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN"const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef",
{
method: "GET",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`
}
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.get(
"https://api.gigabit.ltd/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "queued",
"error": null,
"result": null,
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Пример запроса
curl --request GET \
--url 'https://api.gigabit.ltd/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN"const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef",
{
method: "GET",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`
}
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.get(
"https://api.gigabit.ltd/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "ready",
"error": null,
"result": {
"id": "partner_0123456789abcdef0123456789abcdef",
"state": "ready",
"error": null,
"order_ids": [
"a1b2c3d4e5f60123456789abcdef0123"
],
"amount_cents": 4050,
"currency": "EUR",
"price": {
"currency": "EUR",
"base_net_cents": 4500,
"net_cents": 4050,
"vat_cents": 0,
"total_cents": 4050,
"tax_at_topup": true,
"discount_percent": 10,
"months": 1,
"days": 30,
"pricing_version": 1,
"tax": {
"mode": "vat",
"rate_percent": 23,
"vat_code": "23",
"reverse_charge": false
}
}
},
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Пример запроса
curl --request GET \
--url 'https://api.gigabit.ltd/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN"const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef",
{
method: "GET",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`
}
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.get(
"https://api.gigabit.ltd/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "failed",
"error": "insufficient_partner_balance",
"result": null,
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Баланс
Текущий баланс, кредитный лимит, доступные средства, скидка и цены партнёра.
Тело не требуется.
Пример запроса
curl --request GET \
--url 'https://api.gigabit.ltd/api/partner/v1/balance' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN"const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/balance",
{
method: "GET",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`
}
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.get(
"https://api.gigabit.ltd/api/partner/v1/balance",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"currency": "EUR",
"balance_cents": 10000,
"reserved_cents": 0,
"credit_limit_cents": 10000,
"debt_cents": 0,
"available_cents": 20000,
"withdrawable_cents": 10000,
"discount_percent": 10,
"prefix": "astra",
"api_token_hint": "demo12",
"monthly_net_cents": 4500,
"payment_method": "card",
"connection_domains": {
"host": "",
"api": ""
},
"paid_in_cents": 10000,
"prices": [
{
"currency": "EUR",
"base_net_cents": 4500,
"net_cents": 4050,
"vat_cents": 0,
"total_cents": 4050,
"tax_at_topup": true,
"discount_percent": 10,
"months": 1,
"days": 30,
"pricing_version": 1,
"tax": {
"mode": "vat",
"rate_percent": 23,
"vat_code": "23",
"reverse_charge": false
}
}
],
"topup_tax": {
"mode": "vat",
"rate_percent": 23,
"vat_code": "23",
"reverse_charge": false
},
"can_order_new_ports": true
}
}Пополнение баланса
Создаёт ссылку на оплату через Stripe. amount_cents - сумма зачисления на баланс в евроцентах; total_cents - сумма оплаты с учётом применимого VAT.
Параметры
| Поле | Тип | Описание |
|---|---|---|
amount_centsТело JSON · Обязательно | integer100-10000000 | От 1 до 100 000 EUR, целые евроценты. |
Пример запроса
curl --request POST \
--url 'https://api.gigabit.ltd/api/partner/v1/topups' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN" \
--header 'Content-Type: application/json' \
--data '{
"amount_cents": 10000
}'const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/topups",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"amount_cents": 10000
})
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.post(
"https://api.gigabit.ltd/api/partner/v1/topups",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
json={'amount_cents': 10000},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "queued",
"error": null,
"result": null,
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Результат после выполнения
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "ready",
"error": null,
"result": {
"id": "ptop_0123456789abcdef0123456789abcdef",
"state": "pending",
"url": "https://checkout.stripe.com/c/pay/EXAMPLE_SESSION",
"amount_cents": 10000,
"vat_cents": 2300,
"total_cents": 12300,
"currency": "EUR"
},
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Статус пополнения
Возвращает статус пополнения аккаунта. paid подтверждает зачисление средств. Возврат со страницы Stripe сам по себе не подтверждает оплату.
Состояния: creating, pending, paid, expired, failed.
Параметры
| Поле | Тип | Описание |
|---|---|---|
idВ пути · Обязательно | string | ID пополнения из POST /topups. |
Пример запроса
curl --request GET \
--url 'https://api.gigabit.ltd/api/partner/v1/topups/ptop_0123456789abcdef0123456789abcdef' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN"const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/topups/ptop_0123456789abcdef0123456789abcdef",
{
method: "GET",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`
}
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.get(
"https://api.gigabit.ltd/api/partner/v1/topups/ptop_0123456789abcdef0123456789abcdef",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"id": "ptop_0123456789abcdef0123456789abcdef",
"state": "pending",
"url": "https://checkout.stripe.com/c/pay/EXAMPLE_SESSION",
"amount_cents": 10000,
"vat_cents": 2300,
"total_cents": 12300,
"currency": "EUR"
}
}История транзакций
Операции от новых к старым, источники и комментарии, суммы и остаток после каждой операции. Технические резервы покупки скрыты по умолчанию.
Параметры
| Поле | Тип | Описание |
|---|---|---|
offsetВ строке запроса · Необязательно | integer0-∞ | Число пропускаемых записей. |
limitВ строке запроса · Необязательно | integer1-100 | Размер страницы: 1-100. |
include_reservationsВ строке запроса · Необязательно | string1 | 1 - включить purchase_reserve и purchase_release. |
Пример запроса
curl --request GET \
--url 'https://api.gigabit.ltd/api/partner/v1/transactions?offset=0&limit=30' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN"const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/transactions?offset=0&limit=30",
{
method: "GET",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`
}
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.get(
"https://api.gigabit.ltd/api/partner/v1/transactions?offset=0&limit=30",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"items": [
{
"id": "ptop_0123456789abcdef0123456789abcdef:credit",
"created_at": "2026-11-09T12:05:00+00:00",
"currency": "EUR",
"operation": "topup",
"amount_cents": 10000,
"reserved_delta_cents": 0,
"source": "stripe",
"comment": "",
"reference": "ptop_0123456789abcdef0123456789abcdef",
"balance_after_cents": 10000,
"reserved_after_cents": 0,
"sequence": 1
}
],
"total": 1,
"offset": 0,
"limit": 30
}
}Заявка на вывод средств
Создаёт заявку и резервирует сумму до её рассмотрения. Доступная для вывода сумма указана в withdrawable_cents; кредитный лимит и невозвратные компенсации в неё не входят.
После обработки заявки result.state=requested означает ожидание решения. Операция остаётся processing до подтверждения выплаты или отклонения.
Параметры
| Поле | Тип | Описание |
|---|---|---|
amount_centsТело JSON · Обязательно | integer100-100000000 | Сумма EUR в центах, не выше доступной для вывода. |
commentТело JSON · Обязательно | string1-2000 | Реквизиты или пояснение. Непустой текст после удаления пробелов по краям. |
Пример запроса
curl --request POST \
--url 'https://api.gigabit.ltd/api/partner/v1/withdrawals' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN" \
--header 'Content-Type: application/json' \
--data '{
"amount_cents": 5000,
"comment": "Please contact me to confirm payment details."
}'const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/withdrawals",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"amount_cents": 5000,
"comment": "Please contact me to confirm payment details."
})
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.post(
"https://api.gigabit.ltd/api/partner/v1/withdrawals",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
json={'amount_cents': 5000,
'comment': 'Please contact me to confirm payment details.'},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "queued",
"error": null,
"result": null,
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Результат после выполнения
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "ready",
"error": null,
"result": {
"id": "pout_0123456789abcdef0123456789abcdef",
"state": "paid"
},
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Доступные порты
Доступные номера портов, сгруппированные по оператору и локации.
Наличие проверяется при оформлении заказа. Просмотр каталога не резервирует порты.
Тело не требуется.
Пример запроса
curl --request GET \
--url 'https://api.gigabit.ltd/api/partner/v1/catalog' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN"const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/catalog",
{
method: "GET",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`
}
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.get(
"https://api.gigabit.ltd/api/partner/v1/catalog",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"items": [
{
"operator": {
"id": "operator-orange",
"name": "Orange"
},
"location": {
"id": "location-warsaw",
"name": "Warsaw"
},
"ports": [
{
"id": "b1c2d3e4f5a60123456789abcdef0123",
"number": 10001
},
{
"id": "b2c3d4e5f6a70123456789abcdef0123",
"number": 10002
}
],
"available": 2
}
],
"prices": [
{
"currency": "EUR",
"base_net_cents": 4500,
"net_cents": 4050,
"vat_cents": 0,
"total_cents": 4050,
"tax_at_topup": true,
"discount_percent": 10,
"months": 1,
"days": 30,
"pricing_version": 1,
"tax": {
"mode": "vat",
"rate_percent": 23,
"vat_code": "23",
"reverse_charge": false
}
}
]
}
}Заказ порта
Заказ одного доступного порта на 30 дней по номеру или ID из каталога. Стоимость списывается с баланса.
Длительная операция возвращает HTTP 202 и созданный сервером id. Статус и результат доступны через GET /operations/{id}. Проверка статуса не создаёт новую операцию.
Параметры
| Поле | Тип | Описание |
|---|---|---|
port_numberТело JSON · Необязательно | integer1-65535 | Номер порта из каталога. Передаётся одно из полей: port_number или port_id. |
port_idТело JSON · Необязательно | string1-120 | ID порта из каталога, вместо port_number. |
Пример запроса
curl --request POST \
--url 'https://api.gigabit.ltd/api/partner/v1/orders' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN" \
--header 'Content-Type: application/json' \
--data '{
"port_number": 10001
}'const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/orders",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"port_number": 10001
})
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.post(
"https://api.gigabit.ltd/api/partner/v1/orders",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
json={'port_number': 10001},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "queued",
"error": null,
"result": null,
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Результат после выполнения
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "ready",
"error": null,
"result": {
"id": "partner_0123456789abcdef0123456789abcdef",
"state": "ready",
"error": null,
"order_ids": [
"a1b2c3d4e5f60123456789abcdef0123"
],
"amount_cents": 4050,
"currency": "EUR",
"price": {
"currency": "EUR",
"base_net_cents": 4500,
"net_cents": 4050,
"vat_cents": 0,
"total_cents": 4050,
"tax_at_topup": true,
"discount_percent": 10,
"months": 1,
"days": 30,
"pricing_version": 1,
"tax": {
"mode": "vat",
"rate_percent": 23,
"vat_code": "23",
"reverse_charge": false
}
}
},
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Пример запроса
curl --request POST \
--url 'https://api.gigabit.ltd/api/partner/v1/orders' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN" \
--header 'Content-Type: application/json' \
--data '{
"port_id": "b1c2d3e4f5a60123456789abcdef0123"
}'const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/orders",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"port_id": "b1c2d3e4f5a60123456789abcdef0123"
})
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.post(
"https://api.gigabit.ltd/api/partner/v1/orders",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
json={'port_id': 'b1c2d3e4f5a60123456789abcdef0123'},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "queued",
"error": null,
"result": null,
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Результат после выполнения
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "ready",
"error": null,
"result": {
"id": "partner_0123456789abcdef0123456789abcdef",
"state": "ready",
"error": null,
"order_ids": [
"a1b2c3d4e5f60123456789abcdef0123"
],
"amount_cents": 4050,
"currency": "EUR",
"price": {
"currency": "EUR",
"base_net_cents": 4500,
"net_cents": 4050,
"vat_cents": 0,
"total_cents": 4050,
"tax_at_topup": true,
"discount_percent": 10,
"months": 1,
"days": 30,
"pricing_version": 1,
"tax": {
"mode": "vat",
"rate_percent": 23,
"vat_code": "23",
"reverse_charge": false
}
}
},
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Список портов
Текущие порты аккаунта: срок аренды, данные подключения, IP и таймер смены IP.
Для смены IP выполняется GET-запрос по полной ссылке rotation_url из данных порта. Заголовок Authorization не требуется. Ссылка уже содержит токен порта.
Тело не требуется.
Пример запроса
curl --request GET \
--url 'https://api.gigabit.ltd/api/partner/v1/orders' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN"const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/orders",
{
method: "GET",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`
}
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.get(
"https://api.gigabit.ltd/api/partner/v1/orders",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"items": [
{
"id": "a1b2c3d4e5f60123456789abcdef0123",
"port_id": "b1c2d3e4f5a60123456789abcdef0123",
"number": 10001,
"host": "l1.gigabit.ltd",
"username": "astra_a1b2c3d4e5f",
"proxy_password": "EXAMPLE_ONLY_22_CHARS_x",
"status": "active",
"expires": "2026-12-09T22:59:59+00:00",
"operator": "Orange",
"cityName": "Warsaw",
"ip": "198.51.100.42",
"rotation_url": "https://api.gigabit.ltd/change_ip?token=EXAMPLE_ROTATION_TOKEN_REPLACE_ME",
"rotation": true,
"rotation_seconds": 120,
"connection_options": {
"custom": {
"host": "proxy.example.com",
"rotation_url": "https://api.example.com/change_ip?token=EXAMPLE_ROTATION_TOKEN_REPLACE_ME"
}
}
}
]
}
}Данные порта
Данные заказа, принадлежащего аккаунту. Недоступный или несуществующий заказ возвращает 404.
Для смены IP выполняется GET-запрос по полной ссылке rotation_url из данных порта. Заголовок Authorization не требуется. Ссылка уже содержит токен порта.
Параметры
| Поле | Тип | Описание |
|---|---|---|
idВ пути · Обязательно | string | ID заказа (id) или порта (port_id) из списка портов. |
Пример запроса
curl --request GET \
--url 'https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN"const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123",
{
method: "GET",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`
}
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.get(
"https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"id": "a1b2c3d4e5f60123456789abcdef0123",
"port_id": "b1c2d3e4f5a60123456789abcdef0123",
"number": 10001,
"host": "l1.gigabit.ltd",
"username": "astra_a1b2c3d4e5f",
"proxy_password": "EXAMPLE_ONLY_22_CHARS_x",
"status": "active",
"expires": "2026-12-09T22:59:59+00:00",
"operator": "Orange",
"cityName": "Warsaw",
"ip": "198.51.100.42",
"rotation_url": "https://api.gigabit.ltd/change_ip?token=EXAMPLE_ROTATION_TOKEN_REPLACE_ME",
"rotation": true,
"rotation_seconds": 120,
"connection_options": {
"custom": {
"host": "proxy.example.com",
"rotation_url": "https://api.example.com/change_ip?token=EXAMPLE_ROTATION_TOKEN_REPLACE_ME"
}
}
}
}Продление порта
Добавляет 30 дней к аренде одного порта с оплатой с баланса. В запросе нужен только номер порта или его ID в адресе.
Длительная операция возвращает HTTP 202 и созданный сервером id. Статус и результат доступны через GET /operations/{id}. Проверка статуса не создаёт новую операцию.
Параметры
| Поле | Тип | Описание |
|---|---|---|
idВ пути · Обязательно | string | Номер порта или ID порта. Также принимается id заказа из GET /orders. |
Пример запроса
curl --request POST \
--url 'https://api.gigabit.ltd/api/partner/v1/orders/10001/renew' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN" \
--header 'Content-Type: application/json' \
--data '{}'const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/orders/10001/renew",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({})
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.post(
"https://api.gigabit.ltd/api/partner/v1/orders/10001/renew",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
json={},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "queued",
"error": null,
"result": null,
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Результат после выполнения
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "ready",
"error": null,
"result": {
"id": "partner_0123456789abcdef0123456789abcdef",
"state": "ready",
"error": null,
"order_ids": [
"a1b2c3d4e5f60123456789abcdef0123"
],
"amount_cents": 4050,
"currency": "EUR",
"price": {
"currency": "EUR",
"base_net_cents": 4500,
"net_cents": 4050,
"vat_cents": 0,
"total_cents": 4050,
"tax_at_topup": true,
"discount_percent": 10,
"months": 1,
"days": 30,
"pricing_version": 1,
"tax": {
"mode": "vat",
"rate_percent": 23,
"vat_code": "23",
"reverse_charge": false
}
}
},
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Пример запроса
curl --request POST \
--url 'https://api.gigabit.ltd/api/partner/v1/orders/b1c2d3e4f5a60123456789abcdef0123/renew' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN" \
--header 'Content-Type: application/json' \
--data '{}'const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/orders/b1c2d3e4f5a60123456789abcdef0123/renew",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({})
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.post(
"https://api.gigabit.ltd/api/partner/v1/orders/b1c2d3e4f5a60123456789abcdef0123/renew",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
json={},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "queued",
"error": null,
"result": null,
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Результат после выполнения
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "ready",
"error": null,
"result": {
"id": "partner_0123456789abcdef0123456789abcdef",
"state": "ready",
"error": null,
"order_ids": [
"a1b2c3d4e5f60123456789abcdef0123"
],
"amount_cents": 4050,
"currency": "EUR",
"price": {
"currency": "EUR",
"base_net_cents": 4500,
"net_cents": 4050,
"vat_cents": 0,
"total_cents": 4050,
"tax_at_topup": true,
"discount_percent": 10,
"months": 1,
"days": 30,
"pricing_version": 1,
"tax": {
"mode": "vat",
"rate_percent": 23,
"vat_code": "23",
"reverse_charge": false
}
}
},
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Сброс токена смены IP
Создаёт новый токен смены IP и возвращает готовую ссылку. Старый токен и все ссылки с ним сразу перестают работать. Пароль прокси и таймер не меняются.
Ответ возвращается сразу, без фоновой операции. Новая ссылка также доступна в поле rotation_url данных порта.
Параметры
| Поле | Тип | Описание |
|---|---|---|
idВ пути · Обязательно | string | ID заказа из поля id в списке портов. |
Пример запроса
curl --request POST \
--url 'https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/rotation-token' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN" \
--header 'Content-Type: application/json' \
--data '{}'const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/rotation-token",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({})
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.post(
"https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/rotation-token",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
json={},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"rotation_token": "0123456789abcdef0123456789abcdef",
"rotation_url": "https://api.gigabit.ltd/change_ip?token=0123456789abcdef0123456789abcdef"
}
}Смена доступов по ID
Сервер генерирует новый пароль. При change_login=true одновременно генерируется новый логин с актуальным префиксом партнёра. Работает только для активной аренды.
Новые данные доступны в result после применения. При ошибке operation_superseded более новая команда уже изменила доступы.
Параметры
| Поле | Тип | Описание |
|---|---|---|
idВ пути · Обязательно | string | ID заказа (id) или порта (port_id) из списка портов. |
change_loginТело JSON · Необязательно | boolean | true - новый логин с текущим префиксом и новый пароль. false - только пароль. На старом общем доступе создаётся отдельная пара и без флага. |
Пример запроса
curl --request POST \
--url 'https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/password' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN" \
--header 'Content-Type: application/json' \
--data '{
"change_login": true
}'const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/password",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"change_login": true
})
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.post(
"https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/password",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
json={'change_login': True},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "queued",
"error": null,
"result": null,
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Результат после выполнения
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "ready",
"error": null,
"result": {
"state": "synced",
"username": "astra_b2c3d4e5f6a",
"password": "EXAMPLE_NEW_PASSWORD_xx"
},
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Пример запроса
curl --request POST \
--url 'https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/password' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN" \
--header 'Content-Type: application/json' \
--data '{
"change_login": false
}'const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/password",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"change_login": false
})
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.post(
"https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/password",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
json={'change_login': False},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "queued",
"error": null,
"result": null,
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Результат после выполнения
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "ready",
"error": null,
"result": {
"state": "synced",
"username": "astra_a1b2c3d4e5f",
"password": "EXAMPLE_NEW_PASSWORD_xx"
},
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Таймер смены IP
Текущее состояние таймера. При rotation=true возвращается rotation_seconds. При выключенном таймере возвращается только rotation=false.
Параметры
| Поле | Тип | Описание |
|---|---|---|
idВ пути · Обязательно | string | ID заказа (id) или порта (port_id) из списка портов. |
Пример запроса
curl --request GET \
--url 'https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/rotation' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN"const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/rotation",
{
method: "GET",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`
}
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.get(
"https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/rotation",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"rotation": true,
"rotation_seconds": 120
}
}Пример запроса
curl --request GET \
--url 'https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/rotation' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN"const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/rotation",
{
method: "GET",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`
}
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.get(
"https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/rotation",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"rotation": false
}
}Настройка таймера
Для включения передаются rotation=true и rotation_seconds, целое число от 20 до 86400 секунд. Значение меньше 20 возвращает ошибку rotation_interval_too_short. Для отключения передаётся только rotation=false.
Операция остаётся processing до подтверждения применения таймера.
Параметры
| Поле | Тип | Описание |
|---|---|---|
idВ пути · Обязательно | string | ID заказа (id) или порта (port_id) из списка портов. |
rotationТело JSON · Обязательно | boolean | true - включить таймер; false - выключить. |
rotation_secondsТело JSON · Необязательно | integer20-86400 | Обязательно при rotation=true. При rotation=false поле не передаётся. |
Пример запроса
curl --request PUT \
--url 'https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/rotation' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN" \
--header 'Content-Type: application/json' \
--data '{
"rotation": true,
"rotation_seconds": 120
}'const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/rotation",
{
method: "PUT",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"rotation": true,
"rotation_seconds": 120
})
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.put(
"https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/rotation",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
json={'rotation': True, 'rotation_seconds': 120},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "queued",
"error": null,
"result": null,
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Результат после выполнения
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "ready",
"error": null,
"result": {
"rotation": true,
"rotation_seconds": 120
},
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Пример запроса
curl --request PUT \
--url 'https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/rotation' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN" \
--header 'Content-Type: application/json' \
--data '{
"rotation": false
}'const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/rotation",
{
method: "PUT",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"rotation": false
})
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.put(
"https://api.gigabit.ltd/api/partner/v1/orders/a1b2c3d4e5f60123456789abcdef0123/rotation",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
json={'rotation': False},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "queued",
"error": null,
"result": null,
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Результат после выполнения
{
"success": true,
"data": {
"id": "op_0123456789abcdef0123456789abcdef",
"state": "ready",
"error": null,
"result": {
"rotation": false
},
"created_at": "2026-11-10T12:00:00+00:00",
"status_url": "/api/partner/v1/operations/op_0123456789abcdef0123456789abcdef"
}
}Префикс логинов
Префикс - начало логинов портов, например название бренда. Логины генерируются в формате prefix_random: при prefix=astra новый порт получит логин вида astra_a1b2c3d4e5f. Случайная часть создаётся отдельно для каждого порта.
Изменение префикса не меняет уже выданные логины. Новые порты и смена логина через change_login=true используют текущий префикс. Префикс должен быть уникальным; занятый возвращает 409 partner_prefix_taken.
Параметры
| Поле | Тип | Описание |
|---|---|---|
prefixТело JSON · Обязательно | string2-24 | 2-24 символа: латиница, цифры и дефис; первый символ - буква. Приводится к нижнему регистру. proxy и gigabit зарезервированы. |
Пример запроса
curl --request PUT \
--url 'https://api.gigabit.ltd/api/partner/v1/profile' \
--header "Authorization: Bearer $GIGABIT_API_TOKEN" \
--header 'Content-Type: application/json' \
--data '{
"prefix": "astra"
}'const response = await fetch(
"https://api.gigabit.ltd/api/partner/v1/profile",
{
method: "PUT",
headers: {
Authorization: `Bearer ${process.env.GIGABIT_API_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"prefix": "astra"
})
}
);
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result);# python -m pip install requests
import os
import requests
response = requests.put(
"https://api.gigabit.ltd/api/partner/v1/profile",
headers={"Authorization": f"Bearer {os.environ['GIGABIT_API_TOKEN']}"},
json={'prefix': 'astra'},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(result.get("error", f"HTTP {response.status_code}"))
print(result)Пример ответа
{
"success": true,
"data": {
"prefix": "astra"
}
}Деньги и состояния
Поля объекта data. Состав ответа может дополняться без изменения версии API.
| Поле | Тип | Описание |
|---|---|---|
balance_cents | integer | Текущий нетто-баланс; может быть отрицательным. |
credit_limit_cents | integer | Согласованная величина разрешённого минуса. |
reserved_cents | integer | Средства под незавершённые операции, ещё входящие в баланс. |
available_cents | integer | Доступно для заказа: баланс + кредит − резервы, минимум 0. |
withdrawable_cents | integer | Средства аккаунта, доступные для возврата после резервирования. |
debt_cents / paid_in_cents | integer | Задолженность и сумма всех подтверждённых пополнений соответственно. |
currency / monthly_net_cents / discount_percent | string / integer | EUR; базовая цена 30 дней до скидки; скидка партнёра в процентах. |
prices[] / topup_tax | array / object | Цена на 30 дней и налоговый режим пополнения. При незаполненных реквизитах prices пуст, pricing_error=billing_required. |
can_order_new_ports | boolean | Хватает ли доступной суммы на один порт на 30 дней. Не гарантирует наличие. |
payment_method | string | Способ пополнения: card (Stripe). |
prefix / api_token_hint / connection_domains | string / object | Префикс новых логинов, последние символы токена (не сам токен) и настроенные домены host/api. Пустая строка означает, что домен не настроен. |
Цена порта
Поля объекта data. Состав ответа может дополняться без изменения версии API.
| Поле | Тип | Описание |
|---|---|---|
currency / base_net_cents | string / integer | EUR и базовая нетто-цена выбранного периода до скидки. |
net_cents / total_cents | integer | Нетто-стоимость одного порта за период после скидки; списание с баланса. |
vat_cents / tax_at_topup | integer / boolean | Для покупки vat_cents=0, tax_at_topup=true: VAT учитывается при пополнении. |
months / days / discount_percent / pricing_version | integer | Период 1 месяц (30 дней), индивидуальная скидка и версия цены. |
tax | object | mode, rate_percent, vat_code, reverse_charge. Налоговый профиль пополнения, а не дополнительное списание за порт. |
Операция покупки / продления
Поля объекта data. Состав ответа может дополняться без изменения версии API.
| Поле | Тип | Описание |
|---|---|---|
id / state / error | string / null | ID операции, состояние и код ошибки (null при отсутствии). |
order_ids[] | string[] | ID созданных или продлённых заказов для GET /orders/{id}. |
amount_cents / currency / price | integer / string / object | Сумма списания нетто, валюта EUR и цена порта, сохранённая для операции. |
Порт и доступы
Поля объекта data. Состав ответа может дополняться без изменения версии API.
| Поле | Тип | Описание |
|---|---|---|
id / port_id / number | string / integer | ID заказа, ID порта из каталога и номер порта. |
host / username / proxy_password | string | Хост, логин и пароль для подключения к прокси. |
status / expires | string | active или due; дата окончания аренды в ISO 8601. |
operator / cityName / ip | string | Оператор, город и текущий выходной IP. ip может быть пустым, если проверка недоступна. |
rotation_url | string | Для смены IP выполняется GET-запрос по полной ссылке rotation_url из данных порта. Заголовок Authorization не требуется. Ссылка уже содержит токен порта. |
rotation / rotation_seconds | boolean / integer | Включён ли таймер; интервал в секундах возвращается только при rotation=true. |
connection_options | object | Дополнительные адреса подключения, если настроены: ip и custom, каждый с host и rotation_url. |
Таймер смены IP
Поля объекта data. Состав ответа может дополняться без изменения версии API.
| Поле | Тип | Описание |
|---|---|---|
rotation | boolean | true - таймер включён; false - выключен. |
rotation_seconds | integer | Интервал в секундах, от 20 до 86400. Возвращается только при rotation=true. |
Пополнение баланса
Поля объекта data. Состав ответа может дополняться без изменения версии API.
| Поле | Тип | Описание |
|---|---|---|
id / state / url | string / null | Stripe: ID, состояние, ссылка Checkout. url может быть null, пока платёж создаётся. |
amount_cents / vat_cents / total_cents / currency | integer / string | Stripe: сумма на баланс, VAT, итог к оплате и EUR. |
Транзакция
Поля объекта data. Состав ответа может дополняться без изменения версии API.
| Поле | Тип | Описание |
|---|---|---|
items[] / total / offset / limit | array / integer | Записи, общее число с учётом фильтра резервов, смещение и размер страницы. |
id / created_at / sequence / currency | string / integer | ID записи, дата, порядковый номер и EUR. |
operation / source | string | Операция: topup, purchase, renewal, correction, compensation, credit_limit, withdrawal_reserve, withdrawal_paid, withdrawal_rejected; технические purchase_reserve/purchase_release по запросу. Источники: stripe, admin, api, customer, system. |
amount_cents / reserved_delta_cents | integer | Изменение баланса и резерва. Списание отрицательное. Резерв может иметь amount_cents=0, это не пополнение. |
balance_after_cents / reserved_after_cents | integer | Баланс и резерв после этой записи. |
comment / reference | string / null | Текстовый комментарий и связанный платёж или операция. Комментарий может быть пустым. |
Фоновая операция
Поля объекта data. Состав ответа может дополняться без изменения версии API.
| Поле | Тип | Описание |
|---|---|---|
id / status_url | string | Созданный сервером ID операции и адрес проверки статуса. |
state | string | queued, processing, ready или failed. |
result | object / null | Результат операции: доступы, данные заказа или ссылка на оплату в зависимости от метода. |
error / created_at | string / null | Код ошибки при неудаче и время создания операции. |