Заказ

Список всех доступных методов для взаимодействия с API.

POST

Создать заказ

Новое/order/create
Заменяет старые методы v2

Этот метод API v3 заменяет такие методы API v2 (они ещё работают):

Создать заказ (черновик)

Формирует цену на выбранные позиции на сервере и сохраняет её в качестве черновика в течение 30 минут. Денежные средства не перечисляются, и токен не требуется.

{"action": "new", "product": "shared",
 "options": {"count": 10, "period": "1m", "traffic": 100, "countries": {"UA": 5, "DE": 5}},
 "client": {"total": "9.00", "currency": "USD"}}

Примечания

  • action: new — покупка продукта, topup — пополнение баланса (options: {amount, currency}).
  • В options используются ключи каталога: count, period (1w, 2w, 1m, 1y), traffic (ГБ), countries, geo_service, ip_score, unlimited_ips.
  • Отправляйте client.total с рассчитанной вами ценой: client_check.matched указывает, совпадает ли она с ценой на сервере.
  • Если значение параметра выходит за пределы допустимого диапазона, возвращается статус 422 option_out_of_range с указанием допустимого диапазона.

Способ запроса

POSThttps://api.stableproxy.com/v3/order/create

Параметры запроса

ИдентификаторПравилаПример
actionrequiredstringnew
productНе обязательноnullablestringshared
optionsНе обязательноnullablearray[]
clientНе обязательноnullablearray[]
client.totalНе обязательноrequired_with:clientnumeric0
client.currencyНе обязательноnullablestringsize:3"USD"
client.catalog_versionНе обязательноnullablestring0

Примеры кода

1const baseUrl = "https://api.stableproxy.com/v3";
2const response = await fetch(baseUrl + "/order/create", {
3 method: "POST",
4 headers: {
5 "Content-Type": "application/json"
6 },
7 body: JSON.stringify({
8 "action": "new",
9 "product": "shared",
10 "options": "[]",
11 "client": "[]",
12 "client.total": "0",
13 "client.currency": "\"USD\"",
14 "client.catalog_version": 0
15 })
16});
17const data = await response.json();

Примеры ответов

Draft201application/json
{
  "data": {
    "order": {
      "id": "990dd34a-0165-4641-ab9d-94bea1007fe0",
      "action": "new",
      "product": "shared",
      "status": "draft",
      "expires_at": "2026-10-06T15:46:32Z",
      "options": {
        "count": 10,
        "period": "1m",
        "traffic": 100,
        "countries": [],
        "geo_service": "overall",
        "ip_score": 0,
        "unlimited_ips": false
      },
      "price": {
        "currency": "USD",
        "total": "1.96",
        "total_usd": "1.96",
        "lines": [
          {
            "key": "ips",
            "amount_usd": "0.80"
          },
          {
            "key": "traffic",
            "amount_usd": "1.00"
          }
        ],
        "unit": {
          "ip": "0.08",
          "one_gb": null
        },
        "adjustments": [
          {
            "key": "sale",
            "amount": "0.00"
          }
        ]
      },
      "client_check": {
        "matched": false,
        "client_total": "1.20",
        "difference": "0.76",
        "catalog_stale": true
      }
    }
  },
  "meta": []
}
Option out of range422application/json
{
  "error": {
    "code": "option_out_of_range",
    "message": "An option is outside the allowed range.",
    "details": {
      "count": {
        "min": 1,
        "max": 2000
      }
    }
  }
}
POST

Подтвердить и оплатить заказ

Новое/order/confirm/{id}
Заменяет старые методы v2

Этот метод API v3 заменяет такие методы API v2 (они ещё работают):

Подтвердить и оплатить

Оплачивает заявку за счет средств на балансе или передает платеж в браузер пользователя.

Примечания

  • Отправляйте заголовок Idempotency-Key (одна уникальная строка на каждую покупку). Повторная отправка возвращает первый ответ; использование этого ключа для другого заказа приводит к ошибке 409.

  • 200 paid — покупка оплачена с баланса; package_id — идентификатор нового пакета.

  • 202 awaiting_payment — на балансе недостаточно средств: перенаправьте пользователя на checkout.url.

  • 202 awaiting_approval — покупка, совершенная приложением (OAuth), ожидает подтверждения пользователя: покажите ему approval.url. Приложения, которым пользователь разрешил совершать покупки, автоматически пропускают этот этап в рамках своего дневного лимита.

  • Затем выполните действие Получить заказ или Ожидать заказ.

  • Требуется токен с cart.purchase (topup.upload для пополнения счета).

"data": {

"id": "990dd34a-0165-4641-ab9d-94bea1007fe0",

"status": "paid",

"package_id": 14800

},

"meta": {}

}

"data": {

"id": "990dd34a-0165-4641-ab9d-94bea1007fe0",

"status": "awaiting_payment",

"checkout": {

"url": "https://app.stableproxy.com/pay/990dd34a-0165-4641-ab9d-94bea1007fe0",

"due": "7.80",

"currency": "USD",

"expires_at": "2026-10-06T16:16:32Z"

}

},

"meta": {}

}

"data": {

"id": "990dd34a-0165-4641-ab9d-94bea1007fe0",

"status": "awaiting_approval",

"approval": {

"url": "https://app.stableproxy.com/order/approve/990dd34a-0165-4641-ab9d-94bea1007fe0?t=Xk2…",

"reason": "confirmation_required",

"expires_at": "2026-10-06T16:16:32Z",

"limit": null,

"spent_today": "0.00",

"order_total": "9.00",

"currency": "USD"

}

},

"meta": {}

}

