RouterShiftRouterShift
Modelle durchsuchenPreiseDokumentation
RouterShiftRouterShiftRouterShift. Enterprise-KI-Infrastruktur.
Modelle durchsuchenStatusDokumentationAGBDatenschutzAVVTransparenz

API-Dokumentation

ÜbersichtPlattformfunktionenSchnellstartSDKs und AgentenAuthentifizierungAnfragen stellenRatenbegrenzungenAbrechnung & PreisePrivater ZugangZwei-Währungs-AbrechnungFehlerbehandlung
API-Referenz

RouterShift API-Übersicht

RouterShift bietet OpenAI-, Anthropic- und Gemini-kompatible Datenebenen für die aktuell für Ihren Schlüssel aktiven Modelle. Routing, Failover, Abrechnung und Audit-Nachweise liegen hinter der Protokollgrenze.

Hauptfunktionen

  • OpenAI-kompatible API — Drop-In-Ersatz für jeden OpenAI-SDK-Client
  • Smart Routing mit konfigurierbaren Strategien (gewichtet, Round-Robin, latenzbasiert, Failover)
  • Integrierter Circuit Breaker und Rate Limiting zum Schutz Ihrer Anwendung
  • Semantisches Caching zur Reduzierung von Latenz und Kosten bei wiederholten Anfragen
  • Umfassende Protokollierung, Überwachung und Ausgabenanalyse
  • Multi-Anbieter-Unterstützung mit automatischem Failover, wenn ein Anbieter nicht verfügbar ist

Basis-URL

Alle API-Anfragen verwenden die folgende Basis-URL. Die API ist vollständig mit den OpenAI-Clientbibliotheken kompatibel — ändern Sie einfach die Basis-URL und verwenden Sie Ihren RouterShift-API-Schlüssel.

https://api.routershift.com/v1

Anthropic-kompatible Basis-URL

Für Anthropic SDK oder Claude Code. Hinweis: kein /v1-Suffix — das SDK hängt /v1/messages automatisch an.

https://api.routershift.com

Mehrprotokoll-Kompatibilität

OpenAI-, Anthropic- und Gemini-Clients lassen sich meist durch Änderung von Basis-URL und Zugangsdaten verbinden. Native Protokollerweiterungen sind nicht automatisch portabel: Die Protokollübersetzung unterstützt nur semantisch gleichwertig darstellbare Felder. Dokumentierte Schnittstellen stehen im aktuellen OpenAPI-Vertrag; Routen- und Modellbeschränkungen gelten weiterhin.

Unterstützte Modellkategorien

GET /v1/models ist die Autorität für die mit Ihrem Schlüssel verfügbaren Modelle. Verfügbarkeit hängt auch von Produkt, Routengesundheit, Berechtigungen, Guthaben, Region und Private-Access-Regeln ab.

Hilfe erhalten

Wenn Sie auf Probleme stoßen oder Fragen haben, prüfen Sie die folgenden Abschnitte für detaillierte Anleitungen. Für Abrechnungsanfragen kontaktieren Sie den Support über die Konsole. Für Echtzeit-Statusupdates besuchen Sie die Statusseite.

Vollständige Endpunktliste

Die Tabelle ist ein lesbarer Index der öffentlichen Datenebene. Der Maschinenvertrag liegt unter /api/openapi.yaml, die interaktive Referenz unter /api/docs; Schlüsselbereiche gelten weiterhin.

GET/v1/version

Version und Kompatibilität der Datenebenen-API

GET/v1/models

Modellauflistung

GET/v1/requests/:id

Originalbeleg: Ausführungs- und Abrechnungsnachweise ohne erneutes Senden lesen

GET/v1/requests/:id/result

Erfasstes Audioergebnis: unterstützte Originalergebnisse ohne neue Erzeugung lesen

POST/v1/chat/completions

Chat-Completions (OpenAI-kompatibel)

POST/v1/contracted/chat/completions

Chat-Completions (OpenAI-kompatibel)

POST/v1/messages

Messages API (Anthropic-kompatibel)

POST/v1/messages/count_tokens

Messages-Token-Schätzung (Text, Denken und Werkzeuge; kein exakter nativer Verbrauch)

POST/v1/models/gemini/:model/generateContent

Gemini-Inhaltsgenerierung

POST/v1/models/gemini/:model/streamGenerateContent

Gemini-Inhaltsgenerierung als Stream

POST/v1/embeddings

Text-Embeddings

POST/v1/rerank

Reranking

POST/v1/chat/completions/estimate

Token- und Kostenschätzung vor der Anfrage

POST/v1/images/generations

Bildgenerierung

POST/v1/contracted/images/generations

Bildgenerierung

GET/v1/images/tasks/:id

Bildaufgabe: bestehende Aufgabe abfragen, ohne die Generierung erneut einzureichen

POST/v1/audio/transcriptions

Audio-Transkription

POST/v1/audio/speech

Text zu Sprache

POST/v1/contracted/audio/speech

Text zu Sprache

POST/v1/tts

Erweiterte Sprachsynthese

POST/v1/transcriptions

Erweiterte Transkription

POST/v1/contracted/transcriptions

Erweiterte Transkription

POST/v1/midjourney/imagine

Midjourney-Bildgenerierung

POST/v1/suno/generate

Suno-Musikgenerierung

POST/v1/video/generations

Video-Generierungsaufgabe

POST/v1/contracted/video/generations

Video-Generierungsaufgabe

GET/v1/video/tasks/:task_id

Status der Videogenerierungsaufgabe

POST/v1/chat/completions/async

Async-Aufgabe — Einreichen

GET/v1/chat/completions/async/:task_id

Async-Aufgabe — Status prüfen

GET/v1/chat/completions/async/:task_id/result

Async-Aufgabe — Ergebnis abrufen

POST/v1/batch

Batch-Verarbeitung

GET/v1/batch/:batch_id

Status des Batch-Auftrags

GET/v1/batch/:batch_id/results

Batch-Ergebnisse herunterladen

POST/v1/batch/:batch_id/cancel

Batch-Auftrag abbrechen

POST/v1/mcp/

MCP-JSON-RPC-Tools-Gateway

GET/v1/mcp/sse

MCP-SSE-Transport

POST/v1/a2a/

A2A-JSON-RPC-Gateway

GET/v1/a2a/sse

A2A-SSE-Ereignisstrom

