mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-06 06:52:09 +03:00
Follow-up nº 3 of the 2026-08-31 docs audit: 416 implemented routes had no OpenAPI entry (gamification, radar, skills, webhooks, mcp, a2a, tunnels, version-manager and plugins were absent entirely). Adds a minimal, honest entry for each — real methods parsed from every route.ts's exports, a group tag and a neutral path-derived summary; no invented semantics. Rich schemas remain hand-curated in the existing entries. Generated by scripts/ad-hoc/gen-openapi-missing-paths.mjs, which enumerates routes with the same lib check:api-docs-refs uses — the spec now covers 692/692 real routes and the gate verifies every spec path has a real route.
1347 lines
37 KiB
TypeScript
1347 lines
37 KiB
TypeScript
// 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 <omnirouteCatchAll>",
|
||
description: "",
|
||
tag: "V1 OmnirouteCatchAll",
|
||
tags: ["V1 OmnirouteCatchAll"],
|
||
requiresAuth: false,
|
||
hasRequestBody: false,
|
||
},
|
||
{
|
||
path: "/api/v1/{omnirouteCatchAll}",
|
||
method: "GET",
|
||
summary: "GET <omnirouteCatchAll>",
|
||
description: "",
|
||
tag: "V1 OmnirouteCatchAll",
|
||
tags: ["V1 OmnirouteCatchAll"],
|
||
requiresAuth: false,
|
||
hasRequestBody: false,
|
||
},
|
||
{
|
||
path: "/api/v1/{omnirouteCatchAll}",
|
||
method: "PATCH",
|
||
summary: "PATCH <omnirouteCatchAll>",
|
||
description: "",
|
||
tag: "V1 OmnirouteCatchAll",
|
||
tags: ["V1 OmnirouteCatchAll"],
|
||
requiresAuth: false,
|
||
hasRequestBody: false,
|
||
},
|
||
{
|
||
path: "/api/v1/{omnirouteCatchAll}",
|
||
method: "POST",
|
||
summary: "POST <omnirouteCatchAll>",
|
||
description: "",
|
||
tag: "V1 OmnirouteCatchAll",
|
||
tags: ["V1 OmnirouteCatchAll"],
|
||
requiresAuth: false,
|
||
hasRequestBody: false,
|
||
},
|
||
{
|
||
path: "/api/v1/{omnirouteCatchAll}",
|
||
method: "PUT",
|
||
summary: "PUT <omnirouteCatchAll>",
|
||
description: "",
|
||
tag: "V1 OmnirouteCatchAll",
|
||
tags: ["V1 OmnirouteCatchAll"],
|
||
requiresAuth: false,
|
||
hasRequestBody: false,
|
||
},
|
||
{
|
||
path: "/api/v1/accounts/{id}/limits",
|
||
method: "GET",
|
||
summary: "GET accounts › <id> › limits",
|
||
description: "",
|
||
tag: "V1 Accounts",
|
||
tags: ["V1 Accounts"],
|
||
requiresAuth: false,
|
||
hasRequestBody: false,
|
||
},
|
||
{
|
||
path: "/api/v1/accounts/{id}/limits",
|
||
method: "PUT",
|
||
summary: "PUT accounts › <id> › 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 › <id>",
|
||
description: "",
|
||
tag: "V1 Agents",
|
||
tags: ["V1 Agents"],
|
||
requiresAuth: false,
|
||
hasRequestBody: false,
|
||
},
|
||
{
|
||
path: "/api/v1/agents/tasks/{id}",
|
||
method: "GET",
|
||
summary: "GET agents › tasks › <id>",
|
||
description: "",
|
||
tag: "V1 Agents",
|
||
tags: ["V1 Agents"],
|
||
requiresAuth: false,
|
||
hasRequestBody: false,
|
||
},
|
||
{
|
||
path: "/api/v1/agents/tasks/{id}",
|
||
method: "POST",
|
||
summary: "POST agents › tasks › <id>",
|
||
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 › <channel> › 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 › <id>",
|
||
description: "",
|
||
tag: "V1 Batches",
|
||
tags: ["V1 Batches"],
|
||
requiresAuth: false,
|
||
hasRequestBody: false,
|
||
},
|
||
{
|
||
path: "/api/v1/batches/{id}",
|
||
method: "GET",
|
||
summary: "GET batches › <id>",
|
||
description: "",
|
||
tag: "V1 Batches",
|
||
tags: ["V1 Batches"],
|
||
requiresAuth: false,
|
||
hasRequestBody: false,
|
||
},
|
||
{
|
||
path: "/api/v1/batches/{id}/cancel",
|
||
method: "POST",
|
||
summary: "POST batches › <id> › 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 › <id>",
|
||
description: "",
|
||
tag: "V1 Files",
|
||
tags: ["V1 Files"],
|
||
requiresAuth: false,
|
||
hasRequestBody: false,
|
||
},
|
||
{
|
||
path: "/api/v1/files/{id}",
|
||
method: "GET",
|
||
summary: "GET files › <id>",
|
||
description: "",
|
||
tag: "V1 Files",
|
||
tags: ["V1 Files"],
|
||
requiresAuth: false,
|
||
hasRequestBody: false,
|
||
},
|
||
{
|
||
path: "/api/v1/files/{id}/content",
|
||
method: "GET",
|
||
summary: "GET files › <id> › 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 › <model>",
|
||
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 › <provider> › limits",
|
||
description: "",
|
||
tag: "V1 Providers",
|
||
tags: ["V1 Providers"],
|
||
requiresAuth: false,
|
||
hasRequestBody: false,
|
||
},
|
||
{
|
||
path: "/api/v1/providers/{provider}/limits",
|
||
method: "PUT",
|
||
summary: "PUT providers › <provider> › 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 › <id>",
|
||
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 › <id>",
|
||
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 › <id> › 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 › <path>",
|
||
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 › <token>",
|
||
description: "",
|
||
tag: "V1 Vscode",
|
||
tags: ["V1 Vscode"],
|
||
requiresAuth: false,
|
||
hasRequestBody: false,
|
||
},
|
||
{
|
||
path: "/api/v1/vscode/{token}/api/chat",
|
||
method: "POST",
|
||
summary: "POST vscode › <token> › 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 › <token> › 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 › <token> › 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 › <token> › 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 › <token> › chat › completions",
|
||
description: "",
|
||
tag: "V1 Vscode",
|
||
tags: ["V1 Vscode"],
|
||
requiresAuth: false,
|
||
hasRequestBody: false,
|
||
},
|
||
{
|
||
path: "/api/v1/vscode/{token}/combos",
|
||
method: "GET",
|
||
summary: "GET vscode › <token> › combos",
|
||
description: "",
|
||
tag: "V1 Vscode",
|
||
tags: ["V1 Vscode"],
|
||
requiresAuth: false,
|
||
hasRequestBody: false,
|
||
},
|
||
{
|
||
path: "/api/v1/vscode/{token}/models",
|
||
method: "GET",
|
||
summary: "GET vscode › <token> › models",
|
||
description: "",
|
||
tag: "V1 Vscode",
|
||
tags: ["V1 Vscode"],
|
||
requiresAuth: false,
|
||
hasRequestBody: false,
|
||
},
|
||
{
|
||
path: "/api/v1/vscode/{token}/responses",
|
||
method: "POST",
|
||
summary: "POST vscode › <token> › 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 › <token> › 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 › <token> › 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 › <token> › <{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 › <token> › <{slug>}",
|
||
description: "",
|
||
tag: "V1 Vscode",
|
||
tags: ["V1 Vscode"],
|
||
requiresAuth: false,
|
||
hasRequestBody: false,
|
||
},
|
||
{
|
||
path: "/api/v1/vscode/raw/{token}",
|
||
method: "GET",
|
||
summary: "GET vscode › raw › <token>",
|
||
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 › <token> › 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 › <token> › 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 › <token> › 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 › <token> › 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 › <token> › 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 › <token> › 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 › <token> › 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 › <token> › 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 › <token> › 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 › <token> › 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();
|