FonProxy

Orders API

Endpoints for creating, managing, and renewing proxy orders including IP provisioning and traffic top-ups.

Останнє оновлення: 17 жовтня 2026 р.

Для автентифікації, формату помилок і заголовків дивіться Загальну інформацію API.

Замовлення

Отримати конфігурацію каталогу проксі

GET /orders/config

Отримати повну конфігурацію каталогу проксі. Публічний — автентифікація не потрібна.

Відповідь

{
  "proxyTypes": [
    {
      "id": "residential-giga",
      "name": "Residential Giga",
      "slug": "residential-giga",
      "shortDescription": "Реальні житлові IP, оплата за Гіга — максимальна довіра.",
      "paymentModel": "prepaid",
      "unit": "giga",
      "pricePerUnit": 1.5,
      "hasTraffic": true,
      "trafficDiscounts": [
        { "min": 10, "discount": 0.05, "label": "5% знижка" }
      ],
      "countDiscounts": [],
      "tags": ["Змінювані IP", "Реальний ISP"],
      "countryMode": "будь-коли",
      "requiresCountry": false,
      "supportsCountry": true,
      "supportsCity": true,
      "supportsState": true,
      "supportsChangeCountry": true,
      "billingPeriods": [],
      "presets": [
        { "label": "Trial", "trafficGb": 1 }
      ]
    },
    ...
  ],
  "billingPeriods": [
    { "id": "week", "label": "Щотижня", "multiplier": 0.4167 },
    { "id": "month", "label": "Щомісяця", "multiplier": 1 },
    { "id": "year", "label": "Щорічно", "multiplier": 10.5 }
  ],
  "minOrderAmount": 0.5,
  "trafficPricePerGb": 0.10,
  "trafficVolumeDiscounts": [
    { "min": 50, "discount": 0.05, "label": "5% знижка на трафік" },
    { "min": 100, "discount": 0.10, "label": "10% знижка на трафік" },
    { "min": 500, "discount": 0.15, "label": "15% знижка на трафік" }
  ]
}

Попередній перегляд ціни замовлення Auth required

POST /orders/preview

Перегляньте ціну замовлення перед покупкою.

Тіло запиту

Передплачений гіга:

{
  "proxyTypeId": "residential-giga",
  "trafficGb": 50
}

Післяплачений IP:

{
  "proxyTypeId": "private-proxy",
  "count": 25,
  "trafficGb": 50,
  "billingPeriod": "month",
  "countries": { "US": 10, "DE": 10, "GB": 5 }
}
Ім'яТипОписОбов’язково
proxyTypeIdstringІдентифікатор типу проксі з конфігураціїТак
trafficGbnumberГігабайти трафікуГіга типи: Так
countnumberКількість IP-адресIP типи: Так
billingPeriodstringweek / month / yearНі
countriesobjectКарта країна → кількістьНі

Відповідь

{
  "proxyType": {
    "id": "residential-giga",
    "name": "Residential Giga",
    "paymentModel": "prepaid",
    "unit": "giga"
  },
  "breakdown": {
    "proxyTypeId": "residential-giga",
    "count": 0,
    "trafficGb": 50,
    "subtotal": 63.75,
    "discountAmount": 11.25,
    "total": 63.75
  },
  "display": {
    "totalDisplay": 2637.19,
    "currency": "UAH",
    "exchangeRate": 41.37
  }
}

Тип із "hidden": true (безкоштовний тест, id free) ніколи не продається: preview і create відмовляються з order.invalid_proxy_type, і його не можна поновити чи поповнити. Він перелічений, щоб клієнти могли показати замовлення, яке його використовує; не пропонуйте його для покупки.


Отримати статус безкоштовного тесту Auth required

GET /orders/free-test

Чи може акаунт все ще отримати своє єдине безкоштовне тестування, і що воно дає.

Відповідь

{ "available": true, "claimed": false, "orderId": null, "ips": 3, "trafficGb": 1, "hours": 24 }
  • claimed — акаунт вже мав його (видалений або термін якого закінчився враховується; той, що був скасований адміном, не враховується)
  • orderId — hash id замовлення для безкоштовного тесту, поки це замовлення все ще існує
  • available — true, коли його можна зараз отримати (не стверджено, і акаунт не позначено як бот)