MethodePfadBeschreibung
GET/v1/versionVersion und Kompatibilität der Datenebenen-API
GET/v1/modelsModellauflistung
GET/v1/requests/:idOriginalbeleg: Ausführungs- und Abrechnungsnachweise ohne erneutes Senden lesen
GET/v1/requests/:id/resultErfasstes Audioergebnis: unterstützte Originalergebnisse ohne neue Erzeugung lesen
POST/v1/chat/completionsChat-Completions (OpenAI-kompatibel)
POST/v1/contracted/chat/completionsChat-Completions (OpenAI-kompatibel)
POST/v1/messagesMessages API (Anthropic-kompatibel)
POST/v1/messages/count_tokensMessages-Token-Schätzung (Text, Denken und Werkzeuge; kein exakter nativer Verbrauch)
POST/v1/models/gemini/:model/generateContentGemini-Inhaltsgenerierung
POST/v1/models/gemini/:model/streamGenerateContentGemini-Inhaltsgenerierung als Stream
POST/v1/embeddingsText-Embeddings
POST/v1/rerankReranking
POST/v1/chat/completions/estimateToken- und Kostenschätzung vor der Anfrage
POST/v1/images/generationsBildgenerierung
POST/v1/contracted/images/generationsBildgenerierung
GET/v1/images/tasks/:idBildaufgabe: bestehende Aufgabe abfragen, ohne die Generierung erneut einzureichen
POST/v1/audio/transcriptionsAudio-Transkription
POST/v1/audio/speechText zu Sprache
POST/v1/contracted/audio/speechText zu Sprache
POST/v1/ttsErweiterte Sprachsynthese
POST/v1/transcriptionsErweiterte Transkription
POST/v1/contracted/transcriptionsErweiterte Transkription
POST/v1/midjourney/imagineMidjourney-Bildgenerierung
POST/v1/suno/generateSuno-Musikgenerierung
POST/v1/video/generationsVideo-Generierungsaufgabe
POST/v1/contracted/video/generationsVideo-Generierungsaufgabe
GET/v1/video/tasks/:task_idStatus der Videogenerierungsaufgabe
POST/v1/chat/completions/asyncAsync-Aufgabe — Einreichen
GET/v1/chat/completions/async/:task_idAsync-Aufgabe — Status prüfen
GET/v1/chat/completions/async/:task_id/resultAsync-Aufgabe — Ergebnis abrufen
POST/v1/batchBatch-Verarbeitung
GET/v1/batch/:batch_idStatus des Batch-Auftrags
GET/v1/batch/:batch_id/resultsBatch-Ergebnisse herunterladen
POST/v1/batch/:batch_id/cancelBatch-Auftrag abbrechen
POST/v1/mcp/MCP-JSON-RPC-Tools-Gateway
GET/v1/mcp/sseMCP-SSE-Transport
POST/v1/a2a/A2A-JSON-RPC-Gateway
GET/v1/a2a/sseA2A-SSE-Ereignisstrom

Protokollzuordnung

RouterShift ist mit mehreren API-Protokollen kompatibel. Die folgende Tabelle zeigt die Basis-URL und SDK-Konfiguration für jedes.

OpenAI-kompatibel

https://api.routershift.com/v1

Models: <available-model-code>

Authorization: Bearer / x-api-key

Anthropic-kompatibel

https://api.routershift.com

Models: <available-model-code>

x-api-key: sk-xxx

Natives Gemini-Protokoll

https://api.routershift.com/v1

Models: <available-model-code>

Authorization: Bearer

Basis-URLBeispiel-ModellparameterAuth-Header
https://api.routershift.com/v1
Standard OpenAI SDK — einfach base_url ändern
<available-model-code>Authorization: Bearer / x-api-key
https://api.routershift.com
Standard Anthropic SDK — einfach base_url ändern
<available-model-code>x-api-key: sk-xxx
https://api.routershift.com/v1
Gemini-natives Format, generateContent direkt aufrufen
<available-model-code>Authorization: Bearer

Einheitliche Authentifizierung

Alle Endpunkte verwenden dieselbe Authentifizierung. Beide Header-Formate funktionieren identisch:

OpenAI-kompatibles Format

Authorization: Bearer sk-xxx

Anthropic-kompatibles Format

x-api-key: sk-xxx

Plattformfunktionen

RouterShift API-Übersicht

RouterShift bietet OpenAI-, Anthropic- und Gemini-kompatible Datenebenen für die aktuell für Ihren Schlüssel aktiven Modelle. Routing, Failover, Abrechnung und Audit-Nachweise liegen hinter der Protokollgrenze.

RouterShift nutzt Prepaid-Wallets und Preis-Snapshots je Anfrage. Erfolgreiche Aufrufe werden zum Kundenverkaufspreis und in der jeweils konfigurierten Abrechnungsdimension belastet.

Hauptfunktionen

GET /v1/models ist die Autorität für die mit Ihrem Schlüssel verfügbaren Modelle. Verfügbarkeit hängt auch von Produkt, Routengesundheit, Berechtigungen, Guthaben, Region und Private-Access-Regeln ab.

  • OpenAI-kompatible API — Drop-In-Ersatz für jeden OpenAI-SDK-Client
  • Smart Routing mit konfigurierbaren Strategien (gewichtet, Round-Robin, latenzbasiert, Failover)
  • Integrierter Circuit Breaker und Rate Limiting zum Schutz Ihrer Anwendung
Öffnen

Schnellstartanleitung

Starten Sie in weniger als drei Minuten mit RouterShift. Folgen Sie den Schritten unten, um Ihren ersten API-Aufruf auszuführen.

  • 1. Konto erstellen
  • 2. Ersten API-Aufruf ausführen
  • 3. SDK installieren
Öffnen

Anfragen stellen

RouterShift bietet Chat, Embeddings, Modellsuche und weitere unterstützte Endpunkte. Verwenden Sie das Anfrage- und Antwortformat des gewählten OpenAI-, Anthropic- oder Gemini-kompatiblen Endpunkts.

  • Streaming-Antworten
  • Async-Anfragen
  • Batch-Verarbeitung
Öffnen

Privater Zugang

Privater Zugang verbindet BYOK und externe KI-Kontenpools mit zentraler Steuerung, flexibler Abrechnung und Ausfallsicherung.

  • BYOK-Anbindung
  • Kontenpools
  • Automatische Ausfallsicherung
Öffnen

Modellwerkzeuge zu einem Agenten hinzufügen

Ergänzen Sie einen Agenten über MCP um Werkzeuge oder verwenden Sie das Python/Node-SDK im Anwendungscode: Beide Zugänge stehen parallel zur Verfügung. Folgen Sie diesen vier lokalen stdio-Schritten und speichern Sie keine Zugangsdaten in geteilter Konfiguration oder Versionsverwaltung.

  • Ein eigenes Verzeichnis anlegen und MCP installieren
  • Lokalen stdio-Client konfigurieren
  • Connector neu starten und zehn Werkzeuge prüfen
Öffnen

Abrechnung & Preise

RouterShift nutzt Prepaid-Wallets und Preis-Snapshots je Anfrage. Erfolgreiche Aufrufe werden zum Kundenverkaufspreis und in der jeweils konfigurierten Abrechnungsdimension belastet.

  • Preismodell
  • Wallet & Guthaben
  • Abrechnung & Rechnungen
Öffnen

Schnellstartanleitung

Starten Sie in weniger als drei Minuten mit RouterShift. Folgen Sie den Schritten unten, um Ihren ersten API-Aufruf auszuführen.

1. Konto erstellen

Erstellen Sie bei aktivierter Selbstregistrierung ein Konto oder folgen Sie der Einladung und dem Kontoablauf Ihres Administrators.

2. Ersten API-Aufruf ausführen

Erstellen Sie einen benannten API-Schlüssel und beschränken Sie Modelle, Budget, Ablauf, IP-Bereiche und weitere Bereiche auf das notwendige Minimum.

3. SDK installieren

Fragen Sie GET /v1/models ab, prüfen Sie Kundenverkaufspreis und native Abrechnungsdimensionen und stellen Sie ausreichendes CNY- oder USD-Guthaben sicher.

4. OpenAI-SDK mit RouterShift verwenden

Ersetzen Sie in den Beispielen YOUR_API_KEY und YOUR_MODEL_CODE durch Werte aus Konsole und Laufzeitkatalog.

curl "https://api.routershift.com/v1/chat/completions" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ROUTERSHIFT_API_KEY" \
  -d '{
  "model": "YOUR_MODEL_CODE",
  "messages": [
    {
      "role": "user",
      "content": "Hello!"
    }
  ],
  "max_tokens": 100
}'

5. Verfügbare Modelle erkunden

Stimmen Sie Status, Latenz, native Nutzung, Cache-Quelle und Kundenausgaben nach Datum, Modell und API-Schlüssel ab und konfigurieren Sie Budgets und Warnungen.

