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)
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
Methode
Pfad
Beschreibung
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
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-URL
Beispiel-Modellparameter
Auth-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
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.
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
RouterShift nutzt Prepaid-Wallets und Preis-Snapshots je Anfrage. Erfolgreiche Aufrufe werden zum Kundenverkaufspreis und in der jeweils konfigurierten Abrechnungsdimension belastet.
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.
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.
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.
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.
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. 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.
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.
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.
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.
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.
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.
UPSTREAM_UNREACHABLEUpstream-Anbieter nicht erreichbar
UPSTREAM_ERRORUpstream-Anbieter-Fehler
UPSTREAM_TIMEOUTUpstream-Anbieter-Timeout
INTERNAL_ERRORInterner Serverfehler
error.code
Beschreibung
AUTH_INVALID
Ungültige Anmeldedaten
AUTH_EXPIRED
Sitzung abgelaufen
AUTH_EMAIL_NOT_VERIFIED
E-Mail nicht bestätigt
AUTH_INSUFFICIENT
Zugriff verweigert
WALLET_LOW
Unzureichendes Guthaben
WALLET_EMPTY
Wallet ist leer
RATE_LIMIT_GLOBAL
Ratenlimit überschritten
RATE_LIMIT_KEY
API-Schlüssel-Ratenlimit überschritten
RES_MODEL_NOT_FOUND
Modell nicht gefunden
UPSTREAM_UNREACHABLE
Upstream-Anbieter nicht erreichbar
UPSTREAM_ERROR
Upstream-Anbieter-Fehler
UPSTREAM_TIMEOUT
Upstream-Anbieter-Timeout
INTERNAL_ERROR
Interner 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.