BazaarLink-Dokumentation
BazaarLink ist ein einheitliches KI-API-Gateway für Taiwan — das Zugang zu Hunderten von Modellen von OpenAI, Anthropic, Google, Meta und mehr über einen einzigen, OpenAI-kompatiblen API-Endpunkt bietet.
Read https://bazaarlink.ai/skill.md and follow the instructions to integrate BazaarLink into your app.Preise
BazaarLink bepreist die Modellnutzung ohne Aufschlag (identisch mit dem offiziellen Listenpreis jedes Anbieters). Bei der Aufladung (Einzahlung) werden Plattformgebühren erhoben: eine Transaktionsgebühr von 10 % plus 5 % Taiwan VAT auf TWD-Kanälen. Abrechnung in USD mit TWD-Angeboten und elektronischen Einheitsrechnungen. Selbstbedienungs-Aufladungen mit nutzungsabhängiger Bezahlung; Unternehmen können eine monatliche Abrechnung vereinbaren (Netto-30, verhandelbar).
So funktioniert es
- Verbrauch (Lastschrift): Jeder API-Anruf wird nach tatsächlicher Token-Nutzung zum offiziellen USD-Listenpreis des Anbieters abgerechnet und von Ihrem Guthaben abgezogen – kein Aufschlag, keine zusätzliche Gebühr für den Verbrauch.
- Aufladung (Einzahlung): TWD wird zum Echtzeit-Verkaufskurs in USD umgewandelt und Ihrem Guthaben hinzugefügt; Bei der Aufladung wird eine Transaktionsgebühr von 10 % erhoben.
- • Kreditkarte: Es fällt eine zusätzliche Pauschalgebühr in Höhe von US$ 0.60 an; eine Quittung wird ausgestellt.
- • TWD-Kanäle: 5% Taiwan VAT wird hinzugefügt und eine einheitliche elektronische Rechnung für Taiwan wird ausgestellt.
- • Banküberweisung: Für größere oder geschäftliche Aufladungen kontaktieren Sie uns, um eine Überweisung und individuelle Rechnungsstellung zu vereinbaren.
- Invoicing: elektronische einheitliche Rechnungen werden für Ausgaben-Workflows in Taiwan unterstützt; Unternehmen, die eine Beschaffung oder eine monatliche Abrechnung benötigen, können Unternehmenskonditionen vereinbaren (Netto-30, verhandelbar).
Zum Wechselkurs
Die Devisenumrechnung verwendet den Echtzeitkurs. Bei der monatlichen Abrechnung wird der Tarif zum Zeitpunkt der Abrechnung (Abrechnung) verwendet, während Prepaid-Aufladungen zum Tarif zum Zeitpunkt der Aufladung umgerechnet werden. Der Tarif und der Zeitstempel werden zusammen mit den Rechnungsunterlagen gespeichert.
Abrechnungsschutz bei fehlgeschlagenen Anfragen
Wenn eine Upstream-Anfrage ohne abrechenbare Nutzungsdaten fehlschlägt, gibt BazaarLink den gesamten reservierten Betrag automatisch zurück. Auch wenn der Stream bereits begonnen hatte, beträgt die Belastung für diesen Versuch 0 USD.
- Der Upstream ist nicht erreichbar, lehnt die Anfrage ab oder liefert kein nutzbares Ergebnis
- Ein Stream endet vor dem abschließenden Nutzungsdatensatz, auch nach teilweiser Ausgabe
- Die Antwort enthält keine usage-Daten oder nur ein leeres usage-Objekt mit Nullwerten
0 Ausgabe-Tokens bedeutet nicht immer kostenlos
Wenn eine Anfrage normal endet und der Anbieter gültige usage-Daten liefert, rechnet BazaarLink diese Nutzung ab. Beurteilen Sie die Kosten nicht allein anhand der Ausgabe-Tokens: Bei 0 Ausgabe-Tokens können Eingabe-Tokens oder gültige vom Upstream gemeldete Kosten weiterhin berechnet werden. Prüfen Sie usage.cost oder den Aktivitätseintrag für den endgültigen Betrag.
Schnellstart
Drei Wege zur Integration
Starten Sie in unter 5 Minuten. BazaarLink ist vollständig kompatibel mit dem OpenAI SDK — ändern Sie einfach die
Base-URL
https://bazaarlink.ai/api/v1OpenAI SDK verwenden
BazaarLink ist vollständig kompatibel mit dem OpenAI SDK. Ändern Sie einfach die Base-URL und den API-Schlüssel — der gesamte andere Code bleibt gleich.
sk-bl-.✗ gpt-4.1 claude-sonnet-4.6 gemini-2.5-flash
Eigene Upstream-Schlüssel (BYOK)
Binden Sie Ihre eigenen Upstream-Provider-API-Schlüssel (OpenAI- oder Anthropic-kompatible Schnittstelle) an Ihr Konto oder Ihre Organisation — passende Anfragen laufen dann über Ihren Schlüssel direkt zum Upstream, wahlweise mit nahtlosem (seamless) oder striktem (strict) Fallback. Persönliche Schlüssel verwalten Sie im BYOK-Tab der Schlüsselseite, Organisationen in den Org-Einstellungen. Zu den BYOK-Einstellungen →
Inhaltsfilterung
Beidseitiger Inhaltsschutz für Ihren API-Traffic: Anfragen mit Prompt-Injection-Versuchen werden blockiert (400), sensible Daten in Anfragen und Antworten (API-Schlüssel, Kartennummern, Ausweisnummern u. a.) werden automatisch geschwärzt. Regeln und Ausnahmeliste sind anpassbar, Nutzungsstatistiken inklusive. Zu den Inhaltsfilter-Einstellungen →
Von OpenRouter migrieren
Die BazaarLink-API ist OpenRouter-kompatibel — die meisten Integrationen wechseln durch Ändern von zwei Werten: die Base-URL zu https://bazaarlink.ai/api/v1 und den API-Schlüssel zu einem BazaarLink-Schlüssel, der mit sk-bl- beginnt.
- Base-URL: https://openrouter.ai/api/v1 → https://bazaarlink.ai/api/v1
- API-Schlüssel: sk-or-... → sk-bl-... (erstellen Sie einen unter /keys)
- Modell-IDs: gleiches provider/model-Format (z.B. anthropic/claude-sonnet-4.6); vollständiger Katalog unter GET /api/v1/models
- models[]-Fallbacks, Provider-Routing-Präferenzen, Streaming, Tool Calling und Structured Outputs verwenden dieselbe Request-Form
Authentifizierung
Alle API-Anfragen erfordern einen Authorization-Header mit Ihrem API-Schlüssel.
Authorization: Bearer sk-bl-YOUR_API_KEYHolen Sie sich Ihren API-Schlüssel vom Dashboard. Bewahren Sie Ihren Schlüssel sicher auf — exponieren Sie ihn nicht in clientseitigem Code.
Optionale Header
Prinzipien
BazaarLink basiert auf drei Kernprinzipien:
1. Einheitliche Schnittstelle
Eine API, ein SDK, Hunderte von Modellen. Wechseln Sie zwischen OpenAI, Anthropic, Google Gemini, Meta Llama und anderen, ohne Ihren Code zu ändern — ändern Sie einfach die Modell-ID.
2. Preisoptimierung
BazaarLink leitet automatisch zum kostengünstigsten Anbieter für Ihr gewähltes Modell weiter. Sie zahlen nur, was Sie nutzen, abgerechnet in USD mit voller Rechnungsunterstützung.
3. Hochverfügbarkeit
Automatisches Failover bedeutet: Wenn ein Anbieter ausfällt, werden Ihre Anfragen nahtlos umgeleitet. Keine Codeänderungen, keine Ausfallzeit.
Multimodal
BazaarLink unterstützt multimodale Eingaben — senden Sie Bilder, Audio und Dateien zusammen mit Text an Modelle, die sie unterstützen. Inhalte werden an den Upstream-Anbieter weitergeleitet.
Unterstützte Modalitäten
Beispiele:
Bilder senden
Verwenden Sie das Content-Array-Format mit image_url-Teilen. Unterstützte Formate: PNG, JPEG, WebP und GIF (einschließlich animiert). Sie können mehrere Bilder in einer einzigen Nachricht einschließen — jedes als separater image_url-Teil:
Limits
BazaarLink erzwingt zwei unabhängige Limits: ein Rate Limit für Anfragen pro Minute und ein Guthaben-Limit für Kontoausgaben. Bei Überschreitung des Rate Limits erhalten Sie HTTP 429; ist das Guthaben aufgebraucht, erhalten Sie HTTP 402.
Rate-Grenzwerte
Rate Limits gelten pro Benutzer (nicht pro Schlüssel), gemessen in Anfragen pro Minute (RPM). Es gibt kein Tageslimit. Die Stufe wird automatisch durch Ihr Kontoguthaben bestimmt.
Bei Überschreitung eines Rate Limits erhalten Sie eine 429-Antwort mit einem Retry-After-Header. Implementieren Sie exponentielles Backoff beim erneuten Versuch.
Antwort-Header
Jede erfolgreiche Antwort enthält Rate-Limit-Header für die clientseitige Nachverfolgung:
X-RateLimit-Limit: 200 # Max requests per minute for your tier
X-RateLimit-Remaining: 198 # Remaining requests in current window
X-RateLimit-Reset: 1740000060 # Unix timestamp when the window resets
X-Request-Id: chatcmpl-abc123 # Unique request ID for debuggingGuthaben-Limits
Eine 402-Antwort bedeutet, dass Ihr Kontoguthaben oder das Ausgabenlimit eines Schlüssels null erreicht hat — nicht, dass Sie zu schnell Anfragen senden. Diese Antworten enthalten keine Rate-Limit-Header, und wenn das Limit während des Streamings erreicht wird, erhalten Sie ein SSE-Fehlerereignis statt einer HTTP-Statusänderung.
Persönlicher Schutzschalter
Ein festes 1-Minuten- und 1-Stunden-USD-Ausgabenlimit für alle Ihre API-Schlüssel. Neue Anfragen erhalten HTTP 429, sobald ein Fensterschwellenwert erreicht wird; das Fenster wird automatisch an der Zeitgrenze zurückgesetzt.
Bilderzeugung
Bilder über /v1/chat/completions mit modalities:["image"] oder das OpenAI DALL·E-kompatible /v1/images/generations generieren.
curl -N https://bazaarlink.ai/api/v1/chat/completions \
-H "Authorization: Bearer $BAZAARLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"openai/gpt-5.4-image-2","messages":[{"role":"user","content":"a red cat on a sofa"}],"modalities":["image","text"],"stream":true}'Vollständiger Ablauf (Streaming, Bildbearbeitung, SSE-Protokoll, Modellliste) → API-Referenz
Videogenerierung
Asynchroner 3-Schritt-Ablauf (submit → poll → content). Videogenerierung dauert 30 Sekunden bis 5 Minuten.
curl https://bazaarlink.ai/api/v1/videos \
-H "Authorization: Bearer $BAZAARLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"alibaba/wan2.7-t2v","prompt":"a bird flying over mountains","duration":3}'
# → 202 { "id": "vjob_xxx", "status": "pending" }Vollständiger Ablauf (Polling, Download, Aufgabentypen, Hinweise) → API-Referenz
PDF-Eingaben
Senden Sie PDF-Dokumente direkt in Nachrichten an Modelle mit nativer PDF-Unterstützung (z. B. Claude, Gemini). BazaarLink leitet die Datei direkt an das Modell weiter — abgerechnet als normale Input-Tokens, ohne Zusatzkosten oder zusätzlichen Verarbeitungsschritt.
Unterstützte Formate
- PDF-Dokumente (Text, Bilder, Tabellen, gescannt)
- Base64-kodierte Daten-URL (`data:application/pdf;base64,...`)
- Mehrseitige Dokumente
- Nur passwortfreie PDFs
Video-Eingaben
Senden Sie Videodateien an Modelle mit Videoeingabe-Unterstützung zur Analyse, Beschriftung oder Beantwortung von Fragen zu Szenen und Ereignissen. Funktioniert mit einer direkten URL oder einem base64-Daten-URI — eine URL ist effizienter für öffentlich zugängliche Videos, base64 für lokale Dateien oder private Videos.
Unterstützte Formate
MP4 (H.264)MPEGMOVWebMManagement-API-Schlüssel
Management-Schlüssel sind für programmatische Schlüsselverwaltung konzipiert. Sie können Standard-API-Schlüssel erstellen, auflisten, aktualisieren, deaktivieren und löschen — aber keine KI-Modellaufrufe durchführen.
Management-Schlüssel erstellen
Gehen Sie zur Management API Keys-Seite und klicken Sie auf "Create" — das ist eine eigene Seite, kein Typ-Auswahlfeld auf der Standard-API-Keys-Seite.
Schlüssel auflisten
Unterschlüssel erstellen
Schlüssel aktualisieren
Schlüssel widerrufen
DELETE https://bazaarlink.ai/api/v1/keys/:id
Authorization: Bearer sk-bl-YOUR_MGMT_KEY
# Returns 204 No Content on successGuthaben abfragen
Nutzung abfragen
GET https://bazaarlink.ai/api/v1/usage?period=month
Authorization: Bearer sk-bl-YOUR_MGMT_KEY
# period: day | week | month | yearApp-Zuordnung
Identifizieren Sie Ihre Anwendung in Request-Headern, um Nutzungsverfolgung, Dashboard-Sichtbarkeit und feinkörnige Analysen zu ermöglichen.
Verfügbare Header
| Header | Description |
|---|---|
| HTTP-Referer | Ihre Website-URL, für Nutzungsverfolgung und Analysen (optional) |
| X-Title | Ihr App-Name, angezeigt in Dashboards (optional) |
Fehlercodes
Fehlerantwortformat
Modellinferenz-Endpunkte geben eine OpenAI-kompatible Fehlerhülle zurück. Das Feld type kann variieren oder fehlen; verwenden Sie für die Programmlogik den HTTP-Status und error.code, statt die Meldung auszuwerten.
{
"error": {
"message": "Insufficient credits. Please top up to continue.",
"type": "invalid_request_error",
"code": "insufficient_credits"
}
}HTTP Status und Fehlercode
Before streaming, the HTTP status identifies the broad failure class. error.code is either that number or a stable string for a specific remedy. Prefer the string code when present, otherwise use the HTTP status.
Maschinenlesbare Abrechnungscodes
A 402 can represent different controls. Use these stable codes to choose the correct action.
Stable error.code catalog
These string codes are emitted by public inference and media paths. Branch on the string code when present; the HTTP status remains the broad failure class.
Ratengrenzen, Budgets und Notbremsen
These controls can reject an otherwise valid request and require different recovery actions.
Compatibility note: rate-limit and emergency-brake paths currently emit numeric error.code values. Use HTTP status, Retry-After, and the documented response message.
Video- und Medienressourcenstatus
Video validation commonly returns numeric code 400. Missing jobs return 404, retired models 410, unfinished video content 409, and invalid video byte ranges 416.
Retry-Richtlinie
Retry only failures that may recover without changing the request. Honor Retry-After or use exponential backoff with jitter. Do not stack SDK and manual retries.
Fehlerbehandlung
Streaming-Fehlerformate
Fehler, die vor dem Streamen von Tokens auftreten, geben eine Standard-HTTP-Fehlerantwort mit einem JSON-Body zurück.
After a stream starts, the HTTP response is already 200. Parse each SSE data frame and treat a top-level error or choices[0].finish_reason === "error" as a failed, incomplete response.
Wenn der Stream mitten in der Übertragung fehlschlägt, sendet BazaarLink ein letztes SSE-Event mit einem error-Objekt auf oberster Ebene, gefolgt von data: [DONE]. Chunks, die von manchen Upstreams unverändert weitergeleitet werden, können den Fehler stattdessen auf der Choice tragen (choices[0].finish_reason === "error") — behandeln Sie beide Fälle.
Tool-Aufruf
Tool Calling (auch bekannt als Function Calling) ermöglicht es Modellen, von Ihnen definierte externe Funktionen aufzurufen. Das Modell entscheidet, wann ein Tool aufgerufen wird, und generiert strukturierte Argumente — Ihr Code führt die Funktion aus und gibt Ergebnisse zurück, um die Konversation fortzusetzen.
Unterstützte Modelle
Die meisten Frontier-Modelle unterstützen Tool Calling. Hier sind einige beliebte Optionen:
Tools definieren
Jedes Tool ist ein JSON-Objekt, das eine Funktion beschreibt, die das Modell aufrufen kann. Das parameters-Feld verwendet JSON Schema.
tool_choice-Optionen
Vollständiger Ablauf
Tool Calling ist ein mehrstufiger Prozess: (1) Anfrage mit Tools senden → (2) Modell gibt tool_calls zurück → (3) Funktionen ausführen → (4) Ergebnisse zurücksenden → (5) Modell generiert finale Antwort.
Parallele Tool-Aufrufe
Einige Modelle können mehrere Tools in einer einzigen Antwort aufrufen. Behandeln Sie jeden Tool-Aufruf und geben Sie alle Ergebnisse zurück:
Tool-Aufrufe beim Streaming
Beim Streaming treffen Tool-Aufrufe als partielle, nach Position indizierte Deltas ein — sammeln Sie den Argument-String jedes Deltas nach Index, bis finish_reason zu "tool_calls" wird, was den Abschluss des Aufrufs anzeigt.
Einfache Agenten-Schleife
Ein generisches Muster, das das Modell weiter aufruft, solange es Tools anfordert, und stoppt, sobald es eine endgültige Antwort liefert — verwenden Sie max_iterations, um Endlosschleifen zu vermeiden.
Best Practices für Funktionsdefinitionen
- Verwenden Sie spezifische, aussagekräftige Namen — get_weather_forecast statt nur weather.
- Beschreiben Sie klar, was die Funktion tut und wann sie verwendet werden soll — das Modell verlässt sich allein auf diesen Text, um zu entscheiden, ob es sie aufruft.
- Schränken Sie Werte wo möglich mit enum ein und fügen Sie in der Beschreibung ein Beispiel hinzu, um fehlerhafte Argumente zu reduzieren.
- Markieren Sie nur wirklich erforderliche Felder als required — optionale Felder sollten tatsächlich weggelassen werden können.
Strukturierte Ausgabe
Erzwingen Sie, dass das Modell gültiges JSON gemäß einem Schema zurückgibt. Dies ist essenziell für zuverlässige Anwendungen, die Modellausgaben programmatisch verarbeiten.
Methode 1: response_format (JSON Schema)
um strikte JSON-Schema-Konformität zu erzwingen:
Tipps
- Verwenden Sie klare, beschreibende Eigenschaftsnamen — das Modell nutzt sie als Kontext.
- Fügen Sie Schema-Eigenschaften Beschreibungen hinzu, um das Modell zu leiten.
- Setzen Sie strict: true für garantierte Schema-Konformität (kann die Latenz leicht erhöhen).
- Halten Sie Schemas einfach — tief verschachtelte Schemas können die Ausgabequalität reduzieren.
- Testen Sie mit verschiedenen Modellen — einige verarbeiten komplexe Schemas besser als andere.
Assistant Prefill
Fügen Sie als letzten Eintrag eine unvollständige assistant-Nachricht hinzu, um auf kompatiblen Modellrouten eine Fortsetzung anzufordern.
Nachrichtentransformationen
Nachrichten automatisch transformieren, damit sie in die Kontextlimits des Modells passen. Wenn Ihre Nachrichten das Kontextfenster eines Modells überschreiten, verkürzen Transformationen die Konversation intelligent, indem Nachrichten aus der Mitte entfernt werden.
Nutzung
Transformationstypen
Standardverhalten
Modelle mit ≤8k Kontext haben middle-out automatisch aktiviert. Für größere Kontextmodelle aktivieren Sie es explizit. Anthropic Claude-Modelle erzwingen außerdem automatisch das 1.000-Nachrichten-Limit unabhängig von der transforms-Einstellung.
Keine Datenspeicherung
BazaarLink speichert standardmäßig keine Nachrichteninhalte. Diese Seite beschreibt, wie Ihre Daten verarbeitet werden. Geeignet für Anwendungen, die sensible Daten verarbeiten.
Aktuelle Datenverarbeitung
- Nachrichteninhalte: werden standardmäßig nicht gespeichert, nach der Verarbeitung aus dem Speicher entfernt
- Abrechnungsmetadaten: Token-Zählungen, Zeitstempel, Modell-IDs
- Nutzungsprotokolle: nur Anfragstatistiken, keine Nachrichteninhalte
- Upstream-Weiterleitung: Nachrichten werden an Upstream-Anbieter weitergeleitet — unterliegen deren Datenschutzrichtlinien
Prompt-Caching
Prompt-Caching verwendet zuvor berechnete Prompt-Tokens wieder, was Kosten und Latenz erheblich reduziert — besonders für Anwendungen mit großen, wiederkehrenden System-Prompts.
Funktionsweise
Ob Konfiguration nötig ist, hängt vom Anbieter ab. Modelle der OpenAI-Familie cachen lange, wiederholte Prompt-Präfixe automatisch — ohne Änderung der Anfrage. Claude-Modelle (Anthropic) cachen nur, wenn die Anfrage einen expliziten cache_control-Breakpoint enthält; BazaarLink fügt diesen nicht selbst hinzu, ohne Markierung wird eine Claude-Anfrage nie gecacht. BazaarLink leitet vorhandene Cache-Markierungen unverändert weiter und meldet die resultierenden Cache-Read/Write-Token in der Nutzungsantwort.
Reasoning-Tokens
Reasoning-Modelle (z.B. DeepSeek R1, o1-Serie) denken intern nach, bevor sie ihre endgültige Antwort produzieren. Diese internen Tokens werden Reasoning-Tokens genannt und separat abgerechnet.
Reasoning-Tokens aus Antworten lesen
Denkmodus-Steuerung
Einige Modelle unterstützen das Umschalten ihres "Denkmodus". Der Denkmodus generiert interne Reasoning-Tokens vor der endgültigen Antwort und verbessert die Qualität auf Kosten von mehr Tokens.
| Modellfamilie | Parameter | Standard |
|---|---|---|
| qwen3-* | enable_thinking: boolean | false (Plattformstandard) |
| openai/o1, o3, o4-mini | reasoning_effort: "low" | "medium" | "high" | medium |
| deepseek/deepseek-r1 | — | Immer aktiviert (kann nicht deaktiviert werden) |
Einheitliches reasoning-Objekt (neues Format)
BazaarLink unterstützt auch das einheitliche reasoning-Objekt, das mit einer einzigen konsistenten API über alle Modellfamilien hinweg funktioniert:
| Feld | Werte | Gilt für |
|---|---|---|
| reasoning.effort | "xhigh" | "high" | "medium" | "low" | "none" | OpenAI o-series, Grok |
| reasoning.max_tokens | integer | Anthropic Claude, Gemini |
| reasoning.exclude | boolean | Denkprozess in der Antwort ausblenden (Modell denkt trotzdem nach) |
Latenz & Performance
Die Optimierung der KI-API-Antwortlatenz ist entscheidend für die Benutzererfahrung. Nachfolgend die Schlüsselfaktoren, die die Latenz in der BazaarLink-Architektur beeinflussen, und Best Practices zur Optimierung.
Faktoren, die die Latenz beeinflussen
- Modellgröße: größere Modelle (70B+) sind generell langsamer bei der Generierung
- Anbieterlast: variiert über Anbieter und Tageszeit hinweg
- Token-Anzahl: höhere max_tokens bedeuten längere Completion-Zeit
- Streaming vs. Non-Streaming: stream: true liefert das erste Token schneller
- Kontextlänge: sehr lange Kontexte erhöhen die Vorverarbeitungszeit
Optimierungstipps
- Bevorzugen Sie Streaming (stream: true) zur Verbesserung der gefühlten Latenz
- Verwenden Sie die :nitro-Variante für Hochdurchsatz-Anbieter
- Wählen Sie kleinere Modelle (flash/mini/haiku) für latenzsensitive Szenarien
- Verwenden Sie provider.sort: "latency" für automatische Auswahl des latenzärmsten Anbieters
- Aktivieren Sie Prompt-Caching zur Latenzreduktion bei wiederholten Anfragen
Verfügbarkeitsoptimierung
BazaarLink maximiert die API-Verfügbarkeit durch mehrere Ebenen: automatisches Failover, Circuit Breaker und Anbieter-Gesundheitsüberwachung.
Verfügbarkeitsmechanismen
- Circuit Breaker: erkennt und isoliert automatisch fehlgeschlagene Anbieter
- Automatisches Failover: wechselt nahtlos zu einem Backup-Anbieter — keine Codeänderungen erforderlich
- Anbieter-Gesundheitsüberwachung: verfolgt kontinuierlich Fehlerraten und Latenz pro Anbieter
- Retry-Logik: transiente Fehler (5xx) werden automatisch wiederholt
Leistungsschalter
Guardrails
Fügen Sie Ihren API-Anfragen Inhaltssicherheitsmechanismen hinzu, um schädliche Inhalte zu filtern und Compliance-Richtlinien durchzusetzen. BazaarLink bietet anpassbare Content-Filter-Guardrails derzeit nur auf Organisationsebene an; persönliche (Nicht-Organisations-) API-Schlüssel haben keine entsprechende Einstellung — die Inhaltssicherheit verlässt sich vollständig auf die eigenen integrierten Sicherheitssysteme der jeweiligen Upstream-Modellanbieter.
Geplante Funktionen (weder für persönliche noch für Organisations-Schlüssel verfügbar)
Aktuelles Verhalten
Persönliche API-Schlüssel: Alle Upstream-Anbieter haben eigene Inhaltssicherheitssysteme — Modellantworten, die Inhaltsfilter auslösen, werden mit finish_reason: "content_filter" zurückgegeben, und BazaarLink wendet keine zusätzliche Filterung an. Organisations-API-Schlüssel: org_admin kann unter "Content Filter Guardrails" benutzerdefinierte Regeln (Blockieren/Schwärzen/Protokollieren) konfigurieren, die angewendet werden, bevor der Text das Modell erreicht.
Cursor IDE Integration
Verwende BazaarLink als Cursors OpenAI Override URL. Drop-in-Setup mit automatischer Responses-API-Konvertierung, Tool-Format-Normalisierung und der bz--Präfix-Konvention für Claude-Modelle.
Schnelleinrichtung
Öffne in Cursor Einstellungen → Modelle und dann:
- Setze Override OpenAI Base URL auf https://bazaarlink.ai/v1
- Setze Override OpenAI API Key auf deinen sk-bl-... BazaarLink-Key
- Füge den gewünschten Modellnamen hinzu — siehe unten für Claude (das bz--Präfix).
Das bz--Präfix (für Claude-Modelle)
Cursors clientseitige Validierung leitet jeden Modellnamen, der mit claude- beginnt, durch Cursors eigene Anthropic-Integration und umgeht deine Override URL. Um Cursor dazu zu bringen, die Anfrage an BazaarLink zu senden, präfixiere den Modellnamen mit bz-. Der Server entfernt das Präfix und löst den Rest über die Alias-Map auf.
Punkt- vs. Bindestrich-Varianten werden normalisiert: bz-claude-sonnet-4.6 und bz-claude-sonnet-4-6 lösen beide zum selben Modell auf.
CURSOR_MODEL_MAP-Umgebungsvariable (Betreiber-Override)
Für selbst gehostete BazaarLink-Deployments: Mit dieser Env-Var lassen sich beliebige Cursor-seitige Modellnamen auf kanonische Katalog-IDs ummappen:
CURSOR_MODEL_MAP=gpt-claude-sonnet:anthropic/claude-sonnet-4.6,gpt-opus:anthropic/claude-opus-4.7Jetzt wird in Cursor eingegebenes gpt-claude-sonnet serverseitig auf anthropic/claude-sonnet-4.6 gemappt. Nützlich, wenn Cursor denken soll, ein Modell sei GPT-Familie (damit es durch die Override URL geroutet wird), während du tatsächlich Claude bereitstellst.
Was automatisch passiert
Wenn eine Anfrage an /api/v1/chat/completions geht, wendet BazaarLink folgende Kompatibilitätstransformationen transparent an — clientseitig ist nichts zu tun:
- Erkennt Responses-API-Bodies automatisch — wenn der Body input statt messages hat, wird er ins Chat-Completions-Format konvertiert (Cursor sendet das Responses-API-Format für GPT-Familien-Modelle).
- Wickelt flache Tool-Definitionen ein — Cursor Agent sendet { name, description, parameters } ohne function-Wrapper. Wir wrappen sie, damit Anthropic nicht mit Tool '' not found in provided tools ablehnt.
- Erzwingt korrektes tool_choice — Cursor sendet { type: "auto" } (Objektform, kein function). Die OpenAI-Spezifikation verlangt die String-Form für auto/none/required, daher konvertieren wir.
- Entfernt OpenAI-spezifische Felder beim Routing zu Nicht-OpenAI-Providern — parallel_tool_calls, logprobs, top_logprobs, logit_bias, service_tier, user werden vor dem Weiterleiten entfernt (sonst gibt Anthropic 400 zurück).
- Mappt max_output_tokens → max_tokens und entfernt Responses-API-spezifische Felder (previous_response_id, truncation, background, store). Das reasoning-Feld bleibt für Chat-Completions-native Bodies erhalten.
Cursor-Agent-Modus
Tool-Calling läuft über den Standard-Chat-Completions-Tool-Call-Flow. Cursor sendet tools (Shell, Read, Write, Grep etc.) mit tool_choice: "auto"; BazaarLink leitet an den gewählten Provider weiter, der entscheidet, ob ein Tool aufgerufen wird. Tool-Aufrufe kommen als Standard-OpenAI-tool_calls-Deltas zurück; Cursor führt lokal aus und setzt das Gespräch fort. Funktioniert gleich, ob du gpt-4o (nativ OpenAI) oder bz-claude-sonnet-4.6 wählst.
Modell-Routing
BazaarLink verwendet das Format provider/model-name, um Anfragen an den richtigen Upstream-Anbieter weiterzuleiten. Dies gibt Ihnen Zugang zu allen gängigen Modellen über einen einzigen API-Endpunkt.
Modell-ID-Format
{provider}/{model-name}
# Examples
openai/gpt-5.4-mini
anthropic/claude-sonnet-4.6
google/gemini-3-flash-preview
deepseek/deepseek-v3.2Routing-Priorität
Wenn Sie eine Anfrage senden, löst BazaarLink den Upstream-Anbieter in dieser Reihenfolge auf:
- Exakte Übereinstimmung — sucht nach einer Modellroute, die der vollständigen Modell-ID entspricht
- Anbieter-Wildcard — fällt auf provider/*-Routen zurück (z.B. openai/*)
- Globale Wildcard — fällt auf *-Wildcard-Routen zurück
- Standard-Anbieterschlüssel — nur für bekannte Katalogmodelle; verwendet aktivierte, als Standard markierte Schlüssel
Alle verfügbaren Modelle durchsuchen auf der Modellseite.
Auto Router
Auto Router v3 bewertet die Anfrage in eine von 14 Aufgabenstufen und verwendet dann die aktuell konfigurierte Primary- und Fallback-Kette dieser Stufe. Bezahlte und kostenlose Tabellen werden im Admin getrennt verwaltet.
- auto — verwendet die bezahlte Routing-Tabelle; das erfolgreiche tatsächliche Modell wird zum veröffentlichten Preis berechnet.
- auto:free — verwendet die kostenlose Routing-Tabelle; innerhalb des Kontingents kostet der Aufruf 0 USD. Danach können Konten mit Guthaben zu bezahltem auto wechseln, sofern der bezahlte Fallback nicht deaktiviert ist.
Verwendung
Setzen Sie das Modell auf "auto" (kostenpflichtig) oder "auto:free" (kostenlos), um automatisches Routing zu aktivieren:
curl https://bazaarlink.ai/api/v1/chat/completions \
-H "Authorization: Bearer $BAZAARLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"auto","messages":[{"role":"user","content":"Review this TypeScript function"}]}'Wie v3 eine Stufe auswählt
Allgemeine Stufen: simple, standard, complex, reasoning. Spezialstufen: coding, vision, image, video, data, search, social, email, calendar, trading. Ergebnisse an einer unsicheren Grenze werden um eine Stufe angehoben.
- Tier-Bewertung: messages, tools, Länge, Schlüsselwörter und Struktur wählen eine von 14 Stufen
- Feste Regeln: Bild-, formale Denk- und Spezialaufgaben können eine Stufe direkt wählen
- Route-Lookup: liest Primary und bis zu fünf Fallbacks; eine deaktivierte Stufe liefert 503
- Ausführung: versucht Primary und danach die Fallbacks in konfigurierter Reihenfolge
- Antwortverfolgung: das aufgelöste Modell wird im Antwort-Body und X-Auto-Resolved-Model-Header zurückgegeben
Aktuelle Modelltabellen
Die Tabellen lesen dieselbe Live-Konfiguration wie Inferenz und Admin. Primary, Fallback-Reihenfolge und Status jeder Stufe können ohne Deployment geändert werden.
auto
auto:free
Ausgewählte Modelle bieten ein ratenbegrenztes kostenloses Kontingent. Die Berechtigung wird pro Modell von der Plattform vergeben — rufen Sie das Modell mit seiner regulären ID auf; das Suffix :free ist ein optionaler Alias (bei einem kostenpflichtigen Modell macht es dieses nicht kostenlos).
Modellvarianten
Hängen Sie ein Suffix an jede Modell-ID an, um das Routing-Verhalten zu ändern. BazaarLink unterstützt 7 Variantentypen.
Unabhängige Modell-IDs
Diese Varianten existieren als separate Modelle mit eigener Preisgestaltung und Fähigkeiten. BazaarLink probiert zuerst die vollständige Modell-ID (mit Suffix) und fällt dann auf das Basismodell zurück.
:free
:extended
:thinking
:exactoRouting-Shortcuts
Diese Suffixe ändern die Anbieterauswahl, ohne die Modellidentität zu ändern. Das Suffix wird vor dem Routenabgleich entfernt.
:floor # lowest listed input price first
:nitro # throughput-oriented shortcut
:online # enable web-search routingMulti-Provider-Verhalten
Für Upstreams, die Varianten unterstützen, werden Suffixe unverändert weitergeleitet. Für direkte Anbieter (z.B. direkt OpenAI, Fireworks) wird das Suffix entfernt und BazaarLink verarbeitet das Routing lokal.
Kostenlose Modelle
Ausgewählte Modelle bieten ein ratenbegrenztes kostenloses Kontingent. Die Berechtigung wird pro Modell von der Plattform vergeben — rufen Sie das Modell mit seiner regulären ID auf; das Suffix :free ist ein optionaler Alias (bei einem kostenpflichtigen Modell macht es dieses nicht kostenlos).
- Rufen Sie die reguläre Modell-ID auf (z. B. deepseek/deepseek-v4-flash). Anfragen innerhalb des kostenlosen Kontingents werden automatisch kostenlos bedient.
- Die kostenlose Nutzung ist pro Nutzer durch Anfragen pro Minute und ein Tageslimit begrenzt. Die Limits skalieren mit der Kontostufe (kein Guthaben / mit Guthaben).
- Wenn Sie das kostenlose Kontingent überschreiten und Guthaben haben, laufen Anfragen automatisch zum gelisteten Preis auf der bezahlten Stufe weiter. Senden Sie X-Free-Fallback: false, um den automatischen Fallback zu deaktivieren und stattdessen 429 zu erhalten. Ohne Guthaben liefern Anfragen über dem Kontingent 429.
- GET /api/v1/models listet für jedes Modell mit kostenlosem Kontingent einen :free-Eintrag; auto:free routet immer zu einem kostenlosen Modell.
Modelle mit kostenlosem Kontingent
Diese Modell-IDs direkt aufrufen, um das kostenlose Kontingent zu nutzen. Die Liste ändert sich mit dem Angebot — die aktuelle Fassung liefert die API.
deepseek/deepseek-v4-flashGrenzen des kostenlosen Kontingents
Tagesbudget = obiges Anfragebudget × Kontostufen-Multiplikator, je kostenlosem Modell getrennt gezählt. Für auto:free gilt zusätzlich eine parallele Obergrenze pro IP. Einzelne Modelle können strengere oder großzügigere Limits haben; die effektiven Werte zeigt der Block „Kostenloses Kontingent“ auf der Modellseite.
Nach dem Aufbrauchen des Kontingents
Ist das Kontingent erschöpft, laufen Anfragen bei vorhandenem Guthaben automatisch zum regulären Preis des Modells weiter — ohne Unterbrechung und exakt wie ein normaler kostenpflichtiger Aufruf abgerechnet. Wer lieber einen Fehler als eine Abrechnung möchte, sendet den Header X-Free-Fallback: false oder deaktiviert den automatischen Wechsel in den Schlüsseleinstellungen; dann kommt ein 429 zurück. Ohne Guthaben liefern Anfragen über dem Kontingent immer 429.
# Return 429 instead of switching to paid routing
-H "X-Free-Fallback: false"Organisationsverwaltung
BazaarLink-Organisationen verwenden eine dreistufige Architektur: Organisation → Team → Mitglied. Guthaben wird auf Org-Ebene gespeichert; jedes Team und Mitglied kann ein monatliches Ausgabenlimit haben. API-Anfragen prüfen Mitglied → Team → Org-Guthaben in Reihenfolge.
Dreistufiges Budgetsystem
Bei jeder API-Anfrage werden drei Budgetebenen der Reihe nach geprüft. Überschreitung einer Ebene gibt HTTP 429 zurück:
- Monatliches Mitgliederbudget (OrgMember.monthlyBudget)
- Monatliches Teambudget (Team.monthlyBudget)
- Org-Guthabenstand (Organization.credits)
Nutzungsberichte
Die Berichtsseite im Org-Portal bietet monatliche Ausgabenanalysen über vier Dimensionen:
- Übersicht: Gesamtausgaben, Margenrate, täglicher Trendchart
- Nach Team: Ausgaben pro Team, Anteil %, Modellaufschlüsselung, Budgetauslastung
- Nach Modell: Ausgaben pro Modell, Durchschnittspreis ($/1M Tokens)
- Nach Mitglied: Ausgaben pro Mitglied — nur org_admin
Alle Ansichten unterstützen CSV-Export mit BOM-Präfix für direkte Excel-Kompatibilität.
Organisationen erstellen & verwalten
- Gehen Sie zu Einstellungen → Organisationen → Neue Organisation erstellen
- Erstellen Sie Teams im Org-Portal (optional: Kostenstelle und Monatsbudget)
- Laden Sie Mitglieder per E-Mail ein, weisen Sie eine Rolle und ein Team zu
- Stellen Sie API-Schlüssel für Mitglieder aus — die Nutzung wird automatisch dem korrekten Team/Mitglied zugeordnet
- Sehen Sie die Berichtsseite für monatliche Ausgaben aufgeschlüsselt nach Team, Modell oder Mitglied
- Sehen Sie sich die Seite „Berichte“ für die monatlichen Ausgaben an, aufgeschlüsselt nach Team, Modell oder Mitglied
Mitgliederrollen
Was kann eine Organisation sonst noch verwalten?
Über Mitglieder und Teams hinaus bietet der Bereich Organisationsmanagement:
- API keys and model restrictions
- Content filtering before text reaches a model
- Allowed Models by organization, team, member, or key
- Monthly budgets and spend emergency brakes
- Reports, billing, change logs, and security logs
- Education sessions and quotas for eligible organizations
- Institution-Pläne: Bildungsorganisationen können zusätzlich Studentensitzungen und Quoten verwalten
Inhaltsfilterung
Organization-owned rules inspect text before it reaches a model. An org_admin can enable, edit, and test them in Settings.
- block: reject with HTTP 403
- redact: replace matches with [REDACTED]
- flag: send unchanged and record an audit event
- Built-in sensitive-data and prompt-injection templates plus custom keyword or regex rules
- Up to 100 safety-checked rules with a test preview
Management API (v1)
Die /api/v1/orgs/-Endpunkte akzeptieren sowohl Bearer-Management-Schlüssel (sk-bl-...) als auch Session-Cookie und ermöglichen Server-zu-Server-Org-Verwaltung ohne Browser-Session.
Organisationen
/api/v1/orgsListet alle Organisationen auf, denen der Aufrufer angehört, mit Rolle und joinedAt.
/api/v1/orgs/:orgIdRuft Org-Details einschließlich Team- und Mitgliederanzahl ab.
curl https://bazaarlink.ai/api/v1/orgs \
-H "Authorization: Bearer sk-bl-YOUR_MANAGEMENT_KEY"Teams
/api/v1/orgs/:orgId/teamsListet Teams mit Mitgliederanzahl auf, sortiert nach Name.
/api/v1/orgs/:orgId/teams/api/v1/orgs/:orgId/teams/:teamIdTeilweises Update — geben Sie nur die zu ändernden Felder an.
/api/v1/orgs/:orgId/teams/:teamId# Create a team
curl https://bazaarlink.ai/api/v1/orgs/{orgId}/teams \
-X POST \
-H "Authorization: Bearer sk-bl-YOUR_MANAGEMENT_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Engineering", "costCenterCode": "ENG-001", "monthlyBudget": 500}'Mitglieder
/api/v1/orgs/:orgId/membersListet alle Mitglieder mit verschachtelten Benutzer- (id/name/email) und Team-Informationen auf.
/api/v1/orgs/:orgId/members404, wenn die E-Mail-Adresse kein BazaarLink-Konto hat. 409, wenn bereits Mitglied. Standardrolle: member.
/api/v1/orgs/:orgId/members/:memberIdTeilweises Update von role, teamId oder monthlyBudget.
/api/v1/orgs/:orgId/members/:memberIdGibt 400 zurück, wenn das Ziel der letzte org_admin ist.
Berichts-API
Monatliche Ausgabendaten programmatisch abfragen. Zugänglich für org_admin und billing_viewer. Akzeptiert sowohl Web-Session als auch Bearer-Management-Schlüssel.
Query-Parameter: year (Standard aktuell), month (Standard aktuell, 1–12).
Fehlerantwort-Referenz
Erlaubte Modelle (Whitelist)
Schränken Sie ein, welche Modelle Ihre Organisation, Teams oder einzelne Mitglieder aufrufen dürfen. Nützlich, um teure oder ungeprüfte Modelle zu blockieren, Modellstandards durchzusetzen oder ein Team auf einen einzigen Provider zu beschränken.
So funktioniert es
- Drei unabhängige Ebenen — Organisation, Team, Mitglied — jede führt ihre eigene Liste (String[] in der Datenbank).
- Wenn alle drei Ebenen leer sind, sind alle Modelle erlaubt (Standardverhalten).
- Wenn eine oder mehrere Ebenen nicht leer sind, ist die effektive Liste die Schnittmenge der nicht leeren Ebenen — ein Modell muss auf jeder eingeschränkten Ebene erlaubt sein, um durchzukommen.
- Änderungen werden innerhalb weniger Sekunden wirksam (60s In-Memory + 5min Redis-Cache; beide werden bei einer Aktualisierung geleert).
Musterformat
- Exakte Übereinstimmung — z. B. openai/gpt-4o (nur genau dieses Modell).
- Provider-Wildcard — z. B. openai/* (jedes Modell unter dem openai/-Präfix).
- Nur Kleinbuchstaben. Maximal 200 Einträge pro Liste, 100 Zeichen pro Eintrag.
Wo verwalten
Org-Portal → Erlaubte Modelle. org_admin kann Org-, Team- und Mitgliederlisten bearbeiten; team_admin kann das eigene Team und dessen Mitglieder bearbeiten.
Fehlerantwort bei Blockierung
Aufrufe an ein nicht erlaubtes Modell geben HTTP 403 mit folgendem Body zurück:
Verwaltungs-API
Alle Endpunkte akzeptieren Web-Session oder Bearer Management Key (sk-bl-...). PATCH ersetzt die gesamte Liste; übergeben Sie [], um sie zu leeren.
Circuit Breaker (Ausgaben-Notabschaltung)
Eine doppelte Ausgabenobergrenze, die weitere Anfragen blockiert, wenn die Upstream-Kosten in die Höhe schnellen. Entwickelt, um außer Kontrolle geratene Skripte, Endlosschleifen oder Missbrauch gestohlener Schlüssel einzudämmen, bevor sie echtes Geld kosten.
So funktioniert es
- Pro Scope werden zwei feste Fenster in Redis verfolgt: 1-Minuten- und 1-Stunden-Upstream-Kosten (USD).
- Wenn die Ausgaben in einem der Fenster den Schwellenwert erreichen, werden alle nachfolgenden Anfragen in diesem Scope abgelehnt, bis das Fenster zurückgesetzt wird.
- Standardwerte: 5 $ / Minute, 20 $ / Stunde, standardmäßig aktiviert.
- Zähler leben in Redis mit TTL — die Wiederherstellung erfolgt automatisch, kein manuelles Zurücksetzen für Org-/Team-/Member-Trips erforderlich.
Scopes (Member überschreibt Team überschreibt Org)
Jede Ebene kann eigene Schwellenwerte setzen. Auflösungsreihenfolge ist Member → Team → Org → Plattform-Standard — der erste nicht-null Wert pro Feld gewinnt (cbEnabled, cbMinuteUsd, cbHourlyUsd).
- Org-Ebene — gilt für alle Schlüssel der Organisation. Eingestellt im Org-Portal → Circuit Breaker.
- Team-Ebene — gilt für alle Schlüssel, die diesem Team zugewiesen sind. Überschreibt Org für diese Schlüssel.
- Member-Ebene — gilt nur für Schlüssel, die diesem Mitglied zugewiesen sind. Überschreibt Team und Org.
Auslöseverhalten
Bei Auslösung schlagen Anfragen schnell fehl (es wird kein Upstream-Aufruf getätigt). Die Antwort ist HTTP 429 mit folgendem Body:
Audit-Log
Jedes Auslöseereignis und jede Konfigurationsänderung wird aufgezeichnet:
- Auslöseereignisse — Aktionen org.cb.tripped / team.cb.tripped / org_member.cb.tripped. Dedupliziert auf einen Eintrag pro Scope+Fenster pro Stunde, sodass eine anhaltende Auslösung das Log nicht überflutet.
- Konfigurationsänderungen — Aktionen org.cb.update / team.cb.update / org_member.cb.update. Erfassen Vorher/Nachher-Werte sowie den Akteur.
Verwaltungs-API
Org-Admins können Einstellungen über die API lesen und aktualisieren. Alle Endpunkte akzeptieren Web-Session oder Bearer Management Key (sk-bl-...). Senden Sie eine beliebige Teilmenge von Feldern im PATCH-Body; null löscht ein Feld und fällt auf die übergeordnete Ebene zurück.
API-Schlüssel-Rotation
Regelmäßige Rotation von API-Schlüsseln ist eine Sicherheits-Best-Practice. BazaarLink unterstützt Null-Ausfallzeit-Schlüsselrotation — erstellen Sie zuerst einen neuen Schlüssel, migrieren Sie dann, und widerrufen Sie dann den alten.
Rotationsschritte
- Neuen API-Schlüssel erstellen
- Anwendung oder Umgebungsvariablen auf den neuen Schlüssel aktualisieren
- Verifizieren, dass der neue Schlüssel korrekt funktioniert
- Alten Schlüssel deaktivieren oder löschen
Aktivitätsexport
Laden Sie Ihren vollständigen API-Nutzungsverlauf als CSV für Finanzprüfungen, Kostenanalysen oder Compliance-Berichte herunter.
CSV-Export
Melden Sie sich an und gehen Sie zur Protokolle-Seite. Klicken Sie auf die CSV-Export-Schaltfläche in der oberen rechten Ecke, um Ihren vollständigen Verlauf als CSV-Datei herunterzuladen. Kein API-Aufruf erforderlich.
CSV-Spalten
JSON-Nutzungs-API
Für programmatischen Zugriff fragen Sie aggregierte Statistiken nach Zeitraum, Modell oder Schlüssel ab:
Nutzungsabrechnung
Fragen Sie detaillierte Nutzungsstatistiken über die API ab, einschließlich Token-Verbrauch, Kostenanalyse und Anfrageverlauf.
Antwortfeld-Referenz
| Field | Type | Description |
|---|---|---|
| model | string | Model ID used (e.g., openai/gpt-4o) |
| provider | string | Upstream provider name |
| prompt_tokens | number | Input tokens consumed |
| completion_tokens | number | Output tokens generated |
| total_tokens | number | Total tokens (prompt + completion) |
| reasoning_tokens | number | Reasoning tokens (for thinking models) |
| cached_tokens | number | Prompt tokens served from cache |
| cost | number | Total cost in USD credits |
| duration_ms | number | End-to-end latency in milliseconds |
| throughput | number | Generation speed in tokens/sec |
| finish_reason | string | stop | length | content_filter | error |
| status | number | HTTP status code from upstream |
| app_name | string | null | Application name (X-Title header) |
| key_name | string | API key name used for the request |
Institutionsplan
Der Institution Plan ermöglicht es jeder Institution (Schule, Unternehmen, Konferenz, Behörde usw.), kurzlebige Session-Tokens für ihre Mitglieder aus einem einzigen Schlüssel auf Organisationsebene auszustellen. Mitglieder müssen kein Plattformkonto erstellen. Die Organisation steuert über die E-Mail-Domain (z. B. nthu.edu.tw), welche Mitglieder Tokens anfordern dürfen; die gesamte Nutzung wird dem Konto der Organisation in Rechnung gestellt. Diese Seite verwendet das Bildungsszenario als Beispiel — der gleiche Mechanismus funktioniert für jede Institution, die kurzfristigen Mehrbenutzer-Zugriff benötigt.
Architekturüberblick
- Institutionsschlüssel — Beginnt mit sk-edu-. Wird von einem org_admin auf der Organisationsschlüssel-Seite erstellt. Kann nicht direkt als Bearer-Token zum Aufrufen der API verwendet werden — direkte Aufrufe geben 403 zurück.
- Member-Sitzungstoken — Beginnt mit edu-sess-. Studierende erhalten ihn nach E-Mail-Verifizierung. Standard-Lebensdauer beträgt 24 Stunden; widerrufbar durch einen Org-Administrator.
- Zulässige Domänen — Die Organisation konfiguriert, welche E-Mail-Domains (exakte Übereinstimmung, kein Suffix-Bypass) eine Session anfordern dürfen.
- Nutzungszuordnung — Alle studentischen Anfragen werden dem Konto der Organisation in Rechnung gestellt. Die Nutzung ist pro Session und pro E-Mail im Org-Dashboard einsehbar.
Schritt 1 — Plattform-Administrator setzt den Org-Typ auf Education
Suchen Sie unter sales@bazaarlink.ai / support@bazaarlink.ai die Zielorganisation, wechseln Sie zum Tab "Org Type", wählen Sie Institution und legen Sie die zulässigen E-Mail-Domains fest:
Schritt 2 — Org-Administrator erstellt einen Institution Key
Wählen Sie auf der API-Schlüssel-Seite der Organisation beim Erstellen eines neuen Schlüssels "Education" als Schlüsseltyp. Das System generiert einen sk-edu-...-Schlüssel und zeigt ihn EINMAL an — speichern Sie ihn und verteilen Sie ihn über Ihre offiziellen Kanäle an die Studierenden dieser Organisation.
Schritt 3 — Studierender fordert einen Verifizierungscode an
Studierende gehen auf /access und geben den Edu-Schlüssel und ihre Schul-E-Mail ein; oder sie rufen die API direkt auf:
/api/edu/request-codeSchritt 4 — Studierender übermittelt den Code und tauscht ihn gegen ein Session-Token ein
/api/edu/verifySchritt 5 — Verwenden Sie das Session-Token, um die API aufzurufen
Verwenden Sie das edu-sess-...-Token als Bearer-Token gegen jeden Chat-/Completions-/Embeddings-Endpoint:
curl -X POST https://bazaarlink.ai/api/v1/chat/completions \
-H "Authorization: Bearer edu-sess-827d11a1ec67d175cfd4f67f929261f4" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-haiku-4.5",
"messages": [{"role": "user", "content": "Hello"}]
}'403 — Education keys cannot be used directly. Visit /access to exchange for a session.Dies ist ein bewusst eingebautes Reverse-Gate — es verhindert, dass Schulen langlebige Schlüssel an einzelne Studierende weitergeben.
Org-Dashboard — Überwachung und Widerruf
Organisationen vom Typ Education erhalten in der Seitennavigation einen Education-Tab, der Folgendes bietet:
- Einstellungen — Passen Sie die zulässigen Domains, die TTL, die maximale Anzahl von Sessions pro E-Mail und Schlüssel sowie die Quoten pro Session für Anfragen / Tokens / USD an.
- Sitzungen — Listen Sie alle aktiven / abgelaufenen / widerrufenen Sessions auf; filtern Sie nach E-Mail; widerrufen Sie einzelne Sessions.
- Nutzungsstatistiken — Anzahl der Aufrufe pro Session, Token-Verbrauch und kumulierte Kosten.
Sicherheit und Limits
| Element | Standardwert | Beschreibung |
|---|---|---|
| Session TTL | 24 Stunden | Lebensdauer des Session-Tokens; abgelaufene Sessions erfordern eine erneute Verifizierung. |
| Bestätigungscode TTL | 15 Minuten | Lebensdauer des E-Mail-Verifizierungscodes. |
| Bestätigungscodelänge | 6 Ziffern | Wird als HMAC-SHA256-Hash in Redis gespeichert, niemals im Klartext. |
| Schätzwert | 5 Versuche | Darüber hinaus wird der Code sofort ungültig. |
| Abklingzeit des Anforderungscodes | 60 Sekunden | Mindestabstand zwischen wiederholten Anfragen für dasselbe (Schlüssel, E-Mail)-Paar. |
| Ratenbegrenzung pro IP | 10 / 15 Min | Anti-Spam. |
| Ratenbegrenzung pro Schlüssel | 100 / Stunde | Verhindert Massen-E-Mail-Versand. |
| Max. Sitzungen pro E-Mail | 5 | Konfigurierbar in eduConfig; verhindert, dass ein einzelnes Postfach Tokens hortet. |
| Revocation-Weitergabe | ≤ 60 Sekunden | L1/L2-Cache-TTL; nach dem Widerruf in der Datenbank dauert es bis zu 60 Sekunden, bis er auf alle Knoten propagiert wird. |
Abrechnung und Nutzungszuordnung
Alle über Session-Tokens getätigten Anfragen werden zu 100 % der Organisation in Rechnung gestellt, der der Edu-Schlüssel gehört, im Einklang mit der Abrechnung der Upstream-Provider (OpenAI / Anthropic / etc.) (pro Token). Das Org-Dashboard unterstützt Drill-down nach Session, nach E-Mail und nach Schlüssel.
Feedback melden
Helfen Sie uns, BazaarLink zu verbessern, indem Sie Probleme, Fehler oder Vorschläge melden. Wir überwachen aktiv alle Feedback-Kanäle.
So melden Sie
Was Sie einschließen sollten
- Anfrage-ID (aus dem Antwort-id-Feld)
- Verwendetes Modell und gesendete Parameter
- Erwartetes vs. tatsächliches Verhalten
- Zeitstempel und Häufigkeit des Problems
- Fehlermeldungen oder HTTP-Statuscodes