Претендувати на безкоштовний тест Auth required 5 req / 24h

POST /orders/free-test

Надає 3 серверні IP-адреси з 3 випадкових країн та 1 ГБ трафіку на 24 години безкоштовно. Один на акаунт. Обмеження швидкості: 5 на день на IP.

Відповідь

Повний об'єкт замовлення (такий же, як GET /orders/:id) з proxyType.id: "free", billingPeriod: null, dates.expiresAt на 24 години вперед і pricing.totalUsd: 0. Автооновлення вимкнено та не може бути оплачено.

Помилки

{ "message": "free_test.already_claimed" }
{ "message": "free_test.unavailable" }
{ "message": "free_test.out_of_stock" }
{ "message": "free_test.rate_limit" }

На out_of_stock нічого не створюється, і акаунт може спробувати знову пізніше. Фанел записує подію free_test_claimed (не order_placed).


Створити замовлення Auth required

POST /orders/create

Створіть реальне замовлення. Як передплачені, так і післяплачені замовлення негайно знімають баланс.

Тіло запиту

Післяплачено з обраними країнами:

{
  "proxyTypeId": "private-proxy",
  "count": 25,
  "trafficGb": 50,
  "billingPeriod": "month",
  "countries": { "US": 10, "DE": 10, "GB": 5 }
}

Післяплачено з випадковими країнами:

{
  "proxyTypeId": "private-proxy",
  "count": 25,
  "trafficGb": 50,
  "billingPeriod": "month"
}

Коли countries опущено або null, IP призначаються із випадкових доступних країн. Вибір країни не впливає на ціну.

Відповідь

Повний об'єкт замовлення (такий же, як GET /orders/:id).

Помилки

{ "message": "order.invalid_proxy_type" }
{ "message": "order.invalid_billing_period" }
{ "message": "order.invalid_count" }
{ "message": "order.invalid_traffic_gb" }
{ "message": "order.countries_required" }
{ "message": "order.insufficient_balance" }

Отримати підсумок замовлень Auth required

GET /orders/summary

Легкий підсумок — один агрегований запит, без пагінації. Повертає кількість замовлень, загальну кількість IP, куплений трафік і витрачену суму — згруповані за статусом і типом проксі. Ідеально підходить для значків інформаційної панелі, оглядів витрат і лічильників по секціях.

Відповідь

{
  "total": {
    "orders": 7,
    "ips": 35,
    "trafficGb": 120.5,
    "spentUsd": 89.40
  },
  "byStatus": {
    "pending":   { "orders": 1, "ips": 5,  "trafficGb": 10.0,  "spentUsd": 9.00  },
    "paid":      { "orders": 0, "ips": 0,  "trafficGb": 0,     "spentUsd": 0     },
    "active":    { "orders": 4, "ips": 20, "trafficGb": 100.5, "spentUsd": 68.40 },
    "expired":   { "orders": 1, "ips": 5,  "trafficGb": 10.0,  "spentUsd": 9.00  },
    "cancelled": { "orders": 1, "ips": 5,  "trafficGb": 0,     "spentUsd": 3.00  },
    "refunded":  { "orders": 0, "ips": 0,  "trafficGb": 0,     "spentUsd": 0     }
  },
  "byType": {
    "private-proxy": {
      "orders": 3, "ips": 15, "trafficGb": 0, "spentUsd": 27.00,
      "byStatus": {
        "active":  { "orders": 2, "ips": 10, "trafficGb": 0, "spentUsd": 18.00 },
        "expired": { "orders": 1, "ips": 5,  "trafficGb": 0, "spentUsd": 9.00  }
      }
    },
    "server-static": {
      "orders": 2, "ips": 20, "trafficGb": 20.5, "spentUsd": 36.40,
      "byStatus": {
        "active": { "orders": 2, "ips": 20, "trafficGb": 20.5, "spentUsd": 36.40 }
      }
    },
    "residential-giga": {
      "orders": 2, "ips": 0, "trafficGb": 100.0, "spentUsd": 26.00,
      "byStatus": {
        "active":  { "orders": 1, "ips": 0, "trafficGb": 50.0, "spentUsd": 13.00 },
        "pending": { "orders": 1, "ips": 0, "trafficGb": 50.0, "spentUsd": 13.00 }
      }
    }
  }
}

