OAuth

Lista wszystkich publicznie dostępnych metod interakcji z API.

POST

Zarejestruj klienta (RFC 7591)

Nowe/oauth/register

Rejestracja klienta

Dynamiczna rejestracja klientów (RFC 7591) dla klientów publicznych, takich jak aplikacje MCP i interfejsy CLI. Nie jest wydawany żaden klucz tajny — każdy klient korzysta z PKCE.

Uwagi

  • redirect_uris musi mieć postać https lub http na adresie 127.0.0.1 / localhost (dowolny port) w przypadku aplikacji działających na komputerze użytkownika.
  • Klienci zarejestrowani samodzielnie są wyświetlani jako „niezweryfikowani” na stronie zgody; pracownicy StableProxy mogą zweryfikować klienta.

Metoda zapytania

POSThttps://api.stableproxy.com/v3/oauth/register

Parametry zapytania

IdentyfikatorRegulaminPrzykład
client_namerequiredstring75
redirect_urisrequiredarray[]
logo_uriNie koniecznienullableurlnull
token_endpoint_auth_methodNie koniecznienullablein:none"none"

Przykłady kodu

1const baseUrl = "https://api.stableproxy.com/v3";
2const response = await fetch(baseUrl + "/oauth/register", {
3 method: "POST",
4 headers: {
5 "Content-Type": "application/json"
6 },
7 body: JSON.stringify({
8 "client_name": 75,
9 "redirect_uris": "[]",
10 "logo_uri": "null",
11 "token_endpoint_auth_method": "\"none\""
12 })
13});
14const data = await response.json();

Przykłady odpowiedzi

Client created201application/json
{
  "client_id": "3f6c2a0e-8b1d-4c6f-9a77-1d2e3f4a5b6c",
  "client_name": "My scraper",
  "redirect_uris": [
    "http://127.0.0.1:53682/callback"
  ],
  "token_endpoint_auth_method": "none",
  "grant_types": [
    "authorization_code",
    "refresh_token"
  ],
  "response_types": [
    "code"
  ]
}
GET

Opis bieżącego tokena

Nowe/oauth/token-info

Opis aktualnego tokenu

Kim i czym jest token posiadacza: użytkownik, skąd pochodzą jego zlecenia (source), jego uprawnienia, zakresy OAuth i grupa odbiorców oraz czy włączono automatyczne zakupy.

Uwagi

  • 401 w przypadku braku tokenu, wygaśnięcia lub unieważnienia — należy używać tego kodu do sprawdzania tokenu przed wywołaniem innych metod.
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/oauth/token-info

Przykłady kodu