SDK- und Agentenintegrationen

Nutzen Sie einen standardkompatiblen Client oder die RouterShift-Daten-SDKs für Python und Node.js; beide verwenden denselben aktiven API-Vertrag.

Downloads für Python 0.3.7 und Node 0.3.7

Die versionsgebundenen Downloads dieser Seite verwenden Python 0.3.7 und Node 0.3.7 und enthalten die detaillierte Modellerkennung. Erforderlich sind Python ab 3.9 sowie Node ab 20 für Node.js und lokales MCP. Diese Archive bedeuten keine Veröffentlichung auf npm oder PyPI. Das normale Node-SDK benötigt keine optionalen MCP-Abhängigkeiten.

Kundenquellcode und Anbieterzugangsdaten sind nicht erforderlich. Geben Sie Sprache/Laufzeit und SDK-Version, model_code + operation + mode, bereinigte Parameter, Mediengrenzen und URL-Gültigkeit, Wiederaufnahme, Währungsbudget und Parallelitätsziel an. REST ist der Ausführungsvertrag; SDKs sind optionale schlanke Clients, lokales MCP ein stdio-Zugang für Agenten. Das eigene SDK verwendet einen Ursprung ohne /v1. Ein Anbieter-SDK kann Feldzuordnung und Wiederholungen anpassen müssen; nur Schlüssel oder Basis-URL zu ersetzen garantiert keine multimodale Kompatibilität. Bereinigte Anfrage-/Antwortbeispiele und erwartete Ergebnisse abstimmen. Zuerst synthetische Antworten für 200/202, ausstehendes GET, unvollständiges SSE, unbekannte Übermittlung und doppelte Lieferung prüfen; kostenpflichtige Abnahme braucht gesonderte Freigabe und klares Budget.

python -m pip install "https://routershift.com/downloads/sdk/routershift-0.3.7-py3-none-any.whl"
Python-Wheel herunterladenNode.js-Archiv herunterladenSHA-256-Prüfsummen anzeigen

Für Ihren API-Schlüssel sichtbare Modelle auflisten

Führen Sie zuerst diese schreibgeschützte Anfrage aus und übernehmen Sie einen exakten Modellcode in die folgenden Beispiele. Die Liste zeigt nur, was der Schlüssel sehen kann; sie bestätigt nicht, dass jede Operation oder jeder Modus für das Modell aktiviert ist.

Verwenden Sie denselben Ausführungsschlüssel für GET /v1/models?details=1: keine Aufgabe, Geldreservierung oder Anbieteraufrufe; Authentifizierung, Protokolle und Ratenlimits gelten weiter. Prüfen Sie Endpunkte/Modi in details.operations, constraints.status und import_contract.status/reason. Bewahren Sie Dimensionen, Bedingungen, Währung, Genauigkeit, Selektoren, Beobachtungszeit und semantic_sha256. Referenzpreise sind kein ausführbarer Vertrag. Fehlende/unbekannte Grenzen erlauben keine unbegrenzten Eingaben; available garantiert kein Guthaben. Dies ist weder ein vollständiges Eingabe-Schema noch eine universelle Nicht-Token-Vertragsprojektion. models.list() bleibt standardmäßig die normale Liste; Details ausdrücklich über die enthaltenen SDK-Methoden oder REST anfordern. Bei constraints beschreibt available die geprüfte Operationsteilmenge; unsupported erfordert operationsspezifische Hinweise.

details.constraints.operations[].scope unterscheiden: reviewed_subset bezeichnet die geprüfte Operationsteilmenge; finite_admission_opt_in gilt nur für ausdrücklich begrenzte Anfragen, nicht für normalen Chat allgemein. parameters ist kein vollständiges Eingabe-Schema. Falls details.admission vorhanden ist, status, profile, /details/admission/required_headers und erklärte Eingabe-/Ausgabegrenzen prüfen; unbekannte Modelle bleiben unavailable. Erkennung gewährt weder Guthaben noch eine universelle Preisobergrenze.

Node 0.3.7 enthält listDetails() und die Option details=true für models.list; Python 0.3.7 enthält models.list(details=True) und list_details(). Diese detaillierten Erkennungsmethoden sind in den Paketen dieser Version enthalten. models.list() liefert standardmäßig weiterhin die normale Liste; ältere Installationen erhalten neue Methoden nicht automatisch.

curl --fail-with-body --connect-timeout 10 --max-time 30 "https://api.routershift.com/v1/models?details=1" \
  -H "Authorization: Bearer $ROUTERSHIFT_API_KEY"

Textgespräche

Python, Node und MCP können Textmodelle aufrufen. Agenten können ihr Hauptmodell behalten und RouterShift bei Bedarf nutzen. Modellberechtigungen und Kosten bleiben in derselben API.

import os
from routershift import RequestOptions, RouterShift

client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
response = client.chat.completions.create(
    model="YOUR_TEXT_MODEL_CODE",
    messages=[{"role": "user", "content": "Summarize this project in one sentence."}],
    request_options=RequestOptions(max_retries=0),
)
print(response.choices[0].message.content)

Omni-Anfragen über HTTP

Dieses Beispiel sendet WAV-Audio und fordert Text und Audio über einen HTTP-Stream an. Wählen Sie eine abgenommene OpenAI-kompatible Route sowie einen vom Modell unterstützten stream-Modus und eine Stimme. Reine SSE-Modelle benötigen stream:true; auch routershift_chat akzeptiert diese Option. Das SDK bewahrt Inhaltsblöcke, Audio, Modalitäten, Werkzeugaufrufe und Audioantworten. HTTP Omni bietet weder Realtime-WebSockets noch beliebige Protokollkonvertierung zwischen Anbietern.

import base64
import os
from pathlib import Path
from routershift import RequestOptions, RouterShift

client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
audio_data = base64.b64encode(Path("/absolute/path/to/sample.wav").read_bytes()).decode()
response = client.chat.completions.create(
    model="YOUR_OMNI_MODEL_CODE",
    messages=[{"role": "user", "content": [
        {"type": "text", "text": "Describe the sound."},
        {"type": "input_audio", "input_audio": {"data": audio_data, "format": "wav"}},
    ]}],
    stream=True,
    modalities=["text", "audio"],
    audio={"voice": "YOUR_MODEL_VOICE", "format": "wav"},
    request_options=RequestOptions(max_retries=0),
)
for chunk in response:
    if chunk.choices:
        delta = chunk.choices[0].delta or {}
        print(delta.get("content", ""), end="")
        if delta.get("audio"):
            print(delta["audio"].get("transcript", ""), end="")

Sprachausgabe

audio.speech ruft /v1/audio/speech auf. Python gibt Audiobytes zurück; Node liefert data-Bytes und den tatsächlichen contentType. Wählen Sie eine unterstützte Stimme und ein unterstütztes Format. Die Audiodaten werden nicht automatisch lokal gespeichert.

import os
from routershift import RouterShift

client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
speech = client.audio.speech(
    model="YOUR_SPEECH_MODEL_CODE",
    input="Welcome to RouterShift.",
    voice="YOUR_MODEL_VOICE",
    response_format="wav",
)
print(len(speech))

Audiotranskription

audio.transcribe sendet die ausdrücklich ausgewählte Audiodatei per multipart an /v1/audio/transcriptions. Behalten Sie die tatsächliche Dateiendung bei. Das Beispiel fordert JSON an und liest text; Sprachen und Formate hängen von der Route ab.

import os
from pathlib import Path
from routershift import RouterShift

