Plattform-API
Katalog, Preise, Guthaben und Verbrauch aus dem Code lesen.
Hier steht alles außer dem Senden eines Prompts: welche Modelle es gibt, was jeder Anbieter berechnet, wie viel Sie ausgegeben haben und welche Schlüssel Sie besitzen. Alles antwortet mit JSON auf demselben api-Host, an den Sie auch Completions senden.
Die Katalog- und Preis-Endpunkte sind öffentlich und benötigen überhaupt keine Zugangsdaten. Alles, was Ihr eigenes Konto betrifft, benötigt welche, und davon gibt es zwei Arten.
Sie sind nicht austauschbar. Ein API-Schlüssel kann Ihr Guthaben nicht lesen, und ein Zugriffstoken kann keine Completion senden.
| Zugangsdaten | Sieht aus wie | Öffnet |
|---|---|---|
| API-Schlüssel | sk-... | Inferenz, die Modellliste und den Verbrauchszähler genau dieses Schlüssels. |
| Zugriffstoken | 29 bis 32 Zeichen, kein Präfix | Ihr Konto: Guthaben, Schlüsselverwaltung, Nutzungsprotokolle. |
Beide werden im selben Header übertragen, Authorization: Bearer gefolgt vom Wert. Etwas anderes wird nicht gelesen. Ältere Beispiele fügen einen New-Api-User Header hinzu, der ignoriert wird, und einen Cookie-Fallback gibt es nicht.
Senden Sie diesen Header auch dort, wo der Endpunkt ohne ihn antworten würde. Eine Anfrage an eine Konto-Route ohne Zugangsdaten kann noch vor uns von einer Sicherheitsprüfung abgefangen werden, und eine solche Prüfung antwortet mit HTML statt mit JSON.
Öffnen Sie Einstellungen, suchen Sie unter Sicherheit den Punkt API-Zugriff und erzeugen Sie eines. Es wird nur einmal angezeigt. Es lässt sich nur erzeugen, während Sie angemeldet sind, ein Skript kann sich also kein eigenes ausstellen.
Sie besitzen immer nur ein Zugriffstoken. Beim Erzeugen eines neuen wird das alte stillschweigend ungültig, und alles, was es noch verwendet, funktioniert nicht mehr.
Behandeln Sie es wie ein Passwort. Es kann Geld ausgeben, Schlüssel erstellen und Ihren Verlauf lesen. Widerrufen Sie es auf derselben Seite, sobald ein Skript es nicht mehr benötigt.
Eine einzige öffentliche Anfrage liefert jedes Modell, mit Preisen, die bereits in Dollar pro Million Tokens umgerechnet sind. Kein Schlüssel, keine Registrierung.
curl https://api.unorouter.com/api/pricing/catalog{
"counts": { "models": 239, "free": 134, "paid": 105, "vendors": 50 },
"first_free_model": "glm-5.3:free",
"vendors": [{ "vendor_id": 4, "vendor_name": "Zhipu", "icon": "Zhipu.Color" }],
"models": [
{
"model_name": "glm-5.3",
"vendor": "Zhipu",
"type": "text",
"is_free": false,
"online": true,
"input_price": 0.05103,
"output_price": 0.160382187,
"original_input_price": 1.26,
"original_output_price": 3.960054,
"tags": "Text,Reasoning,Tools,Cache",
"supported_endpoint_types": ["openai", "anthropic"],
"uptime_24h": 99.965,
"success_rate": 95,
"avg_latency_ms": 11062
}
]
}input_price und output_price sind das, was Sie heute tatsächlich zahlen würden, beim derzeit günstigsten Anbieter für dieses Modell. original_input_price und original_output_price sind der Listenpreis des Herstellers selbst, der Abstand zwischen beiden ist also der Rabatt. is_free kennzeichnet Modelle, die nie etwas kosten, und online kennzeichnet die, für die es gerade einen aktiven Anbieter gibt.
Zwei kleinere Verwandte: /api/pricing/counts liefert nur die Summen und ist günstig genug, um es regelmäßig abzufragen, und /api/pricing/vendors liefert die Herstellerliste. Der ältere Endpunkt /api/pricing liefert rohe Verhältniswerte statt Dollar und ist um ein Vielfaches größer.
Die meisten Modelle werden von mehreren Anbietern zu unterschiedlichen Tarifen bereitgestellt. Fragen Sie ein einzelnes Modell ab, um alle zu sehen.
curl "https://api.unorouter.com/api/pricing/catalog/model?model=glm-5.3"{
"model_name": "glm-5.3",
"model_ratio": 0.63,
"completion_ratio": 3.1429,
"cache_ratio": 0.1857,
"input_price": 0.05103,
"output_price": 0.160382187,
"grid_min_ratio": 0.0405,
"auto_chain": ["a7-bbgt-2846-glm-5.3", "a7-kkl-3731-glm-5.3", "a7-4069-glm-5.3"],
"group_ratio": {
"a7-bbgt-2846-glm-5.3": 0.0405,
"a7-kkl-3731-glm-5.3": 0.0911,
"a7-4069-glm-5.3": 0.1214
},
"enable_groups": ["a7-bbgt-2846-glm-5.3", "a7-kkl-3731-glm-5.3"]
}auto_chain ist die Reihenfolge, in der das Routing sie ausprobiert, das Günstigste zuerst. group_ratio gibt den Multiplikator jedes Anbieters an, und daraus ergibt sich der Preis:
input $/1M = model_ratio * 2 * group_ratio
output $/1M = input * completion_ratio
cached $/1M = input * cache_ratio
glm-5.3 on a7-bbgt-2846: 0.63 * 2 * 0.0405 = $0.05103 / 1M in
0.05103 * 3.1429 = $0.16038 / 1M outDiese Gruppennamen sind dieselben, an die Sie einen Schlüssel binden, siehe Gruppen-Pinning
Die OpenAI-kompatible Liste ist das, was die meisten Clients aufrufen, wenn Sie auf Verbinden klicken. Sie benötigt einen API-Schlüssel.
curl https://api.unorouter.com/v1/models \
-H "Authorization: Bearer $UNOROUTER_API_KEY"Sie liefert nur das, was dieser Schlüssel tatsächlich nutzen darf, ein Schlüssel im kostenlosen Tarif sieht also weniger Modelle als ein aufgeladener. Jeder Eintrag enthält außerdem context_length und max_output_tokens, was das reine OpenAI-Format nicht liefert.
Der Pfad lautet /v1/models. Lassen Sie /v1 weg, landen Sie auf einer Webseite statt bei der API, was Clients als JSON-Parsing-Fehler wegen eines unerwarteten Doctype melden.
Ein einziger Aufruf liefert Ihr Konto, einschließlich des noch verfügbaren Betrags.
curl https://api.unorouter.com/api/user/self \
-H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"{
"success": true,
"message": "",
"data": {
"id": 12345,
"username": "you",
"group": "default",
"quota": 265000,
"used_quota": 4231900,
"request_count": 1884,
"aff_code": "ABC123"
}
}Beträge sind in Kontingenteinheiten angegeben, nicht in Dollar. 500.000 Einheiten entsprechen einem US-Dollar, das Guthaben oben sind also 0,53 US-Dollar. Teilen Sie durch 500.000, um Geldbeträge anzuzeigen.
quota ist das, was Sie noch ausgeben können. used_quota und request_count sind Gesamtwerte über die gesamte Laufzeit, die nur steigen, used_quota ist also nicht die Differenz zwischen irgendetwas und Ihrem Guthaben.
Listen Sie Ihre Schlüssel auf und lassen Sie sich dann einen anhand seiner id anzeigen.
curl "https://api.unorouter.com/api/token/?p=1&page_size=20" \
-H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"
curl -X POST https://api.unorouter.com/api/token/42/key \
-H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"Beim Auflisten wird jeder Schlüsselwert maskiert, deshalb ist das Anzeigen ein eigener Aufruf. Dieser Aufruf ist ratenbegrenzt und wird in Ihrem Audit-Log festgehalten.
Beim Anlegen eines Schlüssels kommt success zurück, aber nicht der Schlüssel selbst. Erst anlegen, dann auflisten, um die id zu finden, und ihn anschließend anzeigen lassen. Beim Aktualisieren kommt das aktualisierte Objekt zurück, schicke aber das vollständige Objekt: nur cross_group_retry, group_mapping und auto_groups überstehen ein Weglassen, jedes andere ausgelassene Feld wird leer zurückgeschrieben.
Ihr eigener Anfrageverlauf ist seitenweise abrufbar und filterbar.
curl -G https://api.unorouter.com/api/log/self \
-H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN" \
-d p=1 \
-d page_size=100 \
-d type=2 \
-d start_timestamp=1789344000 \
-d model_name=glm-5.3| Parameter | Bedeutung |
|---|---|
type | 1 Aufladung, 2 Verbrauch, 3 Verwaltung, 5 Fehler, 6 Erstattung, 7 Anmeldung. Weglassen, um alles zu erhalten. |
start_timestamp, end_timestamp | Unix-Sekunden. Die beiden dürfen nicht mehr als zehn Jahre umspannen. |
model_name, token_name, group | Auf ein Modell, einen Schlüssel oder eine Anbietergruppe eingrenzen. |
request_id, upstream_request_id | Eine einzelne Anfrage finden, über unsere id oder die des Anbieters. |
Fügen Sie p und page_size für die Seitennavigation hinzu, die Seitengröße ist auf 100 begrenzt. Ein verwandter Endpunkt, /api/log/self/stat, liefert nur die Summen für dieselben Filter: Ausgaben, Anfragen pro Minute und Tokens pro Minute.
Um das Restguthaben eines Schlüssels ohne Zugriffstoken zu lesen, authentifizieren Sie sich mit dem Schlüssel selbst:
curl https://api.unorouter.com/api/usage/token/ \
-H "Authorization: Bearer $UNOROUTER_API_KEY"{
"object": "token_usage",
"name": "SillyTavern",
"total_granted": 500000,
"total_used": 231900,
"total_available": 268100,
"unlimited_quota": false,
"model_limits_enabled": false,
"expires_at": 0
}Konto-Endpunkte verpacken ihre Nutzdaten. Seitenweise Endpunkte verpacken sie doppelt.
{ "success": true, "message": "", "data": { ... } }
{ "success": true, "message": "", "data": {
"page": 1, "page_size": 20, "total": 137, "items": [ ... ]
} }Die öffentlichen Katalog-Endpunkte sind die Ausnahme und liefern ihr Objekt direkt, ohne Hülle.
Die meisten Fehlschläge antworten trotzdem mit HTTP 200, success steht dann auf false und eine Nachricht erklärt den Grund. Prüfen Sie dieses Feld statt des Statuscodes.
Die Authentifizierung ist die Ausnahme und antwortet mit einem echten Status: 401 mit AUTH_UNAUTHORIZED bei falschen Zugangsdaten, AUTH_TOKEN_EXPIRED bei abgelaufenen, AUTH_SESSION_REVOKED nach einer Abmeldung, und 403 AUTH_INSUFFICIENT_PRIVILEGE, wenn das Konto diese Route nicht aufrufen darf.