OAuth

Список всіх публично доступних методів для взаємодії з API.

POST

Зареєструвати клієнта (RFC 7591)

Нове/oauth/register

Реєстрація клієнта

Динамічна реєстрація клієнтів (RFC 7591) для загальнодоступних клієнтів, таких як додатки MCP та інтерфейси командного рядка (CLI). Секретний ключ не видається — кожен клієнт використовує PKCE.

Примітки

  • redirect_uris має бути https або http на 127.0.0.1 / localhost (будь-який порт) для додатків на комп’ютері користувача.
  • Самореєстровані клієнти відображаються на сторінці згоди як «неперевірені»; співробітники StableProxy можуть перевірити клієнта.

Метод запита

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

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

ІдентифікаторПравилаПриклад
client_namerequiredstring75
redirect_urisrequiredarray[]
logo_uriНе обов'язковоnullableurlnull
token_endpoint_auth_methodНе обов'язковоnullablein:none"none"

Приклади коду

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

Приклади відповідей

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

Опис поточного токена

Нове/oauth/token-info

Опис поточного токена

Хто і що являє собою токен власника: користувач, звідки походять його замовлення (source), його можливості, області дії OAuth та аудиторія, а також чи увімкнено автоматичні покупки.

Примітки

  • 401 — якщо токен відсутній, термін його дії закінчився або його скасовано — використовуйте цей код для перевірки токена перед викликом інших методів.
Для цього метода - потрібна авторизація!
Ви можете використовувати власний API ключ, котрий можна отримати в панелі керування.

Метод запита

GEThttps://api.stableproxy.com/v3/oauth/token-info

Приклади коду

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

Приклади відповідей

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

Почати авторизацію (code + PKCE S256)

Нове/oauth/authorize

Почати авторизацію

Перенаправляє браузер користувача на сторінку згоди StableProxy. Алгоритм авторизації з використанням лише PKCE S256.

Примітки

  • Обов’язкові параметри: response_type=code, client_id, redirect_uri (точно так, як зареєстровано), code_challenge, code_challenge_method=S256, scope, state.
  • Області доступу: account:read, packages:read, proxies:manage, packages:manage, orders:create, payments:create, promos:manage, referrals:manage, offline_access.
  • Після надання згоди користувач повертається на redirect_uri?code=…&state=…&iss=…; невідомому клієнту або при перенаправленні відображається повідомлення про помилку, і перенаправлення не відбувається.

Метод запита

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

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

ІдентифікаторПравилаПриклад
response_typerequiredin:code"code"
client_idrequireduuid20
redirect_urirequiredstring""
scoperequiredstring""
stateНе обов'язковоnullablestring""
code_challengerequiredstring""
code_challenge_methodrequiredin:_s256"_s256"
resourceНе обов'язковоnullableurlnull

Приклади коду

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

Запит на доступ для сторінки згоди

Нове/oauth/request/{id}
Для цього метода - потрібна авторизація!
Ви можете використовувати власний API ключ, котрий можна отримати в панелі керування.

Метод запита

GEThttps://api.stableproxy.com/v3/oauth/request/{id}

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

ІдентифікаторПравилаПриклад
id1required36

Приклади коду

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

Дозволити або відхилити доступ

Нове/oauth/decision
Для цього метода - потрібна авторизація!
Ви можете використовувати власний API ключ, котрий можна отримати в панелі керування.

Метод запита

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

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

ІдентифікаторПравилаПриклад
requestrequiredstring""
approverequiredbooleanfalse
spend_limit_usd_dayНе обов'язковоnullablenumeric0
auto_confirmНе обов'язковоsometimesbooleanfalse

Приклади коду

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

Обміняти код або refresh-токен на токен доступу

Нове/oauth/token

Обмін кодом або токеном оновлення

application/x-www-form-urlencoded, помилки згідно з RFC 6749 (invalid_grant, invalid_client, …).

Примітки

  • grant_type=authorization_code з code, client_id, redirect_uri, code_verifier.
  • grant_type=refresh_token із refresh_token, client_id; токени оновлення оновлюються — зберігайте найновіший. Повторне використання старого токена призведе до скасування всього з’єднання.
  • Токени доступу діють 1 годину. Токен оновлення видається лише з областю дії offline_access.

Метод запита

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

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

ІдентифікаторПравилаПриклад
grant_typerequiredin:authorization_coderefresh_token"authorization_code"
client_idrequireduuid56
codeНе обов'язковоnullablestring""
redirect_uriНе обов'язковоnullablestring""
code_verifierНе обов'язковоnullablestring""
refresh_tokenНе обов'язковоnullablestring""
scopeНе обов'язковоnullablestring""
resourceНе обов'язковоnullableurlnull

Приклади коду

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

Приклади відповідей

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

Відкликати токен доступу або оновлення (RFC 7009)

Нове/oauth/revoke

Скасування токена

RFC 7009: скасовує токен доступу або оновлення. Завжди повертає код статусу 200, навіть у разі невідомого токена.

Метод запита

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

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

ІдентифікаторПравилаПриклад
tokenrequiredstring""
token_type_hintНе обов'язковоnullablein:access_tokenrefresh_token"access_token"
client_idrequireduuid8

Приклади коду

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

Підключені застосунки

Нове/oauth/apps

Підключені додатки

Додатки, на використання яких дав дозвіл користувач, що увійшов у систему, із зазначенням їхніх обсягів доступу, налаштувань щодо покупок (auto_confirm, spend_limit_usd_day) та дати останнього використання. Доступно лише після входу в панель управління.

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

Метод запита

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

Приклади коду

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

Змінити налаштування покупок підключеного застосунку

Нове/oauth/apps/{grant}

Налаштування покупок у підключеному додатку

Увімкнення або вимкнення автоматичних покупок та встановлення щоденного ліміту витрат. Доступно лише після входу в панель управління.

Примітки

  • Надсилайте лише ті параметри, що змінилися: auto_confirm, spend_limit_usd_day (у доларах США, null = без ліміту).
  • Для автоматичних покупок необхідний ліміт: auto_confirm: true без ліміту призводить до помилки 422 auto_confirm_requires_limit.
  • Якщо автоматичні покупки вимкнені, кожна покупка очікує на підтвердження власника в браузері.
Для цього метода - потрібна авторизація!
Ви можете використовувати власний API ключ, котрий можна отримати в панелі керування.

Метод запита

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

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

ІдентифікаторПравилаПриклад
spend_limit_usd_dayНе обов'язковоsometimesnullablenumericdecimal:0, 28872
auto_confirmНе обов'язковоsometimesbooleanfalse
grant1requirednull

Приклади коду

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

Відключити застосунок

Нове/oauth/apps/{grant}
Для цього метода - потрібна авторизація!
Ви можете використовувати власний API ключ, котрий можна отримати в панелі керування.

Метод запита

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

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

ІдентифікаторПравилаПриклад
grant1requirednull

Приклади коду

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