OneProvider

Uwierzytelnianie i limity API resellera

Tokeny Bearer, zakresy, lista dozwolonych IP, limit zapytań, kody błędów, klucze idempotentności i paginacja API resellera OneProvider, z przykładami.

Tokeny Bearer, uprawnienia, lista dozwolonych IP, limit zapytań, kody błędów, klucze idempotentności i paginacja w API resellera.

Wszystkie modele, możliwości i ceny Indeks dokumentacji dla agentów AI: https://oneprovider.dev/docs/llms.txt

Tokeny

Token wygląda jak rsk_ i 40 kolejnych znaków. Utworzysz go w Panelu (zakładka resellera, „API i ustawienia”); wartość widać tylko raz, przechowujemy wyłącznie hash i ostatnie 4 znaki. Możesz mieć do 10 aktywnych tokenów i w każdej chwili unieważnić dowolny z nich. Przy tworzeniu tokenowi można nadać okres ważności (od 1 do 365 dni): po jego upływie token odpowiada 401 token_expired, a expires_at w GET /me podaje, kiedy to nastąpi (null: bez wygaśnięcia).

http
Authorization: Bearer rsk_...
Tylko po stronie serwera CORS jest wyłączony. Nigdy nie umieszczaj tokena w kodzie przeglądarki ani aplikacji mobilnej: wywołuj API z własnego backendu. Jeśli reseller straci dostęp, wszystkie jego tokeny odpowiadają 403 reseller_disabled.

Uprawnienia

Token ma przypisany zestaw uprawnień. Uprawnienia są niezależne: keys nie obejmuje read. GET /me działa z każdym ważnym tokenem. Bez wymaganego uprawnienia odpowiedź to 403 forbidden_scope.

Uprawnienia tokena
UprawnienieCo odblokowuje
readOdczyt: saldo i transakcje, cennik, modele, klienci, klucze i ich zużycie, zamówienia, plany, statystyki, ustawienia sklepu GET /settings, dziennik działań GET /audit (każde GET z wyjątkiem kodów, webhooków, botów i bramek płatności oraz statusu płatności doładowania).
keysZapis: klienci (także blokowanie), wydawanie, edycja, wstrzymywanie, doładowywanie, rotacja i usuwanie kluczy, POST /orders, ustawienia sklepu PATCH /settings (to od nich zależy, jak wyglądają wydawane klucze).
codesPartie kodów i same kody (odczyt, tworzenie, unieważnianie, aktywacja). Kody są sekretami, dlatego mają osobne uprawnienie.
plansTworzenie, edycja i usuwanie planów (odczyt planów wymaga read).
billingDoładowania salda resellera: POST /balance/topups i status płatności.
webhooksZarządzanie webhookami, wysyłanie testu, odczyt dziennika dostarczeń.
supportZarezerwowane dla przyszłych metod wsparcia.
botOdczyt stanu botów i bramek płatności: GET /bot i GET /payment-providers (w odpowiedziach nie ma tokenów). Boty podłącza się wyłącznie w Panelu.

Uprawnienie każdej metody podano w dokumentacji metod .

Lista dozwolonych IP

Token można ograniczyć do listy adresów IPv4/IPv6 lub zakresów CIDR (do 20). Żądanie z innego adresu dostaje 403 ip_not_allowed. Listę ustawia się przy tworzeniu tokena.

Limit zapytań

20 żądań na sekundę na token i 100 na sekundę na źródłowy adres IP. Po przekroczeniu: 429 rate_limited i nagłówek Retry-After. Odczekaj tyle sekund i spróbuj ponownie.

Błędy

Każdy błąd ma taką samą strukturę. Ten sam identyfikator jest wysyłany w nagłówku X-Request-Id: podaj go wsparciu.

json
{
"error": {
"code": "insufficient_balance",
"message": "Not enough free reseller balance for this key.",
"request_id": "req_..."
}
}

Rozgałęziaj logikę według error.code, a nie według treści komunikatu.