"error": {

"code": "idempotency_key_required",

"message": "Отправьте заголовок Idempotency-Key.",

"details": {}

}

}

Для этого метода – нужна авторизация!
Вы можете использовать собственный ключ API, который можно получить в панели управления.

Способ запроса

POSThttps://api.stableproxy.com/v3/order/confirm/{id}

Параметры запроса

ИдентификаторПравилаПример
pay_withНе обязательноnullablestringbalance
id1requiredstring990dd34a-0165-4641-ab9d-94bea1007fe0

Примеры кода

1const baseUrl = "https://api.stableproxy.com/v3";
2const response = await fetch(baseUrl + "/order/confirm/{id}", {
3 method: "POST",
4 headers: {
5 "Authorization": "Bearer [YOUR TOKEN]",
6 "Idempotency-Key": "[A UNIQUE KEY PER PURCHASE]",
7 "Content-Type": "application/json"
8 },
9 body: JSON.stringify({
10 "pay_with": "balance"
11 })
12});
13const data = await response.json();

Примеры ответов

Paid from balance200application/json
 {
Balance is short202application/json
 {
Waiting for the user — app purchase202application/json
 {
No Idempotency-Key422application/json
 {
GET

Получить заказ

Новое/order/view/{id}

Получить заказ

Статус заказа: draft, awaiting_payment, awaiting_approval, paid, expired или failed.

Примечания

  • Пока заказ находится в ожидании, в его описании повторно отображается ссылка checkout или approval.

  • payment.due — это сумма, которую ещё необходимо доплатить.

"data": {

"order": {

"id": "990dd34a-0165-4641-ab9d-94bea1007fe0",

"action": "new",

"product": "shared",

"status": "paid",

"expires_at": "2026-10-06T15:46:32Z",

"options": {

"count": 10,

"period": "1m",

"traffic": 100,

"countries": {},

"geo_service": "overall",

"ip_score": 0,

"unlimited_ips": false

},

"price": {

"currency": "USD",

"total": "1.96",

"total_usd": "1,96",

"lines": [

{

"key": "ips",

"amount_usd": "0,80"

},

{

"key": "traffic",

"amount_usd": "1.00"

}

],

"unit": {

"ip": "0.08",

"one_gb": null

},

"adjustments": [

{

"key": "sale",

"amount": "0.00"

}

]

},

"package_id": 14800,

"checkout": null,

"approval": null

},

"payment": {

"balance": "41.00",

"due": "0.00"

}

},

"meta": {}

}

Для этого метода – нужна авторизация!
Вы можете использовать собственный ключ API, который можно получить в панели управления.

Способ запроса

GEThttps://api.stableproxy.com/v3/order/view/{id}

Параметры запроса

ИдентификаторПравилаПример
id1requiredstring990dd34a-0165-4641-ab9d-94bea1007fe0

Примеры кода

1const baseUrl = "https://api.stableproxy.com/v3";
2const response = await fetch(baseUrl + "/order/view/{id}", {
3 method: "GET",
4 headers: {
5 "Authorization": "Bearer [YOUR TOKEN]",
6 "Content-Type": "application/json"
7 }
8});
9const data = await response.json();

Примеры ответов

Paid order200application/json
 {
GET

Ожидать смены статуса заказа

Новое/order/wait/{id}

Ожидание заказа

Тот же ответ, что и в случае Получение заказа, плюс retry_after (в секундах). Выполняйте опрос с этой задержкой до тех пор, пока статус не станет окончательным — после этого retry_after примет значение null.

"data": {

"order": {

"id": "990dd34a-0165-4641-ab9d-94bea1007fe0",

"status": "awaiting_payment",

"package_id": null

},

"retry_after": 2

},

"meta": {}

}

Для этого метода – нужна авторизация!
Вы можете использовать собственный ключ API, который можно получить в панели управления.

Способ запроса

GEThttps://api.stableproxy.com/v3/order/wait/{id}

Параметры запроса

ИдентификаторПравилаПример
timeoutНе обязательноnullableinteger124
id1requiredstring990dd34a-0165-4641-ab9d-94bea1007fe0

Примеры кода

1const baseUrl = "https://api.stableproxy.com/v3";
2const response = await fetch(baseUrl + "/order/wait/{id}", {
3 method: "GET",
4 headers: {
5 "Authorization": "Bearer [YOUR TOKEN]",
6 "Content-Type": "application/json"
7 }
8});
9const data = await response.json();

Примеры ответов

Still waiting200application/json
 {
GET

Заказ, ожидающий подтверждения

Новое/order/approval/{id}

Способ запроса

GEThttps://api.stableproxy.com/v3/order/approval/{id}

Параметры запроса

ИдентификаторПравилаПример
id1required89

Примеры кода

1const baseUrl = "https://api.stableproxy.com/v3";
2const response = await fetch(baseUrl + "/order/approval/{id}", {
3 method: "GET",
4 headers: {
5 "Content-Type": "application/json"
6 }
7});
8const data = await response.json();
POST

Подтвердить и оплатить заказ, который ждёт приложение

Новое/order/approve/{id}

Способ запроса

POSThttps://api.stableproxy.com/v3/order/approve/{id}

Параметры запроса

ИдентификаторПравилаПример
tНе обязательноnullablestring107
id1required7

Примеры кода

1const baseUrl = "https://api.stableproxy.com/v3";
2const response = await fetch(baseUrl + "/order/approve/{id}", {
3 method: "POST",
4 headers: {
5 "Content-Type": "application/json"
6 },
7 body: JSON.stringify({
8 "t": 107
9 })
10});
11const data = await response.json();