client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
transcript = client.audio.transcribe(
    model="YOUR_TRANSCRIPTION_MODEL_CODE",
    file=Path("/absolute/path/to/sample.wav").read_bytes(),
    filename="sample.wav",
    response_format="json",
)
print(transcript.text)

Eine HTTPS-Audio-URL transkribieren

Verwenden Sie audio.transcribe_url in Python, audio.transcribeURL in Node.js oder senden Sie JSON mit file_url an /v1/transcriptions. Das SDK prüft die HTTPS-URL und lädt die Aufnahme nicht lokal herunter. Die Go- und Java-Reiter verwenden die jeweiligen Standard-HTTP-Clients; RouterShift beansprucht keine eigenen Go- oder Java-SDKs.

import os
from routershift import RouterShift

client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
transcript = client.audio.transcribe_url(
    "YOUR_TRANSCRIPTION_MODEL_CODE",
    "https://media.example/recording.wav",
    language="en",
    audio_format="wav",
    response_format="json",
)
print(transcript.text)

Bilder erzeugen und Bildaufgaben abfragen

Verwenden Sie images.generate mit einem für Bilderzeugung freigeschalteten Modell. Bei Modellen mit asynchronen Bildern ergänzen Sie async_=True in Python oder async: true in Node.js und fragen die zurückgegebene id mit images.retrieve ab. Fertige Antworten enthalten data mit Bild-URLs; ausstehende Antworten enthalten id und status.

import os
from routershift import ImageTaskResponse, RouterShift

client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
image = client.images.generate(
    model="YOUR_IMAGE_MODEL_CODE",
    prompt="A quiet garden in watercolor",
)
print(image)
if isinstance(image, ImageTaskResponse):
    print(client.images.retrieve(image.id))

Ein Video beauftragen und den Status abfragen

videos.create übermittelt eine Videoaufgabe und liefert task_id. Speichern Sie diese vor dem Aufruf von videos.retrieve; bei ausstehenden Aufgaben kann video_url noch fehlen. Beide SDKs bieten videos.poll für zeitlich begrenztes Warten. Der API-Pfad lautet /v1/video/generations, mit video im Singular.

Verifizierte native Seedance- und Wan-3.0-Routen unterstützen generate_audio: Weglassen bewahrt den Anbieterstandard, false fordert keine Tonspur an, true eine Tonspur. Wan bildet dies auf parameters.audio ab und aktiviert Ton derzeit standardmäßig. Mit und ohne Ton gilt derselbe Wan-Videotarif ohne zusätzliche Audiogebühr. Andere Routen unterstützen das Feld möglicherweise nicht; explizite Werte werden nicht stillschweigend entfernt.

import os
from routershift import RouterShift

client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
task = client.videos.create(
    model="YOUR_VIDEO_MODEL_CODE",
    prompt="A slow camera movement through a garden",
)
print(task.task_id)
result = client.videos.retrieve(task.task_id)
print(result.status, result.video_url)

Parameter nach Modell auswählen

Senden Sie nur Parameter, die für das gewählte Modell und den Vorgang abgenommen wurden. Explizites false und seed=0 bleiben erhalten; ohne Angabe gilt der Standard des Anbieters. Diese Hinweise beschreiben die Implementierung, keine bestätigte Live-Verfügbarkeit.

  • Qwen Image 3.0: seed, watermark, prompt_extend und enable_thinking sind modellspezifisch. prompt_extend_mode akzeptiert direct oder agent; agent erfordert Prompterweiterung und ist nicht für Bildbearbeitung vorgesehen. enable_thinking wirkt nur bei aktivierter Prompterweiterung und aktiviert prompt_extend nicht automatisch.
  • Wan 3.0 Video: seed, watermark und prompt_extend sind modellspezifisch. generate_audio steuert die Audioerzeugung; ob der Parameter optional, erforderlich oder nicht unterstützt ist, hängt vom Modell ab. file/link-Medien erfordern prompt_extend=true oder keine Angabe; explizites false wird abgelehnt.
  • Ark Seedance: Die aktuelle Plattformroute akzeptiert weder seed noch prompt_extend. Übertragen Sie Qwen- oder Wan-Parameter nicht auf andere Anbieter.

Code-Unterstützung bedeutet nicht Bereitstellung, und Bereitstellung bedeutet nicht Produktabnahme. Erweiterte Bearbeitung, Videoverlängerung, MOV, Draft, HappyHorse, Wan 2.7, Animate und VACE in Offline-Entwicklung bedeuten keine freigeschalteten Produkte. Prüfen Sie Modell, Vorgang und Parameter vor einer kostenpflichtigen Anfrage.

Referenzbilder zu einem Video mit erstem Bild (REST, SDK, MCP)

Dieses Beispiel erzeugt aus drei HTTPS-Referenzen ohne Porträts ein Bild und übergibt dessen HTTPS-URL als image_url für das erste Videobild. Ersetzen Sie beide Modellplatzhalter durch Codes, die unter /v1/models für Ihren Schlüssel sichtbar und für die jeweilige Operation gesondert freigeschaltet sind; Sichtbarkeit allein genügt nicht. Die gezeigten 720p und 5 Sekunden müssen von der gewählten Videoroute unterstützt werden.

Ark: Verwenden Sie eine freigeschaltete Seedream-Pro-Route zur Bildbearbeitung und eine Seedance-Route mit erstem Bild. Drei Referenzen sind nur bei entsprechendem Modell zulässig; 2048x1152 ist keine allgemeine Größe. Für Porträts realer Personen gelten eigene Regeln; eine Ausnahme für Text-zu-Bild im selben Konto erlaubt keine Fusion von drei Fotos.

Bailian: Eine freigeschaltete Bearbeitungsroute für Qwen Image 3.0 unterstützt ein bis drei Referenzen und liefert eine URL. Erwarten Sie weder b64_json noch eine automatisch freigeschaltete asynchrone Bildverarbeitung. Wan verwendet image_url für das erste Videobild. Auflösung und Dauer müssen zur gewählten Route passen; Fähigkeiten in einer Anbieter-Konsole belegen keine Freigabe der Plattformroute.

Die Register zeigen einen Ablauf, keine automatischen Wiederholungen. Bei REST oder MCP rufen Sie jeden Schritt einzeln auf. Überspringen Sie die Bildaufgaben-Abfrage, wenn bereits eine fertige Bild-URL vorliegt; sonst fragen Sie die ursprüngliche Bildaufgabe einmal ab und fahren nur mit einer nutzbaren HTTPS-URL fort. Bewahren Sie die video task_id auf und fragen Sie dieselbe Aufgabe einmal ab; eine ausstehende Aufgabe kann später erneut abgefragt werden.

Bildaufgaben liefern über REST und SDK id, Videoaufgaben dagegen task_id. Lokale MCP-Ergebnisse stellen structuredContent.task_id bereit, sofern eine Aufgaben-ID vorliegt: Prüfen Sie zuerst isError und next_action und lesen Sie dann structuredContent.outputs[].url oder angehängte MCP-Bildinhalte. Nur eine tatsächliche HTTPS-URL darf als video image_url übergeben werden; angehängte Bildinhalte allein sind keine URL. Setzen Sie REST data[0].url bei MCP nicht voraus.

curl --fail-with-body --connect-timeout 10 --max-time 30 "https://api.routershift.com/v1/models?details=1" \
  -H "Authorization: Bearer $ROUTERSHIFT_API_KEY"

