# API ์ฐธ์กฐ ๐ŸŒ **Languages:** ๐Ÿ‡บ๐Ÿ‡ธ [English](../../API_REFERENCE.md) | ๐Ÿ‡ง๐Ÿ‡ท [Portuguรชs (Brasil)](../pt-BR/API_REFERENCE.md) | ๐Ÿ‡ช๐Ÿ‡ธ [Espaรฑol](../es/API_REFERENCE.md) | ๐Ÿ‡ซ๐Ÿ‡ท [Franรงais](../fr/API_REFERENCE.md) | ๐Ÿ‡ฎ๐Ÿ‡น [Italiano](../it/API_REFERENCE.md) | ๐Ÿ‡ท๐Ÿ‡บ [ะ ัƒััะบะธะน](../ru/API_REFERENCE.md) | ๐Ÿ‡จ๐Ÿ‡ณ [ไธญๆ–‡ (็ฎ€ไฝ“)](../zh-CN/API_REFERENCE.md) | ๐Ÿ‡ฉ๐Ÿ‡ช [Deutsch](../de/API_REFERENCE.md) | ๐Ÿ‡ฎ๐Ÿ‡ณ [เคนเคฟเคจเฅเคฆเฅ€](../in/API_REFERENCE.md) | ๐Ÿ‡น๐Ÿ‡ญ [เน„เธ—เธข](../th/API_REFERENCE.md) | ๐Ÿ‡บ๐Ÿ‡ฆ [ะฃะบั€ะฐั—ะฝััŒะบะฐ](../uk-UA/API_REFERENCE.md) | ๐Ÿ‡ธ๐Ÿ‡ฆ [ุงู„ุนุฑุจูŠุฉ](../ar/API_REFERENCE.md) | ๐Ÿ‡ฏ๐Ÿ‡ต [ๆ—ฅๆœฌ่ชž](../ja/API_REFERENCE.md) | ๐Ÿ‡ป๐Ÿ‡ณ [Tiแบฟng Viแป‡t](../vi/API_REFERENCE.md) | ๐Ÿ‡ง๐Ÿ‡ฌ [ะ‘ัŠะปะณะฐั€ัะบะธ](../bg/API_REFERENCE.md) | ๐Ÿ‡ฉ๐Ÿ‡ฐ [Dansk](../da/API_REFERENCE.md) | ๐Ÿ‡ซ๐Ÿ‡ฎ [Suomi](../fi/API_REFERENCE.md) | ๐Ÿ‡ฎ๐Ÿ‡ฑ [ืขื‘ืจื™ืช](../he/API_REFERENCE.md) | ๐Ÿ‡ญ๐Ÿ‡บ [Magyar](../hu/API_REFERENCE.md) | ๐Ÿ‡ฎ๐Ÿ‡ฉ [Bahasa Indonesia](../id/API_REFERENCE.md) | ๐Ÿ‡ฐ๐Ÿ‡ท [ํ•œ๊ตญ์–ด](../ko/API_REFERENCE.md) | ๐Ÿ‡ฒ๐Ÿ‡พ [Bahasa Melayu](../ms/API_REFERENCE.md) | ๐Ÿ‡ณ๐Ÿ‡ฑ [Nederlands](../nl/API_REFERENCE.md) | ๐Ÿ‡ณ๐Ÿ‡ด [Norsk](../no/API_REFERENCE.md) | ๐Ÿ‡ต๐Ÿ‡น [Portuguรชs (Portugal)](../pt/API_REFERENCE.md) | ๐Ÿ‡ท๐Ÿ‡ด [Romรขnฤƒ](../ro/API_REFERENCE.md) | ๐Ÿ‡ต๐Ÿ‡ฑ [Polski](../pl/API_REFERENCE.md) | ๐Ÿ‡ธ๐Ÿ‡ฐ [Slovenฤina](../sk/API_REFERENCE.md) | ๐Ÿ‡ธ๐Ÿ‡ช [Svenska](../sv/API_REFERENCE.md) | ๐Ÿ‡ต๐Ÿ‡ญ [Filipino](../phi/API_REFERENCE.md) ๋ชจ๋“  OmniRoute API ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•œ ์ „์ฒด ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค. --- ## ๋ชฉ์ฐจ - [Chat Completions](#chat-completions) - [Embeddings](#embeddings) - [Image Generation](#image-generation) - [List Models](#list-models) - [Compatibility Endpoints](#compatibility-endpoints) - [Semantic Cache](#semantic-cache) - [Dashboard & Management](#dashboard--management) - [Request Processing](#request-processing) - [Authentication](#authentication) --- ## ์ฑ„ํŒ… ์™„๋ฃŒ ```bash 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 } ``` ### ์‚ฌ์šฉ์ž ์ •์˜ ํ—ค๋” | ํ—ค๋” | ๋ฐฉํ–ฅ | ์„ค๋ช… | | ------------------------ | ---- | ----------------------------------- | | `X-OmniRoute-No-Cache` | ์š”์ฒญ | ์บ์‹œ๋ฅผ ์šฐํšŒํ•˜๋ ค๋ฉด `true`๋กœ ์„ค์ • | | `X-OmniRoute-Progress` | ์š”์ฒญ | ์ง„ํ–‰ ์ด๋ฒคํŠธ์˜ ๊ฒฝ์šฐ `true`์œผ๋กœ ์„ค์ • | | `Idempotency-Key` | ์š”์ฒญ | ์ค‘๋ณต ์ œ๊ฑฐ ํ‚ค(5์ดˆ ์ฐฝ) | | `X-Request-Id` | ์š”์ฒญ | ๋Œ€์ฒด ์ค‘๋ณต ์ œ๊ฑฐ ํ‚ค | | `X-OmniRoute-Cache` | ์‘๋‹ต | `HIT` ๋˜๋Š” `MISS`(๋น„์ŠคํŠธ๋ฆฌ๋ฐ) | | `X-OmniRoute-Idempotent` | ์‘๋‹ต | ์ค‘๋ณต์ด ์ œ๊ฑฐ๋œ ๊ฒฝ์šฐ `true` | | `X-OmniRoute-Progress` | ์‘๋‹ต | `enabled` ์ง„ํ–‰ ์ƒํ™ฉ์„ ์ถ”์ ํ•˜๋Š” ๊ฒฝ์šฐ | --- ## ์ž„๋ฒ ๋”ฉ ```bash POST /v1/embeddings Authorization: Bearer your-api-key Content-Type: application/json { "model": "nebius/Qwen/Qwen3-Embedding-8B", "input": "The food was delicious" } ``` ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต๊ธ‰์ž: Nebius, OpenAI, Mistral, Together AI, Fireworks, NVIDIA. ```bash # List all embedding models GET /v1/embeddings ``` --- ## ์ด๋ฏธ์ง€ ์ƒ์„ฑ ```bash POST /v1/images/generations Authorization: Bearer your-api-key Content-Type: application/json { "model": "openai/dall-e-3", "prompt": "A beautiful sunset over mountains", "size": "1024x1024" } ``` ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ œ๊ณต์—…์ฒด: OpenAI(DALL-E), xAI(Grok Image), Together AI(FLUX), Fireworks AI. ```bash # List all image models GET /v1/images/generations ``` --- ## ๋ชจ๋ธ ๋ชฉ๋ก ```bash GET /v1/models Authorization: Bearer your-api-key โ†’ Returns all chat, embedding, and image models + combos in OpenAI format ``` --- ## ํ˜ธํ™˜์„ฑ ๋์  | ๋ฐฉ๋ฒ• | ๊ฒฝ๋กœ | ํ˜•์‹ | | ------ | --------------------------- | ----------------------- | | ํฌ์ŠคํŠธ | `/v1/chat/completions` | ์˜คํ”ˆAI | | ํฌ์ŠคํŠธ | `/v1/messages` | ์ธ๋ฅ˜ํ•™ | | ํฌ์ŠคํŠธ | `/v1/responses` | OpenAI ์‘๋‹ต | | ํฌ์ŠคํŠธ | `/v1/embeddings` | ์˜คํ”ˆAI | | ํฌ์ŠคํŠธ | `/v1/images/generations` | ์˜คํ”ˆAI | | ๋ฐ›๊ธฐ | `/v1/models` | ์˜คํ”ˆAI | | ํฌ์ŠคํŠธ | `/v1/messages/count_tokens` | ์ธ๋ฅ˜ํ•™ | | ๋ฐ›๊ธฐ | `/v1beta/models` | ์Œ๋‘ฅ์ด์ž๋ฆฌ | | ํฌ์ŠคํŠธ | `/v1beta/models/{...path}` | ์Œ๋‘ฅ์ด ์ž๋ฆฌ ์ƒ์„ฑ ์ฝ˜ํ…์ธ  | | ํฌ์ŠคํŠธ | `/v1/api/chat` | ์˜ฌ๋ผ๋งˆ | ### ์ „์šฉ ๊ณต๊ธ‰์ž ๊ฒฝ๋กœ ```bash POST /v1/providers/{provider}/chat/completions POST /v1/providers/{provider}/embeddings POST /v1/providers/{provider}/images/generations ``` ๊ณต๊ธ‰์ž ์ ‘๋‘์‚ฌ๊ฐ€ ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋ธ์€ `400`์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. --- ## ์‹œ๋งจํ‹ฑ ์บ์‹œ ```bash # Get cache stats GET /api/cache # Clear all caches DELETE /api/cache ``` ์‘๋‹ต ์˜ˆ: ```json { "semanticCache": { "memorySize": 42, "memoryMaxSize": 500, "dbSize": 128, "hitRate": 0.65 }, "idempotency": { "activeKeys": 3, "windowMs": 5000 } } ``` --- ## ๋Œ€์‹œ๋ณด๋“œ ๋ฐ ๊ด€๋ฆฌ ### ์ธ์ฆ | ์—”๋“œํฌ์ธํŠธ | ๋ฐฉ๋ฒ• | ์„ค๋ช… | | ----------------------------- | ------------- | ---------------- | | `/api/auth/login` | ํฌ์ŠคํŠธ | ๋กœ๊ทธ์ธ | | `/api/auth/logout` | ํฌ์ŠคํŠธ | ๋กœ๊ทธ์•„์›ƒ | | `/api/settings/require-login` | ๊ฐ€์ ธ์˜ค๊ธฐ/๋„ฃ๊ธฐ | ํ† ๊ธ€ ๋กœ๊ทธ์ธ ํ•„์š” | ### ๊ณต๊ธ‰์ž ๊ด€๋ฆฌ | ์—”๋“œํฌ์ธํŠธ | ๋ฐฉ๋ฒ• | ์„ค๋ช… | | ---------------------------- | ------------------ | ------------------ | | `/api/providers` | ๋ฐ›๊ธฐ/๊ฒŒ์‹œ | ๊ณต๊ธ‰์ž ๋ชฉ๋ก/์ƒ์„ฑ | | `/api/providers/[id]` | ๊ฐ€์ ธ์˜ค๊ธฐ/๋„ฃ๊ธฐ/์‚ญ์ œ | ๊ณต๊ธ‰์ž ๊ด€๋ฆฌ | | `/api/providers/[id]/test` | ํฌ์ŠคํŠธ | ํ…Œ์ŠคํŠธ ๊ณต๊ธ‰์ž ์—ฐ๊ฒฐ | | `/api/providers/[id]/models` | ๋ฐ›๊ธฐ | ๊ณต๊ธ‰์ž ๋ชจ๋ธ ๋‚˜์—ด | | `/api/providers/validate` | ํฌ์ŠคํŠธ | ๊ณต๊ธ‰์ž ๊ตฌ์„ฑ ํ™•์ธ | | `/api/provider-nodes*` | ๋‹ค์–‘ํ•œ | ๊ณต๊ธ‰์ž ๋…ธ๋“œ ๊ด€๋ฆฌ | | `/api/provider-models` | ๊ฐ€์ ธ์˜ค๊ธฐ/๊ฒŒ์‹œ/์‚ญ์ œ | ๋งž์ถคํ˜• ๋ชจ๋ธ | ### OAuth ํ๋ฆ„ | ์—”๋“œํฌ์ธํŠธ | ๋ฐฉ๋ฒ• | ์„ค๋ช… | | -------------------------------- | ------ | -------------- | | `/api/oauth/[provider]/[action]` | ๋‹ค์–‘ํ•œ | ๊ณต๊ธ‰์ž๋ณ„ OAuth | ### ๋ผ์šฐํŒ… ๋ฐ ๊ตฌ์„ฑ | ์—”๋“œํฌ์ธํŠธ | ๋ฐฉ๋ฒ• | ์„ค๋ช… | | --------------------- | --------- | ------------------------- | | `/api/models/alias` | ๋ฐ›๊ธฐ/๊ฒŒ์‹œ | ๋ชจ๋ธ ๋ณ„์นญ | | `/api/models/catalog` | ๋ฐ›๊ธฐ | ๊ณต๊ธ‰์ž + ์œ ํ˜•๋ณ„ ๋ชจ๋“  ๋ชจ๋ธ | | `/api/combos*` | ๋‹ค์–‘ํ•œ | ์ฝค๋ณด ๊ด€๋ฆฌ | | `/api/keys*` | ๋‹ค์–‘ํ•œ | API ํ‚ค ๊ด€๋ฆฌ | | `/api/pricing` | ๋ฐ›๊ธฐ | ๋ชจ๋ธ ๊ฐ€๊ฒฉ | ### ์‚ฌ์šฉ ๋ฐ ๋ถ„์„ | ์—”๋“œํฌ์ธํŠธ | ๋ฐฉ๋ฒ• | ์„ค๋ช… | | --------------------------- | ---- | -------------- | | `/api/usage/history` | ๋ฐ›๊ธฐ | ์ด์šฉ๋‚ด์—ญ | | `/api/usage/logs` | ๋ฐ›๊ธฐ | ์‚ฌ์šฉ ๋กœ๊ทธ | | `/api/usage/request-logs` | ๋ฐ›๊ธฐ | ์š”์ฒญ ์ˆ˜์ค€ ๋กœ๊ทธ | | `/api/usage/[connectionId]` | ๋ฐ›๊ธฐ | ์—ฐ๊ฒฐ๋ณ„ ์‚ฌ์šฉ๋Ÿ‰ | ### ์„ค์ • | ์—”๋“œํฌ์ธํŠธ | ๋ฐฉ๋ฒ• | ์„ค๋ช… | | ------------------------------- | ------------- | ---------------------- | | `/api/settings` | ๊ฐ€์ ธ์˜ค๊ธฐ/๋„ฃ๊ธฐ | ์ผ๋ฐ˜ ์„ค์ • | | `/api/settings/proxy` | ๊ฐ€์ ธ์˜ค๊ธฐ/๋„ฃ๊ธฐ | ๋„คํŠธ์›Œํฌ ํ”„๋ก์‹œ ๊ตฌ์„ฑ | | `/api/settings/proxy/test` | ํฌ์ŠคํŠธ | ํ”„๋ก์‹œ ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ | | `/api/settings/ip-filter` | ๊ฐ€์ ธ์˜ค๊ธฐ/๋„ฃ๊ธฐ | IP ํ—ˆ์šฉ ๋ชฉ๋ก/์ฐจ๋‹จ ๋ชฉ๋ก | | `/api/settings/thinking-budget` | ๊ฐ€์ ธ์˜ค๊ธฐ/๋„ฃ๊ธฐ | ํ† ํฐ ์˜ˆ์‚ฐ ์ถ”๋ก  | | `/api/settings/system-prompt` | ๊ฐ€์ ธ์˜ค๊ธฐ/๋„ฃ๊ธฐ | ๊ธ€๋กœ๋ฒŒ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ | ### ๋ชจ๋‹ˆํ„ฐ๋ง | ์—”๋“œํฌ์ธํŠธ | ๋ฐฉ๋ฒ• | ์„ค๋ช… | | ------------------------ | ------------- | ------------------ | | `/api/sessions` | ๋ฐ›๊ธฐ | ํ™œ์„ฑ ์„ธ์…˜ ์ถ”์  | | `/api/rate-limits` | ๋ฐ›๊ธฐ | ๊ณ„์ •๋‹น ๋น„์œจ ์ œํ•œ | | `/api/monitoring/health` | ๋ฐ›๊ธฐ | ๊ฑด๊ฐ•๊ฒ€์ง„ | | `/api/cache` | ๊ฐ€์ ธ์˜ค๊ธฐ/์‚ญ์ œ | ์บ์‹œ ํ†ต๊ณ„ / ์ง€์šฐ๊ธฐ | ### ๋ฐฑ์—… ๋ฐ ๋‚ด๋ณด๋‚ด๊ธฐ/๊ฐ€์ ธ์˜ค๊ธฐ | ์—”๋“œํฌ์ธํŠธ | ๋ฐฉ๋ฒ• | ์„ค๋ช… | | --------------------------- | ------ | ----------------------------------------- | | `/api/db-backups` | ๋ฐ›๊ธฐ | ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฐฑ์—… ๋‚˜์—ด | | `/api/db-backups` | ๋„ฃ์–ด | ์ˆ˜๋™ ๋ฐฑ์—… ์ƒ์„ฑ | | `/api/db-backups` | ํฌ์ŠคํŠธ | ํŠน์ • ๋ฐฑ์—…์—์„œ ๋ณต์› | | `/api/db-backups/export` | ๋ฐ›๊ธฐ | ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ .sqlite ํŒŒ์ผ๋กœ ๋‹ค์šด๋กœ๋“œ | | `/api/db-backups/import` | ํฌ์ŠคํŠธ | ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋Œ€์ฒดํ•  .sqlite ํŒŒ์ผ ์—…๋กœ๋“œ | | `/api/db-backups/exportAll` | ๋ฐ›๊ธฐ | ์ „์ฒด ๋ฐฑ์—…์„ .tar.gz ์•„์นด์ด๋ธŒ๋กœ ๋‹ค์šด๋กœ๋“œ | ### ํด๋ผ์šฐ๋“œ ๋™๊ธฐํ™” | ์—”๋“œํฌ์ธํŠธ | ๋ฐฉ๋ฒ• | ์„ค๋ช… | | ---------------------- | ------ | -------------------- | | `/api/sync/cloud` | ๋‹ค์–‘ํ•œ | ํด๋ผ์šฐ๋“œ ๋™๊ธฐํ™” ์ž‘์—… | | `/api/sync/initialize` | ํฌ์ŠคํŠธ | ๋™๊ธฐํ™” ์ดˆ๊ธฐํ™” | | `/api/cloud/*` | ๋‹ค์–‘ํ•œ | ํด๋ผ์šฐ๋“œ ๊ด€๋ฆฌ | ### CLI ๋„๊ตฌ | ์—”๋“œํฌ์ธํŠธ | ๋ฐฉ๋ฒ• | ์„ค๋ช… | | ---------------------------------- | ---- | ----------------- | | `/api/cli-tools/claude-settings` | ๋ฐ›๊ธฐ | ํด๋กœ๋“œ CLI ์ƒํƒœ | | `/api/cli-tools/codex-settings` | ๋ฐ›๊ธฐ | ์ฝ”๋ฑ์Šค CLI ์ƒํƒœ | | `/api/cli-tools/droid-settings` | ๋ฐ›๊ธฐ | ๋“œ๋กœ์ด๋“œ CLI ์ƒํƒœ | | `/api/cli-tools/openclaw-settings` | ๋ฐ›๊ธฐ | OpenClaw CLI ์ƒํƒœ | | `/api/cli-tools/runtime/[toolId]` | ๋ฐ›๊ธฐ | ์ผ๋ฐ˜ CLI ๋Ÿฐํƒ€์ž„ | CLI ์‘๋‹ต์—๋Š” `installed`, `runnable`, `command`, `commandPath`, `runtimeMode`, `reason`์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ### ๋ณต์›๋ ฅ ๋ฐ ์†๋„ ์ œํ•œ | ์—”๋“œํฌ์ธํŠธ | ๋ฐฉ๋ฒ• | ์„ค๋ช… | | ----------------------- | ------------- | ------------------------------- | | `/api/resilience` | ๊ฐ€์ ธ์˜ค๊ธฐ/๋„ฃ๊ธฐ | ํƒ„๋ ฅ์„ฑ ํ”„๋กœํ•„ ๊ฐ€์ ธ์˜ค๊ธฐ/์—…๋ฐ์ดํŠธ | | `/api/resilience/reset` | ํฌ์ŠคํŠธ | ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ ์žฌ์„ค์ • | | `/api/rate-limits` | ๋ฐ›๊ธฐ | ๊ณ„์ •๋ณ„ ๋น„์œจํ•œ๋„ ํ˜„ํ™ฉ | | `/api/rate-limit` | ๋ฐ›๊ธฐ | ๊ธ€๋กœ๋ฒŒ ๋น„์œจ ์ œํ•œ ๊ตฌ์„ฑ | ### ํ‰๊ฐ€ | ์—”๋“œํฌ์ธํŠธ | ๋ฐฉ๋ฒ• | ์„ค๋ช… | | ------------ | --------- | -------------------------- | | `/api/evals` | ๋ฐ›๊ธฐ/๊ฒŒ์‹œ | ํ‰๊ฐ€ ์ œํ’ˆ๊ตฐ ๋‚˜์—ด/ํ‰๊ฐ€ ์‹คํ–‰ | ### ์ •์ฑ… | ์—”๋“œํฌ์ธํŠธ | ๋ฐฉ๋ฒ• | ์„ค๋ช… | | --------------- | ------------------ | ---------------- | | `/api/policies` | ๊ฐ€์ ธ์˜ค๊ธฐ/๊ฒŒ์‹œ/์‚ญ์ œ | ๋ผ์šฐํŒ… ์ •์ฑ… ๊ด€๋ฆฌ | ### ๊ทœ์ • ์ค€์ˆ˜ | ์—”๋“œํฌ์ธํŠธ | ๋ฐฉ๋ฒ• | ์„ค๋ช… | | --------------------------- | ---- | ----------------------------- | | `/api/compliance/audit-log` | ๋ฐ›๊ธฐ | ๊ทœ์ • ์ค€์ˆ˜ ๊ฐ์‚ฌ ๋กœ๊ทธ(๋งˆ์ง€๋ง‰ N) | ### v1beta(Gemini ํ˜ธํ™˜) | ์—”๋“œํฌ์ธํŠธ | ๋ฐฉ๋ฒ• | ์„ค๋ช… | | -------------------------- | ------ | --------------------------------------- | | `/v1beta/models` | ๋ฐ›๊ธฐ | Gemini ํ˜•์‹์œผ๋กœ ๋ชจ๋ธ ๋‚˜์—ด | | `/v1beta/models/{...path}` | ํฌ์ŠคํŠธ | ์Œ๋‘ฅ์ด์ž๋ฆฌ `generateContent` ์—”๋“œํฌ์ธํŠธ | ์ด๋Ÿฌํ•œ ์—”๋“œํฌ์ธํŠธ๋Š” ๊ธฐ๋ณธ Gemini SDK ํ˜ธํ™˜์„ฑ์„ ๊ธฐ๋Œ€ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ Gemini์˜ API ํ˜•์‹์„ ๋ฏธ๋Ÿฌ๋งํ•ฉ๋‹ˆ๋‹ค. ### ๋‚ด๋ถ€/์‹œ์Šคํ…œ API | ์—”๋“œํฌ์ธํŠธ | ๋ฐฉ๋ฒ• | ์„ค๋ช… | | --------------- | ------ | ----------------------------------------- | | `/api/init` | ๋ฐ›๊ธฐ | ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ดˆ๊ธฐํ™” ํ™•์ธ(์ฒซ ์‹คํ–‰ ์‹œ ์‚ฌ์šฉ) | | `/api/tags` | ๋ฐ›๊ธฐ | Ollama ํ˜ธํ™˜ ๋ชจ๋ธ ํƒœ๊ทธ(Ollama ๊ณ ๊ฐ์šฉ) | | `/api/restart` | ํฌ์ŠคํŠธ | ์ •์ƒ์ ์ธ ์„œ๋ฒ„ ๋‹ค์‹œ ์‹œ์ž‘ ํŠธ๋ฆฌ๊ฑฐ | | `/api/shutdown` | ํฌ์ŠคํŠธ | ์ •์ƒ์ ์ธ ์„œ๋ฒ„ ์ข…๋ฃŒ ํŠธ๋ฆฌ๊ฑฐ | > **์ฐธ๊ณ :** ์ด๋Ÿฌํ•œ ๋์ ์€ ์‹œ์Šคํ…œ ๋‚ด๋ถ€์ ์œผ๋กœ ๋˜๋Š” Ollama ํด๋ผ์ด์–ธํŠธ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ตœ์ข… ์‚ฌ์šฉ์ž๋Š” ํ˜ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. --- ## ์˜ค๋””์˜ค ์ „์‚ฌ ```bash POST /v1/audio/transcriptions Authorization: Bearer your-api-key Content-Type: multipart/form-data ``` Deepgram ๋˜๋Š” AssemblyAI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค๋””์˜ค ํŒŒ์ผ์„ ๋…น์Œํ•ฉ๋‹ˆ๋‹ค. **์š”์ฒญ:** ```bash curl -X POST http://localhost:20128/v1/audio/transcriptions \ -H "Authorization: Bearer your-api-key" \ -F "file=@recording.mp3" \ -F "model=deepgram/nova-3" ``` **์‘๋‹ต:** ```json { "text": "Hello, this is the transcribed audio content.", "task": "transcribe", "language": "en", "duration": 12.5 } ``` **์ง€์›๋˜๋Š” ์ œ๊ณต์—…์ฒด:** `deepgram/nova-3`, `assemblyai/best`. **์ง€์›๋˜๋Š” ํ˜•์‹:** `mp3`, `wav`, `m4a`, `flac`, `ogg`, `webm`. --- ## ์˜ฌ๋ผ๋งˆ ํ˜ธํ™˜์„ฑ Ollama์˜ API ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ๊ฒฝ์šฐ: ```bash # Chat endpoint (Ollama format) POST /v1/api/chat # Model listing (Ollama format) GET /api/tags ``` ์š”์ฒญ์€ Ollama์™€ ๋‚ด๋ถ€ ํ˜•์‹ ๊ฐ„์— ์ž๋™์œผ๋กœ ๋ฒˆ์—ญ๋ฉ๋‹ˆ๋‹ค. --- ## ์›๊ฒฉ ์ธก์ • ```bash # Get latency telemetry summary (p50/p95/p99 per provider) GET /api/telemetry/summary ``` **์‘๋‹ต:** ```json { "providers": { "claudeCode": { "p50": 245, "p95": 890, "p99": 1200, "count": 150 }, "github": { "p50": 180, "p95": 620, "p99": 950, "count": 320 } } } ``` --- ## ์˜ˆ์‚ฐ ```bash # Get budget status for all API keys GET /api/usage/budget # Set or update a budget POST /api/usage/budget Content-Type: application/json { "keyId": "key-123", "limit": 50.00, "period": "monthly" } ``` --- ## ๋ชจ๋ธ ๊ฐ€์šฉ์„ฑ ```bash # Get real-time model availability across all providers GET /api/models/availability # Check availability for a specific model POST /api/models/availability Content-Type: application/json { "model": "claude-sonnet-4-5-20250929" } ``` --- ## ์š”์ฒญ ์ฒ˜๋ฆฌ 1. ํด๋ผ์ด์–ธํŠธ๋Š” `/v1/*`์— ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. 2. ๊ฒฝ๋กœ ํ•ธ๋“ค๋Ÿฌ ํ˜ธ์ถœ `handleChat`, `handleEmbedding`, `handleAudioTranscription` ๋˜๋Š” `handleImageGeneration` 3. ๋ชจ๋ธ์ด ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ง์ ‘ ๊ณต๊ธ‰์ž/๋ชจ๋ธ ๋˜๋Š” ๋ณ„์นญ/์ฝค๋ณด). 4. ๊ณ„์ • ๊ฐ€์šฉ์„ฑ ํ•„ํ„ฐ๋ง์„ ํ†ตํ•ด ๋กœ์ปฌ DB์—์„œ ์ž๊ฒฉ ์ฆ๋ช…์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. 5. ์ฑ„ํŒ…์˜ ๊ฒฝ์šฐ: `handleChatCore` โ€” ํ˜•์‹ ๊ฐ์ง€, ๋ฒˆ์—ญ, ์บ์‹œ ํ™•์ธ, ๋ฉฑ๋“ฑ์„ฑ ํ™•์ธ 6. ๊ณต๊ธ‰์ž ์‹คํ–‰์ž๊ฐ€ ์—…์ŠคํŠธ๋ฆผ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. 7. ์‘๋‹ต์€ ํด๋ผ์ด์–ธํŠธ ํ˜•์‹(์ฑ„ํŒ…)์œผ๋กœ ๋‹ค์‹œ ๋ณ€ํ™˜๋˜๊ฑฐ๋‚˜ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค(์ž„๋ฒ ๋”ฉ/์ด๋ฏธ์ง€/์˜ค๋””์˜ค). 8. ์‚ฌ์šฉ/๋กœ๊น… ๊ธฐ๋ก 9. ์ฝค๋ณด ๊ทœ์น™์— ๋”ฐ๋ผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ Fallback ์ ์šฉ ์ „์ฒด ์•„ํ‚คํ…์ฒ˜ ์ฐธ์กฐ: [link](ARCHITECTURE.md) --- ## ์ธ์ฆ - ๋Œ€์‹œ๋ณด๋“œ ๊ฒฝ๋กœ(`/dashboard/*`)๋Š” `auth_token` ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. - ๋กœ๊ทธ์ธ์€ ์ €์žฅ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. `INITIAL_PASSWORD`๋กœ ๋Œ€์ฒด - `requireLogin`์€ `/api/settings/require-login`์„ ํ†ตํ•ด ์ „ํ™˜ ๊ฐ€๋Šฅ - `/v1/*` ๊ฒฝ๋กœ์—๋Š” `REQUIRE_API_KEY=true`์ธ ๊ฒฝ์šฐ ์„ ํƒ์ ์œผ๋กœ Bearer API ํ‚ค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.