Zamówienie

Lista wszystkich publicznie dostępnych metod interakcji z API.

POST

Utwórz zamówienie

Nowe/order/create
Zastępuje starsze metody v2

Ta metoda API v3 zastępuje te metody API v2 (nadal działają):

Utwórz zamówienie (wersja robocza)

Wycenia wybrane pozycje na serwerze i przechowuje je jako wersję roboczą przez 30 minut. Nie dochodzi do przepływu środków, a token nie jest wymagany.

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

Uwagi

  • action: new służy do zakupu produktu, topup do doładowania salda (options: {amount, currency}).
  • options wykorzystuje klucze z katalogu: count, period (1w, 2w, 1m, 1y), traffic (GB), countries, geo_service, ip_score, unlimited_ips.
  • Wyślij client.total wraz z obliczoną ceną: client_check.matched wskazuje, czy jest ona równa cenie serwera.
  • Opcja wykraczająca poza dopuszczalny zakres zwraca kod błędu 422 option_out_of_range wraz z dopuszczalnym zakresem.

Metoda zapytania

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

Parametry zapytania

IdentyfikatorRegulaminPrzykład
actionrequiredstringnew
productNie koniecznienullablestringshared
optionsNie koniecznienullablearray[]
clientNie koniecznienullablearray[]
client.totalNie koniecznierequired_with:clientnumeric0
client.currencyNie koniecznienullablestringsize:3"USD"
client.catalog_versionNie koniecznienullablestring0

Przykłady kodu

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();

Przykłady odpowiedzi

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

Potwierdź i opłać zamówienie

Nowe/order/confirm/{id}
Zastępuje starsze metody v2

Ta metoda API v3 zastępuje te metody API v2 (nadal działają):

Potwierdź i zapłać

Opłaca projekt z salda lub przekazuje płatność do przeglądarki użytkownika.

Uwagi

  • Wyślij nagłówek Idempotency-Key (jeden unikalny ciąg znaków na zakup). Powtórne wysłanie zwraca pierwszą odpowiedź; użycie go dla innego zamówienia powoduje błąd 409.

  • 200 paid — zakup z salda; package_id to nowy pakiet.

  • 202 awaiting_payment — saldo jest niewystarczające: przekieruj użytkownika na checkout.url.

  • 202 awaiting_approval — zakup dokonany przez aplikację (OAuth) oczekuje na zatwierdzenie przez użytkownika: wyświetl mu approval.url. Aplikacje, którym użytkownik zezwolił na dokonywanie zakupów, automatycznie pomijają ten etap w ramach dziennego limitu.

  • Następnie należy wykonać operację Pobierz zamówienie lub Poczekaj na zamówienie.

  • Wymagany jest token z cart.purchase (topup.upload w przypadku doładowania).

"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": "Wyślij nagłówek Idempotency-Key.",

"details": {}

}

}

Ta metoda wymaga autoryzacji!
Możesz skorzystać z własnego klucza API, który znajdziesz pod adresem {panel sterowania.

Metoda zapytania

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

Parametry zapytania

IdentyfikatorRegulaminPrzykład
pay_withNie koniecznienullablestringbalance
id1requiredstring990dd34a-0165-4641-ab9d-94bea1007fe0

Przykłady kodu

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();

Przykłady odpowiedzi

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

Pobierz zamówienie

Nowe/order/view/{id}

Pobierz zamówienie

Status zamówienia: draft, awaiting_payment, awaiting_approval, paid, expired lub failed.

Uwagi

  • W trakcie oczekiwania zamówienie wyświetla ponownie link checkout lub approval.

  • payment.due to kwota, której nadal brakuje do uzupełnienia salda.

"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": "ogólnie",

"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": {}

}

Ta metoda wymaga autoryzacji!
Możesz skorzystać z własnego klucza API, który znajdziesz pod adresem {panel sterowania.

Metoda zapytania

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

Parametry zapytania

IdentyfikatorRegulaminPrzykład
id1requiredstring990dd34a-0165-4641-ab9d-94bea1007fe0

Przykłady kodu

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();

Przykłady odpowiedzi

Paid order200application/json
 {
GET

Czekaj na zmianę statusu zamówienia

Nowe/order/wait/{id}

Oczekiwanie na zamówienie

Ta sama odpowiedź co w przypadku Pobierz zamówienie, z dodatkiem retry_after (w sekundach). Należy sprawdzać stan z tym opóźnieniem, dopóki status nie stanie się ostateczny — wówczas retry_after przyjmuje wartość null.

"data": {

"order": {

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

"status": "awaiting_payment",

"package_id": null

},

"retry_after": 2

},

"meta": {}

}

Ta metoda wymaga autoryzacji!
Możesz skorzystać z własnego klucza API, który znajdziesz pod adresem {panel sterowania.

Metoda zapytania

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

Parametry zapytania

IdentyfikatorRegulaminPrzykład
timeoutNie koniecznienullableinteger124
id1requiredstring990dd34a-0165-4641-ab9d-94bea1007fe0

Przykłady kodu

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();

Przykłady odpowiedzi

Still waiting200application/json
 {
GET

Zamówienie czekające na zatwierdzenie

Nowe/order/approval/{id}

Metoda zapytania

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

Parametry zapytania

IdentyfikatorRegulaminPrzykład
id1required89

Przykłady kodu

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

Zatwierdź i opłać zamówienie, na które czeka aplikacja

Nowe/order/approve/{id}

Metoda zapytania

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

Parametry zapytania

IdentyfikatorRegulaminPrzykład
tNie koniecznienullablestring107
id1required7

Przykłady kodu

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();