curl --fail-with-body --connect-timeout 10 --max-time 120 -i -X POST "https://api.routershift.com/v1/images/generations" \
  -H "Authorization: Bearer $ROUTERSHIFT_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"YOUR_ACCEPTED_IMAGE_MODEL_CODE","prompt":"Combine three landscapes into one scene","image":["https://media.example/landscape-1.png","https://media.example/landscape-2.png","https://media.example/landscape-3.png"],"n":1,"response_format":"url"}'

curl --fail-with-body --connect-timeout 10 --max-time 30 -i "https://api.routershift.com/v1/images/tasks/IMAGE_TASK_ID" \
  -H "Authorization: Bearer $ROUTERSHIFT_API_KEY"

Eine ausdrücklich zurückgegebene 400-Ablehnung unterscheidet sich von einem Transport-Timeout mit unbekanntem Einreichungsergebnis. Bewahren Sie bei Fehlern sicheren Fehlercode und Nachricht sowie X-Request-ID und gegebenenfalls die Aufgaben-ID auf; erwarten Sie keine rohen Anbietergründe und senden Sie kostenpflichtige POST-Anfragen nicht automatisch erneut. Eine fehlgeschlagene Aufgabenabfrage macht nur den Status unzugänglich, nicht die Erzeugung gescheitert. Ein Warte-Timeout storniert oder erstattet keine Arbeit. Budget, Belastung und Abrechnung richten sich nach Plattformaufzeichnungen, nicht nach diesem Beispiel oder angezeigten Anbieterpreisen.

Modellwerkzeuge zu einem Agenten hinzufügen

Ergänzen Sie einen Agenten über MCP um Werkzeuge oder verwenden Sie das Python/Node-SDK im Anwendungscode: Beide Zugänge stehen parallel zur Verfügung. Folgen Sie diesen vier lokalen stdio-Schritten und speichern Sie keine Zugangsdaten in geteilter Konfiguration oder Versionsverwaltung.

  1. 1. Ein eigenes Verzeichnis anlegen und MCP installieren

    Verwenden Sie Node 20 oder neuer. Diese reine MCP-Installation ergänzt die beiden Peer-Abhängigkeiten des Protokolls; eine normale Node-SDK-Installation benötigt sie nicht.

    mkdir routershift-mcp
    cd routershift-mcp
    npm init -y
    npm install "https://routershift.com/downloads/sdk/routershift-sdk-0.3.7.tgz" @modelcontextprotocol/server@2.0.0 zod@4.6.4
  2. 2. Absoluten Server-Einstieg ermitteln

    Führen Sie den Befehl im neuen Verzeichnis aus. Er gibt einen JSON-escaped absoluten Pfad aus, den Sie in das args-Array der Konfiguration einfügen können.

    node -p "JSON.stringify(require('node:path').resolve('node_modules/@routershift/sdk/dist/mcp/cli.js'))"
  3. 3. Lokalen stdio-Client konfigurieren

    Ersetzen Sie den Beispielpfad, setzen Sie den API-Schlüssel nur in Ihrer lokalen Umgebung und verwenden Sie den vertrauenswürdigen API-Origin ohne /v1, Zugangsdaten, Query oder Fragment. Der Codex-Tab nutzt die dokumentierte stdio- und env_vars-Syntax.

    {
      "mcpServers": {
        "routershift": {
          "command": "node",
          "args": [
            "/absolute/path/to/your/project/node_modules/@routershift/sdk/dist/mcp/cli.js"
          ],
          "env": {
            "ROUTERSHIFT_API_KEY": "sk-REPLACE_LOCALLY",
            "ROUTERSHIFT_BASE_URL": "https://api.routershift.com"
          }
        }
      }
    }
  4. 4. Connector neu starten und zehn Werkzeuge prüfen

    Starten oder laden Sie den MCP-Client neu, bestätigen Sie alle zehn Werkzeuge und rufen Sie zuerst das schreibgeschützte routershift_list_models auf. Verwenden Sie ein kostenpflichtiges Modellwerkzeug nur, wenn Sie den Vorgang absichtlich absenden möchten.

Zehn Werkzeuge stehen bereit: routershift_list_models, routershift_estimate_chat, routershift_chat, routershift_generate_image, routershift_create_video, routershift_get_task, routershift_get_request, routershift_speech, routershift_transcribe, routershift_transcribe_url. Wählen Sie zuerst ein Modell für die gewünschte Operation. Bild- und Videoaufgaben fragen Sie mit routershift_get_task sowie kind (image oder video) und task_id ab. Fragen Sie einen Anfragebeleg mit dem schreibgeschützten routershift_get_request und request_id ab; dabei wird kein kostenpflichtiger Vorgang übermittelt oder aktiviert. In 0.3.7 liest details:true detaillierte Modelle und Verträge. routershift_estimate_chat liest nur eine endliche Zulassungsobergrenze: kein Anbieteraufruf, keine Reservierung und keine automatische Ausführung; funds_verified=false. Ein Angebot ist weder Endabrechnung noch Aufrufgenehmigung.

routershift_chat akzeptiert HTTPS-Verweise auf Bilder und Videos; audio_file liest einen ausdrücklich gewählten absoluten WAV/MP3-Pfad mit höchstens 16 MiB. routershift_transcribe liest eine ausgewählte lokale Audiodatei über file_path; routershift_transcribe_url übergibt eine HTTPS-file_url, ohne sie herunterzuladen. Sprach- und Omni-Audio wird eingebettet zurückgegeben. routershift_generate_image akzeptiert response_format url oder b64_json; für begrenzte, gültige PNG-, JPEG-, WebP- oder GIF-b64_json-Ausgaben liefert es nativen MCP-image-Inhalt, ohne eine Datei zu schreiben, herunterzuladen oder neu zu hosten und ohne Base64 in Text-JSON zu kopieren. Zu große Bilddaten oder unbekannte Formate werden ausdrücklich ausgelassen; senden Sie keine kostenpflichtige Anfrage erneut, um ausgelassene Ausgaben abzurufen. Der Adapter durchsucht keine Verzeichnisse und speichert Ergebnisse nicht automatisch.

Der JSON-Tab zeigt die übliche mcpServers-Struktur; der TOML-Tab zeigt die dokumentierte Codex-Syntax. Konfigurationsorte und Unterprozessrechte unterscheiden sich je nach Client. Reine Remote-MCP-Clients benötigen einen separat unterstützten Transport; diese Beispiele behaupten keine Tests in jeder Agentenoberfläche.

Der lokale MCP-Adapter ermöglicht Aufrufe der RouterShift-APIs für Text, Multimodalität, Audio und Aufgaben. Das bestehende /v1/mcp-Gateway stellt konfigurierte externe Werkzeuge bereit. Seine HTTP/SSE-Konfiguration ersetzt nicht die hier gezeigte lokale Konfiguration der Modellwerkzeuge.

Modellzugriff, Wartezeiten und Abrechnung

UGC-Plattformen: einmal senden, Aufgaben-ID und ursprüngliche X-Request-ID speichern, dann dieselbe Aufgabe abfragen. Eine eigene Auftrags-ID garantiert keine serverseitige Wiederholungssicherheit. REST, SDK und MCP teilen Aufgaben und Abrechnung; ein Wechsel darf keine ungewisse Generierung erneut auslösen.

Bei verfügbarem import_contract und unterstützter Operation nutzen Sie endpoint_prefix/request_header (X-RouterShift-Customer-Contract) auf /v1/contracted/... mit vollständiger Anfrage und semantic_sha256. Derselbe Header auf normalen /v1-Pfaden aktiviert keinen Schutz. Bei fehlender Unterstützung, 404 oder geändertem Digest stoppen; nicht ungeschützt erneut senden. Geschützter Chat erfordert zusätzlich X-RouterShift-Token-Bound, X-RouterShift-Max-Admission-Quote und X-RouterShift-Quote-Currency sowie einen geprüften endlichen Eingabe-/Ausgabe-/Denkvertrag. Nicht aus Digest oder Kontextlänge ableiten. Öffentliche Simulationen und admission_quote mit bound_proven=false oder funds_verified=false sind keine Ausgabenfreigabe oder universelle Kostenobergrenze.