1const baseUrl = "https://api.stableproxy.com/v3";
2const response = await fetch(baseUrl + "/oauth/token-info", {
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

OAuth token200application/json
{
  "data": {
    "user_id": 2527,
    "source": "oauth:3f6c2a0e-8b1d-4c6f-9a77-1d2e3f4a5b6c",
    "abilities": [
      "cart.purchase",
      "packages.update"
    ],
    "scopes": [
      "orders:create",
      "offline_access"
    ],
    "audience": "https://mcp.stableproxy.com",
    "expires_at": "2026-10-06T17:00:00Z",
    "auto_confirm": false
  },
  "meta": []
}
No token401application/json
{
  "error": {
    "code": "unauthenticated",
    "message": "Sign in or send a valid token.",
    "details": []
  }
}
GET

Rozpocznij autoryzację (code + PKCE S256)

Nowe/oauth/authorize

Rozpocznij proces autoryzacji

Przekierowuje przeglądarkę użytkownika na stronę zgody serwisu StableProxy. Proces autoryzacji z wykorzystaniem kodu autoryzacyjnego wyłącznie z PKCE S256.

Uwagi

  • Wymagane: response_type=code, client_id, redirect_uri (dokładnie tak, jak zarejestrowano), code_challenge, code_challenge_method=S256, scope, state.
  • Zakresy: account:read, packages:read, proxies:manage, packages:manage, orders:create, payments:create, promos:manage, referrals:manage, offline_access.
  • Po wyrażeniu zgody użytkownik powraca do redirect_uri?code=…&state=…&iss=…; w przypadku nieznanego klienta lub przekierowania wyświetlany jest komunikat o błędzie i przekierowanie nie następuje.

Metoda zapytania

GEThttps://api.stableproxy.com/v3/oauth/authorize

Parametry zapytania

IdentyfikatorRegulaminPrzykład
response_typerequiredin:code"code"
client_idrequireduuid20
redirect_urirequiredstring""
scoperequiredstring""
stateNie koniecznienullablestring""
code_challengerequiredstring""
code_challenge_methodrequiredin:_s256"_s256"
resourceNie koniecznienullableurlnull

Przykłady kodu

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

Oczekujące żądanie dostępu dla strony zgody

Nowe/oauth/request/{id}
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/oauth/request/{id}

Parametry zapytania

IdentyfikatorRegulaminPrzykład
id1required36

Przykłady kodu

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

Zezwól lub odmów dostępu

Nowe/oauth/decision
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/oauth/decision

Parametry zapytania

IdentyfikatorRegulaminPrzykład
requestrequiredstring""
approverequiredbooleanfalse
spend_limit_usd_dayNie koniecznienullablenumeric0
auto_confirmNie konieczniesometimesbooleanfalse

Przykłady kodu

1const baseUrl = "https://api.stableproxy.com/v3";
2const response = await fetch(baseUrl + "/oauth/decision", {
3 method: "POST",
4 headers: {
5 "Authorization": "Bearer [YOUR TOKEN]",
6 "Content-Type": "application/json"
7 },
8 body: JSON.stringify({
9 "request": "\"\"",
10 "approve": "false",
11 "spend_limit_usd_day": "0",
12 "auto_confirm": "false"
13 })
14});
15const data = await response.json();
POST

Wymień kod lub token odświeżania na token dostępu

Nowe/oauth/token

Wymiana kodu lub tokenu odświeżającego

application/x-www-form-urlencoded, błędy zgodne z RFC 6749 (invalid_grant, invalid_client, …).

Uwagi

  • grant_type=authorization_code z code, client_id, redirect_uri, code_verifier.
  • grant_type=refresh_token z refresh_token, client_id; tokeny odświeżające ulegają rotacji — należy zachować najnowszy. Ponowne użycie starego tokenu powoduje unieważnienie całego połączenia.
  • Tokeny dostępu są ważne przez 1 godzinę. Token odświeżający jest wydawany wyłącznie w zakresie offline_access.

Metoda zapytania

POSThttps://api.stableproxy.com/v3/oauth/token

Parametry zapytania

IdentyfikatorRegulaminPrzykład
grant_typerequiredin:authorization_coderefresh_token"authorization_code"
client_idrequireduuid56
codeNie koniecznienullablestring""
redirect_uriNie koniecznienullablestring""
code_verifierNie koniecznienullablestring""
refresh_tokenNie koniecznienullablestring""
scopeNie koniecznienullablestring""
resourceNie koniecznienullableurlnull

Przykłady kodu

1const baseUrl = "https://api.stableproxy.com/v3";
2const response = await fetch(baseUrl + "/oauth/token", {
3 method: "POST",
4 headers: {
5 "Content-Type": "application/json"
6 },
7 body: JSON.stringify({
8 "grant_type": "\"authorization_code\"",
9 "client_id": 56,
10 "code": "\"\"",
11 "redirect_uri": "\"\"",
12 "code_verifier": "\"\"",
13 "refresh_token": "\"\"",
14 "scope": "\"\"",
15 "resource": "null"
16 })
17});
18const data = await response.json();

Przykłady odpowiedzi

Tokens200application/json
{
  "access_token": "412|9f2c…",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "r1_7b0e…",
  "scope": "orders:create offline_access"
}
Bad code or verifier400application/json
{
  "error": "invalid_grant",
  "error_description": "The code or refresh token is invalid, expired, revoked or was issued to another client."
}
POST

Unieważnij token dostępu lub odświeżania (RFC 7009)

Nowe/oauth/revoke

Unieważnienie tokenu

RFC 7009: unieważnia token dostępu lub odświeżający. Zawsze zwraca kod odpowiedzi 200, nawet w przypadku nieznanego tokenu.

Metoda zapytania

POSThttps://api.stableproxy.com/v3/oauth/revoke

Parametry zapytania

IdentyfikatorRegulaminPrzykład
tokenrequiredstring""
token_type_hintNie koniecznienullablein:access_tokenrefresh_token"access_token"
client_idrequireduuid8

Przykłady kodu

1const baseUrl = "https://api.stableproxy.com/v3";
2const response = await fetch(baseUrl + "/oauth/revoke", {
3 method: "POST",
4 headers: {
5 "Content-Type": "application/json"
6 },
7 body: JSON.stringify({
8 "token": "\"\"",
9 "token_type_hint": "\"access_token\"",
10 "client_id": 8
11 })
12});
13const data = await response.json();
GET

Połączone aplikacje

Nowe/oauth/apps

Połączone aplikacje

Aplikacje, na które wyraził zgodę zalogowany użytkownik, wraz z ich zakresami uprawnień, ustawieniami dotyczącymi zakupów (auto_confirm, spend_limit_usd_day) oraz datą ostatniego użycia. Dostępne wyłącznie po zalogowaniu się do pulpitu nawigacyjnego.

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/oauth/apps

Przykłady kodu

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

Zmień ustawienia zakupów połączonej aplikacji

Nowe/oauth/apps/{grant}

Ustawienia zakupów w połączonej aplikacji

Włącza lub wyłącza automatyczne zakupy oraz ustawia dzienny limit wydatków. Dostępne wyłącznie po zalogowaniu się do panelu administracyjnego.

Uwagi

  • Należy wysyłać tylko te zmiany: auto_confirm, spend_limit_usd_day (USD, null = brak limitu).
  • Zakupy automatyczne wymagają limitu: ustawienie auto_confirm: true bez limitu powoduje błąd 422 auto_confirm_requires_limit.
  • Gdy zakupy automatyczne są wyłączone, każdy zakup wymaga potwierdzenia przez właściciela w przeglądarce.
Ta metoda wymaga autoryzacji!
Możesz skorzystać z własnego klucza API, który znajdziesz pod adresem {panel sterowania.

Metoda zapytania

PUThttps://api.stableproxy.com/v3/oauth/apps/{grant}

Parametry zapytania

IdentyfikatorRegulaminPrzykład
spend_limit_usd_dayNie konieczniesometimesnullablenumericdecimal:0, 28872
auto_confirmNie konieczniesometimesbooleanfalse
grant1requirednull

Przykłady kodu

1const baseUrl = "https://api.stableproxy.com/v3";
2const response = await fetch(baseUrl + "/oauth/apps/{grant}", {
3 method: "PUT",
4 headers: {
5 "Authorization": "Bearer [YOUR TOKEN]",
6 "Content-Type": "application/json"
7 },
8 body: JSON.stringify({
9 "spend_limit_usd_day": 8872,
10 "auto_confirm": "false"
11 })
12});
13const data = await response.json();
DELETE

Odłącz aplikację

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

Metoda zapytania

DELETEhttps://api.stableproxy.com/v3/oauth/apps/{grant}

Parametry zapytania

IdentyfikatorRegulaminPrzykład
grant1requirednull

Przykłady kodu

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