Поля об'єкта агрегату

Ім'яТипОписОбов'язково
ordersnumberКількість замовлень—
ipsnumberЗагальна кількість куплених IP (sum стовпчика count)—
trafficGbnumberЗагальний куплений трафік у ГБ—
spentUsdnumberЗагальна сума, витрачена у USD—

byStatus завжди включає всі 6 статусів (нули для статусів без замовлень). byType.*.byStatus включає тільки статуси, які мають хоча б одне замовлення для цього типу.


Список замовлень Auth required

GET /orders

Перелік замовлень користувача (з пагінацією).

Параметри запиту

Ім'яТипОписОбов'язково
pagenumberНомер сторінки (за замовчуванням: 1)Ні
limitnumberКількість елементів на сторінку (за замовчуванням: 20)Ні
typestringФільтрувати за ID типу проксіНі

Відповідь

{
  "orders": [ ... ],
  "total": 42,
  "page": 1,
  "pages": 3
}

Отримати замовлення за ID Auth required

GET /orders/:id

Отримати одне замовлення за ID.

Параметри

Ім'яТипОписОбов'язково
:idstringID замовленняТак

Відповідь

{
  "id": "80-472109",
  "name": "My US Proxies",
  "status": "active",
  "proxyType": {
    "id": "server-static",
    "name": "Server Static",
    "paymentModel": "postpaid",
    "unit": "ip"
  },
  "count": 5,
  "trafficGb": 10,
  "billingPeriod": "month",
  "proxyUsername": "u_a1b2c3",
  "proxyPassword": "xYz9q2Wp4rT8mN1k",
  "peer": {
    "host": "us1.fonproxy.com",
    "portMin": 10000,
    "portMax": 19999
  },
  "countries": { "US": 3, "DE": 2 },
  "usage": { "totalGb": 1.2, "maxGb": 10, "usedPercent": 12.0, "remainingGb": 8.8 },
  "provisioning": {
    "state": "ok",
    "assignedCountries": null,
    "missingCountries": null,
    "assignedCount": 5,
    "missingCount": 0
  },
  "pricing": { "totalUsd": 4.50 },
  "dates": { "createdAt": "2026-04-01T10:00:00.000Z", "activatedAt": "2026-04-01T10:00:05.000Z" }
}

Статуси замовлень: pending, paid, active, expired, cancelled, refunded


Поле Provisioning

Кожна відповідь замовлення включає об'єкт provisioning, який показує стан призначення IP — фронтенд ніколи не потребує розбору сирих meta.

Ім'яТипОписОбов'язково
state"ok" | "pending" | "partial"Поточний стан призначення—
assignedCountriesRecord<string,number> | nullПризначені країни з кількістю по країні—
missingCountriesRecord<string,number> | nullКраїни з недостатньою кількістю IP, з потрібною кількістю—
assignedCountnumberЗагальна кількість успішно призначених IP—
missingCountnumberЗагальна кількість IP, які все ще відсутні—

Значення станів:

СтанКолиЩо показати
"ok"Повністю призначено (або не застосовується)Нічого — замовлення в гарному стані
"pending"Післяплачене замовлення сплачено, але чекає на IP. Ще не запущено.Банер: "Ваше замовлення налаштовується…" з деталізацією missingCountries
"partial"Активне передплачене замовлення, але для деяких країн не вистачало IP. Працює з частковими IP.Попередження: "Замовлення активне з частковими IP" + missingCountries

Приклад — очікування (післяплачене, чекає на запас DE):

{
  "state": "pending",
  "assignedCountries": { "US": 3, "CA": 2 },
  "missingCountries": { "DE": 1 },
  "assignedCount": 5,
  "missingCount": 1
}

Приклад — частковий (передплачений, активний, але недостає деяких):