Kody błędów
HTTPcodeZnaczenie
400invalidBrakuje pola lub jego wartość jest poza dozwolonym zakresem.
400bad_requestNie udało się przetworzyć żądania.
400idempotency_key_requiredBrak nagłówka Idempotency-Key w metodzie, która wydaje pieniądze.
400invalid_urlURL webhooka nie przeszedł walidacji (tylko https, bez adresów IP i sieci prywatnych).
400limit_below_spentNowy limit klucza jest niższy niż kwota, którą klucz już wydał.
400currency_requiredPOST /balance/topups: bramka płatności obsługuje kilka walut, przekaż currency (dozwolone są w topup_providers).
400method_unavailablePOST /balance/topups: nie ma takiej bramki w topup_providers (bad_currency, bad_email i email_required odpowiadają tak samo dla waluty i adresu e-mail).
401unauthorizedToken nie został podany, jest nieznany lub unieważniony.
401token_expiredToken wygasł (expires_at w GET /me): utwórz nowy.
403forbidden_scopeToken nie ma wymaganego uprawnienia.
403ip_not_allowedAdres IP żądania nie znajduje się na liście dozwolonych tokena.
403reseller_disabledReseller utracił dostęp; każdy token odpowiada w ten sposób.
403bannedKonto jest zablokowane.
404not_foundObiekt nie istnieje lub należy do innego resellera.
404key_not_foundKlucz nie istnieje.
409insufficient_balanceKwota nie mieści się w pozycji Dostępne (available_usd), zobacz zasadę dotyczącą pieniędzy.
409idempotency_key_reusedTen sam Idempotency-Key został już użyty z inną treścią żądania: użyj nowego klucza.
409fund_firstNajpierw doładuj saldo resellera.
409not_activatedPanel resellera nie jest jeszcze aktywowany.
409name_takenKlucz o tej nazwie już istnieje.
409key_limitOsiągnięto limit kluczy.
409plan_limitOsiągnięto limit planów (20).
409customer_limitOsiągnięto limit klientów (10 000).
409plan_in_usePlanu nie można usunąć, podnieść jego ceny ani zmienić jego waluty, dopóki korzysta z niego świeży nieopłacony rachunek lub opłacony, ale niedostarczony zakup w bocie.
409key_exhaustedRotacja: w kluczu nie ma już czego przenieść, pozostało 0.
409key_expiredRotacja: klucz wygasł, najpierw go przedłuż.
409action_failedAkcja na kluczu nie powiodła się z innego powodu; ponów ją lub sprawdź klucz.
409code_usedKod został już aktywowany.
409code_revokedKod został unieważniony.
409code_busyKod jest w trakcie przetwarzania lub nie można go teraz aktywować.
409external_order_id_conflictexternal_order_id został już użyty z innymi parametrami.
409customer_existsKlient z tym external_id już istnieje.
409customer_blockedKlient jest zablokowany: jego klucze, zamówienia i aktywacje kodów są odrzucane.
409token_limitOsiągnięto limit aktywnych tokenów (10).
409webhook_limitOsiągnięto limit webhooków (5).
429rate_limitedPonad 20 żądań na sekundę na token (lub 100 na sekundę na adres IP); odczekaj Retry-After sekund.
429too_many_invoicesPOST /balance/topups: zbyt wiele nieopłaconych rachunków z rzędu; opłać otwarte lub spróbuj ponownie za minutę.
501sandbox_not_implementedSandbox (rsk_test_...) nie jest jeszcze dostępny.
503provider_unavailableBramka płatności lub dostawca modeli jest chwilowo niedostępny: spróbuj później.

Idempotentność

Metody, które wydają pieniądze, wymagają nagłówka Idempotency-Key (od 1 do 128 znaków drukowalnych); bez niego (lub z nieprawidłowym) odpowiedź to 400 idempotency_key_required. Oznaczono je w dokumentacji metod. Powtórzenie żądania z tym samym kluczem i tą samą treścią (w obrębie resellera) nigdy nie wydaje pieniędzy dwa razy i zwraca ten sam obiekt, łącznie z sekretem klucza utworzonego tym wywołaniem: odpowiedź zgubioną po drodze można odzyskać, powtarzając wywołanie. Ten sam klucz z inną treścią to 409 idempotency_key_reused. Do każdej nowej płatności lub zamówienia używaj nowego klucza; w POST /orders tożsamość określa external_order_id. Nagłówek jest opcjonalny (i uwzględniany, jeśli go wyślesz) w PATCH /keys/{id} (powtórzone extend_days/extend_hours przedłuża tylko raz), POST /plans i POST /webhooks (powtórzenie zwraca ten sam obiekt; sekret webhooka nie jest pokazywany ponownie).

bash
curl -s -X POST https://app.oneprovider.dev/partner/v1/keys \
-H "Authorization: Bearer $OP_PARTNER_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"name":"client-1","limit_usd":"10.00"}'

Przechowuj klucz idempotentności razem z własnym rekordem zamówienia, aby po błędzie sieci ponowić dokładnie to samo żądanie.

Paginacja

Endpointy list przyjmują ?limit=1..100 (domyślnie 50) i &cursor=. Odpowiedź ma postać {"items": [...], "next": "<cursor>"}; na ostatniej stronie next ma wartość null. Kursor jest nieprzezroczysty: odeślij go bez zmian.

bash
curl -s "https://app.oneprovider.dev/partner/v1/keys?limit=100&cursor=<next from the previous page>" \
-H "Authorization: Bearer $OP_PARTNER_TOKEN"

Sandbox

Tokeny testowe rsk_test_... pojawią się wkrótce. Na razie taki token dostaje 501 sandbox_not_implemented.

Ostatnia aktualizacja: 2026-11-08 Widzisz błąd? @Oneproviderhelpbot