OneProvider

Reseller-API: Authentifizierung und Limits

Bearer-Token, Scopes, IP-Allowlist, Rate-Limit, Fehlercodes, Idempotenzschlüssel und Paginierung der OneProvider-Reseller-API, mit Beispielen.

Bearer-Tokens, Scopes, IP-Allowlist, Rate-Limit, Fehlercodes, Idempotency-Keys und Paginierung der Reseller-API.

Alle Modelle, Funktionen und Preise Dokumentationsindex für KI-Agenten: https://oneprovider.dev/docs/llms.txt

Tokens

Ein Token sieht aus wie rsk_ gefolgt von 40 Zeichen. Sie erstellen ihn im Konto (Reiter „Reseller“, „API & Einstellungen“); der Wert wird nur einmal angezeigt, wir speichern nur einen Hash und die letzten 4 Zeichen. Sie können bis zu 10 aktive Tokens haben und jeden davon jederzeit widerrufen. Beim Erstellen lässt sich für einen Token eine Lebensdauer (1 bis 365 Tage) festlegen: Danach antwortet der Token mit 401 token_expired, und expires_at in GET /me nennt den Zeitpunkt (null: unbefristet).

http
Authorization: Bearer rsk_...
Nur serverseitig CORS ist deaktiviert. Betten Sie einen Token niemals in ein Browser-Bundle oder eine mobile App ein: Rufen Sie die API von Ihrem Backend aus auf. Verliert ein Reseller den Zugang, antworten alle seine Tokens mit 403 reseller_disabled.

Scopes

Ein Token trägt eine Menge von Scopes. Scopes sind voneinander unabhängig: keys schließt read nicht ein. GET /me funktioniert mit jedem gültigen Token. Fehlt der erforderliche Scope, lautet die Antwort 403 forbidden_scope.

Token-Scopes
ScopeWas er freischaltet
readLesen: Guthaben und Transaktionen, Preise, Modelle, Kunden, Schlüssel und ihr Verbrauch, Bestellungen, Tarife, Statistik, die Shop-Einstellungen GET /settings, das Aktionsprotokoll GET /audit (jedes GET außer Codes, Webhooks, Bots und Zahlungsmethoden sowie dem Status der Aufladezahlung).
keysSchreiben: Kunden (einschließlich Sperren), Ausstellen, Bearbeiten, Pausieren, Aufladen, Rotieren und Löschen von Schlüsseln, POST /orders, die Shop-Einstellungen PATCH /settings (sie bestimmen, wie ausgestellte Schlüssel aussehen).
codesCode-Chargen und die Codes selbst (lesen, erstellen, widerrufen, einlösen). Codes sind Secrets, daher ein eigener Scope.
plansTarife erstellen, bearbeiten und löschen (zum Lesen von Tarifen genügt read).
billingAufladungen des Reseller-Guthabens: POST /balance/topups und der Zahlungsstatus.
webhooksWebhooks verwalten, einen Test senden, das Zustellungsprotokoll lesen.
supportReserviert für künftige Support-Endpoints.
botDen Zustand der Bots und Zahlungsmethoden lesen: GET /bot und GET /payment-providers (keine Tokens in den Antworten). Bots werden nur im Konto verbunden.

Der Scope jeder Methode steht in der Referenz .

IP-Allowlist

Ein Token lässt sich auf eine Liste von IPv4-/IPv6-Adressen oder CIDR-Bereichen beschränken (bis zu 20). Eine Anfrage von einer anderen Adresse erhält 403 ip_not_allowed. Die Liste wird beim Erstellen des Tokens festgelegt.

Rate-Limit

20 Anfragen pro Sekunde und Token sowie 100 pro Sekunde und Quell-IP-Adresse. Bei Überschreitung: 429 rate_limited und ein Header Retry-After. Warten Sie so viele Sekunden und versuchen Sie es erneut.

Fehler

Jeder Fehler hat dieselbe Form. Dieselbe id wird im Header X-Request-Id mitgesendet: Nennen Sie sie dem Support.

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

Verzweigen Sie nach error.code, nicht nach dem Meldungstext.