{
  "state": "partial",
  "assignedCountries": { "US": 10 },
  "missingCountries": { "FR": 3, "IT": 2 },
  "assignedCount": 10,
  "missingCount": 5
}

Поле state достатньо для того, щоб фронтенд вирішив, що відображати.


Поля використання

Ім’яТипОписОбов’язково
uploadBytesnumberЗагальна кількість завантажених байтів—
downloadBytesnumberЗагальна кількість завантажених байтів—
totalBytesnumberЗавантаження + завантаження—
requestCountnumberЗагальна кількість оброблених запитів проксі—
uploadGbnumberЗавантаження в ГБ (3 десятинних знаки)—
downloadGbnumberЗавантаження в ГБ (3 десятинних знаки)—
totalGbnumberЗагальний трафік у ГБ—
maxBytesnumber | nullМаксимально дозволена кількість байтів (лише для замовлень за giga, null для замовлень за IP)—
maxGbnumber | nullМаксимально дозволена кількість ГБ (order.trafficGb для giga, null для IP)—
remainingBytesnumber | nullЗалишилося байтів, перш ніж буде вичерпана квота—
remainingGbnumber | nullЗалишилося ГБ—
usedPercentnumber | nullВідсоток використаної квоти (0–100, 2 десятинних знаки)—
lastReportedAtstring | nullISO-мітка часу останнього звіту про використання пірингу—

Для замовлень за гіга (unit: 'giga'): maxGb = куплений trafficGb. Фронтенд може показати шкалу прогресу, використовуючи usedPercent. Для замовлень за IP (unit: 'ip'): maxBytes, maxGb, remainingBytes, remainingGb, usedPercent є null — трафік лише для інформаційного використання.


Автоматичне призначення IP

Після створення та сплати замовлення, призначення IP відбувається автоматично через фоновий процес на основі подій:

Модель платежуПоведінка
проплаченийБалансова сума знімається негайно. IP автоматично присвоюються по країні. Замовлення активується завжди — навіть якщо в деяких країнах недостатньо IP (частково). provisioning.state = "partial" з деталізацією missingCountries.
післяплаченийЗалишається замовлення pending до моменту поки всі IP не будуть присвоєні. Якщо всі країни заповнені → активується негайно (state: "ok"). Якщо будь-яка країна має недостатньо → залишається pending (state: "pending"). Адміністратор заповнює відсутні слоти; замовлення автоматично активується.

Обробка фронтендом за provisioning.state:

СтанСтатусЩо показати
"ok"activeЗвичайний вигляд замовлення
"pending"pendingПовноекранний банер "Налаштовуємо ваше замовлення…" з таблицею missingCountries. Замовлення не запущено.
"partial"activeПопереджувальний банер "Працює з частковими IP — деякі місця очікують" + таблиця missingCountries. IP працюють.

Адміністратори можуть використовувати POST /admin/orders/:id/ips/assign-by-country або POST /admin/orders/:id/ips/add-by-country для заповнення відсутніх слотів. Як тільки всі відсутні слоти заповнено, післяплачене замовлення автоматично активується.


Отримати IP замовлення Auth required

GET /orders/:id/ips

Отримати IP, призначені для замовлення.

  • Повертаються тільки активні (призначені) і видимі IP — IP, приховані адміністратором (visible=false), виключені.
  • Поле index – це абсолютна позиція (починаючи з 0). Можуть бути пробіли, де сидять приховані IP — це навмисно.
  • Інформація про з'єднання обчислюється від активного пірингу: host : portMin + index.
  • Облікові дані – це власне proxyUsername/proxyPassword замовлення — НЕ оригінальні облікові дані проксі.

Параметри

Ім'яТипОписОбов'язково
:idstringID замовленняТак

Відповідь

{
  "orderId": "K4Xb9r",
  "credentials": {
    "username": "user_a1b2c3d4e5f6",
    "password": "xYz9q2Wp4rT8mN1k"
  },
  "ips": [
    {
      "index": 0,
      "host": "us1.fonproxy.com",
      "port": 10000,
      "originalIp": "185.123.45.67",
      "countryCode": { "geoip": "US" },
      "city": { "geoip": "New York" },
      "state": { "geoip": "NY" },
      "status": "active",
      "lastVerifiedAt": "2026-03-23T08:14:00.000Z",
      "assignedAt": "2026-03-20T10:01:00.000Z"
    },
    ...
  ],
  "total": 2,
  "provisioning": {
    "state": "ok",
    "assignedCountries": null,
    "missingCountries": null,
    "assignedCount": 2,
    "missingCount": 0
  }
}