Übermittlung, Ausführung, Auslieferung und Abrechnung getrennt erfassen. Fehlende Aufgaben-IDs erst untersuchen, keinen neuen POST senden. Ein fehlgeschlagener GET macht nur den Status unverfügbar. Nach abgeschlossener Generierung und fehlgeschlagenem Download dieselbe Ausgabe ausliefern. released und reconciliation_required beenden die Abfrage, beweisen aber weder Erfolg noch Erstattung.

Original-ID speichern und Beleg über GET /v1/requests/ORIGINAL_REQUEST_ID lesen. GET /v1/requests/ORIGINAL_REQUEST_ID/result liest nur unterstützte erfasste Audioergebnisse; kein universeller Ergebnisspeicher. Python 0.3.7 (seit 0.3.6) audio.retrieve/poll fragt natives ASR 202 ab; Node 0.3.7 bewirbt keine gleichwertigen Methoden. Diese GETs senden nicht erneut und übernehmen keine Abrechnungswiederherstellung. Synchrone Ergebnisse und echte asynchrone IDs selbst speichern. Unbekannte Übermittlung, fehlgeschlagene Lieferung und ausstehende Abrechnung trennen; ein Timeout erlaubt keinen erneuten kostenpflichtigen POST.

Bei receipt.metering.basis=recorded_settlement_context werden nur gespeicherte Dimensionen bereits abgerechneter Anfragen gezeigt. Dies ist weder nativer Anbieterbeleg noch Anbieterrechnung oder vollständige Kostenaufteilung. Zeichenfolgen quantity/unit/pricing_unit_divisor erhalten; fehlende oder nicht unterstützte Nachweise bleiben unavailable. Unbekannten Verbrauch nicht durch null ersetzen, keine Endkosten ableiten und keine Wiederherstellung aus dieser schreibgeschützten Projektion auslösen.

curl --fail-with-body --connect-timeout 10 --max-time 30 "https://api.routershift.com/v1/requests/ORIGINAL_REQUEST_ID" \
  -H "Authorization: Bearer $ROUTERSHIFT_API_KEY"

curl --fail-with-body --connect-timeout 10 --max-time 30 "https://api.routershift.com/v1/requests/ORIGINAL_REQUEST_ID/result" \
  -H "Authorization: Bearer $ROUTERSHIFT_API_KEY"

Status und Liste asynchroner Chats behalten status und ergänzen execution_status, billing_status, reason_code, next_action und retry_allowed: false. completed bedeutet, dass das Ergebnis verfügbar ist, nicht dass die Abrechnung abgeschlossen ist; unknown bedeutet weder kostenlos noch erstattet. _billing_status im Bild-SDK und billing_status im MCP übernehmen nur den tatsächlichen zulässigen Header X-Billing-Status; fehlende oder ungültige Header bleiben ohne Wert. Abfragen übernehmen keine Abrechnungswiederherstellung und erlauben keine erneute Übermittlung.

Kopieren Sie die vollständige Anfrage-ID aus den Nutzergebühren oder den Administrator-Anfrageprotokollen und suchen Sie exakt nach request_id: nicht leer, gültiges UTF-8, höchstens 256 Bytes, ohne Leerraum oder Steuerzeichen. Bestehende Berechtigungen sowie Zeit- und Modellfilter gelten weiterhin; kein Treffer beweist weder fehlende Annahme noch fehlende Kosten. Bewahren Sie ursprüngliche Übermittlungs-ID, Aufgaben-ID und spätere Abfrage-IDs getrennt auf. Der CSV-Export umfasst weiterhin den gesamten gewählten Zeitraum, nicht nur die nach ID gefilterten Zeilen.

Neue Aufträge über eigene Warteschlangen und Nutzerlimits steuern; zeitlich begrenzt und versetzt abfragen. Ein Zeitlimit beendet lokales Warten, nicht die Ausführung beim Anbieter. Simulierte Paralleltests zertifizieren keine gleichzeitige Generierungskapazität des Anbieters.

Ersetzen Sie YOUR_* durch Ihre Modellcodes, Stimmen oder Aufgaben-IDs. /v1/models zeigt für Ihren Schlüssel sichtbare Codes, bestätigt aber weder Text, Omni, Bild, Video, Audio noch sämtliche Modi. Prüfen Sie Eingaben, Ausgaben und aktivierte Modi des Modells. Universelle Modell- oder Realtime-Unterstützung wird nicht zugesichert.

Normaler SDK-Chat/Messages behält automatische Wiederholungen: UGC-Chat/Omni muss ausdrücklich Python RequestOptions(max_retries=0) oder Node maxRetries=0, redirect=error verwenden. Wiederholungsfreie spezielle Medienmethoden decken nicht alle Methoden ab. Bild-, Video-, Sprach- und Transkriptionsanfragen werden nicht automatisch wiederholt; auch MCP-Chat sendet einmal. Ein Timeout oder abgebrochenes Warten beendet oder erstattet die Anbieterarbeit nicht und macht erneutes Senden nicht sicher. Bewahren Sie Bild-id und Video-task_id auf. released und reconciliation_required sind Endzustände, kein Nachweis erfolgreicher Erzeugung.

SDK- und MCP-Aufrufe verwenden dieselbe API, Preise, Verbrauchserfassung, Wallet und Abrechnung wie direkte Anfragen. Sie führen kein separates Guthaben oder Abrechnungssystem ein. Eine Ergebnis-URL bestätigt keinen abgeschlossenen Zahlungsvorgang; beachten Sie den verfügbaren API-Abrechnungsstatus und Ihre Konsoleneinträge.

as_of bezeichnet den Abfragezeitpunkt einer Schätzung, keine Gültigkeitsdauer einer Preisgarantie. Angenommene Aufgaben werden mit ihrem eingefrorenen Preisvertrag und dem tatsächlichen nativen Verbrauch abgerechnet, unabhängig von späteren Katalog- oder Schlüsselpreisänderungen. Feste Tarife bedeuten keinen festen Endbetrag. Fehlende oder widersprüchliche Verbrauchsdaten erfordern einen Abgleich statt eines geschätzten Entgelts. Rufen Sie die ursprüngliche Aufgabe ab, statt mit neuen Parametern erneut zu generieren.

Offizielle SDKs

Typisierte Clients für Modelle, Chat, Messages, Embeddings, Medien und asynchrone Aufgaben ohne Konsolen-Sitzungs-APIs.

Kompatible Ökosysteme

Kompatible OpenAI-, Anthropic- und Gemini-Clients verwenden ihre unterstützte Protokollteilmenge. Basis-URL-Präfix, Feldzuordnung, Antwortverarbeitung und Wiederholungen prüfen; nur Schlüssel oder Basis-URL zu ändern garantiert keine multimodale Unterstützung außerhalb von Chat.

Agentenprotokolle

MCP und A2A bieten stabile Interoperabilitätsgrenzen, ohne interne Routingdetails offenzulegen.

Unabhängige SDK-Releases