Fehlercodes
HTTPcodeBedeutung
400invalidEin Feld fehlt oder liegt außerhalb des zulässigen Bereichs.
400bad_requestDie Anfrage konnte nicht geparst werden.
400idempotency_key_requiredBei einer Methode, die Geld ausgibt, fehlt der Header Idempotency-Key.
400invalid_urlDie Webhook-URL hat die Prüfung nicht bestanden (nur https, keine IP-Adressen und keine privaten Netze).
400limit_below_spentDas neue Schlüssellimit liegt unter dem, was der Schlüssel bereits verbraucht hat.
400currency_requiredPOST /balance/topups: Der Anbieter unterstützt mehrere Währungen, übergeben Sie currency (die erlaubten stehen in topup_providers).
400method_unavailablePOST /balance/topups: Einen solchen Anbieter gibt es in topup_providers nicht (bad_currency, bad_email und email_required werden für Währung und E-Mail auf dieselbe Weise zurückgegeben).
401unauthorizedDer Token fehlt, ist unbekannt oder wurde widerrufen.
401token_expiredDer Token ist abgelaufen (expires_at in GET /me): Erstellen Sie einen neuen.
403forbidden_scopeDem Token fehlt der erforderliche Scope.
403ip_not_allowedDie IP-Adresse der Anfrage steht nicht in der Allowlist des Tokens.
403reseller_disabledDer Reseller hat den Zugang verloren; jeder Token antwortet so.
403bannedDas Konto ist gesperrt.
404not_foundDas Objekt existiert nicht oder gehört einem anderen Reseller.
404key_not_foundDer Schlüssel existiert nicht.
409insufficient_balanceDer Betrag passt nicht in „Verfügbar“ (available_usd), siehe die Geldregel.
409idempotency_key_reusedDerselbe Idempotency-Key wurde bereits mit einem anderen Anfragekörper verwendet: Nehmen Sie einen neuen Key.
409fund_firstLaden Sie zuerst das Reseller-Guthaben auf.
409not_activatedDas Reseller-Konto ist noch nicht aktiviert.
409name_takenEin Schlüssel mit diesem Namen existiert bereits.
409key_limitDie Höchstzahl an Schlüsseln ist erreicht.
409plan_limitDie Höchstzahl an Tarifen (20) ist erreicht.
409customer_limitDie Höchstzahl an Kunden (10.000) ist erreicht.
409plan_in_useDer Tarif kann nicht gelöscht, verteuert oder auf eine andere Währung umgestellt werden, solange ihn eine frische unbezahlte Rechnung oder ein bezahlter, aber nicht zugestellter Bot-Kauf verwendet.
409key_exhaustedRotieren: Der Schlüssel hat nichts mehr zu übertragen, der Rest ist 0.
409key_expiredRotieren: Der Schlüssel ist abgelaufen, verlängern Sie ihn zuerst.
409action_failedDie Schlüsselaktion ist aus einem anderen Grund fehlgeschlagen; wiederholen Sie sie oder prüfen Sie den Schlüssel.
409code_usedDer Code wurde bereits eingelöst.
409code_revokedDer Code wurde widerrufen.
409code_busyDer Code wird gerade verarbeitet oder lässt sich jetzt nicht einlösen.
409external_order_id_conflictexternal_order_id wurde bereits mit anderen Parametern verwendet.
409customer_existsEin Kunde mit dieser external_id existiert bereits.
409customer_blockedDer Kunde ist gesperrt: Schlüssel, Bestellungen und Einlösungen für ihn werden abgelehnt.
409token_limitDie Höchstzahl aktiver Tokens (10) ist erreicht.
409webhook_limitDie Höchstzahl an Webhooks (5) ist erreicht.
429rate_limitedMehr als 20 Anfragen pro Sekunde und Token (oder 100 pro Sekunde und IP-Adresse); warten Sie Retry-After Sekunden.
429too_many_invoicesPOST /balance/topups: zu viele unbezahlte Rechnungen hintereinander; bezahlen Sie die offenen oder versuchen Sie es in einer Minute erneut.
501sandbox_not_implementedDie Sandbox (rsk_test_...) ist noch nicht umgesetzt.
503provider_unavailableEin Zahlungs- oder Modellanbieter ist vorübergehend nicht erreichbar: Versuchen Sie es später erneut.

Idempotenz

Methoden, die Geld ausgeben, erfordern den Header Idempotency-Key (1 bis 128 druckbare Zeichen); ohne ihn (oder mit einem ungeeigneten) lautet die Antwort 400 idempotency_key_required. Sie sind in der Referenz markiert. Wird eine Anfrage mit demselben Key und demselben Body (pro Reseller) wiederholt, wird nie doppelt Geld ausgegeben, und Sie erhalten dasselbe Objekt zurück, einschließlich des Secrets des Schlüssels, den dieser Aufruf erstellt hat: Eine unterwegs verlorene Antwort lässt sich durch Wiederholen des Aufrufs wiederherstellen. Derselbe Key mit einem anderen Body ergibt 409 idempotency_key_reused. Verwenden Sie für jede neue Zahlung oder Bestellung einen neuen Key; bei POST /orders übernimmt external_order_id diese Rolle. Der Header ist bei PATCH /keys/{id} (ein wiederholtes extend_days/extend_hours verlängert nur einmal), POST /plans und POST /webhooks optional (und wird berücksichtigt, wenn er gesendet wird; eine Wiederholung liefert dasselbe Objekt, das Webhook-Secret wird nicht erneut angezeigt).

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"}'

Speichern Sie den Idempotency-Key zusammen mit Ihrem eigenen Bestelldatensatz, damit Sie nach einem Netzwerkfehler genau dieselbe Anfrage wiederholen.

Paginierung

Listen-Endpoints akzeptieren ?limit=1..100 (Standard 50) und &cursor=. Die Antwort ist {"items": [...], "next": "<cursor>"}; next ist auf der letzten Seite null. Der Cursor ist opak: Geben Sie ihn unverändert zurück.

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

Test-Tokens rsk_test_... kommen bald. Vorerst erhält ein solcher Token 501 sandbox_not_implemented.

Zuletzt aktualisiert: 2026-11-08 Fehler gefunden? @Oneproviderhelpbot