1,104 mirrors rewritten over five passes of run-translation on the 22-source core set: the 14 sources edited since their translation, the 322 mirrors that were still English copies, and the frontmatter the old extractor leaked into the newer locales' bodies. The pipeline now caches per-`## `-section hashes and retranslates only changed sections, never reuses a section that is still English, rebuilds English-copy / leaked mirrors even when the source is unchanged, merges the state on save (parallel runs), and the drift gate (scoped to the core set) is blocking. Final audit: 0 stale, 0 English copies, 0 leaked frontmatter across 1,430 core mirrors. ⚠️ base-red inherited: #12732
121 KiB
API Reference (Dansk)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
🌐 Sprog: 🇺🇸 English | 🇪🇹 አማርኛ | 🇸🇦 العربية | 🇦🇿 Azərbaycan dili | 🇧🇬 Български | 🇧🇩 বাংলা | 🇨🇿 Čeština | 🇩🇰 Dansk | 🇩🇪 Deutsch | 🇬🇷 Ελληνικά | 🇪🇸 Español | 🇪🇪 Eesti | 🇮🇷 فارسی | 🇫🇮 Suomi | 🇫🇷 Français | 🇮🇪 Gaeilge | 🇮🇳 ગુજરાતી | 🇳🇬 Hausa | 🇮🇱 עברית | 🇮🇳 हिन्दी | 🇭🇷 Hrvatski | 🇭🇺 Magyar | 🇦🇲 Հայերեն | 🇮🇩 Bahasa Indonesia | 🇳🇬 Igbo | 🇮🇹 Italiano | 🇯🇵 日本語 | 🇬🇪 ქართული | 🇰🇭 ខ្មែរ | 🇮🇳 ಕನ್ನಡ | 🇰🇷 한국어 | 🇱🇹 Lietuvių | 🇱🇻 Latviešu | 🇮🇳 മലയാളം | 🇮🇳 मराठी | 🇲🇾 Bahasa Melayu | 🇲🇹 Malti | 🇲🇲 မြန်မာ | 🇳🇵 नेपाली | 🇳🇱 Nederlands | 🇳🇴 Norsk | 🇮🇳 ଓଡ଼ିଆ | 🇮🇳 ਪੰਜਾਬੀ | 🇵🇭 Filipino | 🇵🇱 Polski | 🇵🇹 Português (Portugal) | 🇧🇷 Português (Brasil) | 🇷🇴 Română | 🇷🇺 Русский | 🇱🇰 සිංහල | 🇸🇰 Slovenčina | 🇸🇮 Slovenščina | 🇷🇸 Српски | 🇸🇪 Svenska | 🇰🇪 Kiswahili | 🇮🇳 தமிழ் | 🇮🇳 తెలుగు | 🇹🇭 ไทย | 🇹🇷 Türkçe | 🇺🇦 Українська | 🇵🇰 اردو | 🇺🇿 Oʻzbekcha | 🇻🇳 Tiếng Việt | 🇳🇬 Yorùbá | 🇨🇳 中文 (简体) | 🇹🇼 中文 (繁體)
Central reference til OmniRoute-API'et. Den dækker den offentlige /v1-grænseflade og de mest anvendte administrationsendepunkter; den maskinlæsbare docs/openapi.yaml og routetræet under src/app/api/ er de udtømmende kilder.
Indholdsfortegnelse
- Chatfuldførelser
- Eksklusive administrerede sessionslejemål
- Indlejringer
- Billedgenerering
- Dokument-OCR
- Vis modeller
- Manifest for udbyderplugin
- Kompatibilitetsslutpunkter
- Fil-API
- Batch-API
- Søge-API
- WebSocket-streaming
- Rapportering af kvoter og problemer
- Semantisk cache
- Dashboard og administration
- Administration af kombinationer
- Webhooks
- Registrerede nøgler (automatisk administration)
- Agentprotokol
- Administrationsproxyer
- Robusthed (udvidet)
- Færdigheder
- Hukommelse
- MCP-server
- A2A-server
- Cloud, evalueringer og vurdering
- Behandling af anmodninger
- Godkendelse
Chatfuldførelser
POST /v1/chat/completions
Authorization: Bearer your-api-key
Content-Type: application/json
{
"model": "cc/claude-opus-4-6",
"messages": [
{"role": "user", "content": "Write a function to..."}
],
"stream": true
}
Brugerdefinerede headers
| Header | Retning | Beskrivelse |
|---|---|---|
X-OmniRoute-No-Cache |
Anmodning | Indstil til true for at omgå cachen |
x-omniroute-no-memory |
Anmodning | Indstil til true for at springe over injektion af hukommelse og færdigheder for denne anmodning (svarer til ingen cache og undgår token-/omkostningsoverhead pr. kald) |
X-OmniRoute-Progress |
Anmodning | Indstil til true for statushændelser |
X-Session-Id |
Anmodning | Fast sessionsnøgle til ekstern sessionstilknytning |
x_session_id |
Anmodning | Varianten med understregning accepteres også (direkte HTTP) |
X-OmniRoute-Session-Id |
Anmodning | Sessions-/samtaletag angivet af kalderen (bruges også af hukommelsen). Når det er til stede, gemmes det ordret i call_logs.session_tag til omkostningstildeling pr. session (#8249) — det genereres aldrig, når det mangler |
Idempotency-Key |
Anmodning | Nøgle til deduplikering (vindue på 5 sek.) |
X-Request-Id |
Anmodning | Alternativ nøgle til deduplikering |
X-OmniRoute-Cache |
Svar | HIT eller MISS (uden streaming) |
X-OmniRoute-Idempotent |
Svar | true, hvis anmodningen blev deduplikeret |
X-OmniRoute-Progress |
Svar | enabled, hvis statussporing er slået til |
X-OmniRoute-Session-Id |
Svar | Det effektive sessions-id, der bruges af OmniRoute |
X-OmniRoute-Request-Id |
Svar | Korrelations-id for anmodningen (når det er kendt) |
X-OmniRoute-Version |
Svar | OmniRoutes buildversion (altid til stede) |
X-OmniRoute-Cost-Saved |
Svar | Det beløb i USD, som cachen sparede ved et HIT (kun cachehits) |
X-OmniRoute-Decision |
Svar | Routingsporing: strategy=<name>; provider=<alias>; latency_ms=<n> (<name> er kombinationsstrategien eller single for en anmodning uden kombination) — altid til stede i fuldførelsessvar |
Nginx-bemærkning: Hvis du er afhængig af headers med understregning (f.eks.
x_session_id), skal du aktivereunderscores_in_headers on;.
Headere til omkostningstelemetri: Vellykkede ikke-streaming-svar indeholder også sættet af
X-OmniRoute-*-headere til omkostningstelemetri —X-OmniRoute-Response-Cost(USD, fast 10 decimaler;0.0000000000for gratis/ikke-prissat),X-OmniRoute-Tokens-In/X-OmniRoute-Tokens-Out,X-OmniRoute-Model,X-OmniRoute-Provider,X-OmniRoute-Latency-Ms,X-OmniRoute-Cache-HitogX-OmniRoute-Fallback-Attempts(kun når > 0) samtX-OmniRoute-Request-IdogX-OmniRoute-Version. Disse udsendes af chatfuldførelser,/v1/responses,/v1/messages, og medieslutpunkterne —/v1/embeddings,/v1/images/generations,/v1/audio/speech,/v1/audio/transcriptions,/v1/rerank,/v1/videos/generations,/v1/music/generationsog/v1/moderations(altid med omkostningen0). Medieomkostninger beregnes pr. modalitet (pr. billede, pr. sekund, pr. tegn, pr. søgeenhed), når prisoplysninger er tilgængelige, ellers0(fail-open).
Omkostningssemantik for cache-hit: Ved et HIT i den semantiske cache (
X-OmniRoute-Cache-Hit: true) foretages der intet upstream-kald, såX-OmniRoute-Response-Coster0.0000000000(den inkrementelle omkostning ved at levere cache-hittet). Den oprindelige/forventede omkostning rapporteres separat iX-OmniRoute-Cost-Saved. Faktureringssystemer bør summereX-OmniRoute-Response-Cost(cache-hits koster intet); cacheanalyse kan aggregereX-OmniRoute-Cost-Saved.
Eksklusive administrerede sessionslejemål
Eksklusiv leasing af administrerede sessioner er en valgfri, klientneutral routingkontrakt: Én aktiv ejer besidder én kvalificeret OmniRoute-forbindelse. Den udlejer ikke en model, kræver ikke OAuth, identificerer ikke en bestemt klient og kræver ikke en bestemt udbyder.
Den API-nøgle, der bruges til godkendelse, skal have rettigheden lease:exclusive og en eksplicit ikke-tom
allowedConnections-liste. Databasens mutationsgrænse håndhæver begge felter samlet ved oprettelse af nøgler
og delvise opdateringer.
POST /api/v1/session-leases
Authorization: Bearer <managed-api-key>
Content-Type: application/json
X-OmniRoute-Lease-Owner: vlo_<43-base64url-characters>
{"action":"acquire","model":"glm/glm-4.6"}
Vellykkede svar på hentning, fornyelse og frigivelse viser tidsstempler, state og den nøjagtige positive
generation, men aldrig den valgte forbindelse eller legitimationsoplysninger. Ved fornyelse og frigivelse
angives generationen i JSON-indholdet:
{ "action": "renew", "generation": 1 }
{ "action": "release", "generation": 1, "reason": "OWNER_EXIT" }
En aktiv lejemålsejer kan eksplicit anmode om privatlivssikre visningsmetadata for sin aktuelle tilknytning:
{ "action": "status", "generation": 1 }
{
"state": "ACTIVE",
"generation": 1,
"acquiredAt": "2026-08-28T12:00:00.000Z",
"renewedAt": "2026-08-28T12:00:30.000Z",
"expiresAt": "2026-08-28T12:02:30.000Z",
"connection": {
"displayName": "Primary Codex",
"provider": "codex"
}
}
Denne valgfrie statushandling afgrænses af den uigennemsigtige ejer, den godkendte administrerede API-nøgle og den
nøjagtige aktive generation i én databasetransaktion. displayName er kun det beskårne konfigurerede
forbindelsesnavn; det er null, når der ikke findes et sikkert konfigureret navn. OmniRoute erstatter det aldrig med en
e-mailadresse eller en genereret kontoidentitet. Udbyderværdien er en ikke-følsom visningsetiket og aldrig
en genereret identifikator for en kompatibel udbyder. Legitimationsoplysninger, tokens, cookies, rå id'er for forbindelser eller
API-nøgler, ejerhashes, afgrænsningshemmeligheder og interne routingdata er udeladt.
Opslag med forkert nøgle, forkert ejer, forældet generation, manglende, udløbet, frigivet eller ugyldiggjort lejemål
returnerer alle den samme 409 LEASE_FENCE_STALE-fejl uden forbindelsesmetadata. En klient, der modtog svaret om kapacitetsventetid, har ingen aktiv tilknytning at inspicere. Når routing flytter et aktivt lejemål,
forbliver den samme generation gyldig, og status returnerer atomisk den nye tilknytning, aldrig den gamle.
Eksisterende klienter forbliver uændrede, fordi svar på hentning, fornyelse, frigivelse og ventetid bevarer
deres tidligere strukturer.
Denne serverkontrakt ændrer ikke standardfunktionen /status i OpenAI Codex. Standard-Codex rapporterer i øjeblikket sin
modeludbyder og indbyggede godkendelses-/kontostatus, men viser ikke vilkårlige brugerdefinerede
kontometadata for udbydere. En senere klientintegration skal kalde denne handling og beslutte, hvordan
connection.displayName skal vises.
Hver administreret inferensanmodning angiver derefter begge kontrolheadere:
X-OmniRoute-Lease-Owner: vlo_<43-base64url-characters>
X-OmniRoute-Lease-Generation: 1
Den nøjagtige ejer, generation, aktive forbindelse og godkendte API-nøgle afgrænses umiddelbart før hvert understøttet upstream-forsøg. Genafspilning af ejer og generation med en anden nøgle mislykkes, selv når denne nøgle tillader den samme forbindelse. Rå ejerværdier gemmes, logføres eller opbevares ikke i anmodningssnapshotshottet og videresendes ikke upstream.
Midlertidig kapacitetskonflikt returnerer HTTP 429 med Retry-After og:
{
"state": "WAITING_FOR_CAPACITY",
"error": { "type": "lease_error", "code": "LEASE_CAPACITY_UNAVAILABLE" },
"reason": "NO_FREE_ELIGIBLE_CONNECTION",
"retryAfter": 30
}
Dette svar betyder kun, at det almindelige kvalificerede sæt ikke var tomt, og at alle ledige kandidater var besat af et fremmed aktivt lejemål. Ikke-understøttede modeller/udbydere, uoverensstemmelse med politikker, nedkøling, kvote, tilstand og andre almindelige kvalifikationsfejl bevarer deres eksisterende OmniRoute-svar.
x-omniroute-compression
Tilsidesættelse af komprimeringsplanen pr. anmodning. Højeste prioritet — har forrang for tilsidesættelsen af routingkombinationen, den aktive profil, automatisk udløsning og panelets standardindstilling. Værdier:
| Værdi | Effekt |
|---|---|
off |
Ingen komprimering for denne anmodning. |
default |
Panelets afledte standardprofil (ignorerer den aktive profil). |
engine:<id> |
En enkelt motor, når den er aktiveret, f.eks. engine:rtk. |
<combo> |
En navngivet kombination, der først matches efter navn (uden forskel på store og små bogstaver) og derefter efter id. |
Bemærkninger:
- Ukendte værdier ignoreres (anmodningen afvises aldrig); fortolkningen fortsætter med den normale prioritetsrækkefølge for operatorer.
- Hvis flere kombinationer har samme navn, skal kombinationens id angives for at få et deterministisk match.
- En kombination med navnet
offellerdefaultkan ikke vælges efter navn (disse nøgleord fortolkes først); henvis til en sådan kombination via dens id. - Hovedkontakten for komprimering er en ufravigelig spærring: Når komprimering er deaktiveret globalt, kan denne header ikke aktivere den.
Den anvendte plan returneres i responsheaderen:
X-OmniRoute-Compression: <mode>; source=<source>
hvor <source> er enten request-header, routing-override, active-profile, auto-trigger, default eller off.
Embeddings
POST /v1/embeddings
Authorization: Bearer your-api-key
Content-Type: application/json
{
"model": "nebius/Qwen/Qwen3-Embedding-8B",
"input": "The food was delicious"
}
Tilgængelige udbydere: Nebius, OpenAI, Mistral, Together AI, Fireworks, NVIDIA, OpenRouter, Jina AI.
Katalog-id'er er provider/model (eksempel: jina-ai/jina-embeddings-v5-omni-small). Jina-model-id'er uden præfiks, som findes i registreringsdatabasen (for eksempel jina-embeddings-v5-text-small, jina-reranker-v3.5), kan også opløses. Jina embed/rerank/classify/segment bruger først jina-ai-legitimationsoplysninger fra kontrolpanelet; JINA_AI_API_KEY bruges kun som reserve, når der ikke findes nogen nøgle i kontrolpanelet. jina-reader-kortet er kun til Reader / r.jina.ai (POST /v1/web/fetch) og leverer aldrig embeddings eller rerank.
Modeller i registreringsdatabasen, der angiver understøttelse af multimodalitet, accepterer også op til 32 udbyderneutrale strukturerede
elementer. Medieelementtyperne er text, image, audio, video og document. Deres medie-source
er enten {"type":"url","url":"https://..."} eller
{"type":"base64","data":"...","media_type":"..."}.
Jina v5 Omni (jina-ai/jina-embeddings-v5-omni-small, jina-ai/jina-embeddings-v5-omni-nano
og familiealiasset jina-ai/jina-embeddings-v5-omni → omni-small) accepterer også Jinas oprindelige
EmbeddingsV5Request-dokumenter og videresender dem intakte til https://api.jina.ai/v1/embeddings:
{
"model": "jina-ai/jina-embeddings-v5-omni-small",
"task": "retrieval.query",
"normalized": true,
"input": [
{ "text": "a red bicycle" },
{ "image": "https://example.com/bike.png" },
{
"content": [{ "text": "caption" }, { "image": "data:image/png;base64,..." }]
}
]
}
Oprindelige { image | audio | video | pdf }-værdier kan være en offentlig HTTPS-URL, en data:-URI eller rå
base64. OmniRoute konverterer ikke disse objekter til strenge og henter ikke oprindelige billed-URL'er — Jina henter
selv offentlige medier. Ekstra Jina-felter (task, normalized, truncate, embedding_type)
videresendes. Jina-SKU'er, der kun understøtter tekst, afviser fortsat dokumenter, som ikke er tekst.
Sikkerheds- og transportgrænser:
- URL'er til fjernmedier skal være offentlige HTTPS-URL'er. Kanoniske
{type,source:url}-elementer hentes på serversiden (genvalidering af omdirigeringer, timeout, størrelsesgrænser, offentlig DNS, forbindelsesfastgørelse) og indlejres før udbyderkaldet. Jina-oprindelige{image:"https://..."}-elementer videresendes uændret efter det samme offentlige HTTPS-tjek; Jina henter URL'en. - Indlejrede base64-medier er begrænset til 8 MiB afkodet pr. element og 16 MiB afkodet på tværs af anmodningen.
Udbyderoversættelse (kanoniske elementer videresendes aldrig uændret):
- Jina-multimodalmodeller: Hvert element på øverste niveau bliver til ét modalitetsnøglet objekt
(
text/image/audio/video/pdf), der bruger data-URI'er til indlejrede medier; én vektor pr. element på øverste niveau. - Gemini Embedding 2-familien: Ét array på øverste niveau bliver til en enkelt oprindelig
models/{model}:embedContent-anmodning medcontent.parts(textellerinline_data). - Ukendte/dynamiske modeller uden eksplicitte modalitetsmetadata afviser struktureret input med HTTP 400.
{
"model": "jina-ai/jina-embeddings-v5-omni-small",
"input": [
{ "type": "text", "text": "A red bicycle" },
{
"type": "image",
"source": { "type": "url", "url": "https://example.com/bicycle.png" }
}
],
"dimensions": 512,
"encoding_format": "float"
}
Ikke-understøttede kombinationer af model og modalitet returnerer HTTP 400 i stedet for at konvertere elementet. Udvidelsesfelter, der ikke er inputfelter, i ældre streng-/tokenanmodninger sendes fortsat uændret videre.
# Vis alle embedding-modeller
GET /v1/embeddings
Billedgenerering
POST /v1/images/generations
Authorization: Bearer your-api-key
Content-Type: application/json
{
"model": "openai/gpt-image-2",
"prompt": "En smuk solnedgang over bjerge",
"size": "1024x1024"
}
Tilgængelige udbydere: OpenAI (GPT Image 2), xAI (Grok Image), Together AI (FLUX), Fireworks AI, Nebius (FLUX), Hyperbolic, NanoBanana, OpenRouter, SD WebUI (lokal), ComfyUI (lokal).
# Vis alle billedmodeller
GET /v1/images/generations
Dokument-OCR
POST /v1/ocr
Authorization: Bearer your-api-key
Content-Type: application/json
{
"model": "mistral/mistral-ocr-latest",
"document": {
"type": "document_url",
"document_url": "https://example.com/invoice.pdf"
}
}
model vælger OCR-udbyderen via et provider/model-præfiks. Et model-id uden præfiks (f.eks.
mistral-ocr-latest) fortolkes som tilhørende den registrerede udbyder, og hvis model udelades, bruges
Mistral (mistral-ocr-latest) som standard. Registrerede udbydere (open-sse/config/ocrRegistry.ts):
| Udbyder-id | Model-id | model-værdi |
Bemærkninger |
|---|---|---|---|
mistral |
mistral-ocr-latest |
mistral/mistral-ocr-latest (eller mistral-ocr-latest uden præfiks) |
Synkron — svaret returneres direkte fra det enkelte upstream-kald. |
azure-document-intelligence |
prebuilt-read |
azure-document-intelligence/prebuilt-read |
Asynkron upstream (analyze + polling) — se nedenfor. |
vertex-deepseek-ocr |
deepseek-ocr-maas |
vertex-deepseek-ocr/deepseek-ocr-maas |
Synkron via Vertex AI's openapi/chat/completions-partnerendepunkt — se nedenfor vedrørende godkendelse/URL. |
Alle tre udbydere svarer med den samme Mistral-formaterede struktur:
{
"pages": [{ "index": 0, "markdown": "# Udtrukket tekst..." }],
"model": "mistral-ocr-latest",
"usage_info": { "pages_processed": 1 }
}
Pollingforløb for Azure Document Intelligence
Azure Document Intelligence's analyze-API er asynkron: Den indledende anmodning returnerer en
Operation-Location-header i stedet for en body, og der skal derfor foretages polling efter resultatet. Handleren
(open-sse/handlers/ocr.ts) poller denne URL hvert sekund i op til 30 forsøg, afbryder straks (fortsætter
ikke med at polle) ved et poll-svar, der ikke er ok, eller en "failed"-status, og returnerer 504, hvis
handlingen stadig kører, efter at antallet af tilladte forsøg er opbrugt. Det endelige Azure-svar
normaliseres til det samme pages/markdown-format, som Mistral bruger, før det returneres til
kalderen, så klientkoden ikke behøver at særbehandle udbyderen.
Godkendelse og løsning af endepunkt for Vertex AI DeepSeek OCR
vertex-deepseek-ocr genbruger den samme Vertex AI-godkendelse, som OmniRoute allerede understøtter for
chat-/billedtrafik (open-sse/executors/vertex.ts): Forbindelsens API-nøgle er enten en
Service Account JSON-legitimationsoplysning (som udveksles med et kortlivet OAuth-adgangstoken via JWT-bearer-
forløbet) eller et allerede udstedt OAuth-adgangstoken, der bruges, som det er. Upstream-endepunktets URL er Vertex'
generiske openapi/chat/completions-partnerendepunkt, som opbygges ud fra forbindelsens projekt og
region — en eksplicit providerSpecificData.project/providerSpecificData.region har altid forrang;
ellers udledes projektet fra Service Account JSON'ens project_id, og regionen
er som standard us-central1. Begge værdier bestemmes i open-sse/handlers/ocr.ts
(resolveVertexOcrAccessToken, resolveVertexOcrBaseUrl) og bruges af
src/app/api/v1/ocr/route.ts, før der videresendes til handleOcr.
Vis modeller
GET /v1/models
Authorization: Bearer your-api-key
→ Returnerer alle chat-, embedding- og billedmodeller samt kombinationer i OpenAI-format
Model-id-præfikser (?prefix=)
De fleste modeller vises under et udbyderpræfiks. Hvilket præfiks du får, styres af
feature-flaget MODELS_CATALOG_PREFIX_MODE og kan tilsidesættes for hver anmodning med en
forespørgselsparameter — nyttigt for en klient, der ønsker en enkel liste uden at ændre den
serveromspændende indstilling for alle andre:
GET /v1/models?prefix=alias # ét id pr. model — det korte aliaspræfiks
GET /v1/models?prefix=dual # begge former (serverens standardindstilling)
GET /v1/models?prefix=canonical # kun det fulde udbyder-id-præfiks
| Tilstand | Returnerer | Bemærkninger |
|---|---|---|
dual |
cc/claude-sonnet-4-6 og claude/claude-sonnet-4-6 |
Standard. Begge id'er dirigeres til den samme model. Dette er bevaret, så klientkonfigurationer, der har hardkodet en af formerne, fortsat fungerer. Fordobler omtrent kataloget. |
alias |
cc/claude-sonnet-4-6 |
Én post pr. model. Udbydere uden et særskilt alias returnerer stadig deres post, så intet går tabt. |
canonical |
claude/claude-sonnet-4-6 |
Én post pr. model under det fulde udbyder-id-præfiks. Udbydere uden et særskilt alias (f.eks. antigravity/…, agy/…) returnerer også deres enkelte id her, så intet går tabt. |
Et spejl i dual-tilstand kan også genkendes uden forespørgselsparameteren: Det indeholder et
parent-felt, der peger på det primære id.
Klienter, der viser en modelvælger, bør anmode om ?prefix=alias — det er det, som
OmniCopilot VS Code-udvidelsen gør.
Modelvarianter uden tænkning
For Claude-modeller med tænkeevne viser /v1/models også en variant uden tænkning, hvis id har præfikset claude-3-omniroute-no-thinking/:
claude-3-omniroute-no-thinking/<provider>/<model>
Hvis dette id vælges (f.eks. i en Claude Code-konfiguration, der altid vedhæfter en thinking-blok), fortolkes det som den faktiske <provider>/<model> med ræsonnering deaktiveret — thinking:{type:"disabled"} på /v1/messages-stien, eller med felterne reasoning/reasoning_effort udeladt på /v1/chat/completions-stien. Varianten vises kun for modeller i Claude-familien, som understøtter tænkning og respekterer disabled (så f.eks. modeller, der kun understøtter adaptiv tænkning og afviser disabled, er udeladt). Operatører kan gennemtvinge, at varianten aktiveres eller deaktiveres for hver model via ModelSpec.noThinkingAlias.
Manifest for udbyderplugin
GET /api/v1/provider-plugin-manifest
Returnerer det JSON-sikre manifest for udbyderplugins, der bruges af Bifrost, CLIProxyAPI og fremtidige sidecar-routere. Svaret genereres fra TypeScript-registreringsdatabasen for udbydere og udelader bevidst OAuth-klienthemmeligheder, fortolkning af runtime-miljøet, eksekveringsfunktioner, request-headere og kontodata.
Brug dette endpoint, når en sidecar kører uden for processen og ikke kan importere
open-sse/config/providerPluginManifestRegistry.ts direkte.
Kompatibilitetsendpoints
| Metode | Sti | Format |
|---|---|---|
| POST | /v1/chat/completions |
OpenAI |
| POST | /v1/messages |
Anthropic |
| POST | /v1/responses |
OpenAI Responses |
| POST | /v1/embeddings |
OpenAI |
| POST | /v1/images/generations |
OpenAI Images |
| POST | /v1/images/edits |
OpenAI Images (redigering/inpaint) |
| POST | /v1/videos/generations |
Videogenerering i OpenAI-stil |
| POST | /v1/music/generations |
Musikgenerering i OpenAI-stil |
| POST | /v1/audio/transcriptions |
OpenAI Audio (STT) |
| POST | /v1/audio/speech |
OpenAI TTS (returnerer lydindhold) |
| POST | /v1/rerank |
Rerank i Cohere/Voyage-stil |
| POST | /v1/classify |
Jina-klassificering (api.jina.ai) |
| POST | /v1/segment |
Jina-segmentering (segment.jina.ai) |
| POST | /v1/moderations |
OpenAI Moderations |
| GET | /v1/models |
OpenAI |
| POST | /v1/messages/count_tokens |
Anthropic |
| GET | /v1beta/models |
Gemini |
| POST | /v1beta/models/{...path} |
Gemini generateContent |
| POST | /v1/api/chat |
Ollama |
| GET | /api/v1/vscode/{token}/ |
Alias for OpenAI-katalog |
| GET | /api/v1/vscode/{token}/models |
Alias for OpenAI-modeller |
| POST | /api/v1/vscode/{token}/chat/completions |
Tokenbaseret OpenAI-alias |
| POST | /api/v1/vscode/{token}/responses |
Tokenbaseret OpenAI Responses-alias |
| POST | /api/v1/vscode/{token}/api/chat |
Tokenbaseret Ollama-alias |
| GET | /api/v1/vscode/{token}/api/tags |
Tokenbaseret alias for Ollama-tags |
Alle POST-ruter følger samme struktur: Bearer your-api-key + Zod-valideret JSON-indhold (v1RerankSchema, v1ModerationSchema, v1AudioSpeechSchema osv.; se src/shared/validation/schemas.ts). 4xx returneres ved skemafejl.
For klienter, der ikke kan tilføje Authorization: Bearer ..., accepterer OmniRoute også API-nøgler i URL'en via enten kompatibilitet med query-strenge (?token=..., ?apiKey=..., ?api_key=..., ?key=...) eller de dedikerede /api/v1/vscode/{token}/...-endpoints, der er dokumenteret nedenfor.
# Rerank
POST /v1/rerank { "model": "jina-ai/jina-reranker-v3.5", "query": "...", "documents": ["..."] }
# Jina-klassificering (legitimationsoplysninger til Foundation API)
POST /v1/classify { "model": "jina-embeddings-v5-text-small", "input": ["..."], "labels": ["a", "b"] }
# Jina-segmentering
POST /v1/segment { "content": "...", "return_chunks": true }
# Jina-søgning (s.jina.ai; udbyderaliasser: jina-search, jina-ai, jina)
POST /v1/search { "query": "...", "provider": "jina-search" }
# Modereringer
POST /v1/moderations { "model": "omni-moderation-latest", "input": "..." }
# TTS — returnerer indhold som audio/mpeg (eller det ønskede format)
POST /v1/audio/speech { "model": "openai/tts-1", "input": "Hello", "voice": "alloy" }
# Billedredigering (multipart)
POST /v1/images/edits -F image=@input.png -F prompt="..." -F mask=@mask.png
# Video-/musikgenerering (model-id med udbyderpræfiks)
POST /v1/videos/generations { "model": "runway/gen-3", "prompt": "..." }
POST /v1/music/generations { "model": "suno/v3.5", "prompt": "..." }
Dedikerede udbyderruter
POST /v1/providers/{provider}/chat/completions
POST /v1/providers/{provider}/embeddings
POST /v1/providers/{provider}/images/generations
Udbyderpræfikset tilføjes automatisk, hvis det mangler. Modeller, der ikke matcher, returnerer 400.
Files API
OpenAI-kompatibelt filslutpunkt til batchinput/-output og filuploads med formål.
| Metode | Sti | Beskrivelse |
|---|---|---|
| POST | /v1/files |
Upload en fil (multipart: file, purpose, expires_after[anchor], expires_after[seconds]) — maks. 512 MiB |
| GET | /v1/files |
Vis filer for den godkendte API-nøgle |
| GET | /v1/files/[id] |
Hent en fils metadata |
| DELETE | /v1/files/[id] |
Slet en fil |
| GET | /v1/files/[id]/content |
Stream den rå fil tilbage |
Godkendelse: Bearer-API-nøgle — filer afgrænses pr. API-nøgle via getApiKeyRequestScope. En nøgle
kan kun se, downloade og slette sine egne filer; en dashboardsession uden en nøgle kan læse hele
instansen; en fil uden en ejer (anonym upload eller upload via dashboardsession) afvises for alle
kaldere uden en session. GET /v1/files afviser en anonym kalder — og en angivet nøgle, der ikke
kan slås op — med 401, selv når REQUIRE_API_KEY=false, i stedet for at vise alle lejeres
filer (GHSA-m3hp-hq9g-fpmv, GHSA-2jm2-mpx8-6523).
Batches API
OpenAI-kompatibel batchbehandling.
| Metode | Sti | Beskrivelse |
|---|---|---|
| POST | /v1/batches |
Opret batch — body valideres af v1BatchCreateSchema (input_file_id, endpoint, completion_window) |
| GET | /v1/batches |
Vis batches |
| GET | /v1/batches/[id] |
Hent batchstatus + request_counts |
| DELETE | /v1/batches/[id] |
Slet en afsluttet/mislykket batch |
| POST | /v1/batches/[id]/cancel |
Annuller en igangværende batch |
Godkendelse: Bearer-API-nøgle. Batches afgrænses pr. API-nøgle efter den samme tredelte regel som
filer: Kun egen nøgle, dashboardsession på tværs af hele instansen, poster med null-ejer afvises for alle
kaldere uden en session (hentning, sletning, annullering og kontrollen af input_file_id ved oprettelse).
GET /v1/batches afviser en anonym kalder med 401, selv når REQUIRE_API_KEY=false.
Søge-API
Abstraktion for web-/søgeudbydere (Tavily, Brave, Exa, Serper osv.).
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /v1/search |
Vis konfigurerede søgeudbydere + funktioner |
| POST | /v1/search |
Kør en søgeforespørgsel — brødteksten valideres af v1SearchSchema, understøtter caching/samling |
| GET | /v1/search/analytics |
Statistik for træffere/ventetid/cache pr. udbyder |
Godkendelse: Bearer-API-nøgle (extractApiKey + isValidApiKey). Søgepolitikken håndhæves via enforceApiKeyPolicy.
API til hentning fra internettet
Udtræk indhold fra en URL via en konfigureret udbyder til hentning fra internettet (Firecrawl, Jina Reader, Tavily Extract, TinyFish Fetch, Nimble Extract).
| Metode | Sti | Beskrivelse |
|---|---|---|
| POST | /v1/web/fetch |
Hent/skrabet en URL — brødteksten valideres af v1WebFetchSchema |
Godkendelse: Bearer-API-nøgle (extractApiKey + isValidApiKey). Politikken håndhæves via enforceApiKeyPolicy.
Kvotebevidst fallback (#8297): Når der ikke er angivet en eksplicit provider, gennemgås puljen
(firecrawl → jina-reader → tavily-search → tinyfish → nimble-search) i
fast prioritetsrækkefølge (fyld først) — en hastighedsbegrænset, men konfigureret udbyder springes over
i stedet for at afbryde forespørgslen, og en genforsøgsegnet upstream-fejl eller kvotefejl
(altid HTTP 429; 402/403 for kvotebaserede gratisniveauer hos Firecrawl/Tavily/TinyFish —
ikke for Jina Reader og aldrig ved en almindelig 400-fejlbehæftet forespørgsel) fortsætter til den
næste endnu ikke afprøvede udbyder med legitimationsoplysninger på forespørgselstidspunktet. Når alle udbydere i
puljen er udtømt, returnerer slutpunktet en enkelt 429 (med en Retry-After-
header) i stedet for den tidligere generiske 400. Når der anmodes om en eksplicit provider, er
der ingen skjult fallback — en hastighedsbegrænset eller fejlslagen eksplicit
udbyder viser sin egen fejl (429, hvis den er hastighedsbegrænset, ellers upstream-
statussen).
WebSocket-streaming
GET /v1/ws?handshake=1
Validerer et WebSocket-opgraderingshåndtryk og returnerer eksempelmeddelelserne for protokollen (request, cancel). De faktiske WS-frames håndteres af den medfølgende WS-server uden for Next.js-rutetabellen.
Godkendelse: Bearer-API-nøgle under håndtrykket.
Responses-API over WebSocket (kun codex)
# Samme vært:port som HTTP-API'et (standard er 20128); opgrader forbindelsen:
wscat -c "ws://localhost:20128/v1/responses?api_key=<OMNIROUTE_API_KEY>"
# (eller: -H "Authorization: Bearer <OMNIROUTE_API_KEY>")
# Første frame SKAL være response.create:
{ "type": "response.create", "model": "gpt-5.5", "input": [ { "role": "user", "content": "hi" } ] }
En Responses-API-over-WebSocket-proxy er knyttet udelukkende til codex (ChatGPT-
backend). Den lytter på samme port som API'et/dashboardet på stierne /v1/responses,
/responses og /api/v1/responses. Ved den første response.create-frame
godkender og forbereder den via den interne codex-responses-ws-bro, vælger en
codex OAuth-forbindelse og opretter en tunnel til wss://chatgpt.com/backend-api/codex/responses
via wreq-js-transporten. Modeller, der ikke er codex, afvises (codex_ws_provider_required).
Brug model: "qtSd/<group>/codex/<model>" til kvotedelingsrouting. Implementeret i
app/server-ws.mjs + scripts/dev/responses-ws-proxy.mjs + src/app/api/internal/codex-responses-ws/route.ts.
Godkendelse: Bearer-API-nøgle under håndtrykket. Den medfølgende HTTP-server (server-ws.mjs)
skal være det aktive startpunkt (hvilket den som standard er, når app/server-ws.mjs findes).
Model-id: Brug det rene ChatGPT-id (uden præfikset codex/)
OpenAI Codex CLI validerer modelnavnet på klientsiden, når
supports_websockets = true, og afviser udbyderpræfikserede id'er som
codex/gpt-5.5 (The 'codex/gpt-5.5' model is not supported when using Codex with a ChatGPT account). Send det rene id (f.eks. gpt-5.5). OmniRoutes bro er
kun til codex, så den fortolker et rent id som en codex-model
(resolveCodexWsModelInfo), før der oprettes en tunnel til upstream — selvom et rent
gpt-5.5 ellers ville blive dirigeret til en anden udbyder over HTTP.
Konfiguration af OpenAI Codex CLI
Peg Codex CLI mod OmniRoute ved at føje en brugerdefineret udbyder med WebSocket-
understøttelse til ~/.codex/config.toml (brug en separat CODEX_HOME for at undgå at ændre
en eksisterende konfiguration):
model = "gpt-5.5" # rent id — IKKE "codex/gpt-5.5"
model_provider = "omniroute"
[model_providers.omniroute]
name = "OmniRoute (WS)"
base_url = "http://localhost:20128/v1" # ingen afsluttende skråstreg; WS-URL'en udledes (brug https/wss i produktion)
wire_api = "responses" # den eneste understøttede værdi siden februar 2026
supports_websockets = true # aktiverer Responses-over-WS-transporten
env_key = "OMNIROUTE_API_KEY" # indeholder OmniRoute-API-nøglen (Bearer)
export OMNIROUTE_API_KEY=sk-... # en OmniRoute-API-nøgle (enhver nøgle, hvis REQUIRE_API_KEY=false)
codex exec "Responda apenas: PONG"
CLI'en opgraderer base_url + /responses til en WebSocket, og OmniRoute opretter en tunnel
til den valgte codex OAuth-forbindelse. Valideret fra ende til ende mod den lokale
server: ChatGPT returnerer codex.rate_limits + response.created og streamer
fuldførelsen.
Rapportering af kvoter og problemer
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /v1/quotas/check |
Forhåndsvalider kvoten for en provider + accountId, før der udstedes en registreret nøgle |
| POST | /v1/issues/report |
Rapportér en fejl ved udstedelse af en kvote/nøgle til GitHub (kræver GITHUB_ISSUES_REPO + token) |
Godkendelse: Bearer-API-nøgle (isAuthenticated).
Selvbetjent forbrug (/api/usage/om-usage)
Enhver API-nøgle kan aflæse sit eget forbrug og sine egne kvoter — ingen administrationsgodkendelse. Dette er det slutpunkt, som en klient (CLI, OmniCopilot-panelet) bruger til at vise en nøgleindehaver vedkommendes forbrug.
# Tekstformat (den historiske kontrakt — almindelig tekst til en terminal)
curl -H "Authorization: Bearer <your-api-key>" \
http://localhost:20128/api/usage/om-usage
# Struktureret format — det, som en brugergrænseflade anvender
curl -H "Authorization: Bearer <your-api-key>" \
"http://localhost:20128/api/usage/om-usage?format=json"
Nøglen skal have allowUsageCommand aktiveret (deaktiveret som standard — dashboardets API-nøgleadministrator
slår det til eller fra for hver nøgle). Uden denne indstilling svarer slutpunktet med 403.
?format=json returnerer en diskrimineret struktur, så en kalder aldrig læser et datafelt fra et
afslag. Ved succes:
{
"allowed": true,
// findes kun, når nøglen har tilvalgt forbrugsgrænser pr. nøgle (daglige/ugentlige USD):
"personal": {
"dailySpentUsd": 1.25,
"dailyLimitUsd": 5,
"dailyResetAtIso": "…",
"weeklySpentUsd": 8,
"weeklyLimitUsd": 20,
"weeklyResetAtIso": "…" /* … */,
},
// det valgte snapshot af udbyderkvoten eller null, når intet endnu er cachelagret:
"provider": {
"connectionId": "…",
"provider": "claude",
"plan": "…",
"quotas": {/* … */},
},
// snapshots for alle forbindelser, så en brugergrænseflade kan vise flere udbydere side om side:
"providers": [
{ "connectionId": "…", "provider": "claude" /* … */ },
{ "provider": "codex" /* … */ },
],
}
Ved afslag (401 ugyldig nøgle / 403 ikke tilladt) returnerer den samme rute
{ "allowed": false, "error": { "message": "…" } } — en tilstedeværende, men tom personal/provider
(nøglen er tilladt, men der er endnu ikke registreret noget) er en anden tilstand end et afslag, og kun JSON-formatet
skelner mellem dem.
Godkendelse: kalderens egen Bearer-API-nøgle, valideret med isValidApiKey — dette er ikke
administrationsgrænsefladen (/api/keys/…), som fortsat er beskyttet af requireManagementAuth.
Semantisk cache
# Hent cachestatistik
GET /api/cache/stats
# Ryd alle cacher
DELETE /api/cache/stats
Eksempel på svar:
{
"semanticCache": {
"memorySize": 42,
"memoryMaxSize": 500,
"dbSize": 128,
"hitRate": 0.65
},
"idempotency": {
"activeKeys": 3,
"windowMs": 5000
}
}
Påvirkning af latenstid
Et HIT i den semantiske cache leverer svaret fra cachen uden et upstream-kald,
så den rapporterede X-OmniRoute-Response-Latency er tæt på nul
(uanset den oprindelige upstream-latenstid). Klienter, der er følsomme over for latenstid
(benchmarking, p50/p99-overvågning), bør kontrollere response-headeren
X-OmniRoute-Cache-Latency:
| Værdi | Betydning |
|---|---|
synthetic |
Svaret leveres fra cachen; latenstiden er ikke reel upstream-tid |
| (fraværende) | Svar fra et reelt upstream-kald |
Omgåelse af cache pr. nøgle
API-nøgler kan fravælge læsninger fra den semantiske cache via cacheDefaultMode:
| Værdi | Adfærd |
|---|---|
legacy |
Normal cacheadfærd (standard) |
bypass |
Spring cacheopslag helt over; brug altid upstream |
Angiv ved oprettelse af nøglen (POST /api/keys) eller ved opdatering (PATCH /api/keys/[id]):
{ "cacheDefaultMode": "bypass" }
Omgåelse pr. anmodning
Enhver anmodning kan omgå cachen uanset nøgleindstillingerne:
X-OmniRoute-No-Cache: true
Dashboard og administration
Administrationsruter (/api/* undtagen offentlig godkendelse/login) er ikke godkendt med
almindelige API-nøgler til inferens. Legitimationsoplysningstyper, scopes og curl-eksempler:
Administrationsgodkendelse.
Godkendelse
| Slutpunkt | Metode | Beskrivelse |
|---|---|---|
/api/auth/login |
POST | Log ind |
/api/auth/logout |
POST | Log ud |
/api/settings/require-login |
GET/PUT | Slå krav om login til/fra |
Udbyderadministration
| Slutpunkt | Metode | Beskrivelse |
|---|---|---|
/api/providers |
GET/POST | Vis / opret udbydere |
/api/providers/[id] |
GET/PUT/DELETE | Administrer en udbyder |
/api/providers/[id]/test |
POST | Test forbindelsen til udbyderen |
/api/providers/[id]/models |
GET | Vis udbyderens modeller |
/api/providers/validate |
POST | Valider udbyderkonfigurationen |
/api/providers/bulk |
POST | Tilføj flere API-nøgler samlet for ÉN udbyder |
/api/providers/import |
POST | Importer en heterogen udbyderLISTE fra en fortolket CSV/JSON-fil (#6836); resultater med delvise fejl for hver række |
/api/provider-nodes* |
Forskellige | Administration af udbydernoder |
/api/provider-models |
GET/POST/PATCH/DELETE | Brugerdefinerede modeller (tilføj, opdater, skjul/vis, slet) |
OAuth-forløb
| Slutpunkt | Metode | Beskrivelse |
|---|---|---|
/api/oauth/[provider]/[action] |
Forskellige | Udbyderspecifik OAuth |
Routing og konfiguration
| Slutpunkt | Metode | Beskrivelse |
|---|---|---|
/api/models/alias |
GET/POST | Modelaliasser |
/api/models/catalog |
GET | Alle modeller efter udbyder + type |
/api/combos* |
Forskellige | Administration af kombinationer |
/api/keys* |
Forskellige | Administration af API-nøgler |
/api/pricing |
GET | Modelpriser |
Brug og analyse
| Endpoint | Metode | Beskrivelse |
|---|---|---|
/api/usage/history |
GET | Forbrugshistorik |
/api/usage/logs |
GET | Forbrugslogfiler |
/api/usage/request-logs |
GET | Logfiler på anmodningsniveau |
/api/usage/[connectionId] |
GET | Forbrug pr. forbindelse |
/api/usage/token-limits |
GET/POST/DELETE | Budgetter for tokengrænser pr. API-nøgle |
/api/usage/model-latency-stats |
GET | Rullende samlet latenstid pr. udbyder/model (gennemsnit/p50/p95/p99, succesrate); filtre: windowHours/minSamples/maxRows/provider/model (#6873) |
/api/usage/cache-health |
GET | Oversigt over promptcachens tilstand baseret på call_logs — skrive-/læseforhold, p50/p90/p99-fordeling af skrivestørrelse, koncentration af omfattende skrivninger, opdeling pr. model samt en vurdering på healthy/degraded/thrash/no-data; forespørgselsparametrene range (1h|24h|7d|30d, standardværdi 24h) og valgfrit model (#8827) |
Indstillinger
| Endpoint | Metode | Beskrivelse |
|---|---|---|
/api/settings |
GET/PUT/PATCH | Generelle indstillinger |
/api/settings/proxy |
GET/PUT | Konfiguration af netværksproxy |
/api/settings/proxy/test |
POST | Test proxyforbindelsen |
/api/settings/ip-filter |
GET/PUT | Liste over tilladte/blokerede IP-adresser |
/api/settings/thinking-budget |
GET/PUT | Omskrivningstilstand for anmodninger vedrørende tænke-/ræsonneringsbudget (uændret videresendelse / automatisk fjernelse / brugerdefineret / adaptiv). Uafhængig af komprimering. Se THINKING_BUDGET.md. |
/api/settings/system-prompt |
GET/PUT | Global systemprompt |
/api/settings/compression |
GET/PUT | Global komprimeringskonfiguration |
/api/settings/purge-request-history |
POST | Ryd rækker i anmodningsloggen og lokale kaldslogartefakter |
Kontekst og komprimering
| Slutpunkt | Metode | Beskrivelse |
|---|---|---|
/api/compression/preview |
POST | Forhåndsvis komprimering med off/lite/standard/aggressive/ultra/RTK/stacked |
/api/compression/language-packs |
GET | Vis tilgængelige Caveman-sprogpakker |
/api/compression/rules |
GET | Vis metadata for Caveman-regler |
/api/context/caveman/config |
GET/PUT | Alias for Caveman-specifikke indstillinger |
/api/context/rtk/config |
GET/PUT | RTK-specifikke indstillinger, herunder brugerdefinerede filtre og opbevaring af råt output |
/api/context/rtk/filters |
GET | RTK-filterkatalog og diagnosticering af brugerdefinerede filtre |
/api/context/rtk/test |
POST | Kør RTK-forhåndsvisning/-test med en tekstpayload |
/api/context/rtk/raw-output/[id] |
GET | Læs opbevaret, redigeret råt output via markør-id |
/api/context/combos |
GET/POST | Vis/opret komprimeringskombinationer |
/api/context/combos/[id] |
GET/PUT/DELETE | Detaljer om/opdatering/sletning af komprimeringskombination |
/api/context/combos/[id]/assignments |
GET/PUT | Tildel komprimeringskombinationer til routingkombinationer |
/api/context/analytics |
GET | Alias for komprimeringsanalyse |
Overvågning
| Slutpunkt | Metode | Beskrivelse |
|---|---|---|
/api/sessions |
GET | Sporing af aktive sessioner |
/api/rate-limits |
GET | Hastighedsgrænser pr. konto |
/api/monitoring/health |
GET | Sundhedstjek + udbyderoversigt (catalogCount, configuredCount, activeCount, monitoredCount). Administrationsvisningen inkluderer credentialHealth: skalarer fra probe-cachen, failedConnections, når failed>0, og staleDbNonOkCount (vedvarende SQLite-test_status, ikke måleren). Se MONITORING_GUIDE.md. |
/api/cache/stats |
GET/DELETE | Cachestatistik / rydning |
/api/modality-bridge/stats |
GET | attempts i hukommelsen, vellykkede/bridged, fejl, cachetræffere, totalLatencyMs, latencySamples, stikprøvebaseret averageLatencyMs og tidspunkt for seneste brug (nulstilles ved genstart; administrationsgodkendelse) |
/api/modality-bridge/video/runtime |
GET | Streng kontrol af betroet loopback før administrationsgodkendelse/probe; renset tilgængelighed og versioner for FFmpeg/ffprobe (no-store) |
/api/modality-bridge/video/extract |
POST | Intern godkendt bytebroker til betroet loopback; 50 MiB input, begrænset kø/32 MiB output, 503 ved kapacitetsgrænse, 499 ved afbrydelse, 504 ved tidsfrist; ikke en offentlig upload-API |
Sikkerhedskopiering og eksport/import
| Slutpunkt | Metode | Beskrivelse |
|---|---|---|
/api/db-backups |
GET | Vis tilgængelige sikkerhedskopier |
/api/db-backups |
PUT | Opret en manuel sikkerhedskopi |
/api/db-backups |
POST | Gendan fra en bestemt sikkerhedskopi |
/api/db-backups/export |
GET | Download databasen som en .sqlite-fil |
/api/db-backups/import |
POST | Upload en .sqlite-fil for at erstatte databasen |
/api/db-backups/exportAll |
GET | Download en komplet sikkerhedskopi som et .tar.gz-arkiv |
Synkronisering med cloudtjenester
| Slutpunkt | Metode | Beskrivelse |
|---|---|---|
/api/sync/cloud |
Forskellige | Handlinger til cloudsynkronisering |
/api/sync/initialize |
POST | Initialiser synkronisering |
/api/cloud/* |
Forskellige | Administration af cloudtjenester |
Tunneler
| Slutpunkt | Metode | Beskrivelse |
|---|---|---|
/api/tunnels/cloudflared |
GET | Læs installations-/kørselsstatus for Cloudflare Quick Tunnel til dashboardet |
/api/tunnels/cloudflared |
POST | Aktivér eller deaktiver Cloudflare Quick Tunnel (action=enable/disable) |
/api/tunnels/ngrok |
GET | Læs kørselsstatus for ngrok Tunnel til dashboardet |
/api/tunnels/ngrok |
POST | Aktivér eller deaktiver ngrok Tunnel (action=enable/disable) |
CLI-værktøjer
| Slutpunkt | Metode | Beskrivelse |
|---|---|---|
/api/cli-tools/claude-settings |
GET | Status for Claude CLI |
/api/cli-tools/codex-settings |
GET | Status for Codex CLI |
/api/cli-tools/droid-settings |
GET | Status for Droid CLI |
/api/cli-tools/openclaw-settings |
GET | Status for OpenClaw CLI |
/api/cli-tools/runtime/[toolId] |
GET | Generisk CLI-kørselsmiljø |
CLI-svar inkluderer: installed, runnable, command, commandPath, runtimeMode, reason.
ACP-agenter
| Slutpunkt | Metode | Beskrivelse |
|---|---|---|
/api/acp/agents |
GET | Vis alle registrerede agenter (indbyggede + brugerdefinerede) med status |
/api/acp/agents |
POST | Tilføj en brugerdefineret agent, eller opdater registreringscachen |
/api/acp/agents |
DELETE | Fjern en brugerdefineret agent via forespørgselsparameteren id |
GET-svaret inkluderer agents[] (id, name, binary, version, installed, protocol, isCustom) og summary (total, installed, notFound, builtIn, custom).
Robusthed og hastighedsgrænser
| Slutpunkt | Metode | Beskrivelse |
|---|---|---|
/api/resilience |
GET/PATCH | Hent/opdater indstillinger for anmodningskø, forbindelsesnedkøling, udbyderafbryder og ventetid |
/api/resilience/reset |
POST | Nulstil udbydernes kredsløbsafbrydere |
/api/resilience/model-cooldowns |
GET | Vis aktive spærringer pr. (udbyder, forbindelse, model), sorteret efter resterende tid |
/api/resilience/model-cooldowns |
DELETE | Ryd en modelspærring — body {provider, model} eller {all: true} for at rydde alt |
/api/rate-limits |
GET | Status for hastighedsgrænse pr. konto |
/api/rate-limit |
GET | Global konfiguration af hastighedsgrænser |
Alle fire
/api/resilience/*-ruter kræver administrationsgodkendelse (requireManagementAuth). Se Robusthed (udvidet) for en komplet gennemgang af udbyderafbryder kontra forbindelsesnedkøling kontra modelspærring.
Evalueringer
| Slutpunkt | Metode | Beskrivelse |
|---|---|---|
/api/evals |
GET/POST | Vis evalueringspakker/kør en evaluering |
Politikker
| Slutpunkt | Metode | Beskrivelse |
|---|---|---|
/api/policies |
GET/POST/DELETE | Administrer dirigeringspolitikker |
Overholdelse
| Slutpunkt | Metode | Beskrivelse |
|---|---|---|
/api/compliance/audit-log |
GET | Revisionslog for overholdelse (seneste N) |
v1beta (Gemini-kompatibel)
| Slutpunkt | Metode | Beskrivelse |
|---|---|---|
/v1beta/models |
GET | Vis modeller i Gemini-format |
/v1beta/models/{...path} |
POST | Gemini-generateContent-slutpunkt |
Disse slutpunkter afspejler Geminis API-format for klienter, der forventer kompatibilitet med det oprindelige Gemini SDK.
Interne API'er/system-API'er
| Slutpunkt | Metode | Beskrivelse |
|---|---|---|
/api/init |
GET | Kontrol af applikationsinitialisering (bruges ved første kørsel) |
/api/tags |
GET | Ollama-kompatible modeltags (til Ollama-klienter) |
/api/restart |
POST | Udløs kontrolleret genstart af serveren |
/api/shutdown |
POST | Udløs kontrolleret nedlukning af serveren |
/api/system/env/repair |
POST | Reparer miljøvariabler for OAuth-udbyderen |
Bemærk: Disse slutpunkter bruges internt af systemet eller til kompatibilitet med Ollama-klienter. De kaldes typisk ikke af slutbrugere.
Reparation af OAuth-miljøvariabler (v3.6.1+)
POST /api/system/env/repair
Content-Type: application/json
{
"provider": "claude-code"
}
Reparerer manglende eller beskadigede OAuth-miljøvariabler for en specifik udbyder. Returnerer:
{
"success": true,
"repaired": ["CLAUDE_CODE_OAUTH_CLIENT_ID", "CLAUDE_CODE_OAUTH_CLIENT_SECRET"],
"backupPath": "/home/user/.omniroute/backups/env-repair-2026-04-11.bak"
}
Lydtransskription
POST /v1/audio/transcriptions
Authorization: Bearer your-api-key
Content-Type: multipart/form-data
Transskriber lydfiler ved hjælp af en hvilken som helst konfigureret STT-udbyder. Det første stisegment vælger den oprindelige udbyder (openai/…, deepgram/…). Gateways, der videreeksporterer en anden leverandørs model, bruger et kvalificeret id (openrouter/deepgram/nova-3).
Anmodning:
curl -X POST http://localhost:20128/v1/audio/transcriptions \
-H "Authorization: Bearer your-api-key" \
-F "file=@recording.mp3" \
-F "model=openai/whisper-1"
Svar:
{
"text": "Hello, this is the transcribed audio content.",
"task": "transcribe",
"language": "en",
"duration": 12.5
}
Eksempler på model-id'er: openai/whisper-1 (kræver en OpenAI-nøgle),
openrouter/deepgram/nova-3 (kræver en OpenRouter-nøgle),
deepgram/nova-3 (kræver en oprindelig Deepgram-nøgle). En direkte
deepgram/nova-3-anmodning bruger ikke OpenRouter.
Understøttede formater: mp3, wav, m4a, flac, ogg, webm.
Ollama-kompatibilitet
For klienter, der bruger Ollamas API-format:
# Chat-slutpunkt (Ollama-format)
POST /v1/api/chat
# Modelliste (Ollama-format)
GET /api/tags
Anmodninger oversættes automatisk mellem Ollama-formatet og interne formater.
Tokeniserede VS Code-aliasser/aliasser uden headers
Brug disse aliasser, når en integration ikke kan indsætte en Authorization-header og har brug for, at API-nøglen er indlejret i basis-URL'en.
# Katalogalias i OpenAI-stil
GET /api/v1/vscode/{token}/
GET /api/v1/vscode/{token}/models
# Chat-aliasser i OpenAI-stil
POST /api/v1/vscode/{token}/chat/completions
POST /api/v1/vscode/{token}/responses
# Aliasser i Ollama-stil
POST /api/v1/vscode/{token}/api/chat
GET /api/v1/vscode/{token}/api/tags
Eksempel:
curl https://your-host.example/api/v1/vscode/YOUR_API_KEY/models
curl -X POST https://your-host.example/api/v1/vscode/YOUR_API_KEY/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"auto","messages":[{"role":"user","content":"hello"}]}'
Bemærkninger:
- De tokeniserede aliasser genbruger de samme handlers som
/v1/*og/api/tags; svarstrukturerne forbliver identiske. - Foretræk
Authorization: Bearer ..., når klienten understøtter brugerdefinerede headers. - URL-baserede tokens kan optræde i reverse proxy-logfiler, browserhistorik og telemetri uden for OmniRoute. Betragt dem som en kompatibilitetsmulighed, ikke som standardmetoden til godkendelse.
Telemetri
# Hent oversigt over latenstelemetri (p50/p95/p99 pr. udbyder)
GET /api/telemetry/summary
Svar:
{
"providers": {
"claudeCode": { "p50": 245, "p95": 890, "p99": 1200, "count": 150 },
"github": { "p50": 180, "p95": 620, "p99": 950, "count": 320 }
}
}
Budget
# Hent budgetstatus for alle API-nøgler
GET /api/usage/budget
# Angiv eller opdater et budget
POST /api/usage/budget
Content-Type: application/json
{
"apiKeyId": "key-123",
"dailyLimitUsd": 5.00,
"weeklyLimitUsd": 30.00,
"monthlyLimitUsd": 100.00,
"warningThreshold": 0.8,
"resetInterval": "monthly"
}
Skemabemærkninger (
setBudgetSchema):apiKeyIder påkrævet; mindst én afdailyLimitUsd,weeklyLimitUsdellermonthlyLimitUsdskal være større end nul. Valgfrie felter:warningThreshold(0–1),resetInterval(daily|weekly|monthly),resetTime(HH:MM). Det ældre{keyId, limit, period}-format returnerer400 Bad Request.
Tokengrænser
Tokenbudgetter pr. API-nøgle (adskilt fra det USD-baserede budget ovenfor). Håndhæves direkte i requestforløbet: Når en nøgles forbrug i det aktuelle vindue når dens grænse, afvises requests med 429 Too Many Requests. Grænser kan afgrænses til en bestemt model, en provider eller anvendes globalt på tværs af nøglen. Når flere grænser matcher en request, gælder den mest restriktive.
# Vis en nøgles tokengrænser (inkluderer aktuelt forbrug i vinduet)
GET /api/usage/token-limits?apiKeyId=key-123
# Opret eller opdater en tokengrænse
POST /api/usage/token-limits
Content-Type: application/json
{
"apiKeyId": "key-123",
"scopeType": "model",
"scopeValue": "openai/gpt-4o",
"tokenLimit": 1000000,
"resetInterval": "monthly",
"enabled": true
}
# Slet en tokengrænse efter id
DELETE /api/usage/token-limits?id=tl-abc
Skemabemærkninger (
setTokenLimitSchema):apiKeyIdogscopeType(model|provider|global) er påkrævede.scopeValueer påkrævet, medmindrescopeTypeerglobal(f.eks. et model-id formodel-omfang eller et udbyder-id forprovider-omfang).tokenLimitskal være et positivt heltal (konverteres fra en streng). Valgfrit:id(udelad for at oprette, angiv for at opdatere),resetInterval(daily|weekly|monthly, standardværdimonthly),resetTime(HH:MM),enabled(standardværditrue).GET-svar udvider hver grænse medtokensUsed,remaining,windowStart,periodStartAtognextResetAt. Dette er et administrationsendpoint (godkendelse håndhæves centralt af authz-pipelinen).
Behandling af requests
- Klienten sender en request til
/v1/* - Route-handleren kalder
handleChat,handleEmbedding,handleAudioTranscriptionellerhandleImageGeneration - Modellen opløses (direkte udbyder/model eller alias/kombination)
- Legitimationsoplysninger vælges fra den lokale database med filtrering efter kontotilgængelighed
- For chat:
handleChatCorekontrollerer den semantiske cache/signaturcachen og opløser kombinationens komprimeringsindstillinger - Proaktiv komprimering køres før oversættelse til udbyderformatet, når den er aktiveret (
lite, Caveman, RTK eller stablet) - Udbyderens executor sender requesten opstrøms
- Svaret oversættes tilbage til klientformatet (chat) eller returneres uændret (embeddings/billeder/lyd)
- Forbrug, komprimeringsanalyse og requestlogs registreres
- Fallback anvendes ved fejl i henhold til kombinationsreglerne
Fuld arkitekturreference: ARCHITECTURE.md
Administration af kombinationer
Routingkombinationer på højere niveau (allerede opsummeret under /api/combos*) kan også mappes 1:1 fra et model-id-mønster, hvilket muliggør transparent omdirigering af et model-id i OpenAI-stil til en kombination.
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/model-combo-mappings |
Vis alle model→kombination-mappinger |
| POST | /api/model-combo-mappings |
Opret mapping — body: {pattern, comboId, priority?, enabled?, description?} |
| GET | /api/model-combo-mappings/[id] |
Hent en enkelt mapping |
| PUT | /api/model-combo-mappings/[id] |
Opdater felter i en eksisterende mapping |
| DELETE | /api/model-combo-mappings/[id] |
Fjern en mapping |
Godkendelse: administrationssession/API-nøgle (requireManagementAuth).
Webhooks
Udgående webhook-abonnementer på OmniRoute-hændelser (fuldførelse af anmodninger, opbrugte kvoter, nøglerotation osv.).
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/webhooks |
Vis webhooks (hemmeligheder maskeres som <prefix>...) |
| POST | /api/webhooks |
Opret webhook — body: {url, events?: ["*"], secret?, description?} |
| GET | /api/webhooks/[id] |
Hent en webhook |
| PUT | /api/webhooks/[id] |
Opdater url/events/secret/description |
| DELETE | /api/webhooks/[id] |
Fjern en webhook |
| POST | /api/webhooks/[id]/test |
Send en testpayload til webhook-URL'en, og returner leveringsstatus |
Godkendelse: administrationssession/API-nøgle (requireManagementAuth).
Registrerede nøgler (automatisk administration)
Bruges af undersystemet til automatisk nøgleadministration til at udstede og rotere API-nøgler hos en underliggende udbyder/konto med daglige/timemæssige kvoter.
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/v1/registered-keys |
Vis registrerede nøgler (kun maskeret præfiks) |
| POST | /api/v1/registered-keys |
Udsted en ny registreret nøgle — body: {name, provider?, accountId?, idempotencyKey?, expiresAt?, dailyBudget?, hourlyBudget?}. Returnerer den rå nøgle én gang. Returnerer 429, hvis kvoten afviser. |
| GET | /api/v1/registered-keys/[id] |
Hent metadataene for en registreret nøgle (intet råt nøglemateriale) |
| DELETE | /api/v1/registered-keys/[id] |
Tilbagekald en registreret nøgle |
| POST | /api/v1/registered-keys/[id]/revoke |
Eksplicit slutpunkt til tilbagekaldelse (samme effekt som DELETE) |
Godkendelse: Bearer-API-nøgle (isAuthenticated). Se også /v1/quotas/check og /v1/issues/report.
Agentprotokol
Cloudagentopgaver (Claude Code, Codex Cloud, OpenHands osv.), der udføres eksternt på vegne af OmniRoute-brugere.
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/v1/agents/tasks |
Vis opgaver — valgfrit ?provider=, ?status=, ?limit= (1–500, standard 50) |
| POST | /api/v1/agents/tasks |
Opret opgave — body valideres af CreateCloudAgentTaskSchema (providerId, prompt, source, options?). Returnerer 201 med en opgavekonvolut |
| DELETE | /api/v1/agents/tasks?id=... |
Slet en opgave |
| GET | /api/v1/agents/tasks/[id] |
Læs opgave — opdaterer synkront status fra den eksterne cloudagent, når et external_id er angivet |
| POST | /api/v1/agents/tasks/[id] |
Diskrimineret handling: {action: "approve"}, {action: "message", message} eller {action: "cancel"} |
| DELETE | /api/v1/agents/tasks/[id] |
Slet en specifik opgave efter id |
Godkendelse: administrationsgodkendelse er påkrævet for hver metode (
requireCloudAgentManagementAuth). Før v3.8.0 var disse ikke godkendelsesbeskyttede — se commit588a0333for den inkompatible ændring.
# Opret en Claude Code-cloudopgave
curl -X POST http://localhost:20128/api/v1/agents/tasks \
-H "Authorization: Bearer your-management-key" \
-H "Content-Type: application/json" \
-d '{"providerId":"claude-code-cloud","prompt":"Fix the failing test","source":{"repo":"...","branch":"..."}}'
Administrationsproxyer
Udgående HTTP(S)/SOCKS-proxyer, der kan tildeles udbydere, konti eller globalt.
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/v1/management/proxies |
Vis proxyer (med ?id= returneres én; med ?id=&where_used=1 returneres tildelingsgrafen) |
| POST | /api/v1/management/proxies |
Opret proxy — body valideres af createProxyRegistrySchema |
| PATCH | /api/v1/management/proxies |
Opdater proxy — body valideres af updateProxyRegistrySchema (kræver id) |
| DELETE | /api/v1/management/proxies?id=...&force=1 |
Slet proxy (brug force=1 til at fjerne tildelinger) |
| GET | /api/v1/management/proxies/assignments |
Vis tildelinger — kan filtreres efter proxy_id, scope, scope_id; angiv resolve_connection_id=<id> for at finde den aktive proxy for en forbindelse |
| PUT | /api/v1/management/proxies/assignments |
Tildel — body valideres af proxyAssignmentSchema ({scope, scopeId?, proxyId?}). Rydder dispatcherens cache |
| PUT | /api/v1/management/proxies/bulk-assign |
Massetildel — body valideres af bulkProxyAssignmentSchema ({scope, scopeIds[], proxyId?}) |
| GET | /api/v1/management/proxies/health?hours=24 |
Samlet proxytilstand (antal vellykkede/mislykkede forsøg, latenstid) over et tidsvindue |
Godkendelse: administrationssession/API-nøgle på hver rute (requireManagementAuth).
Opgavebeskrivelsens
POST /api/v1/management/proxies/[id]/assignmentsogPOST /api/v1/management/proxies/[id]/healthbetjenes af de flade/assignments- og/health-ruter, der er vist ovenfor — der findes ingen underordnede ruter pr. id i kodebasen.
Robusthed (udvidet)
OmniRoute tilbyder tre uafhængige mekanismer til midlertidige fejl. Administrationsendepunkterne nedenfor giver operatører mulighed for at aflæse og tilsidesætte dem:
| Omfang | Tilstandslagring | Aflæsning | Nulstilling / rydning |
|---|---|---|---|
| Udbyderafbryder | domain_circuit_breakers + i hukommelsen |
/api/monitoring/health |
POST /api/resilience/reset |
| Forbindelsesnedkøling | rateLimitedUntil på udbyderforbindelser |
/api/rate-limits, /api/providers/[id] |
(genaktiveres automatisk; ryd via udbyder-PUT) |
| Modelspærring | Modeltilgængelighedsregister i hukommelsen | GET /api/resilience/model-cooldowns |
DELETE /api/resilience/model-cooldowns |
PATCH /api/resilience accepterer tilsidesættelser af udbyderafbrydere under providerBreaker.oauth og providerBreaker.apikey. Hver profil understøtter degradationThreshold, failureThreshold og resetTimeoutMs; de samme felter er tilgængelige under Dashboard → Indstillinger → Robusthed.
# Ryd en enkelt modelspærring
curl -X DELETE http://localhost:20128/api/resilience/model-cooldowns \
-H "Cookie: auth_token=..." \
-H "Content-Type: application/json" \
-d '{"provider":"openai","model":"gpt-4o-mini"}'
# Ryd alle spærringer
curl -X DELETE http://localhost:20128/api/resilience/model-cooldowns \
-H "Cookie: auth_token=..." \
-d '{"all":true}'
Komplet konceptuel reference og standardværdier for afbrydere: Se CLAUDE.md → "Resilience Runtime State".
Færdigheder
Framework til udvidelse af OmniRoute med brugerdefinerede eksekverbare handlers samt integrationer med markedspladser.
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/skills |
Vis installerede færdigheder — kan filtreres med ?q=, ?mode=on|off|auto, ?source=skillsmp|skillssh|local, sideinddelt |
| GET | /api/skills/[id] |
Hent én færdighed |
| PUT | /api/skills/[id] |
Opdater færdighed (navn, beskrivelse, tilstand, skema, handler, tags) |
| DELETE | /api/skills/[id] |
Afinstaller en færdighed |
| POST | /api/skills/install |
Installer en færdighed fra et råt manifest — body: {name, version, description, schema:{input, output}, handlerCode, apiKeyId?} |
| GET | /api/skills/executions |
Vis de seneste færdighedskørsler (revisionsspor med input/output/varighed) |
| GET | /api/skills/marketplace?q=... |
Søg/populærliste fra SkillsMP-markedspladsen (kræver indstillingen skillsmpApiKey) |
| POST | /api/skills/marketplace/install |
Installer en færdighed efter id fra SkillsMP |
| GET | /api/skills/skillssh?q=&limit= |
Søg i skills.sh-registret |
| POST | /api/skills/skillssh/install |
Installer en færdighed efter id fra skills.sh |
Godkendelse: administrationssession/API-nøgle. Søgeruter til markedspladser accepterer enten administrationsgodkendelse eller en Bearer-API-nøgle (isAuthenticated).
Hukommelse
Vedvarende lager til samtale- og faktuel hukommelse, afgrænset pr. API-nøgle/session.
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/memory |
Vis hukommelser — ?apiKeyId=, ?type=, ?sessionId=, ?q=, med sideinddeling via offset/limit eller page/limit |
| POST | /api/memory |
Opret hukommelse — body valideret af Zod: {content, key, type?, sessionId?, apiKeyId?, metadata?, expiresAt?} |
| GET | /api/memory/[id] |
Hent én hukommelse |
| DELETE | /api/memory/[id] |
Slet en hukommelse |
| GET | /api/memory/health |
Hukommelsesundersystemets tilstand (databaseforbindelse, embeddings-backend, vektorindeksstatus) |
Godkendelse: administrationssession/API-nøgle (requireManagementAuth). type-enum: FACTUAL, EPISODIC, SEMANTIC, PROCEDURAL (se MemoryType i src/lib/memory/types.ts).
MCP-server
OmniRoute leveres med en integreret Model Context Protocol-server med 3 transporter (stdio, SSE, streamable-http) og værktøjer med afgrænsede tilladelser. Dashboard-endpoints nedenfor læser status-/revisionsdata og fungerer som proxy for HTTP-transporterne.
| Metode | Sti | Beskrivelse | |
|---|---|---|---|
| GET | /api/mcp/status |
Heartbeat, transport, onlinestatus, seneste kald, mest anvendte værktøjer, succesrate for de seneste 24 timer | |
| GET | /api/mcp/tools |
Liste over MCP-værktøjer med name, description, scopes, phase, auditLevel, sourceEndpoints |
|
| GET | /api/mcp/sse |
Åbn SSE-stream for SSE-transporten (returnerer 503, hvis MCP er deaktiveret, eller transporten ikke matcher) |
|
| POST | /api/mcp/sse |
Send JSON-RPC-frame via SSE-transporten | |
| GET | /api/mcp/stream |
Åbn SSE-siden af Streamable HTTP-transporten (serverinitierede meddelelser) | |
| POST | /api/mcp/stream |
Send JSON-RPC-frame via Streamable HTTP-transporten | |
| DELETE | /api/mcp/stream |
Afslut en Streamable HTTP-session | |
| GET | /api/mcp/audit |
Forespørg i revisionsloggen — ?limit=, ?offset=, ?tool=, `?success=true |
false, ?apiKeyId=` |
| GET | /api/mcp/audit/stats |
Samlede revisionsstatistikker (totaler, succesrate, gennemsnitlig varighed, mest anvendte værktøjer) |
Godkendelse: sse/stream-transporterne anvender den MCP-specifikke godkendelsesflade (Bearer-API-nøgle med mcp-scope); status/tools/audit*-ruterne kan læses fra dashboardet (ingen yderligere godkendelse kræves ud over adgang til dashboard-værten).
Begge HTTP-transporter styres af
settings.mcpEnabledogsettings.mcpTransport— en transportuoverensstemmelse returnerer400, og en deaktiveret MCP-tilstand returnerer503.
A2A-server
OmniRoute tilbyder et A2A-slutpunkt (Agent-to-Agent) baseret på JSON-RPC 2.0 samt en REST-wrapper til inspektion og brug i dashboards.
JSON-RPC
POST /a2a
Authorization: Bearer your-api-key # valgfrit, medmindre OMNIROUTE_API_KEY er angivet
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 1,
"method": "message/send",
"params": {
"skill": "smart-routing",
"messages": [{"role": "user", "content": "Send denne programmeringsopgave videre"}]
}
}
Understøttede metoder (alle afhænger af settings.a2aEnabled):
| Metode | Beskrivelse |
|---|---|
message/send |
Synkron udførelse af færdighed; returnerer {task, artifacts, metadata} |
message/stream |
Streamet SSE-udførelse af det samme sæt færdigheder |
tasks/get |
Hent en opgave via taskId |
tasks/cancel |
Annuller en opgave via taskId |
Indbyggede færdigheder: smart-routing, quota-management, provider-discovery, cost-analysis, health-report.
Agentkort
GET /.well-known/agent.json
Returnerer det offentlige A2A-agentkort (navn, beskrivelse, funktioner, færdighedskatalog og godkendelsesmetode) — caches offentligt i 1 time. Kræver ingen godkendelse.
REST-hjælpefunktioner
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/a2a/status |
A2A aktiveret + opgavestatistik + oversigt over cachet agentkort |
| GET | /api/a2a/tasks |
Vis opgaver — ?state=submitted|working|completed|failed|cancelled, ?skill=, ?limit= (≤200), ?offset= |
| POST | /api/a2a/tasks |
(Ikke implementeret som REST-hjælpefunktion — opret via JSON-RPC message/send) |
| GET | /api/a2a/tasks/[id] |
Hent én opgave |
| POST | /api/a2a/tasks/[id]/cancel |
Annuller en opgave |
Godkendelse: REST-hjælpefunktionerne kører uden administrationsgodkendelse (kan læses af dashboardet); JSON-RPC-ruten /a2a bruger Bearer OMNIROUTE_API_KEY, hvis den er konfigureret.
Cloud, evalueringer og vurdering
| Metode | Sti | Beskrivelse | ||
|---|---|---|---|---|
| POST | /api/cloud/auth |
Bekræft en Bearer-nøgle, og returner maskerede udbyderforbindelser + modelaliasser til cloudsynkroniseringsklienter | ||
| POST | /api/cloud/credentials/update |
Opdater krypterede legitimationsoplysninger for en cloudsynkroniseret udbyder | ||
| POST | /api/cloud/model/resolve |
Omsæt et logisk model-id til en konkret udbyder/model ved hjælp af den lokale routingtabel | ||
| GET | /api/cloud/models/alias |
Vis modelaliasser, som de eksponeres for cloudsynkronisering | ||
| GET | /api/assess |
Læs de seneste vurderingskategoriseringer (pr. udbyder/model) | ||
| POST | /api/assess |
Kør en vurdering — body: `{scope: {type:"all"} | {type:"provider", providerId} | {type:"model", modelId}, trigger?}` |
| GET | /api/evals |
Vis indbyggede evalueringspakker + de seneste kørsler | ||
| POST | /api/evals |
Start en evalueringskørsel | ||
| POST | /api/evals/suites |
Opret en brugerdefineret evalueringspakke — body valideres af evalSuiteSaveSchema |
||
| GET | /api/evals/suites/[id] |
Hent en brugerdefineret evalueringspakke |
Godkendelse: /api/cloud/auth validerer en Bearer-nøgle direkte; de øvrige ruter under /api/cloud/*, /api/evals/* og /api/assess kræver en administrationssession/API-nøgle. POST til /api/assess bruger validateBody med et diskrimineret union-scope-skema.
Administration af ACP (Agent Client Protocol)
som underprocesser. Disse endpoints administrerer registrering af ACP-agenter og registrering af brugerdefinerede agenter.
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/acp/agents |
Vis alle kendte CLI-agenter (indbyggede + brugerdefinerede) med installationsstatus, version og binær fil |
| POST | /api/acp/agents |
Registrer en brugerdefineret ACP-agent, eller opdater cachen — body: {id, name, binary, versionCommand, providerAlias, spawnArgs, protocol} eller {action: "refresh"} |
| DELETE | /api/acp/agents |
Fjern en brugerdefineret ACP-agent — query-parameter: ?id=<agentId> |
Eksempel på svar (GET /api/acp/agents):
{
"agents": [
{
"id": "claude",
"name": "Claude Code CLI",
"binary": "claude",
"version": "1.0.45",
"installed": true,
"protocol": "stdio",
"providerAlias": "claude",
"isCustom": false
},
{
"id": "my-custom-cli",
"name": "My Custom CLI",
"installed": false,
"protocol": "stdio",
"providerAlias": "my-provider",
"isCustom": true
}
],
"cacheTtlMs": 60000,
"cacheAge": 1234
}
Godkendelse: Kræver en administrationssession (auth_token-cookie til dashboardet) eller en
API-nøgle med administrationsomfang.
Se ACP Framework for alle detaljer.
Analyse og observerbarhed
Analyseendpoints i realtid til overvågning af routing, komprimering og diversitet
blandt udbydere. Disse driver siderne under /dashboard/analytics/*.
Analyse af automatisk routing
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/analytics/auto-routing |
Aggregerede statistikker for automatisk routing: samlet antal kald, strategifordeling, niveaufordeling, topudbydere |
| GET | /api/analytics/auto-routing?days=7 |
Statistik for et tidsvindue (standard er 24 timer) |
Eksempel på svar:
{
"window": "24h",
"totalCalls": 1234,
"strategyBreakdown": {
"rules": 800,
"cost": 200,
"latency": 150,
"sla-aware": 50,
"lkgp": 34
},
"tierBreakdown": {
"ultra": 100,
"pro": 500,
"standard": 400,
"free": 234
},
"topProviders": [
{ "provider": "openai", "calls": 500, "avgLatencyMs": 850 },
{ "provider": "anthropic", "calls": 300, "avgLatencyMs": 1200 }
]
}
Komprimeringsanalyse
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/analytics/compression |
Aggregerede komprimeringsstatistikker: sparede tokens, besparelse i %, tilstandsfordeling, motorforbrug |
Eksempel på svar:
{
"window": "24h",
"totalOriginalTokens": 5000000,
"totalCompressedTokens": 3500000,
"totalSavings": 1500000,
"savingsPct": 30.0,
"modeBreakdown": {
"lite": 400,
"standard": 600,
"aggressive": 100,
"ultra": 50,
"rtk": 84
},
"engineBreakdown": {
"caveman": 800,
"rtk": 434
}
}
Sporing af udbyderdiversitet
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/analytics/diversity |
Diversitetssporing baseret på Shannon-entropi: forhindrer enkelte fejlpunkter ved at måle spredningen blandt udbydere |
Eksempel på svar:
{
"window": "24h",
"shannonEntropy": 2.45,
"maxEntropy": 3.17,
"diversityRatio": 0.77,
"providerUsage": {
"openai": 0.4,
"anthropic": 0.25,
"google": 0.2,
"kiro": 0.15
},
"warnings": ["OpenAI accounts for 40% of traffic — consider diversifying"]
}
Godkendelse: Kræver en administrationssession eller en API-nøgle med administrationsomfang.
Administratorhandlinger
Endpoints kun for administratorer til driftsstyring.
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/admin/concurrency |
Læs aktuelle samtidighedsgrænser (globale + pr. udbyder) |
| POST | /api/admin/concurrency |
Opdater samtidighedsgrænser — body: {global?: number, perProvider?: Record<string, number>} |
Godkendelse: Kræver en administrationssession med administratoromfang.
Administration af CLI-værktøjer
Administrer CLI-værktøjer, der integreres med OmniRoute (antigravity, chipotle, commandCode, devin-cli osv.). Se Udbyderreference for den fulde liste.
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/cli-tools/all-statuses |
Status for alle CLI-værktøjer (installeret, version, senest set) |
| GET | /api/cli-tools/status |
Detaljeret status for ét CLI-værktøj (?tool=-forespørgsel) |
| POST | /api/cli-tools/apply |
Skriv et værktøjs genererede konfiguration (dryRun viser en forhåndsvisning; 422 + containerEphemeralTarget ved containerkørsel; migration angiver ældre Codex YAML) |
| GET | /api/cli-tools/backups |
Vis sikkerhedskopier af CLI-værktøjskonfigurationer |
| POST | /api/cli-tools/backups |
Opret en sikkerhedskopi af alle CLI-værktøjskonfigurationer |
| POST | /api/cli-tools/backups |
Gendan: Det samme endpoint med {tool, backupId} i body gendanner den pågældende sikkerhedskopi |
| GET | /api/cli-tools/antigravity-mitm |
Status for Antigravity MITM-proxyen (CLI-værktøjet "antigravity-mitm") |
| POST | /api/cli-tools/antigravity-mitm/alias |
Konfigurer antigravity-mitm-aliasser |
Godkendelse: Kræver en administrationssession.
Agentfærdigheder
Administrer AI-agentfærdigheder (svarende til OpenAI's brugerdefinerede GPT'er, men til agenter).
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/agent-skills |
Vis alle agentfærdigheder (indbyggede + brugerdefinerede) |
| GET | /api/agent-skills/[id] |
Hent en specifik agentfærdighed |
| POST | /api/agent-skills |
Opret en brugerdefineret agentfærdighed — body: {name, description, prompt, model?, temperature?} |
| PUT | /api/agent-skills/[id] |
Opdater en brugerdefineret agentfærdighed |
| DELETE | /api/agent-skills/[id] |
Slet en brugerdefineret agentfærdighed |
| GET | /api/agent-skills/[id]/raw |
Hent rå prompt + metadata (ingen udførelse) |
| POST | /api/agent-skills/generate |
Generer en ny færdighed med AI ud fra en beskrivelse i naturligt sprog |
Godkendelse: Kræver en administrationssession eller en API-nøgle med administrationsomfang.
Cacheadministration
Administrer den semantiske cache og ræsonneringscachen.
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/cache |
Cacheoversigt: samlet antal poster, hitrate, størrelse på disk |
| GET | /api/cache/entries |
Vis cachelagrede poster (med paginering) |
| DELETE | /api/cache/entries |
Slet cacheposter (filtrer efter forespørgselsparametre) |
| GET | /api/cache/stats |
Detaljeret cachestatistik (pr. udbyder, pr. model) |
| GET | /api/cache/reasoning |
Status for ræsonneringscache (til genafspilning af ræsonnering) |
| DELETE | /api/cache/reasoning |
Ryd ræsonneringscachen — forespørgselsparametre: ?toolCallId=<id> (enkelt), ?provider=<p> eller ingen (alle) |
Godkendelse: Kræver en administrationssession.
Hukommelsessystem
Administrer vedvarende hukommelse (FTS5 + vektorindlejringer).
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/memory |
Vis hukommelsesposter (filtrer efter omfang, type og søgeforespørgsel) |
| POST | /api/memory |
Opret en ny hukommelsespost — brødtekst: {scope, type, content, metadata?} |
| GET | /api/memory/[id] |
Hent en bestemt hukommelsespost |
| PUT | /api/memory/[id] |
Opdater en hukommelsespost |
| DELETE | /api/memory/[id] |
Slet en hukommelsespost |
| GET | /api/memory?q= |
Søg i hukommelsen (FTS5 + vektor) — statistik er inkluderet i det samme svar |
Godkendelse: Kræver en administrationssession eller en API-nøgle med administrationsomfang.
Webhooks
Administrer webhook-abonnementer på hændelser.
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/webhooks |
Vis alle webhook-abonnementer |
| POST | /api/webhooks |
Opret et webhook-abonnement — brødtekst: {url, events[], secret?, active?} |
| GET | /api/webhooks/[id] |
Hent et bestemt webhook-abonnement |
| PUT | /api/webhooks/[id] |
Opdater et webhook-abonnement |
| DELETE | /api/webhooks/[id] |
Slet et webhook-abonnement |
| GET | /api/webhooks/[id]/deliveries |
Vis leveringshistorikken for en webhook (log over vellykkede/mislykkede kald) |
| POST | /api/webhooks/[id]/test |
Send en testhændelse til en webhook |
Godkendelse: Kræver en administrationssession.
Se Webhook-framework for en komplet oversigt over hændelsestyper.
Færdighedsframework
Administrer færdigheder (frameworket til agentbaserede udvidelser).
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/skills |
Vis alle installerede færdigheder (indbyggede + brugerdefinerede) |
| POST | /api/skills/install |
Installer en færdighed fra en lokal sti eller URL |
| DELETE | /api/skills/[id] |
Afinstaller en færdighed |
| PUT | /api/skills/[id] |
Aktivér eller deaktiver en færdighed — body: {enabled?: boolean, mode?: "on" | "off" | "auto"} |
| POST | /api/skills/executions |
Kør en færdighed — body: {skillName, apiKeyId, input?, sessionId?} |
| GET | /api/skills/executions |
Vis kørselshistorik for alle færdigheder (filtrer efter ?apiKeyId=) |
Godkendelse: Kræver en administrationssession eller en API-nøgle med administrationsrettigheder.
Se Færdighedsframework for alle detaljer.
Plugins
Administrer OmniRoute-plugins (tredjepartsudvidelser).
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/plugins |
Vis installerede plugins |
| POST | /api/plugins/marketplace/install |
Installer et plugin fra markedspladsen |
| DELETE | /api/plugins/[name] |
Afinstaller et plugin |
| POST | /api/plugins/[name]/activate |
Aktivér et plugin |
| POST | /api/plugins/[name]/deactivate |
Deaktivér et plugin |
| GET | /api/plugins/[name]/config |
Hent plugin-konfigurationen |
| PUT | /api/plugins/[name]/config |
Opdater plugin-konfigurationen |
Godkendelse: Kræver en administrationssession.
Se Pluginframework for alle detaljer.
Skyggerouting
Skygge-/A-B-sammenligning af udbydere er ikke en selvstændig REST-grænseflade — den konfigureres via kombinationsrouting (se Automatisk kombination). Sammenligningsmålinger pr. kombination leveres af GET /api/combos/metrics.
Sikkerhedskontroller
Inspicer sikkerhedskontrollerne under kørsel (registrering af personhenførbare oplysninger, registrering af prompt-injektion og billedbrokobling). Sikkerhedskontrollerne køres ved hver anmodning; fravalg for individuelle kald sker via anmodningsheaderen x-omniroute-disabled-guardrails — der findes ingen vedvarende grænseflade til aktivering/deaktivering.
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /api/guardrails |
Vis de registrerede sikkerhedskontroller og deres status (navn / aktiveret / prioritet) |
| POST | /api/guardrails/test |
Udfør en prøvekørsel af pipelinen før kald på et eksempelinput — body: {input, disabledGuardrails?} |
Godkendelse: Kræver en administrationssession.
Se Sikkerhed > Sikkerhedskontroller for alle detaljer.
Godkendelse
Se Godkendelse til administration for de fire
legitimationsfamilier (dashboard-session, lokalt CLI-token, oma_live_…-adgangstoken,
API-nøgle med administrationsomfang), og hvordan de adskiller sig fra inferensnøgler.
- Dashboard-ruter (
/dashboard/*) brugerauth_token-cookien - Login bruger den gemte adgangskodehash med fallback til
INITIAL_PASSWORD requireLoginkan slås til eller fra via/api/settings/require-login/v1/*-ruter kræver valgfrit en Bearer-API-nøgle, nårREQUIRE_API_KEY=true- "administrationstoken" / "API-nøgle med administrationsomfang" i denne reference betyder en af familierne i den pågældende vejledning — ikke en udefineret ekstra hemmelighedstype
Inkompatibel ændring (v3.8.0) —
/api/v1/agents/tasks/*og administrationsendepunkterne for nedkølingsperioder kræver nu administrationsgodkendelse (dashboardetsauth_token-cookie eller en API-nøgle med administrationsomfang). Klienter, der tidligere kaldte disse ruter uden godkendelse, modtager401 Unauthorized. Se commit588a0333(fix(auth): require management auth for agent and cooldown APIs).