SDKs werden unabhängig von der Plattform veröffentlicht. Python 0.3.7 und Node 0.3.7 enthalten die detaillierten Erkennungsmethoden. Versionsgebundene Downloads anhand ihrer SHA-256-Prüfsummen prüfen; die Archive bedeuten weder Veröffentlichung auf npm oder PyPI noch native Modellabnahme. Der aktive OpenAPI-Vertrag bleibt maßgeblich.

import os
from routershift import RouterShift

client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
models = client.models.list()
print([model.id for model in models])
response = client.chat.completions.create(
    model="YOUR_MODEL_CODE",
    messages=[{"role": "user", "content": "Hello"}],
)

Authentifizierung

Alle API-Anfragen erfordern eine Authentifizierung mit einem Bearer-Token. Sie können API-Schlüssel in Ihrem Konsolen-Dashboard generieren und verwalten.

API-Schlüsselformat

API-Schlüssel beginnen mit sk- gefolgt von einem eindeutigen Bezeichner. Halten Sie Ihre API-Schlüssel sicher und legen Sie sie niemals in clientseitigem Code oder Versionskontrolle offen.

Authorization-Header

Fügen Sie Ihren API-Schlüssel in den Authorization-Header jeder Anfrage ein:

Authorization: Bearer YOUR_API_KEY

Sicherheits-Best-Practices

  • API-Schlüssel niemals in Ihren Quellcode hartcodieren. Verwenden Sie Umgebungsvariablen oder einen Secrets-Manager.
  • Rotieren Sie API-Schlüssel regelmäßig aus dem Konsolen-Dashboard — erstellen Sie neue Schlüssel und widerrufen Sie alte ohne Ausfallzeit.
  • Verwenden Sie separate API-Schlüssel für Entwicklungs- und Produktionsumgebungen.
  • Setzen Sie Nutzungslimits und IP-Einschränkungen für API-Schlüssel für zusätzliche Sicherheit.
  • Überwachen Sie die Schlüsselnutzung im Konsolen-Dashboard auf ungewöhnliche Aktivitäten.
  • API-Schlüssel niemals in die Versionskontrolle committen. .env-Dateien zur .gitignore hinzufügen.

Webhook-HMAC-Signaturen

Benutzer-Webhooks enthalten in X-RS-Signature den hexadezimalen HMAC-SHA256-Digest des Anfragekörpers. X-RS-Event und X-RS-Delivery kennzeichnen Ereignis und Zustellung.

Anfragen stellen

RouterShift bietet Chat, Embeddings, Modellsuche und weitere unterstützte Endpunkte. Verwenden Sie das Anfrage- und Antwortformat des gewählten OpenAI-, Anthropic- oder Gemini-kompatiblen Endpunkts.

Chat-Completions

Senden Sie eine Chat-Completion-Anfrage mit einem Modellnamen, einem Messages-Array und optionalen Parametern wie temperature, max_tokens und top_p. RouterShift leitet Ihre Anfrage basierend auf Ihrer Routingkonfiguration an den entsprechenden Anbieter weiter.

Streaming-Antworten

