// AUTO-GENERATED by scripts/docs/gen-openapi-module.mjs — DO NOT EDIT MANUALLY // Regenerate with: node scripts/docs/gen-openapi-module.mjs // // Source of truth: docs/openapi.yaml // // The Api Explorer consumes `OPENAPI_ENDPOINTS`; the spec metadata // (`OPENAPI_VERSION`, `OPENAPI_TITLE`) is surfaced in the page header. export interface OpenApiEndpoint { /** Path template — may contain `{param}` placeholders. */ path: string; /** HTTP method in upper case (GET / POST / PUT / DELETE / PATCH / ...). */ method: string; /** Short one-line summary from the spec. */ summary: string; /** Long-form description (markdown is allowed). */ description: string; /** Primary tag — used for sidebar grouping in the Api Explorer. */ tag: string; /** All tags declared on the operation. */ tags: string[]; /** `true` when the operation declares a non-empty `security` array. */ requiresAuth: boolean; /** `true` when the operation declares a `requestBody`. */ hasRequestBody: boolean; } export const OPENAPI_VERSION = "3.8.51"; export const OPENAPI_TITLE = "OmniRoute API"; export const OPENAPI_ENDPOINTS: OpenApiEndpoint[] = [ { path: "/api/v1", method: "GET", summary: "API v1 root endpoint", description: "Returns basic API info and status.", tag: "System", tags: ["System"], requiresAuth: true, hasRequestBody: false, }, { path: "/api/v1/{omnirouteCatchAll}", method: "DELETE", summary: "DELETE ", description: "", tag: "V1 OmnirouteCatchAll", tags: ["V1 OmnirouteCatchAll"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/{omnirouteCatchAll}", method: "GET", summary: "GET ", description: "", tag: "V1 OmnirouteCatchAll", tags: ["V1 OmnirouteCatchAll"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/{omnirouteCatchAll}", method: "PATCH", summary: "PATCH ", description: "", tag: "V1 OmnirouteCatchAll", tags: ["V1 OmnirouteCatchAll"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/{omnirouteCatchAll}", method: "POST", summary: "POST ", description: "", tag: "V1 OmnirouteCatchAll", tags: ["V1 OmnirouteCatchAll"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/{omnirouteCatchAll}", method: "PUT", summary: "PUT ", description: "", tag: "V1 OmnirouteCatchAll", tags: ["V1 OmnirouteCatchAll"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/accounts/{id}/limits", method: "GET", summary: "GET accounts › › limits", description: "", tag: "V1 Accounts", tags: ["V1 Accounts"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/accounts/{id}/limits", method: "PUT", summary: "PUT accounts › › limits", description: "", tag: "V1 Accounts", tags: ["V1 Accounts"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/agents/credentials", method: "GET", summary: "GET agents › credentials", description: "", tag: "V1 Agents", tags: ["V1 Agents"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/agents/credentials", method: "POST", summary: "POST agents › credentials", description: "", tag: "V1 Agents", tags: ["V1 Agents"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/agents/health", method: "GET", summary: "GET agents › health", description: "", tag: "V1 Agents", tags: ["V1 Agents"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/agents/tasks", method: "DELETE", summary: "DELETE agents › tasks", description: "", tag: "V1 Agents", tags: ["V1 Agents"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/agents/tasks", method: "GET", summary: "GET agents › tasks", description: "", tag: "V1 Agents", tags: ["V1 Agents"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/agents/tasks", method: "POST", summary: "POST agents › tasks", description: "", tag: "V1 Agents", tags: ["V1 Agents"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/agents/tasks/{id}", method: "DELETE", summary: "DELETE agents › tasks › ", description: "", tag: "V1 Agents", tags: ["V1 Agents"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/agents/tasks/{id}", method: "GET", summary: "GET agents › tasks › ", description: "", tag: "V1 Agents", tags: ["V1 Agents"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/agents/tasks/{id}", method: "POST", summary: "POST agents › tasks › ", description: "", tag: "V1 Agents", tags: ["V1 Agents"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/antigravity", method: "POST", summary: "POST antigravity", description: "", tag: "V1 Antigravity", tags: ["V1 Antigravity"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/api/chat", method: "POST", summary: "Ollama-compatible chat endpoint", description: "Provides compatibility with Ollama's /api/chat format.", tag: "Chat", tags: ["Chat"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/audio/speech", method: "POST", summary: "Generate speech audio", description: "Text-to-speech endpoint. Routes to configured TTS providers.", tag: "Audio", tags: ["Audio"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/audio/transcriptions", method: "POST", summary: "Transcribe audio", description: "Audio-to-text transcription endpoint.", tag: "Audio", tags: ["Audio"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/audio/translations", method: "POST", summary: "Translate audio to English", description: "OpenAI Whisper–compatible audio translation (multipart/form-data). Unlike `/api/v1/audio/transcriptions`, output is always English regardless of the source language. Success responses carry the `X-OmniRoute-*` cost-telemetry headers.", tag: "Audio", tags: ["Audio"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/auto-combo/{channel}/candidates", method: "GET", summary: "GET auto combo › › candidates", description: "", tag: "V1 Auto-combo", tags: ["V1 Auto-combo"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/batches", method: "GET", summary: "GET batches", description: "", tag: "V1 Batches", tags: ["V1 Batches"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/batches", method: "POST", summary: "POST batches", description: "", tag: "V1 Batches", tags: ["V1 Batches"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/batches/{id}", method: "DELETE", summary: "DELETE batches › ", description: "", tag: "V1 Batches", tags: ["V1 Batches"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/batches/{id}", method: "GET", summary: "GET batches › ", description: "", tag: "V1 Batches", tags: ["V1 Batches"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/batches/{id}/cancel", method: "POST", summary: "POST batches › › cancel", description: "", tag: "V1 Batches", tags: ["V1 Batches"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/batches/delete-completed", method: "DELETE", summary: "DELETE batches › delete completed", description: "", tag: "V1 Batches", tags: ["V1 Batches"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/chat/completions", method: "POST", summary: "Create chat completion", description: "OpenAI-compatible chat completions endpoint. Routes to configured providers.", tag: "Chat", tags: ["Chat"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/classify", method: "POST", summary: "POST classify", description: "", tag: "V1 Classify", tags: ["V1 Classify"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/combos", method: "GET", summary: "GET combos", description: "", tag: "V1 Combos", tags: ["V1 Combos"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/completions", method: "POST", summary: "POST completions", description: "", tag: "V1 Completions", tags: ["V1 Completions"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/embeddings", method: "POST", summary: "Create embeddings", description: "", tag: "Embeddings", tags: ["Embeddings"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/explain/routing", method: "GET", summary: "Routing explainability snapshot", description: "Returns the most recent routing events (bounded in-memory ring buffer) plus the per-provider/model quality snapshot from `open-sse/services/routing`. Routing metadata only — never prompts, bodies, headers or credentials. Auth mirrors `/api/v1/combos`: a valid Bearer API key or a dashboard session; with `REQUIRE_API_KEY=false` anonymous reads are allowed.", tag: "Telemetry", tags: ["Telemetry"], requiresAuth: true, hasRequestBody: false, }, { path: "/api/v1/files", method: "GET", summary: "GET files", description: "", tag: "V1 Files", tags: ["V1 Files"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/files", method: "POST", summary: "POST files", description: "", tag: "V1 Files", tags: ["V1 Files"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/files/{id}", method: "DELETE", summary: "DELETE files › ", description: "", tag: "V1 Files", tags: ["V1 Files"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/files/{id}", method: "GET", summary: "GET files › ", description: "", tag: "V1 Files", tags: ["V1 Files"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/files/{id}/content", method: "GET", summary: "GET files › › content", description: "", tag: "V1 Files", tags: ["V1 Files"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/images/edits", method: "POST", summary: "POST images › edits", description: "", tag: "V1 Images", tags: ["V1 Images"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/images/generations", method: "POST", summary: "Generate images", description: "", tag: "Images", tags: ["Images"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/images/upscale", method: "GET", summary: "GET images › upscale", description: "", tag: "V1 Images", tags: ["V1 Images"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/images/upscale", method: "POST", summary: "POST images › upscale", description: "", tag: "V1 Images", tags: ["V1 Images"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/issues/report", method: "POST", summary: "POST issues › report", description: "", tag: "V1 Issues", tags: ["V1 Issues"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/management/proxies", method: "DELETE", summary: "DELETE management › proxies", description: "", tag: "V1 Management", tags: ["V1 Management"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/management/proxies", method: "GET", summary: "GET management › proxies", description: "", tag: "V1 Management", tags: ["V1 Management"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/management/proxies", method: "PATCH", summary: "PATCH management › proxies", description: "", tag: "V1 Management", tags: ["V1 Management"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/management/proxies", method: "POST", summary: "POST management › proxies", description: "", tag: "V1 Management", tags: ["V1 Management"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/management/proxies/assignments", method: "GET", summary: "GET management › proxies › assignments", description: "", tag: "V1 Management", tags: ["V1 Management"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/management/proxies/assignments", method: "PUT", summary: "PUT management › proxies › assignments", description: "", tag: "V1 Management", tags: ["V1 Management"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/management/proxies/bulk-assign", method: "PUT", summary: "PUT management › proxies › bulk assign", description: "", tag: "V1 Management", tags: ["V1 Management"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/management/proxies/health", method: "GET", summary: "GET management › proxies › health", description: "", tag: "V1 Management", tags: ["V1 Management"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/management/proxy-subscriptions", method: "GET", summary: "List proxy subscriptions", description: "Lists all operator-supplied proxy subscription links. Also starts the background auto-refresh scheduler (idempotent) so enabled subscriptions stay in sync. Credentials embedded in `url` are redacted in the response.", tag: "Proxy Subscriptions", tags: ["Proxy Subscriptions"], requiresAuth: true, hasRequestBody: false, }, { path: "/api/v1/management/proxy-subscriptions", method: "POST", summary: "Create a proxy subscription", description: "Creates a subscription record. If `mode` is `rule`, at least one entry in `ruleProviders` is required. `updateIntervalMinutes` defaults to 60 and `enabled` defaults to `false` when omitted or not exactly `true`.", tag: "Proxy Subscriptions", tags: ["Proxy Subscriptions"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/management/proxy-subscriptions/{id}", method: "DELETE", summary: "Delete a proxy subscription", description: "Removes the subscription record and unbinds/drops its synced proxy_registry rows.", tag: "Proxy Subscriptions", tags: ["Proxy Subscriptions"], requiresAuth: true, hasRequestBody: false, }, { path: "/api/v1/management/proxy-subscriptions/{id}", method: "GET", summary: "Get a proxy subscription", description: "", tag: "Proxy Subscriptions", tags: ["Proxy Subscriptions"], requiresAuth: true, hasRequestBody: false, }, { path: "/api/v1/management/proxy-subscriptions/{id}", method: "PATCH", summary: "Update a proxy subscription", description: "Partial update — only fields present in the body are changed (name/url/mode/ruleProviders/localCoreEndpoint/updateIntervalMinutes/enabled).", tag: "Proxy Subscriptions", tags: ["Proxy Subscriptions"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/management/proxy-subscriptions/{id}/nodes", method: "GET", summary: "Get a subscription's last-parsed node summary", description: "Returns the last-parsed node list without re-fetching the (possibly slow) subscription URL.", tag: "Proxy Subscriptions", tags: ["Proxy Subscriptions"], requiresAuth: true, hasRequestBody: false, }, { path: "/api/v1/management/proxy-subscriptions/{id}/refresh", method: "POST", summary: "Refresh a proxy subscription", description: "Re-fetches and re-parses the subscription URL, syncs its nodes into `proxy_registry`, and (re)binds the pool.", tag: "Proxy Subscriptions", tags: ["Proxy Subscriptions"], requiresAuth: true, hasRequestBody: false, }, { path: "/api/v1/me/status", method: "GET", summary: "GET me › status", description: "", tag: "V1 Me", tags: ["V1 Me"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/messages", method: "POST", summary: "Create message (Anthropic-compatible)", description: "Anthropic Messages API endpoint. Routes to Claude providers.", tag: "Messages", tags: ["Messages"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/messages/count_tokens", method: "POST", summary: "Count tokens for a message", description: "", tag: "Messages", tags: ["Messages"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/models", method: "GET", summary: "List available models", description: "Returns all models available across configured providers.", tag: "Models", tags: ["Models"], requiresAuth: true, hasRequestBody: false, }, { path: "/api/v1/models/{model}", method: "GET", summary: "GET models › ", description: "", tag: "V1 Models", tags: ["V1 Models"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/moderations", method: "POST", summary: "Create moderation", description: "Content moderation endpoint. Routes to configured moderation providers.", tag: "Moderations", tags: ["Moderations"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/multimodal-embeddings", method: "GET", summary: "List embedding models (Jina multimodal-embeddings alias)", description: "", tag: "Embeddings", tags: ["Embeddings"], requiresAuth: true, hasRequestBody: false, }, { path: "/api/v1/multimodal-embeddings", method: "POST", summary: "Create embeddings (Jina multimodal-embeddings alias)", description: "Same handler as `POST /api/v1/embeddings`. Provided so Jina-compatible clients that call `/v1/multimodal-embeddings` do not receive HTTP 404 `unknown_route`.", tag: "Embeddings", tags: ["Embeddings"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/muse-code/models", method: "GET", summary: "GET muse code › models", description: "", tag: "V1 Muse-code", tags: ["V1 Muse-code"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/music/generations", method: "GET", summary: "GET music › generations", description: "", tag: "V1 Music", tags: ["V1 Music"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/music/generations", method: "POST", summary: "POST music › generations", description: "", tag: "V1 Music", tags: ["V1 Music"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/ocr", method: "POST", summary: "Document OCR", description: "Multi-provider document OCR endpoint (Mistral OCR–compatible request and response shape). Accepts a JSON body referencing a document/image and returns extracted text. `model` selects the provider via a `provider/model` prefix (e.g. `mistral/mistral-ocr-latest`, `azure-document-intelligence/prebuilt-read`, `vertex-deepseek-ocr/deepseek-ocr-maas`); a bare model id (e.g. `mistral-ocr-latest`) resolves to its registered provider, and an omitted `model` defaults to Mistral. Azure Document Intelligence is asynchronous upstream — the handler polls the returned operation until it succeeds or fails before responding, so this endpoint can take longer to return for that provider. Success responses carry the `X-OmniRoute-*` cost-telemetry headers.", tag: "Images", tags: ["Images"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/provider-plugin-manifest", method: "GET", summary: "Provider plugin manifest", description: "Returns the manifest describing installed provider plugins.", tag: "Providers", tags: ["Providers"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/providers/{provider}/chat/completions", method: "POST", summary: "Create chat completion (provider-specific)", description: "Routes to a specific provider by name.", tag: "Chat", tags: ["Chat"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/providers/{provider}/embeddings", method: "POST", summary: "Create embeddings (provider-specific)", description: "", tag: "Embeddings", tags: ["Embeddings"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/providers/{provider}/images/generations", method: "POST", summary: "Generate images (provider-specific)", description: "", tag: "Images", tags: ["Images"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/providers/{provider}/limits", method: "GET", summary: "GET providers › › limits", description: "", tag: "V1 Providers", tags: ["V1 Providers"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/providers/{provider}/limits", method: "PUT", summary: "PUT providers › › limits", description: "", tag: "V1 Providers", tags: ["V1 Providers"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/providers/{provider}/models", method: "GET", summary: "List models for a specific provider", description: "Returns only models for the selected provider with provider prefix removed from each model id.", tag: "Models", tags: ["Models"], requiresAuth: true, hasRequestBody: false, }, { path: "/api/v1/providers/suggested-models", method: "GET", summary: "Suggested media models", description: "Read-only server-side proxy to the public HuggingFace Hub models search API, used by the dashboard to suggest models for a media provider kind without exposing an HF token client-side. Never accepts or returns credentials.", tag: "Providers", tags: ["Providers"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/quotas/check", method: "GET", summary: "GET quotas › check", description: "", tag: "V1 Quotas", tags: ["V1 Quotas"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/registered-keys", method: "GET", summary: "GET registered keys", description: "", tag: "V1 Registered-keys", tags: ["V1 Registered-keys"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/registered-keys", method: "POST", summary: "POST registered keys", description: "", tag: "V1 Registered-keys", tags: ["V1 Registered-keys"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/registered-keys/{id}", method: "DELETE", summary: "DELETE registered keys › ", description: "", tag: "V1 Registered-keys", tags: ["V1 Registered-keys"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/registered-keys/{id}", method: "GET", summary: "GET registered keys › ", description: "", tag: "V1 Registered-keys", tags: ["V1 Registered-keys"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/registered-keys/{id}/revoke", method: "POST", summary: "POST registered keys › › revoke", description: "", tag: "V1 Registered-keys", tags: ["V1 Registered-keys"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/relay/chat/completions", method: "POST", summary: "POST relay › chat › completions", description: "", tag: "V1 Relay", tags: ["V1 Relay"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/relay/chat/completions/bifrost", method: "POST", summary: "POST relay › chat › completions › bifrost", description: "", tag: "V1 Relay", tags: ["V1 Relay"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/rerank", method: "POST", summary: "Rerank documents", description: "Document reranking endpoint.", tag: "Rerank", tags: ["Rerank"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/responses", method: "POST", summary: "Create response (OpenAI Responses API)", description: "OpenAI Responses API endpoint.", tag: "Responses", tags: ["Responses"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/responses/{path}", method: "POST", summary: "POST responses › ", description: "", tag: "V1 Responses", tags: ["V1 Responses"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/search", method: "GET", summary: "List search providers", description: "Lists configured search providers and their supported search types.", tag: "Search", tags: ["Search"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/search", method: "POST", summary: "Run a unified search", description: "Searches the web, news, or X through a configured provider. Set `provider` to `xquik-search` to use Xquik for X search. The aliases `xquik` and `xquik_search` resolve to the same provider. AnySearch (`anysearch-search`, aliases `anysearch` / `anysearch_search`) provides free fallback-only web search.", tag: "Search", tags: ["Search"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/search/analytics", method: "GET", summary: "GET search › analytics", description: "", tag: "V1 Search", tags: ["V1 Search"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/segment", method: "POST", summary: "POST segment", description: "", tag: "V1 Segment", tags: ["V1 Segment"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/session-leases", method: "POST", summary: "Acquire, inspect, renew, or release an exclusive managed connection lease", description: "Requires an API key with `lease:exclusive` and an explicit non-empty\n`allowedConnections` policy. The opaque owner is bound to the authenticated API key;\nthe lease owns an eligible connection, not a provider or model. Managed inference\nrequests present the owner and exact generation headers. Temporary foreign occupancy\nreturns 429 `WAITING_FOR_CAPACITY` with `Retry-After`. Acquire, renew, and release retain\ntheir connection-free response shapes. The explicit status action is owner-, key-, and\ngeneration-fenced and returns only privacy-safe display metadata for an active binding.\n", tag: "Session Leases", tags: ["Session Leases"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/speech-to-text", method: "POST", summary: "ElevenLabs speech-to-text", description: "Streams the request body to `POST https://api.elevenlabs.io/v1/speech-to-text` using the stored `elevenlabs` provider credentials. `content-type` and `accept` are forwarded; the upstream body is relayed unchanged.", tag: "Audio", tags: ["Audio"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/text-to-speech/{voiceId}", method: "POST", summary: "ElevenLabs text-to-speech", description: "Streams the request body to `POST https://api.elevenlabs.io/v1/text-to-speech/{voiceId}` using the stored `elevenlabs` provider credentials. `voiceId` must match `^[A-Za-z0-9_-]+$` or the request is rejected with 400 before any upstream call.", tag: "Audio", tags: ["Audio"], requiresAuth: true, hasRequestBody: true, }, { path: "/api/v1/video-bridge/drilldown", method: "DELETE", summary: "DELETE video bridge › drilldown", description: "", tag: "V1 Video-bridge", tags: ["V1 Video-bridge"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/video-bridge/drilldown", method: "GET", summary: "GET video bridge › drilldown", description: "", tag: "V1 Video-bridge", tags: ["V1 Video-bridge"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/videos/generations", method: "GET", summary: "GET videos › generations", description: "", tag: "V1 Videos", tags: ["V1 Videos"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/videos/generations", method: "POST", summary: "POST videos › generations", description: "", tag: "V1 Videos", tags: ["V1 Videos"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/voices", method: "GET", summary: "List ElevenLabs voices", description: "Proxies `GET https://api.elevenlabs.io/v1/voices` using the stored `elevenlabs` provider credentials (the caller never sends `xi-api-key`). The incoming query string is forwarded unchanged.", tag: "Audio", tags: ["Audio"], requiresAuth: true, hasRequestBody: false, }, { path: "/api/v1/vscode/{token}", method: "GET", summary: "GET vscode › ", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/{token}/api/chat", method: "POST", summary: "POST vscode › › api › chat", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/{token}/api/show", method: "POST", summary: "POST vscode › › api › show", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/{token}/api/tags", method: "GET", summary: "GET vscode › › api › tags", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/{token}/api/version", method: "GET", summary: "GET vscode › › api › version", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/{token}/chat/completions", method: "POST", summary: "POST vscode › › chat › completions", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/{token}/combos", method: "GET", summary: "GET vscode › › combos", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/{token}/models", method: "GET", summary: "GET vscode › › models", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/{token}/responses", method: "POST", summary: "POST vscode › › responses", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/{token}/v1/chat/completions", method: "POST", summary: "POST vscode › › v1 › chat › completions", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/{token}/v1/models", method: "GET", summary: "GET vscode › › v1 › models", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/combos/{token}/{{slug}}", method: "GET", summary: "GET vscode › combos › › <{slug>}", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/combos/{token}/{{slug}}", method: "POST", summary: "POST vscode › combos › › <{slug>}", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/raw/{token}", method: "GET", summary: "GET vscode › raw › ", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/raw/{token}/api/chat", method: "POST", summary: "POST vscode › raw › › api › chat", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/raw/{token}/api/show", method: "POST", summary: "POST vscode › raw › › api › show", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/raw/{token}/api/tags", method: "GET", summary: "GET vscode › raw › › api › tags", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/raw/{token}/api/version", method: "GET", summary: "GET vscode › raw › › api › version", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/raw/{token}/chat/completions", method: "POST", summary: "POST vscode › raw › › chat › completions", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/raw/{token}/combos", method: "GET", summary: "GET vscode › raw › › combos", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/raw/{token}/models", method: "GET", summary: "GET vscode › raw › › models", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/raw/{token}/responses", method: "POST", summary: "POST vscode › raw › › responses", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/raw/{token}/v1/chat/completions", method: "POST", summary: "POST vscode › raw › › v1 › chat › completions", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/vscode/raw/{token}/v1/models", method: "GET", summary: "GET vscode › raw › › v1 › models", description: "", tag: "V1 Vscode", tags: ["V1 Vscode"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/web/fetch", method: "POST", summary: "POST web › fetch", description: "", tag: "V1 Web", tags: ["V1 Web"], requiresAuth: false, hasRequestBody: false, }, { path: "/api/v1/ws", method: "GET", summary: "Chat completion over WebSocket (handshake + upgrade)", description: "OpenAI-compatible chat over a WebSocket connection. `GET` with `?handshake=1` returns the connection descriptor (auth path, message protocol and live-event channels) as JSON; a plain `GET` without an Upgrade returns `426 Upgrade Required`. After upgrading, the client exchanges JSON frames — `{type:\"request\", id, payload:{model, messages}}` to start a completion and `{type:\"cancel\", id}` to abort it. A separate live channel (default port `LIVE_WS_PORT=20129`, path `/live`) streams dashboard events on the `requests`, `combo` and `credentials` topics with a 15s heartbeat. Requires an API key.", tag: "Chat", tags: ["Chat"], requiresAuth: true, hasRequestBody: false, }, { path: "/api/v1beta/models", method: "GET", summary: "List models (Gemini format)", description: "Returns models in Gemini v1beta format for native SDK compatibility", tag: "Models", tags: ["Models"], requiresAuth: true, hasRequestBody: false, }, { path: "/api/v1beta/models/{path}", method: "POST", summary: "Gemini generateContent", description: "Gemini-compatible generateContent endpoint", tag: "Models", tags: ["Models"], requiresAuth: true, hasRequestBody: true, }, ]; export const OPENAPI_TAGS: string[] = Array.from( new Set(OPENAPI_ENDPOINTS.map((endpoint) => endpoint.tag)) ).sort();