Індекс 1 відсутній — цей IP був прихований адміністратором. Користувач бачить 0, 2 з портами 10000, 10002.

Використовуйте credentials.username / credentials.password для автентифікації з host:port.

Якщо жоден піринг не активний, host та port будуть null.

Для очікуваних замовлень (provisioning.state === "pending"), ips буде порожнім або частковим та provisioning.missingCountries показує, що ще розподіляється. Показати банер "очікування на IP".

Для часткових замовлень (provisioning.state === "partial"), ips містить призначені IP та provisioning.missingCountries показує, що ще відсутнє. Замовлення працює — показати попередження.


Скинути публічний ключ завантаження Auth required

POST /orders/:id/reset-hash

Скидання хеш-ключа публічного завантаження для замовлення.

Параметри

Ім'яТипОписОбов'язково
:idstringID замовленняТак

Відповідь

{ "publicHash": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" }

Оновити налаштування замовлення Auth required

PATCH /orders/:id/settings

Оновлення налаштувань замовлення, які можуть редагувати користувачі. Всі поля необов'язкові.

Параметри

Ім'яТипОписОбов'язково
:idstringID замовленняТак

Тіло запиту

Ім'яТипОписОбов'язково
namestring | nullКористувацька мітка. Передайте null, щоб очистити. Повертається до ID замовлення у відповідях.Ні
proxyUsernamestringНове ім’я користувача проксі. Літери та цифри. Зберігається як u_<value>.Ні
proxyPasswordstringНовий пароль проксі. Не може бути порожнім.Ні
{
  "name": "My US Proxies",
  "proxyUsername": "myuser",
  "proxyPassword": "mySecurePass123"
}

Відповідь

Повний об'єкт замовлення (такий же, як GET /orders/:id).

Помилки

{ "message": "order.username_empty" }
{ "message": "order.password_empty" }

Видалити замовлення Auth required

DELETE /orders/:id

М'яке видалення замовлення. Дозволено для усіх статусів замовлень — очікуваних, оплачуваних, активних, завершених, скасованих, відшкодованих.

Каскадно м'яко видаляє пов'язані order_ips, order_usage, та order_renewal_configs. М’яко видалений заказ зберігається 30 днів перед остаточним видаленням.

Параметри

Ім'яТипОписОбов'язково
:idstringID замовленняТак

Відповідь

{ "deleted": true }

Помилки

{ "message": "order.not_found" }

Управління замовленнями та трафіком

Отримати цінові опції замовлення Auth required

GET /orders/:id/pricing

Отримати всі цінові опції для поновлення та поповнення трафіку на існуючому замовленні.

Повертає:

  • Поновлення (лише післяплачене): повна розбивка ціни для поновлення поточного платіжного періоду.
  • Поповнення трафіку (усі типи): вибірні пресети з повною розбивкою.

Параметри

Ім'яТипОписОбов'язково
:idstringID замовленняТак

Відповідь (післяплачене замовлення)

{
  "orderId": "80-472109",
  "proxyTypeId": "private-proxy",
  "proxyTypeName": "Private Proxy",
  "paymentModel": "postpaid",
  "unit": "ip",
  "renewal": {
    "billingPeriod": "month",
    "breakdown": {
      "proxyTypeId": "private-proxy",
      "count": 25,
      "trafficGb": 50,
      "period": "month",
      "periodLabel": "Щомісячно",
      "subtotal": 21.38,
      "trafficCost": 2.50,
      "discount": { "min": 25, "discount": 0.05, "label": "5% знижка" },
      "discountAmount": 1.13,
      "total": 23.88
    },
    "discountPercent": 0,
    "discountAmount": 0,
    "total": 23.88,
    "canRenew": true
  },
  "trafficTopup": {
    "options": [
      {
        "trafficGb": 5,
        "pricePerGb": 0.05,
        "subtotal": 0.25,
        "discount": null,
        "discountAmount": 0,
        "total": 0.50
      },
      ...
    ],
    "canTopup": true
  }
}

Відповідь (передоплачене замовлення за гіга)

{
  "orderId": "80-123456",
  "proxyTypeId": "residential-giga",
  "proxyTypeName": "Residential Giga",
  "paymentModel": "prepaid",
  "unit": "giga",
  "renewal": null,
  "trafficTopup": {
    "options": [
      {
        "trafficGb": 1,
        "pricePerGb": 1.5,
        "subtotal": 1.50,
        "discount": null,
        "discountAmount": 0,
        "total": 1.50
      },
      ...
    ],
    "canTopup": true
  }
}

renewal дорівнює null для передоплачених типів (без поновлення — натомість купити додатковий трафік). Опції поповнення трафіку використовують ту саму ціну, що й початкова покупка для цього типу. Фронтенд може використовувати пресети options або викликати налаштування попереднього перегляду нижче.


Попередній перегляд поповнення трафіку Auth required

GET /orders/:id/traffic-preview

Попередній перегляд поповнення трафіку за індивідуальну кількість ГБ.

Параметри

Ім'яТипОписОбов'язково
:idstringID замовленняТак

Параметри запиту

Ім'яТипОписОбов'язково
trafficGbnumberКількість ГБ для попереднього переглядуТак

Відповідь

{
  "trafficGb": 25,
  "pricePerGb": 0.05,
  "subtotal": 1.25,
  "discount": null,
  "discountAmount": 0,
  "total": 1.25
}

Помилки

{ "message": "order.invalid_traffic_gb" }
{ "message": "order.not_found" }

Поновити замовлення Auth required

POST /orders/:id/renew

Ручне поновлення післяплаченого замовлення на той самий платіжний період. Знімає з балансу.

Параметри

Ім'яТипОписОбов'язково
:idstringID замовленняТак

Тіло запиту

Тіло не потребується — надсилає поновлення за поточною ціною.

Відповідь

Повний об'єкт замовлення.

Помилки

{ "message": "order.not_postpaid" }
{ "message": "order.not_renewable" }
{ "message": "order.insufficient_balance" }
{ "message": "order.charge_locked" }

Поповнити трафік Auth required

POST /orders/:id/topup-traffic

Додайте ГБ трафіку до будь-якого замовлення (передоплаченного або післяплаченого). Знімає з балансу.

Ціноутворення використовує модель таку ж як при покупці:

  • **Передплачений гіга: ** pricePerUnit × ГБ з урахуванням trafficDiscounts.
  • **Післяплачений IP: ** trafficPricePerGb × ГБ з урахуванням TRAFFIC_VOLUME_DISCOUNTS.

Використовуйте GET /orders/:id/pricing або GET /orders/:id/traffic-preview, щоб побачити точні ціни до покупки.

Параметри

Ім'яТипОписОбов'язково
:idstringID замовленняТак

Тіло запиту

Ім'яТипОписОбов'язково
trafficGbnumberГБ для додавання (повинен бути > 0)Так
{ "trafficGb": 10 }

Відповідь

Повний об'єкт замовлення.

Помилки

{ "message": "order.not_active" }
{ "message": "order.insufficient_balance" }
{ "message": "order.charge_locked" }

Отримати конфігурацію поновлення Auth required

GET /orders/:id/renewal-config

Отримайте налаштування автоматичного управління для замовлення. Повертає значення за замовчуванням, якщо ніколи не було сконфігуровано.

Параметри

Ім'яТипОписОбов'язково
:idstringID замовленняТак

Відповідь

{
  "autoRenew": true,
  "autoTopupGb": true,
  "autoTopupAmount": 10,
  "autoTopupThresholdPercent": 80
}
Ім'яТипОписОбов'язково
autoRenewbooleanТільки післяплачене — автоматичне поновлення за 24 години до закінчення терміну дії (за замовчуванням: true)—
autoTopupGbbooleanАвтопокупка трафіку при досягненні порогу використання (за замовчуванням: true)—
autoTopupAmountnumberГБ для покупки при автопоповненні (за замовчуванням: 10)—
autoTopupThresholdPercentnumberВідсоток використання, який викликає автопоповнення, 1–99 (за замовчуванням: 80)—

Оновити конфігурацію поновлення Auth required

PATCH /orders/:id/renewal-config

Оновлення можливостей автоматичного керування. Всі поля необов’язкові — відправте тільки те, що хочете змінити. Створює рядок конфігурації зі значеннями за замовчуванням при першому виклику.

Параметри

Ім'яТипОписОбов'язково
:idstringID замовленняТак

Тіло запиту

{
  "autoRenew": true,
  "autoTopupGb": true,
  "autoTopupAmount": 20,
  "autoTopupThresholdPercent": 75
}

Відповідь

Така ж форма, як GET /orders/:id/renewal-config.

Помилки

{ "message": "order.not_postpaid" }
{ "message": "order.invalid_topup_amount" }
{ "message": "order.invalid_topup_threshold" }

Конфігурація поновлення у відповідях замовлення

Кожен об'єкт замовлення (з GET /orders, GET /orders/:id тощо) включає поле renewalConfig:

{
  "id": "80-472109",
  "status": "active",
  "renewalConfig": {
    "autoRenew": true,
    "autoTopupGb": true,
    "autoTopupAmount": 10,
    "autoTopupThresholdPercent": 80
  }
}

Підсумок автоматичного керування

ФункціяСпрацьовуванняЕндпоінт для налаштування
Автоматичне поновлення~24 години до закінчення терміну (cron)PATCH /orders/:id/auto-renew
Автоматичне поповнення трафікувикористання ≥ поріг (cron кожні 10 хвилин)PATCH /orders/:id/auto-topup
Активоване пірингом поповненняпіринг повідомляє про вичерпуваннявнутрішнє — POST /internal/peer/traffic/exhausted

Завантаження проксі (публічний)

Перелік форматів експорту

GET /proxy/formats

Перелік доступних форматів експорту. Публічний — автентифікація не потрібна.

Відповідь

{
  "formats": [
    { "id": "txt", "name": "Прості текст — host:port:user:pass", "extension": "txt" },
    { "id": "user-pass-at", "name": "user:pass@host:port", "extension": "txt" },
    { "id": "proto-url", "name": "proto://user:pass@host:port", "extension": "txt" },
    { "id": "curl", "name": "cURL команди", "extension": "sh" },
    { "id": "json", "name": "Масив JSON", "extension": "json" },
    { "id": "csv", "name": "CSV — host,port,user,pass,proto", "extension": "csv" }
  ]
}

Завантажити список проксі

GET /proxy/dl/:hash

Завантажити список проксі за публічним хешем. Публічний — автентифікація не потрібна.

Параметри

Ім'яТипОписОбов'язково
:hashstringpublicHash замовленняТак

Параметри запиту

Ім'яТипОписОбов'язково
formatstringІдентифікатор формату експорту з /proxy/formats (за замовчуванням: txt)Ні
protostringПротокол: http або socks5 (за замовчуванням: http)Ні

Повертає завантаження файлу з відповідним типом вмісту.

Приклад відповіді txt:

us1.fonproxy.com:10000:u_a1b2c3:xYz9q2Wp4rT8mN1k
us1.fonproxy.com:10002:u_a1b2c3:xYz9q2Wp4rT8mN1k

Приклад відповіді curl:

curl --proxy u_a1b2c3:xYz9q2Wp4rT8mN1k@us1.fonproxy.com:10000 https://httpbin.org/ip
curl --proxy u_a1b2c3:xYz9q2Wp4rT8mN1k@us1.fonproxy.com:10002 https://httpbin.org/ip

Приклад curl з socks5 (?proto=socks5):

curl --socks5 u_a1b2c3:xYz9q2Wp4rT8mN1k@us1.fonproxy.com:10000 https://httpbin.org/ip

Хеш видно у відповіді замовлення як publicHash. Скиньте його, якщо скомпрометовано, за допомогою POST /orders/:id/reset-hash.