Aktivieren Sie Streaming durch Setzen von stream: true. RouterShift unterstützt Server-Sent Events (SSE) für Echtzeit-Token-Streaming. Das Stream-Format ist kompatibel mit der OpenAI-Streaming-Spezifikation.

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.routershift.com/v1",
    api_key=os.environ["ROUTERSHIFT_API_KEY"],
)
stream = client.chat.completions.create(
    model="YOUR_MODEL_CODE",
    messages=[{"role": "user", "content": "Tell me a story"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

Async-Anfragen

Für lang laufende Aufgaben oder Batch-Verarbeitung verwenden Sie den Async-Modus. Reichen Sie eine Anfrage ein und fragen Sie Ergebnisse ab — nützlich für Workloads, die typische Timeout-Grenzen überschreiten.

Batch-Verarbeitung

Laden Sie eine JSONL-Datei über POST /v1/batch hoch und fragen Sie Status und Ergebnisse ab. Dauer und Preise hängen von Ausführungsmodus und Modellvertrag ab; ein Batch garantiert weder Rabatt noch feste Fertigstellungsfrist.

Vektorrepräsentationen

Generieren Sie Vektor-Embeddings für Text über den /v1/embeddings-Endpunkt. Embeddings sind nützlich für semantische Suche, Clustering und Retrieval-Augmented Generation (RAG).

Token-Schätzung

Senden Sie die Chat-Anfrage an POST /v1/chat/completions/estimate, um Tokens und Kosten vorab zu schätzen. Schätzungen sind keine endgültigen Gebühren; tatsächliche Nutzung und Preisvertrag bestimmen die Abrechnung.

Ratenbegrenzung und Anfragesteuerung

Die wirksamen Grenzen ergeben sich aus API-Schlüssel, Kundenrichtlinie, Modellroute und Anbieterkapazität. Antwortheader und Konsole zeigen die tatsächlich aktive Konfiguration.

Standard-Rate-Limits

Plattformschlüssel liefern x-ratelimit-limit-{tps,rpm,tpm,tph} und für aktive Limits x-ratelimit-remaining-{tps,rpm,tpm,tph}. Retry-After erscheint nur, wenn Warten Kapazität freigeben kann, auf volle Sekunden aufgerundet; es garantiert keinen erfolgreichen Wiederholungsversuch. Fehlt der Header, prüfen Sie Kontingent pro Anfrage und Richtlinie. Senden Sie einen POST mit unbekanntem Ergebnis nicht automatisch erneut; nutzen Sie begrenztes Backoff mit Zufallsstreuung nur bei sicher wiederholbaren Anfragen.

HTTP-Antwortcodes

429429 Too Many Requests — Sie haben Ihr Rate-Limit überschritten. Prüfen Sie den Retry-After-Header und warten Sie.
402402 Payment Required — Ihr Kontostand ist unzureichend. Fügen Sie Guthaben im Abrechnungsbereich hinzu.
403403 Verboten — Der authentifizierte Schlüssel darf dieses Modell, diese Route oder diesen Vorgang nicht verwenden. Prüfen Sie Schlüsselbereiche und Kundenrichtlinie.
503503 Service Unavailable — Kein Anbieter ist derzeit für das angeforderte Modell verfügbar. Der Circuit Breaker hat möglicherweise vorübergehend alle Anbieter deaktiviert.
401401 Unauthorized — Fehlender oder fehlerhafter Authorization-Header.
400400 Bad Request — Ungültige Anfrageparameter. Prüfen Sie die Fehlermeldung für Details.

Abrechnung & Preise

RouterShift nutzt Prepaid-Wallets und Preis-Snapshots je Anfrage. Erfolgreiche Aufrufe werden zum Kundenverkaufspreis und in der jeweils konfigurierten Abrechnungsdimension belastet.

Preismodell

Die Belastung verwendet den genehmigten Kundenverkaufspreis und fixiert Modell, Währung, Preisversion und Abrechnungsdimensionen je Anfrage. Der öffentliche Katalog zeigt Listenpreise zum Vergleich; Kostenpreise dienen der Lieferantenabrechnung.

Abrechnung & Rechnungen

Stimmen Sie Aufrufe, Tokens, Cache-Dimensionen und Ausgaben nach Datum, Modell und API-Schlüssel ab. Rechnungen und Erstattungen verweisen auf serverseitige Preisnachweise; spätere Preisänderungen schreiben die Historie nicht um.

Wallet & Guthaben

CNY- und USD-Wallets werden getrennt geführt. Verfügbares Barguthaben enthält bereits keine eingefrorenen Beträge; diese nicht erneut abziehen. Persönlicher Kulanzkredit und Plattformabsicherung sind standardmäßig deaktiviert und benötigen gesondert genehmigte Kreditlinien und Deckungskapital. Kreditbelegung und offene Hauptschuld sind weder Barguthaben noch automatische Modellberechtigungen. Die Zulassung erfordert geprüfte Verbrauchsverträge und eine belegte Kostenobergrenze. Live-Fortschritt ist keine Endabrechnung; unbekannte Ergebnisse oder Verbräuche bleiben zur Abstimmung offen. Aufladungen richten sich nach bestätigtem Zahlungseingang.

Pakete & Gutscheine

Pakete, Aktionen, Gutscheine oder Sparpläne wirken nur bei einer anwendbaren Plattformregel. Die Rabattfinanzierung bleibt von nativen Lieferantenverbindlichkeiten getrennt.

Wiederverkäufer-Provisionsengine

Wiederverkäufer verdienen einen Prozentsatz der Plattformmarge bei jeder Anfrage eingeladener Benutzer. Modellspezifische Provisionssatzüberschreibungen ermöglichen granulare Partnerprogramme — z.B. 15% auf GPT-4o, 10% auf Claude. Die Zuordnung erfolgt automatisch über Einladungslinks; die Abrechnung erfolgt in Echtzeit pro Anfrage.

Privater Zugang

Privater Zugang verbindet BYOK und externe KI-Kontenpools mit zentraler Steuerung, flexibler Abrechnung und Ausfallsicherung.

BYOK-Anbindung

Nach Aktivierung des privaten Zugangs können Sie eigene Anbieterschlüssel hinterlegen. Der Anbieter rechnet separat mit Ihnen ab; RouterShift-Servicegebühren richten sich nach Tarif und geltenden Erlassen. BYOK bedeutet nicht, dass jede Nutzung kostenlos ist.

Kontenpools

Externe Kontenpools werden über eine einheitliche Schlüsselbrücke und Richtlinienebene angebunden.

Abonnementmodus

Privater Zugang ist ein optionaler Zusatzdienst. Prüfen Sie vor Aktivierung feste Monats- oder nutzungsabhängige Servicegebühren, Währung, Verlängerung und Erlasse des gewählten Tarifs. Die Plattform-API bleibt nutzungsbasiert abgerechnet.

Automatische Ausfallsicherung

Ist eine private Quelle nicht verfügbar, können zulässige Plattformrouten desselben Modells innerhalb der Schlüssel- und Regionsrechte nacheinander versucht werden. Es gelten Verkaufspreis sowie Guthaben- und Budgetprüfungen; ein privates Abonnement oder Gebührenerlass macht diese Nutzung nicht kostenlos.

Prüfbare Abrechnung in CNY und USD

Eine durchgängige Beweiskette für Preise, Belastungen, Erlösaufteilung, Erstattungen, Zahlungen und Rechnungen. Ein Konto beschafft lokale und globale Modelle: Kunden behalten CNY-Einkauf und -Rechnungen, während Auslandskosten nativ abgerechnet werden.

Verkaufs- und Kostenwährung getrennt

Inländische Produkte werden in CNY verkauft und fakturiert; USD-Kosten des Anbieters übertragen kein Wechselkursrisiko pro Anfrage auf Kunden.

Preis- und FX-Snapshot je Anfrage

Genehmigte Wechselkurs- und Preisversionen sowie die tatsächlichen Wallet-Bewegungen werden gesperrt; spätere Kurse ändern keine Historie.

Verbindlichkeiten in Originalwährung

Anbieterverbindlichkeiten bleiben in der Upstream-Währung; Plattformmarge, Provision und Steuer werden getrennt verbucht.

Erstattung auf demselben Pfad

Erstattungen kehren die ursprünglichen CNY/USD-Bewegungen um; echte Rückumtauschvorgänge erfassen Wechselkursgewinne oder -verluste.

Fehlerbehandlung

Verstehen Sie häufige API-Fehler und wie Sie sie in Ihrer Anwendung elegant behandeln.

Fehlerantwortstruktur

Alle Fehler folgen dem Standardformat mit einem Fehlerobjekt, das eine Nachricht, einen Typ, einen Code und einen Parameter (falls zutreffend) enthält.

{
  "error": {
    "message": "no upstream available",
    "type": "upstream_error",
    "code": "UPSTREAM_UNREACHABLE"
  },
  "request_id": "example-request-id"
}

Wiederholungsstrategie

Beachten Sie Retry-After, wenn vorhanden. Wiederholen Sie nur idempotente oder sicher wiederholbare Vorgänge, verwenden Sie begrenztes exponentielles Backoff mit Jitter und stoppen Sie nach einem anwendungsdefinierten Versuchs- oder Zeitbudget.

Häufige Fehlertypen

  • invalid_request_error — Fehlerhafter Anfragebody oder fehlende erforderliche Parameter.
  • authentication_error — Ungültiger, abgelaufener oder widerrufenener API-Schlüssel.
  • rate_limit_error — Zu viele Anfragen. Verlangsamen und Retry-After-Header beachten.
  • server_error — Vorübergehendes Anbieter- oder Plattformproblem. Mit Backoff wiederholen.
  • upstream_error — Kein Upstream verfügbar oder Anbieteraufruf fehlgeschlagen. Prüfen Sie error.code vor einem erneuten Versuch.
  • content_filter_error — Anfrage durch Guardrails oder Inhaltsfilter blockiert. Überprüfen Sie den markierten Inhalt.

Strukturierte Fehlercodes

OpenAI-kompatible Inferenzfehler enthalten das maschinenlesbare Feld error.code. Nutzen Sie dieses Feld zur programmatischen Verarbeitung statt des Nachrichtentextes.

AUTH_INVALIDUngültige Anmeldedaten
AUTH_EXPIREDSitzung abgelaufen
AUTH_EMAIL_NOT_VERIFIEDE-Mail nicht bestätigt
AUTH_INSUFFICIENTZugriff verweigert
WALLET_LOWUnzureichendes Guthaben
WALLET_EMPTYWallet ist leer
RATE_LIMIT_GLOBALRatenlimit überschritten
RATE_LIMIT_KEYAPI-Schlüssel-Ratenlimit überschritten
RES_MODEL_NOT_FOUNDModell nicht gefunden
UPSTREAM_UNREACHABLEUpstream-Anbieter nicht erreichbar
UPSTREAM_ERRORUpstream-Anbieter-Fehler
UPSTREAM_TIMEOUTUpstream-Anbieter-Timeout
INTERNAL_ERRORInterner Serverfehler
error.codeBeschreibung
AUTH_INVALIDUngültige Anmeldedaten
AUTH_EXPIREDSitzung abgelaufen
AUTH_EMAIL_NOT_VERIFIEDE-Mail nicht bestätigt
AUTH_INSUFFICIENTZugriff verweigert
WALLET_LOWUnzureichendes Guthaben
WALLET_EMPTYWallet ist leer
RATE_LIMIT_GLOBALRatenlimit überschritten
RATE_LIMIT_KEYAPI-Schlüssel-Ratenlimit überschritten
RES_MODEL_NOT_FOUNDModell nicht gefunden
UPSTREAM_UNREACHABLEUpstream-Anbieter nicht erreichbar
UPSTREAM_ERRORUpstream-Anbieter-Fehler
UPSTREAM_TIMEOUTUpstream-Anbieter-Timeout
INTERNAL_ERRORInterner Serverfehler

Timeout-Behandlung

Wählen Sie Verbindungs-, Anfrage- und Stream-Leerlauf-Timeouts passend zu Arbeitslast und Modelllatenz. Synchrone, Streaming-, asynchrone und Batch-Vorgänge sollten nicht denselben festen Timeout verwenden.