Files
OmniRoute/docs/i18n/pa/docs/reference/API_REFERENCE.md
Diego Rodrigues de Sa e Souza b637350680 fix(docs): re-sync the 65 documentation mirror sets; section-level docs pipeline; drift gate blocking (#13940)
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
2026-09-17 02:55:31 -03:00

1778 lines
173 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# API Reference (ਪੰਜਾਬੀ)
🌐 **Languages:** 🇺🇸 [English](../../../../reference/API_REFERENCE.md) · 🇪🇹 [am](../../../am/docs/reference/API_REFERENCE.md) · 🇸🇦 [ar](../../../ar/docs/reference/API_REFERENCE.md) · 🇦🇿 [az](../../../az/docs/reference/API_REFERENCE.md) · 🇧🇬 [bg](../../../bg/docs/reference/API_REFERENCE.md) · 🇧🇩 [bn](../../../bn/docs/reference/API_REFERENCE.md) · 🇨🇿 [cs](../../../cs/docs/reference/API_REFERENCE.md) · 🇩🇰 [da](../../../da/docs/reference/API_REFERENCE.md) · 🇩🇪 [de](../../../de/docs/reference/API_REFERENCE.md) · 🇬🇷 [el](../../../el/docs/reference/API_REFERENCE.md) · 🇪🇸 [es](../../../es/docs/reference/API_REFERENCE.md) · 🇪🇪 [et](../../../et/docs/reference/API_REFERENCE.md) · 🇮🇷 [fa](../../../fa/docs/reference/API_REFERENCE.md) · 🇫🇮 [fi](../../../fi/docs/reference/API_REFERENCE.md) · 🇫🇷 [fr](../../../fr/docs/reference/API_REFERENCE.md) · 🇮🇪 [ga](../../../ga/docs/reference/API_REFERENCE.md) · 🇮🇳 [gu](../../../gu/docs/reference/API_REFERENCE.md) · 🇳🇬 [ha](../../../ha/docs/reference/API_REFERENCE.md) · 🇮🇱 [he](../../../he/docs/reference/API_REFERENCE.md) · 🇮🇳 [hi](../../../hi/docs/reference/API_REFERENCE.md) · 🇭🇷 [hr](../../../hr/docs/reference/API_REFERENCE.md) · 🇭🇺 [hu](../../../hu/docs/reference/API_REFERENCE.md) · 🇦🇲 [hy](../../../hy/docs/reference/API_REFERENCE.md) · 🇮🇩 [id](../../../id/docs/reference/API_REFERENCE.md) · 🇳🇬 [ig](../../../ig/docs/reference/API_REFERENCE.md) · 🇮🇹 [it](../../../it/docs/reference/API_REFERENCE.md) · 🇯🇵 [ja](../../../ja/docs/reference/API_REFERENCE.md) · 🇬🇪 [ka](../../../ka/docs/reference/API_REFERENCE.md) · 🇰🇭 [km](../../../km/docs/reference/API_REFERENCE.md) · 🇮🇳 [kn](../../../kn/docs/reference/API_REFERENCE.md) · 🇰🇷 [ko](../../../ko/docs/reference/API_REFERENCE.md) · 🇱🇹 [lt](../../../lt/docs/reference/API_REFERENCE.md) · 🇱🇻 [lv](../../../lv/docs/reference/API_REFERENCE.md) · 🇮🇳 [ml](../../../ml/docs/reference/API_REFERENCE.md) · 🇮🇳 [mr](../../../mr/docs/reference/API_REFERENCE.md) · 🇲🇾 [ms](../../../ms/docs/reference/API_REFERENCE.md) · 🇲🇹 [mt](../../../mt/docs/reference/API_REFERENCE.md) · 🇲🇲 [my](../../../my/docs/reference/API_REFERENCE.md) · 🇳🇵 [ne](../../../ne/docs/reference/API_REFERENCE.md) · 🇳🇱 [nl](../../../nl/docs/reference/API_REFERENCE.md) · 🇳🇴 [no](../../../no/docs/reference/API_REFERENCE.md) · 🇮🇳 [or](../../../or/docs/reference/API_REFERENCE.md) · 🇵🇭 [phi](../../../phi/docs/reference/API_REFERENCE.md) · 🇵🇱 [pl](../../../pl/docs/reference/API_REFERENCE.md) · 🇵🇹 [pt](../../../pt/docs/reference/API_REFERENCE.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/reference/API_REFERENCE.md) · 🇷🇴 [ro](../../../ro/docs/reference/API_REFERENCE.md) · 🇷🇺 [ru](../../../ru/docs/reference/API_REFERENCE.md) · 🇱🇰 [si](../../../si/docs/reference/API_REFERENCE.md) · 🇸🇰 [sk](../../../sk/docs/reference/API_REFERENCE.md) · 🇸🇮 [sl](../../../sl/docs/reference/API_REFERENCE.md) · 🇷🇸 [sr](../../../sr/docs/reference/API_REFERENCE.md) · 🇸🇪 [sv](../../../sv/docs/reference/API_REFERENCE.md) · 🇰🇪 [sw](../../../sw/docs/reference/API_REFERENCE.md) · 🇮🇳 [ta](../../../ta/docs/reference/API_REFERENCE.md) · 🇮🇳 [te](../../../te/docs/reference/API_REFERENCE.md) · 🇹🇭 [th](../../../th/docs/reference/API_REFERENCE.md) · 🇹🇷 [tr](../../../tr/docs/reference/API_REFERENCE.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/reference/API_REFERENCE.md) · 🇵🇰 [ur](../../../ur/docs/reference/API_REFERENCE.md) · 🇺🇿 [uz](../../../uz/docs/reference/API_REFERENCE.md) · 🇻🇳 [vi](../../../vi/docs/reference/API_REFERENCE.md) · 🇳🇬 [yo](../../../yo/docs/reference/API_REFERENCE.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/reference/API_REFERENCE.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/reference/API_REFERENCE.md)
---
🌐 **ਭਾਸ਼ਾਵਾਂ:** 🇺🇸 [English](./API_REFERENCE.md) | 🇪🇹 [አማርኛ](../i18n/am/docs/reference/API_REFERENCE.md) | 🇸🇦 [العربية](../i18n/ar/docs/reference/API_REFERENCE.md) | 🇦🇿 [Azərbaycan dili](../i18n/az/docs/reference/API_REFERENCE.md) | 🇧🇬 [Български](../i18n/bg/docs/reference/API_REFERENCE.md) | 🇧🇩 [বাংলা](../i18n/bn/docs/reference/API_REFERENCE.md) | 🇨🇿 [Čeština](../i18n/cs/docs/reference/API_REFERENCE.md) | 🇩🇰 [Dansk](../i18n/da/docs/reference/API_REFERENCE.md) | 🇩🇪 [Deutsch](../i18n/de/docs/reference/API_REFERENCE.md) | 🇬🇷 [Ελληνικά](../i18n/el/docs/reference/API_REFERENCE.md) | 🇪🇸 [Español](../i18n/es/docs/reference/API_REFERENCE.md) | 🇪🇪 [Eesti](../i18n/et/docs/reference/API_REFERENCE.md) | 🇮🇷 [فارسی](../i18n/fa/docs/reference/API_REFERENCE.md) | 🇫🇮 [Suomi](../i18n/fi/docs/reference/API_REFERENCE.md) | 🇫🇷 [Français](../i18n/fr/docs/reference/API_REFERENCE.md) | 🇮🇪 [Gaeilge](../i18n/ga/docs/reference/API_REFERENCE.md) | 🇮🇳 [ગુજરાતી](../i18n/gu/docs/reference/API_REFERENCE.md) | 🇳🇬 [Hausa](../i18n/ha/docs/reference/API_REFERENCE.md) | 🇮🇱 [עברית](../i18n/he/docs/reference/API_REFERENCE.md) | 🇮🇳 [हिन्दी](../i18n/hi/docs/reference/API_REFERENCE.md) | 🇭🇷 [Hrvatski](../i18n/hr/docs/reference/API_REFERENCE.md) | 🇭🇺 [Magyar](../i18n/hu/docs/reference/API_REFERENCE.md) | 🇦🇲 [Հայերեն](../i18n/hy/docs/reference/API_REFERENCE.md) | 🇮🇩 [Bahasa Indonesia](../i18n/id/docs/reference/API_REFERENCE.md) | 🇳🇬 [Igbo](../i18n/ig/docs/reference/API_REFERENCE.md) | 🇮🇹 [Italiano](../i18n/it/docs/reference/API_REFERENCE.md) | 🇯🇵 [日本語](../i18n/ja/docs/reference/API_REFERENCE.md) | 🇬🇪 [ქართული](../i18n/ka/docs/reference/API_REFERENCE.md) | 🇰🇭 [ខ្មែរ](../i18n/km/docs/reference/API_REFERENCE.md) | 🇮🇳 [ಕನ್ನಡ](../i18n/kn/docs/reference/API_REFERENCE.md) | 🇰🇷 [한국어](../i18n/ko/docs/reference/API_REFERENCE.md) | 🇱🇹 [Lietuvių](../i18n/lt/docs/reference/API_REFERENCE.md) | 🇱🇻 [Latviešu](../i18n/lv/docs/reference/API_REFERENCE.md) | 🇮🇳 [മലയാളം](../i18n/ml/docs/reference/API_REFERENCE.md) | 🇮🇳 [मराठी](../i18n/mr/docs/reference/API_REFERENCE.md) | 🇲🇾 [Bahasa Melayu](../i18n/ms/docs/reference/API_REFERENCE.md) | 🇲🇹 [Malti](../i18n/mt/docs/reference/API_REFERENCE.md) | 🇲🇲 [မြန်မာ](../i18n/my/docs/reference/API_REFERENCE.md) | 🇳🇵 [नेपाली](../i18n/ne/docs/reference/API_REFERENCE.md) | 🇳🇱 [Nederlands](../i18n/nl/docs/reference/API_REFERENCE.md) | 🇳🇴 [Norsk](../i18n/no/docs/reference/API_REFERENCE.md) | 🇮🇳 [ଓଡ଼ିଆ](../i18n/or/docs/reference/API_REFERENCE.md) | 🇮🇳 [ਪੰਜਾਬੀ](../i18n/pa/docs/reference/API_REFERENCE.md) | 🇵🇭 [Filipino](../i18n/phi/docs/reference/API_REFERENCE.md) | 🇵🇱 [Polski](../i18n/pl/docs/reference/API_REFERENCE.md) | 🇵🇹 [Português (Portugal)](../i18n/pt/docs/reference/API_REFERENCE.md) | 🇧🇷 [Português (Brasil)](../i18n/pt-BR/docs/reference/API_REFERENCE.md) | 🇷🇴 [Română](../i18n/ro/docs/reference/API_REFERENCE.md) | 🇷🇺 [Русский](../i18n/ru/docs/reference/API_REFERENCE.md) | 🇱🇰 [සිංහල](../i18n/si/docs/reference/API_REFERENCE.md) | 🇸🇰 [Slovenčina](../i18n/sk/docs/reference/API_REFERENCE.md) | 🇸🇮 [Slovenščina](../i18n/sl/docs/reference/API_REFERENCE.md) | 🇷🇸 [Српски](../i18n/sr/docs/reference/API_REFERENCE.md) | 🇸🇪 [Svenska](../i18n/sv/docs/reference/API_REFERENCE.md) | 🇰🇪 [Kiswahili](../i18n/sw/docs/reference/API_REFERENCE.md) | 🇮🇳 [தமிழ்](../i18n/ta/docs/reference/API_REFERENCE.md) | 🇮🇳 [తెలుగు](../i18n/te/docs/reference/API_REFERENCE.md) | 🇹🇭 [ไทย](../i18n/th/docs/reference/API_REFERENCE.md) | 🇹🇷 [Türkçe](../i18n/tr/docs/reference/API_REFERENCE.md) | 🇺🇦 [Українська](../i18n/uk-UA/docs/reference/API_REFERENCE.md) | 🇵🇰 [اردو](../i18n/ur/docs/reference/API_REFERENCE.md) | 🇺🇿 [Oʻzbekcha](../i18n/uz/docs/reference/API_REFERENCE.md) | 🇻🇳 [Tiếng Việt](../i18n/vi/docs/reference/API_REFERENCE.md) | 🇳🇬 [Yorùbá](../i18n/yo/docs/reference/API_REFERENCE.md) | 🇨🇳 [中文 (简体)](../i18n/zh-CN/docs/reference/API_REFERENCE.md) | 🇹🇼 [中文 (繁體)](../i18n/zh-TW/docs/reference/API_REFERENCE.md)
OmniRoute API ਲਈ ਮੁੱਖ ਹਵਾਲਾ। ਇਹ ਜਨਤਕ `/v1` ਸਤਹ ਅਤੇ ਸਭ ਤੋਂ ਵੱਧ ਵਰਤੇ ਜਾਣ ਵਾਲੇ ਪ੍ਰਬੰਧਨ ਐਂਡਪੌਇੰਟਾਂ ਨੂੰ ਕਵਰ ਕਰਦਾ ਹੈ; ਮਸ਼ੀਨ ਦੁਆਰਾ ਪੜ੍ਹਨਯੋਗ [`docs/openapi.yaml`](../openapi.yaml) ਅਤੇ `src/app/api/` ਅਧੀਨ ਰੂਟ ਟ੍ਰੀ ਸੰਪੂਰਨ ਸਰੋਤ ਹਨ।
---
## ਵਿਸ਼ਾ-ਸੂਚੀ
- [ਚੈਟ ਸੰਪੂਰਨਤਾਵਾਂ](#chat-completions)
- [ਵਿਸ਼ੇਸ਼ ਪ੍ਰਬੰਧਿਤ ਸੈਸ਼ਨ ਲੀਜ਼ਾਂ](#exclusive-managed-session-leases)
- [ਐਮਬੈਡਿੰਗ](#embeddings)
- [ਚਿੱਤਰ ਉਤਪਤੀ](#image-generation)
- [ਦਸਤਾਵੇਜ਼ OCR](#document-ocr)
- [ਮਾਡਲਾਂ ਦੀ ਸੂਚੀ](#list-models)
- [ਪ੍ਰਦਾਤਾ ਪਲੱਗਇਨ ਮੈਨੀਫੈਸਟ](#provider-plugin-manifest)
- [ਅਨੁਕੂਲਤਾ ਐਂਡਪੌਇੰਟ](#compatibility-endpoints)
- [ਫ਼ਾਈਲਾਂ API](#files-api)
- [ਬੈਚ API](#batches-api)
- [ਖੋਜ API](#search-api)
- [WebSocket ਸਟ੍ਰੀਮਿੰਗ](#websocket-streaming)
- [ਕੋਟੇ ਅਤੇ ਸਮੱਸਿਆਵਾਂ ਦੀ ਰਿਪੋਰਟਿੰਗ](#quotas--issues-reporting)
- [ਸਿਮੈਂਟਿਕ ਕੈਸ਼](#semantic-cache)
- [ਡੈਸ਼ਬੋਰਡ ਅਤੇ ਪ੍ਰਬੰਧਨ](#dashboard--management)
- [ਕੌਂਬੋ ਪ੍ਰਬੰਧਨ](#combo-management)
- [ਵੈੱਬਹੁੱਕ](#webhooks)
- [ਰਜਿਸਟਰ ਕੀਤੀਆਂ ਕੁੰਜੀਆਂ (ਸਵੈ-ਪ੍ਰਬੰਧਨ)](#registered-keys-auto-management)
- [ਏਜੰਟ ਪ੍ਰੋਟੋਕੋਲ](#agents-protocol)
- [ਪ੍ਰਬੰਧਨ ਪ੍ਰੌਕਸੀ](#management-proxies)
- [ਲਚੀਲਾਪਣ (ਵਿਸਤ੍ਰਿਤ)](#resilience-extended)
- [ਹੁਨਰ](#skills)
- [ਮੈਮੋਰੀ](#memory)
- [MCP ਸਰਵਰ](#mcp-server)
- [A2A ਸਰਵਰ](#a2a-server)
- [ਕਲਾਉਡ, ਮੁਲਾਂਕਣ ਅਤੇ ਅੰਕਲਣ](#cloud-evals--assess)
- [ਬੇਨਤੀ ਪ੍ਰਕਿਰਿਆ](#request-processing)
- [ਪ੍ਰਮਾਣੀਕਰਨ](#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-no-memory` | ਬੇਨਤੀ | ਇਸ ਬੇਨਤੀ ਲਈ ਮੈਮੋਰੀ + ਹੁਨਰ ਇੰਜੈਕਸ਼ਨ ਛੱਡਣ ਵਾਸਤੇ `true` ਸੈੱਟ ਕਰੋ (no-cache ਦੇ ਅਨੁਰੂਪ; ਪ੍ਰਤੀ-ਕਾਲ ਟੋਕਨ/ਲਾਗਤ ਓਵਰਹੈੱਡ ਤੋਂ ਬਚਦਾ ਹੈ) |
| `X-OmniRoute-Progress` | ਬੇਨਤੀ | ਪ੍ਰਗਤੀ ਇਵੈਂਟਾਂ ਲਈ `true` ਸੈੱਟ ਕਰੋ |
| `X-Session-Id` | ਬੇਨਤੀ | ਬਾਹਰੀ ਸੈਸ਼ਨ ਐਫ਼ਿਨਿਟੀ ਲਈ ਸਟਿੱਕੀ ਸੈਸ਼ਨ ਕੁੰਜੀ |
| `x_session_id` | ਬੇਨਤੀ | ਅੰਡਰਸਕੋਰ ਰੂਪ ਵੀ ਸਵੀਕਾਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ (ਸਿੱਧਾ HTTP) |
| `X-OmniRoute-Session-Id` | ਬੇਨਤੀ | ਕਾਲਰ ਵੱਲੋਂ ਦਿੱਤਾ ਸੈਸ਼ਨ/ਗੱਲਬਾਤ ਟੈਗ (ਮੈਮੋਰੀ ਨੂੰ ਵੀ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ)। ਮੌਜੂਦ ਹੋਣ 'ਤੇ, ਪ੍ਰਤੀ-ਸੈਸ਼ਨ ਲਾਗਤ ਨਿਰਧਾਰਣ ਲਈ ਬਿਨਾਂ ਬਦਲਾਅ ਦੇ `call_logs.session_tag` ਵਿੱਚ ਸਥਾਈ ਤੌਰ 'ਤੇ ਸੰਭਾਲਿਆ ਜਾਂਦਾ ਹੈ (#8249) — ਗੈਰਹਾਜ਼ਰ ਹੋਣ 'ਤੇ ਕਦੇ ਵੀ ਤਿਆਰ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ |
| `Idempotency-Key` | ਬੇਨਤੀ | ਡੀਡੁਪ ਕੁੰਜੀ (5s ਵਿੰਡੋ) |
| `X-Request-Id` | ਬੇਨਤੀ | ਵਿਕਲਪਿਕ ਡੀਡੁਪ ਕੁੰਜੀ |
| `X-OmniRoute-Cache` | ਜਵਾਬ | `HIT` ਜਾਂ `MISS` (ਗੈਰ-ਸਟ੍ਰੀਮਿੰਗ) |
| `X-OmniRoute-Idempotent` | ਜਵਾਬ | ਜੇ ਡੀਡੁਪਲੀਕੇਟ ਕੀਤਾ ਗਿਆ ਹੋਵੇ ਤਾਂ `true` |
| `X-OmniRoute-Progress` | ਜਵਾਬ | ਜੇ ਪ੍ਰਗਤੀ ਟ੍ਰੈਕਿੰਗ ਚਾਲੂ ਹੋਵੇ ਤਾਂ `enabled` |
| `X-OmniRoute-Session-Id` | ਜਵਾਬ | OmniRoute ਦੁਆਰਾ ਵਰਤੀ ਗਈ ਪ੍ਰਭਾਵੀ ਸੈਸ਼ਨ ID |
| `X-OmniRoute-Request-Id` | ਜਵਾਬ | ਬੇਨਤੀ ਕੋਰਿਲੇਸ਼ਨ id (ਜਦੋਂ ਪਤਾ ਹੋਵੇ) |
| `X-OmniRoute-Version` | ਜਵਾਬ | OmniRoute ਬਿਲਡ ਸੰਸਕਰਣ (ਹਮੇਸ਼ਾ ਮੌਜੂਦ) |
| `X-OmniRoute-Cost-Saved` | ਜਵਾਬ | HIT ਉੱਤੇ ਕੈਸ਼ ਦੁਆਰਾ ਬਚਾਏ ਗਏ USD (ਸਿਰਫ਼ ਕੈਸ਼ ਹਿੱਟਾਂ ਲਈ) |
| `X-OmniRoute-Decision` | ਜਵਾਬ | ਰੂਟਿੰਗ ਟ੍ਰੇਸ: `strategy=<name>; provider=<alias>; latency_ms=<n>` (`<name>` ਕੌਂਬੋ ਰਣਨੀਤੀ ਹੈ, ਜਾਂ ਗੈਰ-ਕੌਂਬੋ ਬੇਨਤੀ ਲਈ `single`) — ਸੰਪੂਰਨਤਾ ਜਵਾਬਾਂ ਵਿੱਚ ਹਮੇਸ਼ਾ ਮੌਜੂਦ |
> Nginx ਨੋਟ: ਜੇ ਤੁਸੀਂ ਅੰਡਰਸਕੋਰ ਹੈਡਰਾਂ (ਉਦਾਹਰਨ ਲਈ `x_session_id`) ਉੱਤੇ ਨਿਰਭਰ ਕਰਦੇ ਹੋ, ਤਾਂ `underscores_in_headers on;` ਸਮਰੱਥ ਕਰੋ।
> **ਲਾਗਤ ਟੈਲੀਮੈਟਰੀ ਹੈਡਰ:** ਗੈਰ-ਸਟ੍ਰੀਮਿੰਗ ਸਫਲਤਾ ਜਵਾਬਾਂ ਵਿੱਚ `X-OmniRoute-*` ਲਾਗਤ-ਟੈਲੀਮੈਟਰੀ ਸੈੱਟ ਵੀ ਸ਼ਾਮਲ ਹੁੰਦਾ ਹੈ — `X-OmniRoute-Response-Cost` (USD, ਨਿਸ਼ਚਿਤ 10 ਦਸ਼ਮਲਵ ਸਥਾਨ; ਮੁਫ਼ਤ/ਬਿਨਾਂ ਕੀਮਤ ਵਾਲੇ ਲਈ `0.0000000000`), `X-OmniRoute-Tokens-In` / `X-OmniRoute-Tokens-Out`, `X-OmniRoute-Model`, `X-OmniRoute-Provider`, `X-OmniRoute-Latency-Ms`, `X-OmniRoute-Cache-Hit`, ਅਤੇ `X-OmniRoute-Fallback-Attempts` (ਸਿਰਫ਼ ਜਦੋਂ > 0 ਹੋਵੇ), ਨਾਲ ਹੀ `X-OmniRoute-Request-Id` ਅਤੇ `X-OmniRoute-Version`। ਇਹ ਚੈਟ ਕੰਪਲੀਸ਼ਨਾਂ, `/v1/responses`, `/v1/messages`, **ਅਤੇ ਮੀਡੀਆ ਐਂਡਪੌਇੰਟਾਂ** — `/v1/embeddings`, `/v1/images/generations`, `/v1/audio/speech`, `/v1/audio/transcriptions`, `/v1/rerank`, `/v1/videos/generations`, `/v1/music/generations`, ਅਤੇ `/v1/moderations` (ਲਾਗਤ ਹਮੇਸ਼ਾ `0`) — ਵੱਲੋਂ ਉਤਸਰਜਿਤ ਕੀਤੇ ਜਾਂਦੇ ਹਨ। ਜਦੋਂ ਕੀਮਤ ਉਪਲਬਧ ਹੋਵੇ, ਮੀਡੀਆ ਲਾਗਤ ਦੀ ਗਣਨਾ ਹਰ ਮੋਡੈਲਿਟੀ ਮੁਤਾਬਕ (ਪ੍ਰਤੀ-ਚਿੱਤਰ, ਪ੍ਰਤੀ-ਸਕਿੰਟ, ਪ੍ਰਤੀ-ਅੱਖਰ, ਪ੍ਰਤੀ ਖੋਜ-ਇਕਾਈ) ਕੀਤੀ ਜਾਂਦੀ ਹੈ; ਨਹੀਂ ਤਾਂ ਇਹ `0` (ਫੇਲ-ਓਪਨ) ਹੁੰਦੀ ਹੈ।
> **ਕੈਸ਼-ਹਿੱਟ ਲਾਗਤ ਅਰਥਵਿਵਸਥਾ:** ਸਿਮੈਂਟਿਕ-ਕੈਸ਼ HIT (`X-OmniRoute-Cache-Hit: true`) ਹੋਣ ’ਤੇ ਕੋਈ ਅੱਪਸਟ੍ਰੀਮ ਕਾਲ ਨਹੀਂ ਕੀਤੀ ਜਾਂਦੀ, ਇਸ ਲਈ `X-OmniRoute-Response-Cost` `0.0000000000` ਹੁੰਦੀ ਹੈ (ਹਿੱਟ ਸਰਵ ਕਰਨ ਦੀ **ਵਾਧੂ** ਲਾਗਤ)। ਮੂਲ/ਸੰਭਾਵਿਤ ਲਾਗਤ ਨੂੰ `X-OmniRoute-Cost-Saved` ਵਿੱਚ ਵੱਖਰੇ ਤੌਰ ’ਤੇ ਰਿਪੋਰਟ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਬਿਲਿੰਗ ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ `X-OmniRoute-Response-Cost` ਦਾ ਜੋੜ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ (ਹਿੱਟਾਂ ਦੀ ਕੋਈ ਲਾਗਤ ਨਹੀਂ ਹੁੰਦੀ); ਕੈਸ਼ ਵਿਸ਼ਲੇਸ਼ਣ `X-OmniRoute-Cost-Saved` ਨੂੰ ਇਕੱਠਾ ਕਰ ਸਕਦਾ ਹੈ।
## ਵਿਸ਼ੇਸ਼ ਪ੍ਰਬੰਧਿਤ ਸੈਸ਼ਨ ਲੀਜ਼ਾਂ
ਵਿਸ਼ੇਸ਼ ਪ੍ਰਬੰਧਿਤ ਸੈਸ਼ਨ ਲੀਜ਼ਿੰਗ ਇੱਕ ਆਪਟ-ਇਨ, ਕਲਾਇੰਟ-ਨਿਰਪੱਖ ਰੂਟਿੰਗ ਇਕਰਾਰਨਾਮਾ ਹੈ: ਇੱਕ ਸਰਗਰਮ ਮਾਲਕ
ਇੱਕ ਯੋਗ OmniRoute ਕਨੈਕਸ਼ਨ ਨੂੰ ਆਪਣੇ ਅਧੀਨ ਰੱਖਦਾ ਹੈ। ਇਹ ਕਿਸੇ ਮਾਡਲ ਨੂੰ ਲੀਜ਼ ਨਹੀਂ ਕਰਦਾ, OAuth ਦੀ ਲੋੜ ਨਹੀਂ ਰੱਖਦਾ, ਕਿਸੇ
ਖ਼ਾਸ ਕਲਾਇੰਟ ਦੀ ਪਛਾਣ ਨਹੀਂ ਕਰਦਾ, ਅਤੇ ਨਾ ਹੀ ਕਿਸੇ ਖ਼ਾਸ ਪ੍ਰਦਾਤਾ ਦੀ ਲੋੜ ਰੱਖਦਾ ਹੈ।
ਪ੍ਰਮਾਣਿਤ ਕਰਨ ਵਾਲੀ API ਕੁੰਜੀ ਕੋਲ `lease:exclusive` ਸਕੋਪ ਅਤੇ ਇੱਕ ਸਪਸ਼ਟ, ਗੈਰ-ਖਾਲੀ
`allowedConnections` ਸੂਚੀ ਹੋਣੀ ਲਾਜ਼ਮੀ ਹੈ। ਡਾਟਾਬੇਸ ਮਿਊਟੇਸ਼ਨ ਸੀਮਾ ਕੁੰਜੀ ਬਣਾਉਣ ਅਤੇ
ਅੰਸ਼ਕ ਅੱਪਡੇਟਾਂ ਦੋਵਾਂ ਦੌਰਾਨ ਇਹਨਾਂ ਦੋਵੇਂ ਖੇਤਰਾਂ ਨੂੰ ਇਕੱਠਿਆਂ ਲਾਗੂ ਕਰਦੀ ਹੈ।
```http
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"}
```
ਸਫਲ acquire, renew, ਅਤੇ release ਜਵਾਬ ਟਾਈਮਸਟੈਂਪ, `state`, ਅਤੇ ਸਟੀਕ ਧਨਾਤਮਕ
`generation` ਪ੍ਰਗਟ ਕਰਦੇ ਹਨ, ਪਰ ਚੁਣਿਆ ਹੋਇਆ ਕਨੈਕਸ਼ਨ ਜਾਂ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਕਦੇ ਨਹੀਂ। Renew ਅਤੇ release ਲਈ
generation ਨੂੰ JSON ਬਾਡੀ ਵਿੱਚ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ:
```json
{ "action": "renew", "generation": 1 }
```
```json
{ "action": "release", "generation": 1, "reason": "OWNER_EXIT" }
```
ਇੱਕ ਸਰਗਰਮ ਲੀਜ਼ ਮਾਲਕ ਆਪਣੀ ਮੌਜੂਦਾ ਬਾਈਂਡਿੰਗ ਲਈ ਗੋਪਨੀਯਤਾ-ਸੁਰੱਖਿਅਤ ਡਿਸਪਲੇ ਮੈਟਾਡੇਟਾ ਦੀ ਸਪਸ਼ਟ ਤੌਰ 'ਤੇ ਬੇਨਤੀ ਕਰ ਸਕਦਾ ਹੈ:
```json
{ "action": "status", "generation": 1 }
```
```json
{
"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"
}
}
```
ਇਹ ਆਪਟ-ਇਨ ਸਥਿਤੀ ਕਾਰਵਾਈ ਇੱਕੋ ਡਾਟਾਬੇਸ ਟ੍ਰਾਂਜ਼ੈਕਸ਼ਨ ਵਿੱਚ ਅਪਾਰਦਰਸ਼ੀ ਮਾਲਕ, ਪ੍ਰਮਾਣਿਤ ਪ੍ਰਬੰਧਿਤ API ਕੁੰਜੀ, ਅਤੇ ਸਟੀਕ
ਸਰਗਰਮ generation ਦੁਆਰਾ ਸੀਮਾਬੱਧ ਹੁੰਦੀ ਹੈ। `displayName` ਸਿਰਫ਼ ਟ੍ਰਿਮ ਕੀਤਾ ਹੋਇਆ ਸੰਰਚਿਤ
ਕਨੈਕਸ਼ਨ ਨਾਮ ਹੁੰਦਾ ਹੈ; ਜਦੋਂ ਕੋਈ ਸੁਰੱਖਿਅਤ ਸੰਰਚਿਤ ਨਾਮ ਮੌਜੂਦ ਨਾ ਹੋਵੇ, ਤਾਂ ਇਹ `null` ਹੁੰਦਾ ਹੈ। OmniRoute ਕਦੇ ਵੀ ਇਸ ਦੀ ਥਾਂ
ਈਮੇਲ ਜਾਂ ਉਤਪੰਨ ਕੀਤੀ ਖਾਤਾ ਪਛਾਣ ਨਹੀਂ ਵਰਤਦਾ। ਪ੍ਰਦਾਤਾ ਮੁੱਲ ਇੱਕ ਗੈਰ-ਸੰਵੇਦਨਸ਼ੀਲ ਡਿਸਪਲੇ ਲੇਬਲ ਹੁੰਦਾ ਹੈ ਅਤੇ ਕਦੇ ਵੀ
ਉਤਪੰਨ ਕੀਤਾ ਅਨੁਕੂਲ-ਪ੍ਰਦਾਤਾ ਪਛਾਣਕਰਤਾ ਨਹੀਂ ਹੁੰਦਾ। ਪ੍ਰਮਾਣ-ਪੱਤਰ, ਟੋਕਨ, ਕੁਕੀਜ਼, ਕੱਚੇ ਕਨੈਕਸ਼ਨ ਜਾਂ API
ਕੁੰਜੀ ids, ਮਾਲਕ ਹੈਸ਼, ਫੈਂਸਿੰਗ ਸੀਕ੍ਰੇਟ, ਅਤੇ ਅੰਦਰੂਨੀ ਰੂਟਿੰਗ ਡਾਟਾ ਸ਼ਾਮਲ ਨਹੀਂ ਕੀਤੇ ਜਾਂਦੇ।
ਗਲਤ-ਕੁੰਜੀ, ਗਲਤ-ਮਾਲਕ, ਪੁਰਾਣੀ-generation, ਗੁੰਮ, ਮਿਆਦ-ਪੁੱਗੀ, ਰਿਲੀਜ਼ ਕੀਤੀ, ਅਤੇ ਅਵੈਧ ਕੀਤੀ ਲੁੱਕਅੱਪ
ਸਭ ਕਨੈਕਸ਼ਨ ਮੈਟਾਡੇਟਾ ਤੋਂ ਬਿਨਾਂ ਇੱਕੋ `409 LEASE_FENCE_STALE` ਗਲਤੀ ਵਾਪਸ ਕਰਦੇ ਹਨ। ਸਮਰੱਥਾ-ਉਡੀਕ ਜਵਾਬ ਪ੍ਰਾਪਤ ਕਰਨ ਵਾਲੇ ਕਲਾਇੰਟ ਕੋਲ ਜਾਂਚਣ ਲਈ ਕੋਈ ਸਰਗਰਮ ਬਾਈਂਡਿੰਗ ਨਹੀਂ ਹੁੰਦੀ। ਜਦੋਂ ਰੂਟਿੰਗ ਇੱਕ ਸਰਗਰਮ ਲੀਜ਼ ਨੂੰ ਟ੍ਰਾਂਜ਼ਿਸ਼ਨ ਕਰਦੀ ਹੈ,
ਤਾਂ ਉਹੀ generation ਵੈਧ ਰਹਿੰਦੀ ਹੈ ਅਤੇ ਸਥਿਤੀ ਐਟਾਮਿਕ ਢੰਗ ਨਾਲ ਨਵੀਂ ਬਾਈਂਡਿੰਗ ਵਾਪਸ ਕਰਦੀ ਹੈ, ਪੁਰਾਣੀ ਕਦੇ ਨਹੀਂ।
ਮੌਜੂਦਾ ਕਲਾਇੰਟਾਂ ਵਿੱਚ ਕੋਈ ਬਦਲਾਅ ਨਹੀਂ ਹੁੰਦਾ ਕਿਉਂਕਿ acquire, renew, release, ਅਤੇ waiting ਜਵਾਬ
ਆਪਣੇ ਪਿਛਲੇ ਰੂਪ ਬਰਕਰਾਰ ਰੱਖਦੇ ਹਨ।
ਇਹ ਸਰਵਰ ਇਕਰਾਰਨਾਮਾ ਮਿਆਰੀ OpenAI Codex `/status` ਨੂੰ ਨਹੀਂ ਬਦਲਦਾ। ਮਿਆਰੀ Codex ਇਸ ਵੇਲੇ ਆਪਣਾ
ਮਾਡਲ ਪ੍ਰਦਾਤਾ ਅਤੇ ਅੰਦਰੂਨੀ ਪ੍ਰਮਾਣੀਕਰਨ/ਖਾਤਾ ਸਥਿਤੀ ਰਿਪੋਰਟ ਕਰਦਾ ਹੈ, ਪਰ ਮਨਮਾਨਾ ਕਸਟਮ
ਪ੍ਰਦਾਤਾ ਖਾਤਾ ਮੈਟਾਡੇਟਾ ਰੈਂਡਰ ਨਹੀਂ ਕਰਦਾ; ਭਵਿੱਖ ਦੀ ਕਲਾਇੰਟ ਇੰਟੀਗ੍ਰੇਸ਼ਨ ਨੂੰ ਇਹ ਕਾਰਵਾਈ ਕਾਲ ਕਰਨੀ ਅਤੇ ਇਹ ਫ਼ੈਸਲਾ ਕਰਨਾ ਪਵੇਗਾ ਕਿ
`connection.displayName` ਨੂੰ ਕਿਵੇਂ ਦਿਖਾਉਣਾ ਹੈ।
ਫਿਰ ਹਰ ਪ੍ਰਬੰਧਿਤ ਇਨਫ਼ਰੈਂਸ ਬੇਨਤੀ ਦੋਵੇਂ ਕੰਟਰੋਲ ਹੈਡਰ ਮੁਹੱਈਆ ਕਰਦੀ ਹੈ:
```http
X-OmniRoute-Lease-Owner: vlo_<43-base64url-characters>
X-OmniRoute-Lease-Generation: 1
```
ਹਰੇਕ ਸਮਰਥਿਤ ਅੱਪਸਟ੍ਰੀਮ ਕੋਸ਼ਿਸ਼ ਤੋਂ ਤੁਰੰਤ ਪਹਿਲਾਂ ਸਟੀਕ ਮਾਲਕ, generation, ਸਰਗਰਮ ਕਨੈਕਸ਼ਨ, ਅਤੇ ਪ੍ਰਮਾਣਿਤ API ਕੁੰਜੀ ਨੂੰ
ਫੈਂਸ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਕਿਸੇ ਹੋਰ ਕੁੰਜੀ ਨਾਲ ਮਾਲਕ ਅਤੇ generation ਨੂੰ ਮੁੜ ਚਲਾਉਣਾ ਅਸਫਲ ਹੁੰਦਾ ਹੈ, ਭਾਵੇਂ
ਉਹ ਕੁੰਜੀ ਉਸੇ ਕਨੈਕਸ਼ਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦੀ ਹੋਵੇ। ਕੱਚੇ ਮਾਲਕ ਸਥਾਈ ਤੌਰ 'ਤੇ ਸਟੋਰ ਨਹੀਂ ਕੀਤੇ ਜਾਂਦੇ, ਲੌਗ ਨਹੀਂ ਕੀਤੇ ਜਾਂਦੇ, ਬੇਨਤੀ
ਸਨੈਪਸ਼ਾਟ ਵਿੱਚ ਬਰਕਰਾਰ ਨਹੀਂ ਰੱਖੇ ਜਾਂਦੇ, ਅਤੇ ਨਾ ਹੀ ਅੱਪਸਟ੍ਰੀਮ ਭੇਜੇ ਜਾਂਦੇ ਹਨ।
ਅਸਥਾਈ ਮੁਕਾਬਲਾ HTTP `429` ਨੂੰ `Retry-After` ਅਤੇ ਹੇਠਾਂ ਦਿੱਤੇ ਜਵਾਬ ਨਾਲ ਵਾਪਸ ਕਰਦਾ ਹੈ:
```json
{
"state": "WAITING_FOR_CAPACITY",
"error": { "type": "lease_error", "code": "LEASE_CAPACITY_UNAVAILABLE" },
"reason": "NO_FREE_ELIGIBLE_CONNECTION",
"retryAfter": 30
}
```
ਇਸ ਜਵਾਬ ਦਾ ਸਿਰਫ਼ ਇਹ ਮਤਲਬ ਹੈ ਕਿ ਆਮ ਯੋਗ ਸੈੱਟ ਗੈਰ-ਖਾਲੀ ਸੀ ਅਤੇ ਹਰੇਕ ਖਾਲੀ ਉਮੀਦਵਾਰ ਨੂੰ
ਕਿਸੇ ਹੋਰ ਸਰਗਰਮ ਲੀਜ਼ ਨੇ ਆਪਣੇ ਅਧੀਨ ਰੱਖਿਆ ਹੋਇਆ ਸੀ। ਗੈਰ-ਸਮਰਥਿਤ ਮਾਡਲ/ਪ੍ਰਦਾਤਾ, ਨੀਤੀ ਅਸੰਗਤਤਾ, ਕੂਲਡਾਊਨ, ਕੋਟਾ,
ਸਿਹਤ, ਅਤੇ ਹੋਰ ਆਮ ਯੋਗਤਾ ਅਸਫਲਤਾਵਾਂ ਆਪਣੇ ਮੌਜੂਦਾ OmniRoute ਜਵਾਬ ਬਰਕਰਾਰ ਰੱਖਦੀਆਂ ਹਨ।
### `x-omniroute-compression`
ਕੰਪ੍ਰੈਸ਼ਨ ਯੋਜਨਾ ਲਈ ਪ੍ਰਤੀ-ਬੇਨਤੀ ਓਵਰਰਾਈਡ। ਸਭ ਤੋਂ ਉੱਚੀ ਤਰਜੀਹ — ਇਹ routing-combo
ਓਵਰਰਾਈਡ, ਸਰਗਰਮ ਪ੍ਰੋਫ਼ਾਈਲ, auto-trigger, ਅਤੇ ਪੈਨਲ Default ਤੋਂ ਵੀ ਉੱਪਰ ਰਹਿੰਦੀ ਹੈ। ਮੁੱਲ:
| ਮੁੱਲ | ਪ੍ਰਭਾਵ |
| ------------- | ---------------------------------------------------------------------------------------------------- |
| `off` | ਇਸ ਬੇਨਤੀ ਲਈ ਕੋਈ ਕੰਪ੍ਰੈਸ਼ਨ ਨਹੀਂ। |
| `default` | ਪੈਨਲ ਤੋਂ ਪ੍ਰਾਪਤ Default ਪ੍ਰੋਫ਼ਾਈਲ (ਸਰਗਰਮ ਪ੍ਰੋਫ਼ਾਈਲ ਨੂੰ ਅਣਡਿੱਠਾ ਕਰਦੀ ਹੈ)। |
| `engine:<id>` | ਸਮਰੱਥ ਹੋਣ 'ਤੇ ਇੱਕੋ ਇੰਜਣ, ਉਦਾਹਰਨ ਵਜੋਂ `engine:rtk`। |
| `<combo>` | ਇੱਕ ਨਾਮਿਤ combo, ਜਿਸਦਾ ਮਿਲਾਨ ਪਹਿਲਾਂ ਨਾਮ (ਅੱਖਰਾਂ ਦੇ ਕੇਸ ਤੋਂ ਅਸੰਵੇਦਨਸ਼ੀਲ), ਫਿਰ id ਦੁਆਰਾ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। |
ਨੋਟ:
- ਅਣਜਾਣ ਮੁੱਲਾਂ ਨੂੰ ਅਣਡਿੱਠਾ ਕੀਤਾ ਜਾਂਦਾ ਹੈ (ਬੇਨਤੀ ਕਦੇ ਵੀ ਰੱਦ ਨਹੀਂ ਕੀਤੀ ਜਾਂਦੀ); ਨਿਰਧਾਰਨ ਆਮ ਓਪਰੇਟਰ ਤਰਜੀਹ ਅਨੁਸਾਰ ਅੱਗੇ ਵਧਦਾ ਹੈ।
- ਜੇ ਕਈ combos ਦਾ ਨਾਮ ਇੱਕੋ ਹੋਵੇ, ਤਾਂ ਨਿਰਧਾਰਿਤ ਮਿਲਾਨ ਲਈ combo ਦੀ **id** ਦਿਓ।
- ਜਿਸ combo ਦਾ ਨਾਮ `off` ਜਾਂ `default` ਹੋਵੇ, ਉਸਨੂੰ ਨਾਮ ਦੁਆਰਾ ਨਹੀਂ ਚੁਣਿਆ ਜਾ ਸਕਦਾ (ਉਹਨਾਂ ਕੀਵਰਡਾਂ ਦੀ ਵਿਆਖਿਆ ਪਹਿਲਾਂ ਕੀਤੀ ਜਾਂਦੀ ਹੈ); ਅਜਿਹੇ combo ਨੂੰ ਉਸਦੀ id ਰਾਹੀਂ ਦਰਸਾਓ।
- ਮੁੱਖ ਕੰਪ੍ਰੈਸ਼ਨ ਸਵਿੱਚ ਇੱਕ ਸਖ਼ਤ ਗੇਟ ਹੈ: ਜਦੋਂ ਕੰਪ੍ਰੈਸ਼ਨ ਗਲੋਬਲ ਤੌਰ 'ਤੇ ਅਸਮਰੱਥ ਹੋਵੇ, ਤਾਂ ਇਹ ਹੈਡਰ ਇਸਨੂੰ ਸਮਰੱਥ ਨਹੀਂ ਕਰ ਸਕਦਾ।
ਲਾਗੂ ਕੀਤੀ ਯੋਜਨਾ ਨੂੰ ਜਵਾਬ ਹੈਡਰ ਵਿੱਚ ਮੁੜ ਭੇਜਿਆ ਜਾਂਦਾ ਹੈ:
```
X-OmniRoute-Compression: <mode>; source=<source>
```
ਜਿੱਥੇ `<source>` `request-header`, `routing-override`, `active-profile`, `auto-trigger`, `default`, ਜਾਂ `off` ਵਿੱਚੋਂ ਇੱਕ ਹੁੰਦਾ ਹੈ।
---
## ਐਮਬੈਡਿੰਗਜ਼
```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, **OpenRouter**, Jina AI।
ਕੈਟਾਲੌਗ ਆਈਡੀਆਂ `provider/model` ਹੁੰਦੀਆਂ ਹਨ (ਉਦਾਹਰਨ: `jina-ai/jina-embeddings-v5-omni-small`)। ਰਜਿਸਟਰੀ ਵਿੱਚ ਮੌਜੂਦ ਸਿਰਫ਼ Jina ਮਾਡਲ ਆਈਡੀਆਂ (ਉਦਾਹਰਨ ਵਜੋਂ `jina-embeddings-v5-text-small`, `jina-reranker-v3.5`) ਵੀ ਰਿਜ਼ੌਲਵ ਹੁੰਦੀਆਂ ਹਨ। Jina embed/rerank/classify/segment ਪਹਿਲਾਂ ਡੈਸ਼ਬੋਰਡ ਦੇ `jina-ai` ਕ੍ਰੈਡੈਂਸ਼ਲ ਵਰਤਦੇ ਹਨ; `JINA_AI_API_KEY` ਕੇਵਲ ਉਦੋਂ ਫਾਲਬੈਕ ਹੁੰਦੀ ਹੈ ਜਦੋਂ ਕੋਈ ਡੈਸ਼ਬੋਰਡ ਕੁੰਜੀ ਮੌਜੂਦ ਨਾ ਹੋਵੇ। `jina-reader` ਕਾਰਡ ਸਿਰਫ਼ Reader / `r.jina.ai` ਲਈ ਹੈ (`POST /v1/web/fetch`) ਅਤੇ ਕਦੇ ਵੀ ਐਮਬੈਡਿੰਗਜ਼ ਜਾਂ ਰੀਰੈਂਕ ਪ੍ਰਦਾਨ ਨਹੀਂ ਕਰਦਾ।
ਮਲਟੀਮੋਡਲ ਸਮਰਥਨ ਦਰਸਾਉਣ ਵਾਲੇ ਰਜਿਸਟਰੀ ਮਾਡਲ ਵੱਧ ਤੋਂ ਵੱਧ 32 ਪ੍ਰਦਾਤਾ-ਨਿਰਪੱਖ ਸੰਰਚਿਤ
ਆਈਟਮ ਵੀ ਸਵੀਕਾਰ ਕਰਦੇ ਹਨ। ਮੀਡੀਆ ਆਈਟਮ ਕਿਸਮਾਂ `text`, `image`, `audio`, `video`, ਅਤੇ `document` ਹਨ। ਉਨ੍ਹਾਂ ਦਾ ਮੀਡੀਆ `source`
ਜਾਂ ਤਾਂ `{"type":"url","url":"https://..."}` ਹੁੰਦਾ ਹੈ ਜਾਂ
`{"type":"base64","data":"...","media_type":"..."}`
Jina v5 Omni (`jina-ai/jina-embeddings-v5-omni-small`, `jina-ai/jina-embeddings-v5-omni-nano`,
ਅਤੇ ਫੈਮਿਲੀ ਉਪਨਾਮ `jina-ai/jina-embeddings-v5-omni` → omni-small) Jina ਦੇ ਮੂਲ
EmbeddingsV5Request ਡੌਕਸ ਵੀ ਸਵੀਕਾਰ ਕਰਦਾ ਹੈ ਅਤੇ ਉਨ੍ਹਾਂ ਨੂੰ `https://api.jina.ai/v1/embeddings` ਵੱਲ **ਬਿਨਾਂ ਬਦਲਾਅ ਦੇ ਫਾਰਵਰਡ ਕਰਦਾ ਹੈ**:
```json
{
"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,..." }]
}
]
}
```
ਮੂਲ `{ image | audio | video | pdf }` ਮੁੱਲ ਇੱਕ ਜਨਤਕ HTTPS URL, ਇੱਕ `data:` URI, ਜਾਂ ਕੱਚਾ
base64 ਹੋ ਸਕਦੇ ਹਨ। OmniRoute ਉਨ੍ਹਾਂ ਆਬਜੈਕਟਾਂ ਨੂੰ ਸਟਰਿੰਗ ਵਿੱਚ ਨਹੀਂ ਬਦਲਦਾ ਜਾਂ ਮੂਲ ਚਿੱਤਰ URL ਫੈਚ ਨਹੀਂ ਕਰਦਾ — Jina
ਜਨਤਕ ਮੀਡੀਆ ਨੂੰ ਖੁਦ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ। ਵਾਧੂ Jina ਫੀਲਡ (`task`, `normalized`, `truncate`, `embedding_type`)
ਫਾਰਵਰਡ ਕੀਤੇ ਜਾਂਦੇ ਹਨ। ਸਿਰਫ਼-ਟੈਕਸਟ Jina SKU ਹਾਲੇ ਵੀ ਗੈਰ-ਟੈਕਸਟ ਡੌਕਸ ਨੂੰ ਅਸਵੀਕਾਰ ਕਰਦੇ ਹਨ।
ਸੁਰੱਖਿਆ ਅਤੇ ਟ੍ਰਾਂਸਪੋਰਟ ਸੀਮਾਵਾਂ:
- ਰਿਮੋਟ ਮੀਡੀਆ URL ਜਨਤਕ HTTPS ਹੋਣੇ ਲਾਜ਼ਮੀ ਹਨ। ਕੈਨੋਨਿਕਲ `{type,source:url}` ਆਈਟਮ
ਸਰਵਰ-ਸਾਈਡ ਫੈਚ ਕੀਤੇ ਜਾਂਦੇ ਹਨ (ਰੀਡਾਇਰੈਕਟ ਮੁੜ-ਪ੍ਰਮਾਣਿਕਤਾ, ਸਮਾਂ-ਸੀਮਾ, ਆਕਾਰ ਸੀਮਾਵਾਂ, ਜਨਤਕ DNS, ਕਨੈਕਸ਼ਨ ਪਿਨਿੰਗ) ਅਤੇ
ਪ੍ਰਦਾਤਾ ਕਾਲ ਤੋਂ ਪਹਿਲਾਂ ਇਨਲਾਈਨ ਕੀਤੇ ਜਾਂਦੇ ਹਨ। Jina-ਮੂਲ `{image:"https://..."}` ਆਈਟਮ ਉਸੇ ਜਨਤਕ-HTTPS ਜਾਂਚ ਤੋਂ ਬਾਅਦ
ਜਿਵੇਂ ਦੇ ਤਿਵੇਂ ਫਾਰਵਰਡ ਕੀਤੇ ਜਾਂਦੇ ਹਨ; Jina URL ਨੂੰ ਫੈਚ ਕਰਦਾ ਹੈ।
- ਇਨਲਾਈਨ base64 ਮੀਡੀਆ ਪ੍ਰਤੀ ਆਈਟਮ 8 MiB ਡੀਕੋਡ ਕੀਤੇ ਡਾਟੇ ਅਤੇ ਪੂਰੀ ਬੇਨਤੀ ਵਿੱਚ ਕੁੱਲ 16 MiB ਡੀਕੋਡ ਕੀਤੇ ਡਾਟੇ ਤੱਕ ਸੀਮਿਤ ਹੈ।
ਪ੍ਰਦਾਤਾ ਰੂਪਾਂਤਰਨ (ਕੈਨੋਨਿਕਲ ਆਈਟਮ ਕਦੇ ਵੀ ਬਿਨਾਂ ਬਦਲਾਅ ਦੇ ਫਾਰਵਰਡ ਨਹੀਂ ਕੀਤੇ ਜਾਂਦੇ):
- Jina ਮਲਟੀਮੋਡਲ ਮਾਡਲ: ਹਰ ਸਿਖਰਲੇ-ਪੱਧਰ ਦੀ ਆਈਟਮ ਇੱਕ ਮੋਡੈਲਿਟੀ-ਕੁੰਜੀ ਵਾਲਾ ਆਬਜੈਕਟ ਬਣਦੀ ਹੈ
(`text` / `image` / `audio` / `video` / `pdf`), ਜਿਸ ਵਿੱਚ ਇਨਲਾਈਨ ਮੀਡੀਆ ਲਈ ਡਾਟਾ URI ਵਰਤੇ ਜਾਂਦੇ ਹਨ; ਪ੍ਰਤੀ
ਸਿਖਰਲੇ-ਪੱਧਰ ਦੀ ਆਈਟਮ ਇੱਕ ਵੇਕਟਰ।
- Gemini Embedding 2 ਫੈਮਿਲੀ: ਇੱਕ ਸਿਖਰਲੇ-ਪੱਧਰ ਦੀ ਐਰੇ, `content.parts` (`text` ਜਾਂ `inline_data`) ਨਾਲ ਇੱਕੋ ਮੂਲ
`models/{model}:embedContent` ਬੇਨਤੀ ਬਣ ਜਾਂਦੀ ਹੈ।
- ਸਪਸ਼ਟ ਮੋਡੈਲਿਟੀ ਮੈਟਾਡੇਟਾ ਤੋਂ ਬਿਨਾਂ ਅਣਜਾਣ/ਡਾਇਨਾਮਿਕ ਮਾਡਲ HTTP 400 ਨਾਲ ਸੰਰਚਿਤ ਇਨਪੁੱਟ ਨੂੰ ਅਸਵੀਕਾਰ ਕਰਦੇ ਹਨ।
```json
{
"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"
}
```
ਅਸਮਰਥਿਤ ਮਾਡਲ/ਮੋਡੈਲਿਟੀ ਜੋੜ ਆਈਟਮ ਨੂੰ ਜ਼ਬਰਦਸਤੀ ਰੂਪਾਂਤਰਿਤ ਕਰਨ ਦੀ ਬਜਾਏ HTTP 400 ਵਾਪਸ ਕਰਦੇ ਹਨ। ਪੁਰਾਤਨ ਸਟਰਿੰਗ/ਟੋਕਨ ਬੇਨਤੀਆਂ ਉੱਤੇ
ਗੈਰ-ਇਨਪੁੱਟ ਐਕਸਟੈਂਸ਼ਨ ਫੀਲਡ ਬਿਨਾਂ ਬਦਲਾਅ ਦੇ ਅੱਗੇ ਭੇਜੇ ਜਾਂਦੇ ਰਹਿੰਦੇ ਹਨ।
```bash
# ਸਾਰੇ ਐਮਬੈਡਿੰਗ ਮਾਡਲਾਂ ਦੀ ਸੂਚੀ ਦਿਖਾਓ
GET /v1/embeddings
```
---
## ਚਿੱਤਰ ਜਨਰੇਸ਼ਨ
```bash
POST /v1/images/generations
Authorization: Bearer your-api-key
Content-Type: application/json
{
"model": "openai/gpt-image-2",
"prompt": "A beautiful sunset over mountains",
"size": "1024x1024"
}
```
ਉਪਲਬਧ ਪ੍ਰਦਾਤਾ: OpenAI (GPT Image 2), xAI (Grok Image), Together AI (FLUX), Fireworks AI, Nebius (FLUX), Hyperbolic, NanoBanana, **OpenRouter**, SD WebUI (ਸਥਾਨਕ), ComfyUI (ਸਥਾਨਕ)।
```bash
# ਸਾਰੇ ਚਿੱਤਰ ਮਾਡਲਾਂ ਦੀ ਸੂਚੀ ਦਿਖਾਓ
GET /v1/images/generations
```
---
## ਦਸਤਾਵੇਜ਼ OCR
```bash
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`, `provider/model` ਪ੍ਰੀਫਿਕਸ ਰਾਹੀਂ OCR ਪ੍ਰਦਾਤਾ ਚੁਣਦਾ ਹੈ; ਸਿਰਫ਼ ਮਾਡਲ id (ਉਦਾਹਰਨ ਲਈ,
`mistral-ocr-latest`) ਆਪਣੇ ਰਜਿਸਟਰ ਕੀਤੇ ਪ੍ਰਦਾਤਾ ਨਾਲ ਰਿਜ਼ਾਲਵ ਹੁੰਦਾ ਹੈ, ਅਤੇ ਜੇ `model` ਨਾ ਦਿੱਤਾ ਗਿਆ ਹੋਵੇ ਤਾਂ ਇਹ ਮੂਲ ਰੂਪ ਵਿੱਚ
Mistral (`mistral-ocr-latest`) ਵਰਤਦਾ ਹੈ। ਰਜਿਸਟਰ ਕੀਤੇ ਪ੍ਰਦਾਤਾ (`open-sse/config/ocrRegistry.ts`):
| ਪ੍ਰਦਾਤਾ id | ਮਾਡਲ id | `model` ਦਾ ਮੁੱਲ | ਟਿੱਪਣੀਆਂ |
| ----------------------------- | -------------------- | ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| `mistral` | `mistral-ocr-latest` | `mistral/mistral-ocr-latest` (ਜਾਂ ਸਿਰਫ਼ `mistral-ocr-latest`) | ਸਮਕਾਲੀ — ਜਵਾਬ ਸਿੱਧਾ ਇੱਕੋ ਅੱਪਸਟ੍ਰੀਮ ਕਾਲ ਤੋਂ ਵਾਪਸ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। |
| `azure-document-intelligence` | `prebuilt-read` | `azure-document-intelligence/prebuilt-read` | ਅਸਮਕਾਲੀ ਅੱਪਸਟ੍ਰੀਮ (`analyze` + ਪੋਲ) — ਹੇਠਾਂ ਦੇਖੋ। |
| `vertex-deepseek-ocr` | `deepseek-ocr-maas` | `vertex-deepseek-ocr/deepseek-ocr-maas` | ਸਮਕਾਲੀ, Vertex AI ਦੇ `openapi/chat/completions` ਪਾਰਟਨਰ ਐਂਡਪੌਇੰਟ ਰਾਹੀਂ — ਪ੍ਰਮਾਣੀਕਰਨ/URL ਲਈ ਹੇਠਾਂ ਦੇਖੋ। |
ਤਿੰਨੇ ਪ੍ਰਦਾਤਾ ਇੱਕੋ Mistral-ਆਕਾਰ ਵਾਲੀ ਬਾਡੀ ਵਿੱਚ ਜਵਾਬ ਦਿੰਦੇ ਹਨ:
```json
{
"pages": [{ "index": 0, "markdown": "# Extracted text..." }],
"model": "mistral-ocr-latest",
"usage_info": { "pages_processed": 1 }
}
```
### Azure Document Intelligence ਪੋਲ ਪ੍ਰਵਾਹ
Azure Document Intelligence ਦਾ `analyze` API ਅਸਮਕਾਲੀ ਹੈ: ਸ਼ੁਰੂਆਤੀ ਬੇਨਤੀ ਬਾਡੀ ਦੀ ਬਜਾਏ ਇੱਕ
`Operation-Location` ਹੈਡਰ ਵਾਪਸ ਕਰਦੀ ਹੈ, ਅਤੇ ਨਤੀਜੇ ਲਈ ਪੋਲ ਕਰਨਾ ਲਾਜ਼ਮੀ ਹੈ। ਹੈਂਡਲਰ
(`open-sse/handlers/ocr.ts`) ਉਸ URL ਨੂੰ ਹਰ ਸਕਿੰਟ, ਵੱਧ ਤੋਂ ਵੱਧ 30 ਕੋਸ਼ਿਸ਼ਾਂ ਤੱਕ ਪੋਲ ਕਰਦਾ ਹੈ, ਕਿਸੇ non-`ok` ਪੋਲ ਜਵਾਬ ਜਾਂ `"failed"` ਸਥਿਤੀ ਉੱਤੇ ਤੁਰੰਤ ਅਸਫਲ ਹੋ ਜਾਂਦਾ ਹੈ (ਪੋਲ ਕਰਨਾ
ਜਾਰੀ ਨਹੀਂ ਰੱਖਦਾ), ਅਤੇ ਜੇ ਕੋਸ਼ਿਸ਼ਾਂ ਦੀ ਸੀਮਾ ਖ਼ਤਮ ਹੋਣ ਤੋਂ ਬਾਅਦ ਵੀ ਕਾਰਵਾਈ ਚੱਲ ਰਹੀ ਹੋਵੇ ਤਾਂ `504` ਵਾਪਸ ਕਰਦਾ ਹੈ। ਅੰਤਿਮ Azure ਜਵਾਬ ਨੂੰ ਕਾਲਰ ਨੂੰ ਵਾਪਸ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ
Mistral ਵੱਲੋਂ ਵਰਤੇ ਜਾਂਦੇ ਉਸੇ `pages`/`markdown` ਰੂਪ ਵਿੱਚ ਨਾਰਮਲਾਈਜ਼ ਕੀਤਾ ਜਾਂਦਾ ਹੈ,
ਇਸ ਲਈ ਕਲਾਇੰਟ ਕੋਡ ਨੂੰ ਪ੍ਰਦਾਤਾ ਲਈ ਵਿਸ਼ੇਸ਼ ਕੇਸ ਬਣਾਉਣ ਦੀ ਲੋੜ ਨਹੀਂ ਹੁੰਦੀ।
### Vertex AI DeepSeek OCR ਪ੍ਰਮਾਣੀਕਰਨ ਅਤੇ ਐਂਡਪੌਇੰਟ ਰਿਜ਼ੋਲਿਊਸ਼ਨ
`vertex-deepseek-ocr` ਉਹੀ Vertex AI ਪ੍ਰਮਾਣੀਕਰਨ ਦੁਬਾਰਾ ਵਰਤਦਾ ਹੈ ਜਿਸਦਾ OmniRoute ਪਹਿਲਾਂ ਹੀ
ਚੈਟ/ਚਿੱਤਰ ਟ੍ਰੈਫ਼ਿਕ (`open-sse/executors/vertex.ts`) ਲਈ ਸਮਰਥਨ ਕਰਦਾ ਹੈ: ਕਨੈਕਸ਼ਨ ਦੀ API ਕੁੰਜੀ ਜਾਂ ਤਾਂ
Service Account JSON ਕ੍ਰਿਡੈਂਸ਼ੀਅਲ ਹੁੰਦੀ ਹੈ (ਜਿਸਨੂੰ JWT-bearer
ਪ੍ਰਵਾਹ ਰਾਹੀਂ ਥੋੜ੍ਹੇ ਸਮੇਂ ਲਈ ਵੈਧ OAuth ਐਕਸੈੱਸ ਟੋਕਨ ਨਾਲ ਬਦਲਿਆ ਜਾਂਦਾ ਹੈ) ਜਾਂ ਪਹਿਲਾਂ ਤੋਂ ਬਣਿਆ OAuth ਐਕਸੈੱਸ ਟੋਕਨ ਹੁੰਦਾ ਹੈ, ਜੋ ਜਿਵੇਂ ਹੈ ਤਿਵੇਂ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਅੱਪਸਟ੍ਰੀਮ ਐਂਡਪੌਇੰਟ URL, Vertex ਦਾ
ਆਮ `openapi/chat/completions` ਪਾਰਟਨਰ ਐਂਡਪੌਇੰਟ ਹੈ, ਜੋ ਕਨੈਕਸ਼ਨ ਦੇ ਪ੍ਰੋਜੈਕਟ ਅਤੇ
ਰੀਜਨ ਤੋਂ ਬਣਾਇਆ ਜਾਂਦਾ ਹੈ — ਸਪਸ਼ਟ `providerSpecificData.project`/`providerSpecificData.region` ਨੂੰ ਹਮੇਸ਼ਾ ਤਰਜੀਹ ਮਿਲਦੀ ਹੈ;
ਨਹੀਂ ਤਾਂ ਪ੍ਰੋਜੈਕਟ Service Account JSON ਦੇ `project_id` ਤੋਂ ਲਿਆ ਜਾਂਦਾ ਹੈ ਅਤੇ ਰੀਜਨ
ਮੂਲ ਰੂਪ ਵਿੱਚ `us-central1` ਹੁੰਦਾ ਹੈ। ਦੋਵੇਂ ਰਿਜ਼ੋਲਿਊਸ਼ਨ `open-sse/handlers/ocr.ts`
(`resolveVertexOcrAccessToken`, `resolveVertexOcrBaseUrl`) ਵਿੱਚ ਹੁੰਦੇ ਹਨ, ਜਿਨ੍ਹਾਂ ਨੂੰ
`handleOcr` ਵੱਲ ਭੇਜਣ ਤੋਂ ਪਹਿਲਾਂ `src/app/api/v1/ocr/route.ts` ਵਰਤਦਾ ਹੈ।
---
## ਮਾਡਲਾਂ ਦੀ ਸੂਚੀ
```bash
GET /v1/models
Authorization: Bearer your-api-key
→ OpenAI ਫਾਰਮੈਟ ਵਿੱਚ ਸਾਰੇ ਚੈਟ, ਐਮਬੈਡਿੰਗ ਅਤੇ ਚਿੱਤਰ ਮਾਡਲ + ਕੰਬੋ ਵਾਪਸ ਕਰਦਾ ਹੈ
```
### ਮਾਡਲ id ਪ੍ਰੀਫਿਕਸ (`?prefix=`)
ਜ਼ਿਆਦਾਤਰ ਮਾਡਲ ਇੱਕ **ਪ੍ਰੋਵਾਈਡਰ ਪ੍ਰੀਫਿਕਸ** ਹੇਠ ਦਰਸਾਏ ਜਾਂਦੇ ਹਨ। ਤੁਹਾਨੂੰ ਕਿਹੜਾ ਪ੍ਰੀਫਿਕਸ ਮਿਲਦਾ ਹੈ, ਇਹ
`MODELS_CATALOG_PREFIX_MODE` ਫੀਚਰ ਫਲੈਗ ਦੁਆਰਾ ਨਿਯੰਤਰਿਤ ਹੁੰਦਾ ਹੈ ਅਤੇ ਇਸਨੂੰ ਇੱਕ
ਕੁਐਰੀ ਪੈਰਾਮੀਟਰ ਨਾਲ **ਹਰੇਕ ਬੇਨਤੀ ਲਈ** ਓਵਰਰਾਈਡ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ — ਇਹ ਉਸ ਕਲਾਇੰਟ ਲਈ ਲਾਭਦਾਇਕ ਹੈ ਜੋ ਬਾਕੀ ਸਭ ਲਈ
ਸਰਵਰ-ਪੱਧਰੀ ਸੈਟਿੰਗ ਬਦਲੇ ਬਿਨਾਂ ਇੱਕ ਸਾਫ਼ ਸੂਚੀ ਚਾਹੁੰਦਾ ਹੈ:
```bash
GET /v1/models?prefix=alias # ਪ੍ਰਤੀ ਮਾਡਲ ਇੱਕ id — ਛੋਟਾ alias ਪ੍ਰੀਫਿਕਸ
GET /v1/models?prefix=dual # ਦੋਵੇਂ ਰੂਪ (ਸਰਵਰ ਡਿਫਾਲਟ)
GET /v1/models?prefix=canonical # ਸਿਰਫ਼ ਪੂਰਾ provider-id ਪ੍ਰੀਫਿਕਸ
```
| ਮੋਡ | ਨਿਕਾਸ | ਨੋਟਸ |
| ----------- | --------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `dual` | `cc/claude-sonnet-4-6` **ਅਤੇ** `claude/claude-sonnet-4-6` | **ਡਿਫਾਲਟ।** ਦੋਵੇਂ ids ਇੱਕੋ ਮਾਡਲ ਵੱਲ ਰੂਟ ਹੁੰਦੇ ਹਨ; ਇਸਨੂੰ ਇਸ ਲਈ ਰੱਖਿਆ ਗਿਆ ਹੈ ਤਾਂ ਜੋ ਕਿਸੇ ਵੀ ਰੂਪ ਨੂੰ ਹਾਰਡਕੋਡ ਕਰਨ ਵਾਲੀਆਂ ਕਲਾਇੰਟ ਕੌਂਫਿਗਾਂ ਕੰਮ ਕਰਦੀਆਂ ਰਹਿਣ। ਇਹ ਕੈਟਾਲਾਗ ਨੂੰ ਲਗਭਗ ਦੁੱਗਣਾ ਕਰ ਦਿੰਦਾ ਹੈ। |
| `alias` | `cc/claude-sonnet-4-6` | ਪ੍ਰਤੀ ਮਾਡਲ ਇੱਕ ਐਂਟਰੀ। ਵੱਖਰਾ alias ਨਾ ਰੱਖਣ ਵਾਲੇ ਪ੍ਰੋਵਾਈਡਰ ਵੀ ਆਪਣੀ ਐਂਟਰੀ ਜਾਰੀ ਕਰਦੇ ਹਨ, ਇਸ ਲਈ ਕੁਝ ਵੀ ਗੁਆਚਦਾ ਨਹੀਂ। |
| `canonical` | `claude/claude-sonnet-4-6` | ਪੂਰੇ provider-id ਪ੍ਰੀਫਿਕਸ ਹੇਠ ਪ੍ਰਤੀ ਮਾਡਲ ਇੱਕ ਐਂਟਰੀ। ਵੱਖਰਾ alias ਨਾ ਰੱਖਣ ਵਾਲੇ ਪ੍ਰੋਵਾਈਡਰ (ਜਿਵੇਂ `antigravity/…`, `agy/…`) ਵੀ ਇੱਥੇ ਆਪਣੀ ਇਕੱਲੀ id ਜਾਰੀ ਕਰਦੇ ਹਨ, ਇਸ ਲਈ ਕੁਝ ਵੀ ਗੁਆਚਦਾ ਨਹੀਂ। |
ਕੁਐਰੀ ਪੈਰਾਮੀਟਰ ਤੋਂ ਬਿਨਾਂ ਵੀ ਇੱਕ `dual`-ਮੋਡ ਮਿਰਰ ਨੂੰ ਪਛਾਣਿਆ ਜਾ ਸਕਦਾ ਹੈ: ਇਸ ਵਿੱਚ ਪ੍ਰਾਇਮਰੀ id ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਨ ਵਾਲੀ ਇੱਕ `parent`
ਫੀਲਡ ਹੁੰਦੀ ਹੈ।
ਜਿਹੜੇ ਕਲਾਇੰਟ ਮਾਡਲ ਪਿਕਰ ਦਿਖਾਉਂਦੇ ਹਨ, ਉਹਨਾਂ ਨੂੰ `?prefix=alias` ਦੀ ਬੇਨਤੀ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ —
[OmniCopilot VS Code ਐਕਸਟੈਂਸ਼ਨ](../guides/VSCODE-COPILOT.md) ਵੀ ਇਹੀ ਕਰਦੀ ਹੈ।
### ਬਿਨਾਂ-ਥਿੰਕਿੰਗ ਵਾਲੇ ਮਾਡਲ ਵੇਰੀਐਂਟ
ਥਿੰਕਿੰਗ ਸਮਰੱਥਾ ਵਾਲੇ Claude ਮਾਡਲਾਂ ਲਈ, `/v1/models` ਇੱਕ **ਬਿਨਾਂ-ਥਿੰਕਿੰਗ** ਵੇਰੀਐਂਟ ਵੀ ਦਰਸਾਉਂਦਾ ਹੈ, ਜਿਸਦੀ id ਦੇ ਸ਼ੁਰੂ ਵਿੱਚ `claude-3-omniroute-no-thinking/` ਹੁੰਦਾ ਹੈ:
```
claude-3-omniroute-no-thinking/<provider>/<model>
```
ਇਸ id ਨੂੰ ਚੁਣਨ ਨਾਲ (ਉਦਾਹਰਨ ਲਈ, ਇੱਕ Claude Code ਕੌਂਫਿਗ ਵਿੱਚ ਜੋ ਹਮੇਸ਼ਾ ਇੱਕ `thinking` ਬਲਾਕ ਜੋੜਦੀ ਹੈ) ਇਹ ਰੀਜ਼ਨਿੰਗ ਨੂੰ ਦਬਾ ਕੇ ਅਸਲ `<provider>/<model>` ਵੱਲ ਮੁੜ ਰਿਜ਼ਾਲਵ ਹੁੰਦੀ ਹੈ — `/v1/messages` ਪਾਥ ਉੱਤੇ `thinking:{type:"disabled"}`, ਜਾਂ `/v1/chat/completions` ਪਾਥ ਉੱਤੇ `reasoning`/`reasoning_effort` ਫੀਲਡਾਂ ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ। ਇਹ ਵੇਰੀਐਂਟ ਸਿਰਫ਼ ਉਹਨਾਂ Claude-ਪਰਿਵਾਰ ਮਾਡਲਾਂ ਲਈ ਸੂਚੀਬੱਧ ਹੁੰਦਾ ਹੈ ਜੋ ਥਿੰਕਿੰਗ ਦਾ ਸਮਰਥਨ ਕਰਦੇ ਹਨ **ਅਤੇ** `disabled` ਦੀ ਪਾਲਣਾ ਕਰਦੇ ਹਨ (ਇਸ ਲਈ, ਉਦਾਹਰਨ ਵਜੋਂ, adaptive-only ਮਾਡਲ ਜੋ `disabled` ਨੂੰ ਰੱਦ ਕਰਦੇ ਹਨ, ਸ਼ਾਮਲ ਨਹੀਂ ਕੀਤੇ ਜਾਂਦੇ)। ਓਪਰੇਟਰ `ModelSpec.noThinkingAlias` ਰਾਹੀਂ ਪ੍ਰਤੀ ਮਾਡਲ ਇਸ ਵੇਰੀਐਂਟ ਨੂੰ ਜ਼ਬਰਦਸਤੀ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰ ਸਕਦੇ ਹਨ।
---
## ਪ੍ਰਦਾਤਾ ਪਲੱਗਇਨ ਮੈਨਿਫੈਸਟ
```bash
GET /api/v1/provider-plugin-manifest
```
Bifrost, CLIProxyAPI ਅਤੇ ਭਵਿੱਖ ਦੇ sidecar ਰਾਊਟਰਾਂ ਦੁਆਰਾ ਵਰਤਿਆ ਜਾਣ ਵਾਲਾ JSON-ਸੁਰੱਖਿਅਤ ਪ੍ਰਦਾਤਾ ਪਲੱਗਇਨ ਮੈਨਿਫੈਸਟ ਵਾਪਸ ਕਰਦਾ ਹੈ। ਜਵਾਬ TypeScript ਪ੍ਰਦਾਤਾ ਰਜਿਸਟਰੀ ਤੋਂ ਤਿਆਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ ਜਾਣ-ਬੁੱਝ ਕੇ OAuth ਕਲਾਇੰਟ ਸੀਕ੍ਰੇਟ, ਰਨਟਾਈਮ ਵਾਤਾਵਰਣ ਰੈਜ਼ੋਲਿਊਸ਼ਨ, ਐਗਜ਼ੀਕਿਊਟਰ ਫੰਕਸ਼ਨ, ਬੇਨਤੀ ਹੈਡਰ ਅਤੇ ਖਾਤਾ ਡਾਟਾ ਸ਼ਾਮਲ ਨਹੀਂ ਕਰਦਾ।
ਇਸ ਐਂਡਪੌਇੰਟ ਦੀ ਵਰਤੋਂ ਉਦੋਂ ਕਰੋ ਜਦੋਂ ਕੋਈ sidecar ਪ੍ਰਕਿਰਿਆ ਤੋਂ ਬਾਹਰ ਚੱਲਦਾ ਹੋਵੇ ਅਤੇ ਸਿੱਧੇ ਤੌਰ 'ਤੇ `open-sse/config/providerPluginManifestRegistry.ts` ਨੂੰ ਇੰਪੋਰਟ ਨਾ ਕਰ ਸਕੇ।
---
## ਅਨੁਕੂਲਤਾ ਐਂਡਪੌਇੰਟ
| ਵਿਧੀ | ਪਾਥ | ਫਾਰਮੈਟ |
| ---- | ----------------------------------------- | ----------------------------------- |
| 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 (ਸੰਪਾਦਨ/inpaint) |
| POST | `/v1/videos/generations` | OpenAI-ਸ਼ੈਲੀ ਵੀਡੀਓ ਜਨਰੇਸ਼ਨ |
| POST | `/v1/music/generations` | OpenAI-ਸ਼ੈਲੀ ਸੰਗੀਤ ਜਨਰੇਸ਼ਨ |
| POST | `/v1/audio/transcriptions` | OpenAI Audio (STT) |
| POST | `/v1/audio/speech` | OpenAI TTS (ਆਡੀਓ ਬਾਡੀ ਵਾਪਸ ਕਰਦਾ ਹੈ) |
| POST | `/v1/rerank` | Cohere/Voyage-ਸ਼ੈਲੀ rerank |
| POST | `/v1/classify` | Jina classify (`api.jina.ai`) |
| POST | `/v1/segment` | Jina segmenter (`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}/` | OpenAI ਕੈਟਾਲਾਗ ਉਪਨਾਮ |
| GET | `/api/v1/vscode/{token}/models` | OpenAI ਮਾਡਲ ਉਪਨਾਮ |
| POST | `/api/v1/vscode/{token}/chat/completions` | OpenAI ਟੋਕਨ-ਯੁਕਤ ਉਪਨਾਮ |
| POST | `/api/v1/vscode/{token}/responses` | OpenAI Responses ਟੋਕਨ-ਯੁਕਤ ਉਪਨਾਮ |
| POST | `/api/v1/vscode/{token}/api/chat` | Ollama ਟੋਕਨ-ਯੁਕਤ ਉਪਨਾਮ |
| GET | `/api/v1/vscode/{token}/api/tags` | Ollama ਟੈਗ ਟੋਕਨ-ਯੁਕਤ ਉਪਨਾਮ |
ਸਾਰੇ POST ਰੂਟ ਇੱਕੋ ਬਣਤਰ ਦੀ ਪਾਲਣਾ ਕਰਦੇ ਹਨ: `Bearer your-api-key` + Zod-ਪ੍ਰਮਾਣਿਤ JSON ਬਾਡੀ (`v1RerankSchema`, `v1ModerationSchema`, `v1AudioSpeechSchema`, ਆਦਿ; `src/shared/validation/schemas.ts` ਵੇਖੋ)। ਸਕੀਮਾ ਅਸਫਲ ਹੋਣ 'ਤੇ 4xx ਵਾਪਸ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।
ਜਿਹੜੇ ਕਲਾਇੰਟ `Authorization: Bearer ...` ਨਹੀਂ ਜੋੜ ਸਕਦੇ, ਉਨ੍ਹਾਂ ਲਈ OmniRoute URL ਵਿੱਚ API ਕੁੰਜੀਆਂ ਵੀ ਸਵੀਕਾਰ ਕਰਦਾ ਹੈ—ਜਾਂ ਤਾਂ query-string ਅਨੁਕੂਲਤਾ (`?token=...`, `?apiKey=...`, `?api_key=...`, `?key=...`) ਰਾਹੀਂ, ਜਾਂ ਹੇਠਾਂ ਦਸਤਾਵੇਜ਼ਬੱਧ ਸਮਰਪਿਤ `/api/v1/vscode/{token}/...` ਐਂਡਪੌਇੰਟਾਂ ਰਾਹੀਂ।
```bash
# ਮੁੜ-ਰੈਂਕ ਕਰੋ
POST /v1/rerank { "model": "jina-ai/jina-reranker-v3.5", "query": "...", "documents": ["..."] }
# Jina ਵਰਗੀਕਰਨ (Foundation API ਪ੍ਰਮਾਣ-ਪੱਤਰ)
POST /v1/classify { "model": "jina-embeddings-v5-text-small", "input": ["..."], "labels": ["a", "b"] }
# Jina ਸੈਗਮੈਂਟਰ
POST /v1/segment { "content": "...", "return_chunks": true }
# Jina ਖੋਜ (s.jina.ai; ਪ੍ਰਦਾਤਾ ਉਪਨਾਮ: jina-search, jina-ai, jina)
POST /v1/search { "query": "...", "provider": "jina-search" }
# ਮਾਡਰੇਸ਼ਨ
POST /v1/moderations { "model": "omni-moderation-latest", "input": "..." }
# TTS — audio/mpeg (ਜਾਂ ਮੰਗੇ ਗਏ ਫਾਰਮੈਟ) ਦੀ ਬਾਡੀ ਵਾਪਸ ਕਰਦਾ ਹੈ
POST /v1/audio/speech { "model": "openai/tts-1", "input": "Hello", "voice": "alloy" }
# ਚਿੱਤਰ ਸੰਪਾਦਨ (multipart)
POST /v1/images/edits -F image=@input.png -F prompt="..." -F mask=@mask.png
# ਵੀਡੀਓ / ਸੰਗੀਤ ਜਨਰੇਸ਼ਨ (ਪ੍ਰਦਾਤਾ-ਅਗੇਤਰ ਵਾਲੀ ਮਾਡਲ ID)
POST /v1/videos/generations { "model": "runway/gen-3", "prompt": "..." }
POST /v1/music/generations { "model": "suno/v3.5", "prompt": "..." }
```
### ਸਮਰਪਿਤ ਪ੍ਰਦਾਤਾ ਰੂਟ
```bash
POST /v1/providers/{provider}/chat/completions
POST /v1/providers/{provider}/embeddings
POST /v1/providers/{provider}/images/generations
```
ਜੇ ਪ੍ਰਦਾਤਾ ਅਗੇਤਰ ਮੌਜੂਦ ਨਾ ਹੋਵੇ, ਤਾਂ ਇਹ ਆਪਣੇ-ਆਪ ਜੋੜ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ। ਮੇਲ ਨਾ ਖਾਂਦੇ ਮਾਡਲ `400` ਵਾਪਸ ਕਰਦੇ ਹਨ।
---
## Files API
ਬੈਚ ਇਨਪੁੱਟ/ਆਉਟਪੁੱਟ ਅਤੇ ਫ਼ਾਈਲ-ਉਦੇਸ਼ ਅੱਪਲੋਡਾਂ ਲਈ OpenAI-ਅਨੁਕੂਲ ਫ਼ਾਈਲਾਂ ਦਾ ਐਂਡਪੌਇੰਟ।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ------ | ------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
| POST | `/v1/files` | ਫ਼ਾਈਲ ਅੱਪਲੋਡ ਕਰੋ (ਮਲਟੀਪਾਰਟ: `file`, `purpose`, `expires_after[anchor]`, `expires_after[seconds]`) — ਵੱਧ ਤੋਂ ਵੱਧ 512 MiB |
| GET | `/v1/files` | ਪ੍ਰਮਾਣਿਤ API ਕੁੰਜੀ ਲਈ ਫ਼ਾਈਲਾਂ ਦੀ ਸੂਚੀ ਵੇਖੋ |
| GET | `/v1/files/[id]` | ਫ਼ਾਈਲ ਦਾ ਮੈਟਾਡੇਟਾ ਪ੍ਰਾਪਤ ਕਰੋ |
| DELETE | `/v1/files/[id]` | ਫ਼ਾਈਲ ਮਿਟਾਓ |
| GET | `/v1/files/[id]/content` | ਕੱਚੀ ਫ਼ਾਈਲ ਸਮੱਗਰੀ ਨੂੰ ਵਾਪਸ ਸਟ੍ਰੀਮ ਕਰੋ |
**ਪ੍ਰਮਾਣੀਕਰਨ:** ਬੇਅਰਰ API ਕੁੰਜੀ — ਫ਼ਾਈਲਾਂ ਦਾ ਦਾਇਰਾ `getApiKeyRequestScope` ਰਾਹੀਂ ਹਰੇਕ API ਕੁੰਜੀ ਅਨੁਸਾਰ ਨਿਰਧਾਰਤ ਹੁੰਦਾ ਹੈ। ਇੱਕ ਕੁੰਜੀ
ਸਿਰਫ਼ ਆਪਣੀਆਂ ਫ਼ਾਈਲਾਂ ਨੂੰ ਵੇਖ, ਡਾਊਨਲੋਡ ਅਤੇ ਮਿਟਾ ਸਕਦੀ ਹੈ; ਕੁੰਜੀ ਤੋਂ ਬਿਨਾਂ ਡੈਸ਼ਬੋਰਡ ਸੈਸ਼ਨ
ਪੂਰੀ ਇੰਸਟੈਂਸ ਨੂੰ ਪੜ੍ਹ ਸਕਦਾ ਹੈ; ਬਿਨਾਂ ਮਾਲਕ ਵਾਲੀ ਫ਼ਾਈਲ (ਅਗਿਆਤ ਜਾਂ ਡੈਸ਼ਬੋਰਡ-ਸੈਸ਼ਨ ਅੱਪਲੋਡ) ਹਰੇਕ
ਗੈਰ-ਸੈਸ਼ਨ ਕਾਲਰ ਲਈ ਅਸਵੀਕਾਰ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। `GET /v1/files` ਕਿਸੇ ਅਗਿਆਤ ਕਾਲਰ ਨੂੰ — ਅਤੇ ਦਿੱਤੀ ਗਈ ਅਜਿਹੀ ਕੁੰਜੀ ਨੂੰ ਜਿਸਦਾ
ਨਿਪਟਾਰਾ ਨਹੀਂ ਹੁੰਦਾ — `401` ਨਾਲ ਅਸਵੀਕਾਰ ਕਰਦਾ ਹੈ, ਭਾਵੇਂ `REQUIRE_API_KEY=false` ਹੋਵੇ, ਹਰ ਟੈਨੈਂਟ ਦੀਆਂ
ਫ਼ਾਈਲਾਂ ਦੀ ਸੂਚੀ ਦਿਖਾਉਣ ਦੀ ਬਜਾਏ (GHSA-m3hp-hq9g-fpmv, GHSA-2jm2-mpx8-6523)।
---
## Batches API
OpenAI-ਅਨੁਕੂਲ ਬੈਚ ਪ੍ਰੋਸੈਸਿੰਗ।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ------ | ------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| POST | `/v1/batches` | ਬੈਚ ਬਣਾਓ — ਬਾਡੀ ਦੀ ਪੁਸ਼ਟੀ `v1BatchCreateSchema` (`input_file_id`, `endpoint`, `completion_window`) ਦੁਆਰਾ ਕੀਤੀ ਜਾਂਦੀ ਹੈ |
| GET | `/v1/batches` | ਬੈਚਾਂ ਦੀ ਸੂਚੀ ਪ੍ਰਾਪਤ ਕਰੋ |
| GET | `/v1/batches/[id]` | ਬੈਚ ਸਥਿਤੀ + `request_counts` ਪ੍ਰਾਪਤ ਕਰੋ |
| DELETE | `/v1/batches/[id]` | ਪੂਰਾ ਹੋਇਆ/ਅਸਫਲ ਬੈਚ ਮਿਟਾਓ |
| POST | `/v1/batches/[id]/cancel` | ਪ੍ਰਗਤੀ ਅਧੀਨ ਬੈਚ ਰੱਦ ਕਰੋ |
**ਪ੍ਰਮਾਣੀਕਰਨ:** Bearer API ਕੁੰਜੀ। ਬੈਚਾਂ ਦਾ ਦਾਇਰਾ ਹਰੇਕ API ਕੁੰਜੀ ਅਨੁਸਾਰ, ਫ਼ਾਈਲਾਂ ਵਾਲੇ ਉਸੇ ਤਿੰਨ-ਪੱਖੀ ਨਿਯਮ ਹੇਠ ਨਿਰਧਾਰਤ ਹੁੰਦਾ ਹੈ:
ਕੇਵਲ ਆਪਣੀ ਕੁੰਜੀ, ਡੈਸ਼ਬੋਰਡ ਸੈਸ਼ਨ ਲਈ ਪੂਰੇ ਇੰਸਟੈਂਸ ਤੱਕ ਪਹੁੰਚ, ਅਤੇ null-owner ਰਿਕਾਰਡਾਂ ਲਈ ਹਰੇਕ
ਗੈਰ-ਸੈਸ਼ਨ ਕਾਲਰ ਨੂੰ ਇਨਕਾਰ (ਪ੍ਰਾਪਤ ਕਰਨ, ਮਿਟਾਉਣ, ਰੱਦ ਕਰਨ ਅਤੇ ਬਣਾਉਣ ਵੇਲੇ `input_file_id` ਜਾਂਚ ਲਈ)।
`GET /v1/batches`, `REQUIRE_API_KEY=false` ਹੋਣ ਦੇ ਬਾਵਜੂਦ, ਕਿਸੇ ਅਗਿਆਤ ਕਾਲਰ ਨੂੰ `401` ਨਾਲ ਅਸਵੀਕਾਰ ਕਰਦਾ ਹੈ।
---
## Search API
ਵੈੱਬ/ਖੋਜ ਪ੍ਰਦਾਤਾ ਐਬਸਟ੍ਰੈਕਸ਼ਨ (Tavily, Brave, Exa, Serper, ਆਦਿ)।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ---- | ---------------------- | ----------------------------------------------------------------------------------------------------------- |
| GET | `/v1/search` | ਕੌਂਫ਼ਿਗਰ ਕੀਤੇ ਖੋਜ ਪ੍ਰਦਾਤਿਆਂ + ਸਮਰੱਥਾਵਾਂ ਦੀ ਸੂਚੀ ਦਿਖਾਓ |
| POST | `/v1/search` | ਖੋਜ ਕਵੇਰੀ ਚਲਾਓ — ਬਾਡੀ ਨੂੰ `v1SearchSchema` ਦੁਆਰਾ ਪ੍ਰਮਾਣਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਕੈਸ਼ਿੰਗ/ਕੋਐਲੇਸਿੰਗ ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ |
| GET | `/v1/search/analytics` | ਹਰੇਕ ਪ੍ਰਦਾਤਾ ਲਈ ਹਿੱਟ/ਲੇਟੈਂਸੀ/ਕੈਸ਼ ਅੰਕੜੇ |
**ਪ੍ਰਮਾਣੀਕਰਨ:** Bearer API ਕੁੰਜੀ (`extractApiKey` + `isValidApiKey`)। ਖੋਜ ਨੀਤੀ ਨੂੰ `enforceApiKeyPolicy` ਰਾਹੀਂ ਲਾਗੂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।
---
## Web Fetch API
ਕਿਸੇ ਸੰਰਚਿਤ web-fetch ਪ੍ਰਦਾਤਾ (Firecrawl, Jina Reader, Tavily Extract, TinyFish Fetch, Nimble Extract) ਰਾਹੀਂ URL ਤੋਂ ਸਮੱਗਰੀ ਕੱਢੋ।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ---- | --------------- | --------------------------------------------------------------------------------- |
| POST | `/v1/web/fetch` | URL ਨੂੰ ਪ੍ਰਾਪਤ/ਸਕ੍ਰੇਪ ਕਰੋ — ਬੌਡੀ ਦੀ ਪੁਸ਼ਟੀ `v1WebFetchSchema` ਦੁਆਰਾ ਕੀਤੀ ਜਾਂਦੀ ਹੈ |
**ਪ੍ਰਮਾਣੀਕਰਨ:** Bearer API ਕੁੰਜੀ (`extractApiKey` + `isValidApiKey`)। ਨੀਤੀ `enforceApiKeyPolicy` ਰਾਹੀਂ ਲਾਗੂ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।
**ਕੋਟਾ-ਸਚੇਤ ਫਾਲਬੈਕ (#8297):** ਜਦੋਂ ਕੋਈ ਸਪਸ਼ਟ `provider` ਨਹੀਂ ਦਿੱਤਾ ਜਾਂਦਾ, ਤਾਂ ਪੂਲ
(`firecrawl``jina-reader``tavily-search``tinyfish``nimble-search`) ਨੂੰ
ਸਥਿਰ ਤਰਜੀਹੀ ਕ੍ਰਮ (ਪਹਿਲਾਂ-ਭਰੋ) ਵਿੱਚ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ — ਦਰ-ਸੀਮਿਤ-ਪਰ-ਸੰਰਚਿਤ ਪ੍ਰਦਾਤੇ ਨੂੰ
ਬੇਨਤੀ ਤੁਰੰਤ ਰੋਕਣ ਦੀ ਬਜਾਏ ਛੱਡ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ, ਅਤੇ ਮੁੜ-ਕੋਸ਼ਿਸ਼ਯੋਗ/ਕੋਟਾ-ਸੰਬੰਧੀ ਅੱਪਸਟ੍ਰੀਮ ਅਸਫਲਤਾ
(HTTP 429 ਹਮੇਸ਼ਾ; Firecrawl/Tavily/TinyFish ਦੀਆਂ ਕੋਟਾ-ਸ਼ੈਲੀ ਮੁਫ਼ਤ ਟੀਅਰਾਂ ਲਈ 402/403 —
Jina Reader ਲਈ ਨਹੀਂ, ਅਤੇ ਸਧਾਰਨ 400 ਗਲਤ ਬੇਨਤੀ ਲਈ ਕਦੇ ਨਹੀਂ) ਬੇਨਤੀ ਦੇ ਸਮੇਂ
ਅਗਲੇ ਅਣਅਜ਼ਮਾਏ, ਪ੍ਰਮਾਣ-ਪੱਤਰ ਵਾਲੇ ਪ੍ਰਦਾਤੇ ਵੱਲ ਚਲੀ ਜਾਂਦੀ ਹੈ। ਜਦੋਂ ਪੂਲ ਦੇ ਸਾਰੇ ਪ੍ਰਦਾਤੇ
ਖ਼ਤਮ ਹੋ ਜਾਂਦੇ ਹਨ, ਤਾਂ ਐਂਡਪੌਇੰਟ ਪਿਛਲੇ ਆਮ `400` ਦੀ ਬਜਾਏ ਇੱਕੋ `429`
(`Retry-After` ਹੈਡਰ ਸਮੇਤ) ਵਾਪਸ ਕਰਦਾ ਹੈ। ਜਦੋਂ ਕਿਸੇ ਸਪਸ਼ਟ `provider` ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਜਾਂਦੀ ਹੈ,
ਤਾਂ ਕੋਈ ਚੁੱਪ ਫਾਲਬੈਕ **ਨਹੀਂ** ਹੁੰਦਾ — ਦਰ-ਸੀਮਿਤ ਜਾਂ ਅਸਫਲ ਹੋਣ ਵਾਲਾ ਸਪਸ਼ਟ
ਪ੍ਰਦਾਤਾ ਆਪਣੀ ਤਰੁੱਟੀ ਦਿਖਾਉਂਦਾ ਹੈ (ਦਰ-ਸੀਮਿਤ ਹੋਣ 'ਤੇ `429`, ਨਹੀਂ ਤਾਂ ਅੱਪਸਟ੍ਰੀਮ
ਸਥਿਤੀ)।
---
## WebSocket ਸਟ੍ਰੀਮਿੰਗ
```bash
GET /v1/ws?handshake=1
```
WebSocket ਅੱਪਗ੍ਰੇਡ ਹੈਂਡਸ਼ੇਕ ਦੀ ਪੁਸ਼ਟੀ ਕਰਦਾ ਹੈ ਅਤੇ ਵਾਇਰ ਪ੍ਰੋਟੋਕੋਲ ਦੇ ਉਦਾਹਰਨ ਸੁਨੇਹੇ (`request`, `cancel`) ਵਾਪਸ ਕਰਦਾ ਹੈ। ਅਸਲ WS ਫ੍ਰੇਮਾਂ ਨੂੰ Next.js ਰੂਟ ਸਾਰਣੀ ਤੋਂ ਬਾਹਰ ਬੰਡਲ ਕੀਤੇ WS ਸਰਵਰ ਦੁਆਰਾ ਸੰਭਾਲਿਆ ਜਾਂਦਾ ਹੈ।
**ਪ੍ਰਮਾਣੀਕਰਨ:** ਹੈਂਡਸ਼ੇਕ ਦੌਰਾਨ Bearer API ਕੁੰਜੀ।
### WebSocket ਉੱਤੇ Responses API (ਸਿਰਫ਼ codex)
```bash
# HTTP API ਵਾਲਾ ਉਹੀ ਹੋਸਟ:ਪੋਰਟ (ਡਿਫਾਲਟ 20128); ਕਨੈਕਸ਼ਨ ਨੂੰ ਅੱਪਗ੍ਰੇਡ ਕਰੋ:
wscat -c "ws://localhost:20128/v1/responses?api_key=<OMNIROUTE_API_KEY>"
# (ਜਾਂ: -H "Authorization: Bearer <OMNIROUTE_API_KEY>")
# ਪਹਿਲਾ ਫ੍ਰੇਮ response.create ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ:
{ "type": "response.create", "model": "gpt-5.5", "input": [ { "role": "user", "content": "hi" } ] }
```
Responses-API-over-WebSocket ਪ੍ਰੌਕਸੀ **ਸਿਰਫ਼ `codex` ਨਾਲ** ਜੁੜੀ ਹੋਈ ਹੈ (ChatGPT
ਬੈਕਐਂਡ)। ਇਹ API/ਡੈਸ਼ਬੋਰਡ ਵਾਲੇ ਉਸੇ ਪੋਰਟ ਉੱਤੇ `/v1/responses`,
`/responses`, ਅਤੇ `/api/v1/responses` ਪਾਥਾਂ 'ਤੇ ਸੁਣਦੀ ਹੈ। ਪਹਿਲੇ `response.create` ਫ੍ਰੇਮ ਉੱਤੇ ਇਹ
ਅੰਦਰੂਨੀ `codex-responses-ws` ਬ੍ਰਿਜ ਰਾਹੀਂ ਪ੍ਰਮਾਣੀਕਰਨ + ਤਿਆਰੀ ਕਰਦੀ ਹੈ, ਇੱਕ
codex OAuth ਕਨੈਕਸ਼ਨ ਚੁਣਦੀ ਹੈ, ਅਤੇ `wreq-js` ਟ੍ਰਾਂਸਪੋਰਟ ਰਾਹੀਂ
`wss://chatgpt.com/backend-api/codex/responses` ਤੱਕ ਟਨਲ ਬਣਾਉਂਦੀ ਹੈ।
**ਗੈਰ-codex ਮਾਡਲ ਅਸਵੀਕਾਰ ਕੀਤੇ ਜਾਂਦੇ ਹਨ** (`codex_ws_provider_required`)।
ਕੋਟਾ-ਸਾਂਝ ਰੂਟਿੰਗ ਲਈ `model: "qtSd/<group>/codex/<model>"` ਵਰਤੋ। ਇਸਨੂੰ
`app/server-ws.mjs` + `scripts/dev/responses-ws-proxy.mjs` + `src/app/api/internal/codex-responses-ws/route.ts` ਵਿੱਚ ਲਾਗੂ ਕੀਤਾ ਗਿਆ ਹੈ।
**ਪ੍ਰਮਾਣੀਕਰਨ:** ਹੈਂਡਸ਼ੇਕ ਦੌਰਾਨ Bearer API ਕੁੰਜੀ। ਬੰਡਲ ਕੀਤਾ HTTP ਸਰਵਰ (`server-ws.mjs`)
ਸਰਗਰਮ ਐਂਟਰੀਪੌਇੰਟ ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ (ਜਦੋਂ `app/server-ws.mjs` ਮੌਜੂਦ ਹੁੰਦੀ ਹੈ ਤਾਂ ਡਿਫਾਲਟ ਤੌਰ 'ਤੇ ਇਹੀ ਹੁੰਦਾ ਹੈ)।
#### ਮਾਡਲ id: ਸਧਾਰਨ ChatGPT id ਵਰਤੋ (`codex/` ਪ੍ਰੀਫਿਕਸ ਤੋਂ ਬਿਨਾਂ)
OpenAI **Codex CLI**, ਜਦੋਂ `supports_websockets = true` ਹੋਵੇ, ਤਾਂ ਮਾਡਲ ਨਾਮ ਦੀ
ਕਲਾਇੰਟ-ਪਾਸੇ ਪੁਸ਼ਟੀ ਕਰਦੀ ਹੈ ਅਤੇ `codex/gpt-5.5` ਵਰਗੀਆਂ **ਪ੍ਰਦਾਤਾ-ਪ੍ਰੀਫਿਕਸ ਵਾਲੀਆਂ ids ਨੂੰ ਅਸਵੀਕਾਰ ਕਰਦੀ ਹੈ**
(`The 'codex/gpt-5.5' model is not supported when using Codex with
a ChatGPT account`)। **ਸਧਾਰਨ** id (ਜਿਵੇਂ `gpt-5.5`) ਭੇਜੋ। OmniRoute ਦਾ ਬ੍ਰਿਜ
ਸਿਰਫ਼ codex ਲਈ ਹੈ, ਇਸ ਲਈ ਇਹ ਅੱਪਸਟ੍ਰੀਮ ਟਨਲ ਬਣਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਸਧਾਰਨ id ਨੂੰ codex ਮਾਡਲ ਵਜੋਂ
ਮੁੜ-ਰਿਜ਼ਾਲਵ ਕਰਦਾ ਹੈ (`resolveCodexWsModelInfo`) — ਭਾਵੇਂ ਸਧਾਰਨ
`gpt-5.5` ਨੂੰ HTTP ਉੱਤੇ ਨਹੀਂ ਤਾਂ ਕਿਸੇ ਹੋਰ ਪ੍ਰਦਾਤੇ ਵੱਲ ਰੂਟ ਕੀਤਾ ਜਾਂਦਾ।
#### OpenAI Codex CLI ਨੂੰ ਸੰਰਚਿਤ ਕਰਨਾ
Codex CLI ਨੂੰ OmniRoute ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਨ ਲਈ `~/.codex/config.toml` ਵਿੱਚ WebSocket
ਸਮਰਥਨ ਵਾਲਾ ਇੱਕ ਕਸਟਮ ਪ੍ਰਦਾਤਾ ਜੋੜੋ (ਮੌਜੂਦਾ ਸੰਰਚਨਾ ਨੂੰ ਬਦਲਣ ਤੋਂ ਬਚਣ ਲਈ ਵੱਖਰਾ `CODEX_HOME` ਵਰਤੋ):
```toml
model = "gpt-5.5" # ਸਧਾਰਨ id — "codex/gpt-5.5" ਨਹੀਂ
model_provider = "omniroute"
[model_providers.omniroute]
name = "OmniRoute (WS)"
base_url = "http://localhost:20128/v1" # ਅੰਤ ਵਿੱਚ ਸਲੈਸ਼ ਨਹੀਂ; WS URL ਇਸ ਤੋਂ ਬਣਾਇਆ ਜਾਂਦਾ ਹੈ (ਪ੍ਰੋਡਕਸ਼ਨ ਵਿੱਚ https/wss ਵਰਤੋ)
wire_api = "responses" # Feb 2026 ਤੋਂ ਇਕੱਲਾ ਸਮਰਥਿਤ ਮੁੱਲ
supports_websockets = true # Responses-over-WS ਟ੍ਰਾਂਸਪੋਰਟ ਨੂੰ ਸਮਰੱਥ ਕਰਦਾ ਹੈ
env_key = "OMNIROUTE_API_KEY" # OmniRoute API ਕੁੰਜੀ (Bearer) ਰੱਖਦਾ ਹੈ
```
```bash
export OMNIROUTE_API_KEY=sk-... # ਇੱਕ OmniRoute API ਕੁੰਜੀ (ਜੇ REQUIRE_API_KEY=false ਹੋਵੇ ਤਾਂ ਕੋਈ ਵੀ ਕੁੰਜੀ)
codex exec "Responda apenas: PONG"
```
CLI, `base_url + /responses` ਨੂੰ WebSocket ਵਿੱਚ ਅੱਪਗ੍ਰੇਡ ਕਰਦੀ ਹੈ ਅਤੇ OmniRoute ਇਸਨੂੰ
ਚੁਣੇ ਹੋਏ codex OAuth ਕਨੈਕਸ਼ਨ ਤੱਕ ਟਨਲ ਕਰਦਾ ਹੈ। ਸਥਾਨਕ ਸਰਵਰ ਨਾਲ ਸ਼ੁਰੂ ਤੋਂ ਅੰਤ ਤੱਕ ਪੁਸ਼ਟੀ ਕੀਤੀ ਗਈ:
ChatGPT `codex.rate_limits` + `response.created` ਵਾਪਸ ਕਰਦਾ ਹੈ ਅਤੇ ਪੂਰਨਤਾ ਨੂੰ
ਸਟ੍ਰੀਮ ਕਰਦਾ ਹੈ।
---
## ਕੋਟੇ ਅਤੇ ਸਮੱਸਿਆਵਾਂ ਦੀ ਰਿਪੋਰਟਿੰਗ
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ---- | ------------------- | ----------------------------------------------------------------------------------------------- |
| GET | `/v1/quotas/check` | ਰਜਿਸਟਰਡ ਕੁੰਜੀ ਜਾਰੀ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ `provider` + `accountId` ਲਈ ਕੋਟੇ ਦੀ ਪੂਰਵ-ਪੁਸ਼ਟੀ ਕਰੋ |
| POST | `/v1/issues/report` | ਕੋਟੇ/ਕੁੰਜੀ ਜਾਰੀ ਕਰਨ ਦੀ ਅਸਫਲਤਾ ਦੀ GitHub ਨੂੰ ਰਿਪੋਰਟ ਕਰੋ (`GITHUB_ISSUES_REPO` + ਟੋਕਨ ਲੋੜੀਂਦਾ ਹੈ) |
**ਪ੍ਰਮਾਣੀਕਰਨ:** ਬੇਅਰਰ API ਕੁੰਜੀ (`isAuthenticated`)।
---
## ਸਵੈ-ਸੇਵਾ ਵਰਤੋਂ (`/api/usage/om-usage`)
ਕੋਈ ਵੀ API ਕੁੰਜੀ **ਆਪਣੀ ਖੁਦ ਦੀ** ਵਰਤੋਂ ਅਤੇ ਕੋਟੇ ਪੜ੍ਹ ਸਕਦੀ ਹੈ — ਪ੍ਰਬੰਧਨ ਪ੍ਰਮਾਣੀਕਰਨ ਦੀ ਲੋੜ ਨਹੀਂ। ਇਹ ਉਹ ਐਂਡਪੌਇੰਟ ਹੈ ਜਿਸਦੀ ਵਰਤੋਂ
ਕਲਾਇੰਟ (CLI, OmniCopilot ਪੈਨਲ) ਕਿਸੇ ਕੁੰਜੀ ਧਾਰਕ ਨੂੰ ਉਸਦਾ ਖਰਚਾ ਦਿਖਾਉਣ ਲਈ ਕਰਦਾ ਹੈ।
```bash
# ਟੈਕਸਟ ਰੂਪ (ਇਤਿਹਾਸਕ ਇਕਰਾਰਨਾਮਾ — ਟਰਮੀਨਲ ਲਈ ਸਧਾਰਨ ਟੈਕਸਟ)
curl -H "Authorization: Bearer <your-api-key>" \
http://localhost:20128/api/usage/om-usage
# ਸੰਰਚਿਤ ਰੂਪ — ਜਿਸਦੀ ਵਰਤੋਂ UI ਕਰਦਾ ਹੈ
curl -H "Authorization: Bearer <your-api-key>" \
"http://localhost:20128/api/usage/om-usage?format=json"
```
ਕੁੰਜੀ ਲਈ **`allowUsageCommand`** ਸਮਰੱਥ ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ (ਮੂਲ ਰੂਪ ਵਿੱਚ ਬੰਦ — ਡੈਸ਼ਬੋਰਡ ਦਾ API-ਕੁੰਜੀ
ਮੈਨੇਜਰ ਇਸਨੂੰ ਹਰ ਕੁੰਜੀ ਲਈ ਵੱਖਰੇ ਤੌਰ 'ਤੇ ਬਦਲਦਾ ਹੈ)। ਇਸ ਤੋਂ ਬਿਨਾਂ ਐਂਡਪੌਇੰਟ `403` ਨਾਲ ਜਵਾਬ ਦਿੰਦਾ ਹੈ।
`?format=json` ਇੱਕ ਭੇਦਯੋਗ ਸੰਰਚਨਾ ਵਾਪਸ ਕਰਦਾ ਹੈ ਤਾਂ ਜੋ ਕਾਲਰ ਕਦੇ ਵੀ ਇਨਕਾਰ ਵਾਲੇ ਜਵਾਬ ਵਿੱਚੋਂ ਡੇਟਾ ਫੀਲਡ ਨਾ ਪੜ੍ਹੇ।
ਸਫਲਤਾ ਉੱਤੇ:
```jsonc
{
"allowed": true,
// ਸਿਰਫ਼ ਉਦੋਂ ਮੌਜੂਦ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਕੁੰਜੀ ਨੇ ਪ੍ਰਤੀ-ਕੁੰਜੀ ਵਰਤੋਂ ਸੀਮਾਵਾਂ (ਰੋਜ਼ਾਨਾ/ਹਫ਼ਤਾਵਾਰੀ USD) ਚੁਣੀਆਂ ਹੋਣ:
"personal": {
"dailySpentUsd": 1.25,
"dailyLimitUsd": 5,
"dailyResetAtIso": "…",
"weeklySpentUsd": 8,
"weeklyLimitUsd": 20,
"weeklyResetAtIso": "…" /* */,
},
// ਚੁਣੇ ਹੋਏ ਪ੍ਰਦਾਤਾ ਦੇ ਕੋਟੇ ਦਾ ਸਨੈਪਸ਼ਾਟ, ਜਾਂ ਜਦੋਂ ਹਾਲੇ ਕੁਝ ਵੀ ਕੈਸ਼ ਨਾ ਹੋਇਆ ਹੋਵੇ ਤਾਂ null:
"provider": {
"connectionId": "…",
"provider": "claude",
"plan": "…",
"quotas": {/* */},
},
// ਹਰ ਕਨੈਕਸ਼ਨ ਦਾ ਸਨੈਪਸ਼ਾਟ, ਤਾਂ ਜੋ UI ਕਈ ਪ੍ਰਦਾਤਾਵਾਂ ਨੂੰ ਨਾਲ-ਨਾਲ ਦਿਖਾ ਸਕੇ:
"providers": [
{ "connectionId": "…", "provider": "claude" /* */ },
{ "provider": "codex" /* */ },
],
}
```
ਇਨਕਾਰ ਹੋਣ ਉੱਤੇ (`401` ਗਲਤ ਕੁੰਜੀ / `403` ਆਗਿਆ ਨਹੀਂ) ਉਹੀ ਰੂਟ
`{ "allowed": false, "error": { "message": "…" } }` ਵਾਪਸ ਕਰਦਾ ਹੈ — ਮੌਜੂਦ-ਪਰ-ਖਾਲੀ `personal`/`provider`
(ਕੁੰਜੀ ਨੂੰ ਆਗਿਆ ਹੈ, ਪਰ ਹਾਲੇ ਕੁਝ ਪਤਾ ਨਹੀਂ ਲੱਗਿਆ) ਇਨਕਾਰ ਤੋਂ ਵੱਖਰੀ ਸਥਿਤੀ ਹੈ, ਅਤੇ ਸਿਰਫ਼ JSON ਰੂਪ
ਇਨ੍ਹਾਂ ਵਿਚਕਾਰ ਫ਼ਰਕ ਕਰਦਾ ਹੈ।
**ਪ੍ਰਮਾਣੀਕਰਨ:** ਕਾਲਰ ਦੀ ਆਪਣੀ ਬੇਅਰਰ API ਕੁੰਜੀ, ਜਿਸਦੀ ਪੁਸ਼ਟੀ `isValidApiKey` ਨਾਲ ਕੀਤੀ ਜਾਂਦੀ ਹੈ — ਇਹ
ਪ੍ਰਬੰਧਨ ਸਤਹ (`/api/keys/…`) _ਨਹੀਂ_ ਹੈ, ਜੋ `requireManagementAuth` ਦੇ ਪਿੱਛੇ ਹੀ ਰਹਿੰਦੀ ਹੈ।
---
## ਸਿਮੈਂਟਿਕ ਕੈਸ਼
```bash
# ਕੈਸ਼ ਦੇ ਅੰਕੜੇ ਪ੍ਰਾਪਤ ਕਰੋ
GET /api/cache/stats
# ਸਾਰੇ ਕੈਸ਼ ਸਾਫ਼ ਕਰੋ
DELETE /api/cache/stats
```
ਜਵਾਬ ਦੀ ਉਦਾਹਰਨ:
```json
{
"semanticCache": {
"memorySize": 42,
"memoryMaxSize": 500,
"dbSize": 128,
"hitRate": 0.65
},
"idempotency": {
"activeKeys": 3,
"windowMs": 5000
}
}
```
### ਲੇਟੈਂਸੀ ਉੱਤੇ ਪ੍ਰਭਾਵ
ਸਿਮੈਂਟਿਕ ਕੈਸ਼ HIT ਜਵਾਬ ਨੂੰ **ਅੱਪਸਟ੍ਰੀਮ ਕਾਲ ਤੋਂ ਬਿਨਾਂ**
ਕੈਸ਼ ਤੋਂ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ, ਇਸ ਲਈ ਰਿਪੋਰਟ ਕੀਤੀ `X-OmniRoute-Response-Latency` ਲਗਭਗ ਸਿਫ਼ਰ ਹੁੰਦੀ ਹੈ
(ਮੂਲ ਅੱਪਸਟ੍ਰੀਮ ਲੇਟੈਂਸੀ ਦੀ ਪਰਵਾਹ ਕੀਤੇ ਬਿਨਾਂ)। ਲੇਟੈਂਸੀ ਪ੍ਰਤੀ ਸੰਵੇਦਨਸ਼ੀਲ ਕਲਾਇੰਟਾਂ ਨੂੰ
(ਬੈਂਚਮਾਰਕਿੰਗ, p50/p99 ਨਿਗਰਾਨੀ) `X-OmniRoute-Cache-Latency` ਜਵਾਬ ਹੈਡਰ ਦੀ ਜਾਂਚ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ:
| ਮੁੱਲ | ਅਰਥ |
| ------------- | ------------------------------------------------------------ |
| `synthetic` | ਜਵਾਬ ਕੈਸ਼ ਤੋਂ ਦਿੱਤਾ ਗਿਆ; ਲੇਟੈਂਸੀ ਅਸਲੀ ਅੱਪਸਟ੍ਰੀਮ ਸਮਾਂ ਨਹੀਂ ਹੈ |
| _(ਗੈਰ-ਮੌਜੂਦ)_ | ਅਸਲੀ ਅੱਪਸਟ੍ਰੀਮ ਕਾਲ ਤੋਂ ਜਵਾਬ |
### ਪ੍ਰਤੀ-ਕੁੰਜੀ ਕੈਸ਼ ਬਾਈਪਾਸ
API ਕੁੰਜੀਆਂ `cacheDefaultMode` ਰਾਹੀਂ ਸਿਮੈਂਟਿਕ ਕੈਸ਼ ਰੀਡ ਤੋਂ ਬਾਹਰ ਰਹਿਣ ਦੀ ਚੋਣ ਕਰ ਸਕਦੀਆਂ ਹਨ:
| ਮੁੱਲ | ਵਿਵਹਾਰ |
| -------- | ----------------------------------------------------------- |
| `legacy` | ਆਮ ਕੈਸ਼ ਵਿਵਹਾਰ (ਮੂਲ) |
| `bypass` | ਕੈਸ਼ ਲੁੱਕਅੱਪ ਪੂਰੀ ਤਰ੍ਹਾਂ ਛੱਡੋ; ਹਮੇਸ਼ਾ ਅੱਪਸਟ੍ਰੀਮ ਨੂੰ ਕਾਲ ਕਰੋ |
ਕੁੰਜੀ ਬਣਾਉਣ ਵੇਲੇ (`POST /api/keys`) ਸੈੱਟ ਕਰੋ ਜਾਂ (`PATCH /api/keys/[id]`) ਅੱਪਡੇਟ ਕਰੋ:
```json
{ "cacheDefaultMode": "bypass" }
```
### ਪ੍ਰਤੀ-ਬੇਨਤੀ ਬਾਈਪਾਸ
ਕੋਈ ਵੀ ਬੇਨਤੀ ਕੁੰਜੀ ਸੈਟਿੰਗਾਂ ਦੀ ਪਰਵਾਹ ਕੀਤੇ ਬਿਨਾਂ ਕੈਸ਼ ਨੂੰ ਬਾਈਪਾਸ ਕਰ ਸਕਦੀ ਹੈ:
```
X-OmniRoute-No-Cache: true
```
---
## ਡੈਸ਼ਬੋਰਡ ਅਤੇ ਪ੍ਰਬੰਧਨ
ਪ੍ਰਬੰਧਨ ਰੂਟ (`/api/*`, ਜਨਤਕ auth/login ਤੋਂ ਇਲਾਵਾ) ਆਮ inference API ਕੁੰਜੀਆਂ ਦੁਆਰਾ **ਅਧਿਕਾਰਤ ਨਹੀਂ** ਹੁੰਦੇ।
ਕ੍ਰਿਡੈਂਸ਼ਲ ਪਰਿਵਾਰਾਂ, ਸਕੋਪਾਂ ਅਤੇ curl ਉਦਾਹਰਨਾਂ ਲਈ:
[ਪ੍ਰਬੰਧਨ ਪ੍ਰਮਾਣੀਕਰਨ](../guides/MANAGEMENT-AUTH.md)।
### ਪ੍ਰਮਾਣੀਕਰਨ
| ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ |
| ----------------------------- | ------- | --------------------------- |
| `/api/auth/login` | POST | ਲੌਗਇਨ |
| `/api/auth/logout` | POST | ਲੌਗਆਉਟ |
| `/api/settings/require-login` | GET/PUT | ਲੌਗਇਨ ਲੋੜੀਂਦਾ ਹੋਣਾ ਟੌਗਲ ਕਰੋ |
### ਪ੍ਰਦਾਤਾ ਪ੍ਰਬੰਧਨ
| ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ |
| ---------------------------- | --------------------- | ------------------------------------------------------------------------------------------------------- |
| `/api/providers` | GET/POST | ਪ੍ਰਦਾਤਾਵਾਂ ਦੀ ਸੂਚੀ ਵੇਖੋ / ਬਣਾਓ |
| `/api/providers/[id]` | GET/PUT/DELETE | ਇੱਕ ਪ੍ਰਦਾਤਾ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ |
| `/api/providers/[id]/test` | POST | ਪ੍ਰਦਾਤਾ ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰੋ |
| `/api/providers/[id]/models` | GET | ਪ੍ਰਦਾਤਾ ਮਾਡਲਾਂ ਦੀ ਸੂਚੀ ਵੇਖੋ |
| `/api/providers/validate` | POST | ਪ੍ਰਦਾਤਾ ਸੰਰਚਨਾ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ |
| `/api/providers/bulk` | POST | ਇੱਕ ਪ੍ਰਦਾਤਾ ਲਈ ਵੱਡੀ ਗਿਣਤੀ ਵਿੱਚ API ਕੁੰਜੀਆਂ ਸ਼ਾਮਲ ਕਰੋ |
| `/api/providers/import` | POST | ਪਾਰਸ ਕੀਤੀ CSV/JSON ਫ਼ਾਈਲ ਤੋਂ ਵੱਖ-ਵੱਖ ਪ੍ਰਦਾਤਾਵਾਂ ਦੀ ਸੂਚੀ ਆਯਾਤ ਕਰੋ (#6836); ਹਰ ਕਤਾਰ ਲਈ ਅੰਸ਼ਕ-ਅਸਫਲਤਾ ਨਤੀਜੇ |
| `/api/provider-nodes*` | ਵੱਖ-ਵੱਖ | ਪ੍ਰਦਾਤਾ ਨੋਡ ਪ੍ਰਬੰਧਨ |
| `/api/provider-models` | GET/POST/PATCH/DELETE | ਕਸਟਮ ਮਾਡਲ (ਸ਼ਾਮਲ ਕਰੋ, ਅੱਪਡੇਟ ਕਰੋ, ਲੁਕਾਓ/ਦਿਖਾਓ, ਮਿਟਾਓ) |
### OAuth ਪ੍ਰਵਾਹ
| ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ |
| -------------------------------- | ------- | --------------------- |
| `/api/oauth/[provider]/[action]` | ਵੱਖ-ਵੱਖ | ਪ੍ਰਦਾਤਾ-ਵਿਸ਼ੇਸ਼ OAuth |
### ਰੂਟਿੰਗ ਅਤੇ ਸੰਰਚਨਾ
| ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ |
| --------------------- | -------- | ------------------------------- |
| `/api/models/alias` | GET/POST | ਮਾਡਲ ਉਪਨਾਮ |
| `/api/models/catalog` | GET | ਪ੍ਰਦਾਤਾ + ਕਿਸਮ ਅਨੁਸਾਰ ਸਾਰੇ ਮਾਡਲ |
| `/api/combos*` | ਵੱਖ-ਵੱਖ | ਕੌਂਬੋ ਪ੍ਰਬੰਧਨ |
| `/api/keys*` | ਵੱਖ-ਵੱਖ | API ਕੁੰਜੀ ਪ੍ਰਬੰਧਨ |
| `/api/pricing` | GET | ਮਾਡਲ ਕੀਮਤ-ਨਿਰਧਾਰਨ |
### ਵਰਤੋਂ ਅਤੇ ਵਿਸ਼ਲੇਸ਼ਣ
| Endpoint | Method | ਵੇਰਵਾ |
| -------------------------------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/api/usage/history` | GET | ਵਰਤੋਂ ਦਾ ਇਤਿਹਾਸ |
| `/api/usage/logs` | GET | ਵਰਤੋਂ ਲੌਗ |
| `/api/usage/request-logs` | GET | ਬੇਨਤੀ-ਪੱਧਰੀ ਲੌਗ |
| `/api/usage/[connectionId]` | GET | ਪ੍ਰਤੀ-ਕਨੈਕਸ਼ਨ ਵਰਤੋਂ |
| `/api/usage/token-limits` | GET/POST/DELETE | ਪ੍ਰਤੀ-API-ਕੁੰਜੀ ਟੋਕਨ-ਸੀਮਾ ਬਜਟ |
| `/api/usage/model-latency-stats` | GET | ਪ੍ਰਤੀ-ਪ੍ਰਦਾਤਾ/ਮਾਡਲ ਰੋਲਿੰਗ ਲੇਟੈਂਸੀ ਸਮੁੱਚਾ (avg/p50/p95/p99, ਸਫਲਤਾ ਦਰ); ਫਿਲਟਰ: `windowHours`/`minSamples`/`maxRows`/`provider`/`model` (#6873) |
| `/api/usage/cache-health` | GET | `call_logs` ਉੱਤੇ ਪ੍ਰੌਂਪਟ-ਕੈਸ਼ ਸਿਹਤ ਸੰਖੇਪ — ਲਿਖਣ/ਪੜ੍ਹਨ ਅਨੁਪਾਤ, p50/p90/p99 ਲਿਖਤ-ਆਕਾਰ ਵੰਡ, ਭਾਰੀ-ਲਿਖਤ ਕੇਂਦਰੀਕਰਨ, ਪ੍ਰਤੀ-ਮਾਡਲ ਵੰਡ, ਅਤੇ ਇੱਕ `healthy`/`degraded`/`thrash`/`no-data` ਨਿਰਣਾ; ਕਵੇਰੀ ਪੈਰਾਮੀਟਰ `range` (`1h`\|`24h`\|`7d`\|`30d`, ਮੂਲ `24h`) ਅਤੇ ਵਿਕਲਪਿਕ `model` (#8827) |
### ਸੈਟਿੰਗਾਂ
| Endpoint | Method | ਵੇਰਵਾ |
| ------------------------------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/api/settings` | GET/PUT/PATCH | ਆਮ ਸੈਟਿੰਗਾਂ |
| `/api/settings/proxy` | GET/PUT | ਨੈੱਟਵਰਕ ਪ੍ਰੌਕਸੀ ਸੰਰਚਨਾ |
| `/api/settings/proxy/test` | POST | ਪ੍ਰੌਕਸੀ ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰੋ |
| `/api/settings/ip-filter` | GET/PUT | IP ਮਨਜ਼ੂਰ-ਸੂਚੀ/ਬਲੌਕ-ਸੂਚੀ |
| `/api/settings/thinking-budget` | GET/PUT | ਸੋਚ/ਤਰਕ **ਬੇਨਤੀ** ਮੁੜ-ਲਿਖਣ ਮੋਡ (ਜਿਵੇਂ ਹੈ ਅੱਗੇ ਭੇਜੋ / ਸਵੈਚਾਲਿਤ ਹਟਾਓ / ਕਸਟਮ / ਅਨੁਕੂਲੀ)। ਕੰਪ੍ਰੈਸ਼ਨ ਤੋਂ ਸੁਤੰਤਰ। [THINKING_BUDGET.md](../guides/THINKING_BUDGET.md) ਵੇਖੋ। |
| `/api/settings/system-prompt` | GET/PUT | ਗਲੋਬਲ ਸਿਸਟਮ ਪ੍ਰੌਂਪਟ |
| `/api/settings/compression` | GET/PUT | ਗਲੋਬਲ ਕੰਪ੍ਰੈਸ਼ਨ ਸੰਰਚਨਾ |
| `/api/settings/purge-request-history` | POST | ਬੇਨਤੀ ਲੌਗ ਕਤਾਰਾਂ ਅਤੇ ਸਥਾਨਕ ਕਾਲ-ਲੌਗ ਆਰਟੀਫੈਕਟ ਸਾਫ਼ ਕਰੋ |
### ਸੰਦਰਭ ਅਤੇ ਕੰਪ੍ਰੈਸ਼ਨ
| ਐਂਡਪੌਇੰਟ | ਮੈਥਡ | ਵੇਰਵਾ |
| -------------------------------------- | -------------- | -------------------------------------------------------------------------- |
| `/api/compression/preview` | POST | off/lite/standard/aggressive/ultra/RTK/stacked ਕੰਪ੍ਰੈਸ਼ਨ ਦੀ ਝਲਕ ਵੇਖੋ |
| `/api/compression/language-packs` | GET | ਉਪਲਬਧ Caveman ਭਾਸ਼ਾ ਪੈਕਾਂ ਦੀ ਸੂਚੀ |
| `/api/compression/rules` | GET | Caveman ਨਿਯਮ ਮੈਟਾਡਾਟਾ ਦੀ ਸੂਚੀ |
| `/api/context/caveman/config` | GET/PUT | Caveman-ਵਿਸ਼ੇਸ਼ ਸੈਟਿੰਗਾਂ ਦਾ ਉਪਨਾਮ |
| `/api/context/rtk/config` | GET/PUT | RTK-ਵਿਸ਼ੇਸ਼ ਸੈਟਿੰਗਾਂ, ਕਸਟਮ ਫਿਲਟਰਾਂ ਅਤੇ ਕੱਚੀ ਆਉਟਪੁੱਟ ਨੂੰ ਸੰਭਾਲ ਕੇ ਰੱਖਣ ਸਮੇਤ |
| `/api/context/rtk/filters` | GET | RTK ਫਿਲਟਰ ਕੈਟਾਲਾਗ ਅਤੇ ਕਸਟਮ-ਫਿਲਟਰ ਡਾਇਗਨੌਸਟਿਕਸ |
| `/api/context/rtk/test` | POST | ਟੈਕਸਟ ਪੇਲੋਡ ਉੱਤੇ RTK ਝਲਕ/ਟੈਸਟ ਚਲਾਓ |
| `/api/context/rtk/raw-output/[id]` | GET | ਪੁਆਇੰਟਰ id ਰਾਹੀਂ ਸੰਭਾਲੀ ਹੋਈ ਸੰਪਾਦਿਤ ਕੱਚੀ ਆਉਟਪੁੱਟ ਪੜ੍ਹੋ |
| `/api/context/combos` | GET/POST | ਕੰਪ੍ਰੈਸ਼ਨ ਕੌਂਬੋ ਸੂਚੀ/ਬਣਾਓ |
| `/api/context/combos/[id]` | GET/PUT/DELETE | ਕੰਪ੍ਰੈਸ਼ਨ ਕੌਂਬੋ ਵੇਰਵਾ/ਅੱਪਡੇਟ/ਮਿਟਾਓ |
| `/api/context/combos/[id]/assignments` | GET/PUT | ਰੂਟਿੰਗ ਕੌਂਬੋਆਂ ਨੂੰ ਕੰਪ੍ਰੈਸ਼ਨ ਕੌਂਬੋ ਨਿਰਧਾਰਤ ਕਰੋ |
| `/api/context/analytics` | GET | ਕੰਪ੍ਰੈਸ਼ਨ ਵਿਸ਼ਲੇਸ਼ਣ ਉਪਨਾਮ |
### ਨਿਗਰਾਨੀ
| ਐਂਡਪੌਇੰਟ | ਮੈਥਡ | ਵੇਰਵਾ |
| ------------------------------------ | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `/api/sessions` | GET | ਸਰਗਰਮ ਸੈਸ਼ਨ ਟ੍ਰੈਕਿੰਗ |
| `/api/rate-limits` | GET | ਪ੍ਰਤੀ-ਖਾਤਾ ਦਰ ਸੀਮਾਵਾਂ |
| `/api/monitoring/health` | GET | ਸਿਹਤ ਜਾਂਚ + ਪ੍ਰਦਾਤਾ ਸਾਰ (`catalogCount`, `configuredCount`, `activeCount`, `monitoredCount`)। ਪ੍ਰਬੰਧਨ ਦ੍ਰਿਸ਼ ਵਿੱਚ `credentialHealth` ਸ਼ਾਮਲ ਹੈ: ਪ੍ਰੋਬ-ਕੈਸ਼ ਸਕੇਲਰ, ਜਦੋਂ `failed>0` ਹੋਵੇ ਤਾਂ `failedConnections`, ਅਤੇ `staleDbNonOkCount` (SQLite ਸਟਿੱਕੀ `test_status`, ਗੇਜ ਨਹੀਂ)। [MONITORING_GUIDE.md](../ops/MONITORING_GUIDE.md#credentialhealth-probe-cache-vs-sqlite-test_status) ਵੇਖੋ। |
| `/api/cache/stats` | GET/DELETE | ਕੈਸ਼ ਅੰਕੜੇ / ਸਾਫ਼ ਕਰੋ |
| `/api/modality-bridge/stats` | GET | ਇਨ-ਮੈਮੋਰੀ `attempts`, ਸਫਲਤਾਵਾਂ/`bridged`, ਅਸਫਲਤਾਵਾਂ, ਕੈਸ਼ ਹਿੱਟਾਂ, `totalLatencyMs`, `latencySamples`, ਨਮੂਨਾ-ਹਰ ਵਾਲਾ `averageLatencyMs`, ਅਤੇ ਆਖਰੀ ਵਰਤੋਂ ਦਾ ਸਮਾਂ (ਰੀਸਟਾਰਟ ਉੱਤੇ ਰੀਸੈੱਟ; ਪ੍ਰਬੰਧਨ ਪ੍ਰਮਾਣੀਕਰਨ) |
| `/api/modality-bridge/video/runtime` | GET | ਪ੍ਰਬੰਧਨ ਪ੍ਰਮਾਣੀਕਰਨ/ਪ੍ਰੋਬ ਤੋਂ ਪਹਿਲਾਂ ਸਖ਼ਤ ਭਰੋਸੇਯੋਗ-ਲੂਪਬੈਕ ਜਾਂਚ; ਸੈਨੀਟਾਈਜ਼ ਕੀਤੀ FFmpeg/ffprobe ਉਪਲਬਧਤਾ ਅਤੇ ਵਰਜਨ (no-store) |
| `/api/modality-bridge/video/extract` | POST | ਅੰਦਰੂਨੀ ਪ੍ਰਮਾਣਿਤ ਭਰੋਸੇਯੋਗ-ਲੂਪਬੈਕ ਬਾਈਟ ਬ੍ਰੋਕਰ; 50 MiB ਇਨਪੁੱਟ, ਸੀਮਾਬੱਧ ਕਤਾਰ/32 MiB ਆਉਟਪੁੱਟ, `503` ਸਮਰੱਥਾ, `499` ਡਿਸਕਨੈਕਟ, `504` ਸਮਾਂ-ਸੀਮਾ; ਇਹ ਜਨਤਕ ਅੱਪਲੋਡ API ਨਹੀਂ ਹੈ |
### ਬੈਕਅੱਪ ਅਤੇ ਐਕਸਪੋਰਟ/ਇੰਪੋਰਟ
| ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ |
| --------------------------- | ---- | -------------------------------------------- |
| `/api/db-backups` | GET | ਉਪਲਬਧ ਬੈਕਅੱਪਾਂ ਦੀ ਸੂਚੀ |
| `/api/db-backups` | PUT | ਹੱਥੀਂ ਬੈਕਅੱਪ ਬਣਾਓ |
| `/api/db-backups` | POST | ਕਿਸੇ ਖਾਸ ਬੈਕਅੱਪ ਤੋਂ ਰੀਸਟੋਰ ਕਰੋ |
| `/api/db-backups/export` | GET | ਡਾਟਾਬੇਸ ਨੂੰ .sqlite ਫ਼ਾਈਲ ਵਜੋਂ ਡਾਊਨਲੋਡ ਕਰੋ |
| `/api/db-backups/import` | POST | ਡਾਟਾਬੇਸ ਨੂੰ ਬਦਲਣ ਲਈ .sqlite ਫ਼ਾਈਲ ਅੱਪਲੋਡ ਕਰੋ |
| `/api/db-backups/exportAll` | GET | ਪੂਰਾ ਬੈਕਅੱਪ .tar.gz ਆਰਕਾਈਵ ਵਜੋਂ ਡਾਊਨਲੋਡ ਕਰੋ |
### ਕਲਾਊਡ ਸਿੰਕ
| ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ |
| ---------------------- | ------- | ------------------- |
| `/api/sync/cloud` | ਵੱਖ-ਵੱਖ | ਕਲਾਊਡ ਸਿੰਕ ਕਾਰਵਾਈਆਂ |
| `/api/sync/initialize` | POST | ਸਿੰਕ ਸ਼ੁਰੂ ਕਰੋ |
| `/api/cloud/*` | ਵੱਖ-ਵੱਖ | ਕਲਾਊਡ ਪ੍ਰਬੰਧਨ |
### ਟਨਲਾਂ
| ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ |
| -------------------------- | ---- | -------------------------------------------------------------------------- |
| `/api/tunnels/cloudflared` | GET | ਡੈਸ਼ਬੋਰਡ ਲਈ Cloudflare Quick Tunnel ਦੀ ਇੰਸਟਾਲੇਸ਼ਨ/ਰਨਟਾਈਮ ਸਥਿਤੀ ਪੜ੍ਹੋ |
| `/api/tunnels/cloudflared` | POST | Cloudflare Quick Tunnel ਨੂੰ ਸਮਰੱਥ ਜਾਂ ਅਸਮਰੱਥ ਕਰੋ (`action=enable/disable`) |
| `/api/tunnels/ngrok` | GET | ਡੈਸ਼ਬੋਰਡ ਲਈ ngrok Tunnel ਦੀ ਰਨਟਾਈਮ ਸਥਿਤੀ ਪੜ੍ਹੋ |
| `/api/tunnels/ngrok` | POST | ngrok Tunnel ਨੂੰ ਸਮਰੱਥ ਜਾਂ ਅਸਮਰੱਥ ਕਰੋ (`action=enable/disable`) |
### CLI ਟੂਲ
| ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ |
| ---------------------------------- | ---- | ------------------ |
| `/api/cli-tools/claude-settings` | GET | Claude CLI ਸਥਿਤੀ |
| `/api/cli-tools/codex-settings` | GET | Codex CLI ਸਥਿਤੀ |
| `/api/cli-tools/droid-settings` | GET | Droid CLI ਸਥਿਤੀ |
| `/api/cli-tools/openclaw-settings` | GET | OpenClaw CLI ਸਥਿਤੀ |
| `/api/cli-tools/runtime/[toolId]` | GET | ਆਮ CLI ਰਨਟਾਈਮ |
CLI ਜਵਾਬਾਂ ਵਿੱਚ ਇਹ ਸ਼ਾਮਲ ਹੁੰਦੇ ਹਨ: `installed`, `runnable`, `command`, `commandPath`, `runtimeMode`, `reason`
### ACP ਏਜੰਟ
| ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ |
| ----------------- | ------ | ------------------------------------------------------- |
| `/api/acp/agents` | GET | ਸਥਿਤੀ ਸਮੇਤ ਸਾਰੇ ਖੋਜੇ ਗਏ ਏਜੰਟਾਂ (ਬਿਲਟ-ਇਨ + ਕਸਟਮ) ਦੀ ਸੂਚੀ |
| `/api/acp/agents` | POST | ਕਸਟਮ ਏਜੰਟ ਸ਼ਾਮਲ ਕਰੋ ਜਾਂ ਖੋਜ ਕੈਸ਼ ਤਾਜ਼ਾ ਕਰੋ |
| `/api/acp/agents` | DELETE | `id` ਕਿਊਰੀ ਪੈਰਾਮੀਟਰ ਰਾਹੀਂ ਕਸਟਮ ਏਜੰਟ ਹਟਾਓ |
GET ਜਵਾਬ ਵਿੱਚ `agents[]` (id, name, binary, version, installed, protocol, isCustom) ਅਤੇ `summary` (total, installed, notFound, builtIn, custom) ਸ਼ਾਮਲ ਹੁੰਦੇ ਹਨ।
### ਲਚਕੀਲਾਪਣ ਅਤੇ ਦਰ ਸੀਮਾਵਾਂ
| ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ |
| --------------------------------- | --------- | ---------------------------------------------------------------------------------- |
| `/api/resilience` | GET/PATCH | ਬੇਨਤੀ ਕਤਾਰ, ਕਨੈਕਸ਼ਨ ਕੂਲਡਾਊਨ, ਪ੍ਰਦਾਤਾ ਬ੍ਰੇਕਰ ਅਤੇ ਉਡੀਕ ਸੈਟਿੰਗਾਂ ਪ੍ਰਾਪਤ/ਅੱਪਡੇਟ ਕਰੋ |
| `/api/resilience/reset` | POST | ਪ੍ਰਦਾਤਾ ਸਰਕਿਟ ਬ੍ਰੇਕਰ ਰੀਸੈੱਟ ਕਰੋ |
| `/api/resilience/model-cooldowns` | GET | ਬਾਕੀ ਸਮੇਂ ਅਨੁਸਾਰ ਕ੍ਰਮਬੱਧ ਸਰਗਰਮ ਪ੍ਰਤੀ-(ਪ੍ਰਦਾਤਾ, ਕਨੈਕਸ਼ਨ, ਮਾਡਲ) ਲਾਕਆਉਟਾਂ ਦੀ ਸੂਚੀ |
| `/api/resilience/model-cooldowns` | DELETE | ਮਾਡਲ ਲਾਕਆਉਟ ਸਾਫ਼ ਕਰੋ — ਬੌਡੀ `{provider, model}` ਜਾਂ ਸਭ ਕੁਝ ਮਿਟਾਉਣ ਲਈ `{all: true}` |
| `/api/rate-limits` | GET | ਪ੍ਰਤੀ-ਖਾਤਾ ਦਰ ਸੀਮਾ ਸਥਿਤੀ |
| `/api/rate-limit` | GET | ਗਲੋਬਲ ਦਰ ਸੀਮਾ ਸੰਰਚਨਾ |
> ਸਾਰੇ ਚਾਰ `/api/resilience/*` ਰੂਟਾਂ ਲਈ **ਪ੍ਰਬੰਧਨ ਪ੍ਰਮਾਣੀਕਰਨ** (`requireManagementAuth`) ਲੋੜੀਂਦਾ ਹੈ। ਪ੍ਰਦਾਤਾ ਬ੍ਰੇਕਰ ਬਨਾਮ ਕਨੈਕਸ਼ਨ ਕੂਲਡਾਊਨ ਬਨਾਮ ਮਾਡਲ ਲਾਕਆਉਟ ਦੇ ਪੂਰੇ ਵੇਰਵੇ ਲਈ [ਲਚਕੀਲਾਪਣ (ਵਿਸਤ੍ਰਿਤ)](#resilience-extended) ਵੇਖੋ।
### ਮੁਲਾਂਕਣ
| ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ |
| ------------ | -------- | ------------------------------------ |
| `/api/evals` | GET/POST | ਮੁਲਾਂਕਣ ਸੂਟਾਂ ਦੀ ਸੂਚੀ / ਮੁਲਾਂਕਣ ਚਲਾਓ |
### ਨੀਤੀਆਂ
| ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ |
| --------------- | --------------- | ---------------------------- |
| `/api/policies` | GET/POST/DELETE | ਰੂਟਿੰਗ ਨੀਤੀਆਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ |
### ਅਨੁਪਾਲਣਾ
| ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ |
| --------------------------- | ---- | -------------------------- |
| `/api/compliance/audit-log` | GET | ਅਨੁਪਾਲਣਾ ਆਡਿਟ ਲੌਗ (ਆਖਰੀ N) |
### v1beta (Gemini-ਅਨੁਕੂਲ)
| ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ |
| -------------------------- | ---- | --------------------------------- |
| `/v1beta/models` | GET | Gemini ਫਾਰਮੈਟ ਵਿੱਚ ਮਾਡਲਾਂ ਦੀ ਸੂਚੀ |
| `/v1beta/models/{...path}` | POST | Gemini `generateContent` ਐਂਡਪੌਇੰਟ |
ਇਹ ਐਂਡਪੌਇੰਟ ਉਹਨਾਂ ਕਲਾਇੰਟਾਂ ਲਈ Gemini ਦੇ API ਫਾਰਮੈਟ ਦੀ ਨਕਲ ਕਰਦੇ ਹਨ, ਜਿਨ੍ਹਾਂ ਨੂੰ ਮੂਲ Gemini SDK ਅਨੁਕੂਲਤਾ ਦੀ ਉਮੀਦ ਹੁੰਦੀ ਹੈ।
### ਅੰਦਰੂਨੀ / ਸਿਸਟਮ API
| ਐਂਡਪੌਇੰਟ | ਢੰਗ | ਵੇਰਵਾ |
| ------------------------ | ---- | ------------------------------------------------------------------ |
| `/api/init` | GET | ਐਪਲੀਕੇਸ਼ਨ ਸ਼ੁਰੂਆਤੀਕਰਨ ਦੀ ਜਾਂਚ (ਪਹਿਲੀ ਵਾਰ ਚਲਾਉਣ ਵੇਲੇ ਵਰਤੀ ਜਾਂਦੀ ਹੈ) |
| `/api/tags` | GET | Ollama-ਅਨੁਕੂਲ ਮਾਡਲ ਟੈਗ (Ollama ਕਲਾਇੰਟਾਂ ਲਈ) |
| `/api/restart` | POST | ਸਰਵਰ ਨੂੰ ਸੁਚਾਰੂ ਢੰਗ ਨਾਲ ਮੁੜ-ਚਾਲੂ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰੋ |
| `/api/shutdown` | POST | ਸਰਵਰ ਨੂੰ ਸੁਚਾਰੂ ਢੰਗ ਨਾਲ ਬੰਦ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰੋ |
| `/api/system/env/repair` | POST | OAuth ਪ੍ਰਦਾਤਾ ਦੇ ਵਾਤਾਵਰਣ ਵੇਰੀਏਬਲਾਂ ਦੀ ਮੁਰੰਮਤ ਕਰੋ |
> **ਨੋਟ:** ਇਹ ਐਂਡਪੌਇੰਟ ਸਿਸਟਮ ਦੁਆਰਾ ਅੰਦਰੂਨੀ ਤੌਰ 'ਤੇ ਜਾਂ Ollama ਕਲਾਇੰਟ ਅਨੁਕੂਲਤਾ ਲਈ ਵਰਤੇ ਜਾਂਦੇ ਹਨ। ਆਮ ਤੌਰ 'ਤੇ ਅੰਤਿਮ ਵਰਤੋਂਕਾਰ ਇਨ੍ਹਾਂ ਨੂੰ ਕਾਲ ਨਹੀਂ ਕਰਦੇ।
### OAuth ਵਾਤਾਵਰਣ ਮੁਰੰਮਤ _(v3.6.1+)_
```bash
POST /api/system/env/repair
Content-Type: application/json
{
"provider": "claude-code"
}
```
ਕਿਸੇ ਖ਼ਾਸ ਪ੍ਰਦਾਤਾ ਲਈ ਗੁੰਮ ਜਾਂ ਖ਼ਰਾਬ ਹੋਏ OAuth ਵਾਤਾਵਰਣ ਵੇਰੀਏਬਲਾਂ ਦੀ ਮੁਰੰਮਤ ਕਰਦਾ ਹੈ। ਇਹ ਵਾਪਸ ਕਰਦਾ ਹੈ:
```json
{
"success": true,
"repaired": ["CLAUDE_CODE_OAUTH_CLIENT_ID", "CLAUDE_CODE_OAUTH_CLIENT_SECRET"],
"backupPath": "/home/user/.omniroute/backups/env-repair-2026-04-11.bak"
}
```
---
## ਆਡੀਓ ਟ੍ਰਾਂਸਕ੍ਰਿਪਸ਼ਨ
```bash
POST /v1/audio/transcriptions
Authorization: Bearer your-api-key
Content-Type: multipart/form-data
```
ਕਿਸੇ ਵੀ ਸੰਰਚਿਤ STT ਪ੍ਰਦਾਤਾ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਆਡੀਓ ਫ਼ਾਈਲਾਂ ਨੂੰ ਟ੍ਰਾਂਸਕ੍ਰਾਈਬ ਕਰੋ। ਪਹਿਲਾ ਪਾਥ
ਸੈਗਮੈਂਟ ਮੂਲ ਪ੍ਰਦਾਤਾ (`openai/…`, `deepgram/…`) ਚੁਣਦਾ ਹੈ। ਕਿਸੇ ਹੋਰ ਵਿਕਰੇਤਾ ਦੇ
ਮਾਡਲ ਨੂੰ ਮੁੜ ਨਿਰਯਾਤ ਕਰਨ ਵਾਲੇ ਗੇਟਵੇ ਇੱਕ ਯੋਗਤਾ-ਪ੍ਰਾਪਤ id
(`openrouter/deepgram/nova-3`) ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਨ।
**ਬੇਨਤੀ:**
```bash
curl -X POST http://localhost:20128/v1/audio/transcriptions \
-H "Authorization: Bearer your-api-key" \
-F "file=@recording.mp3" \
-F "model=openai/whisper-1"
```
**ਜਵਾਬ:**
```json
{
"text": "Hello, this is the transcribed audio content.",
"task": "transcribe",
"language": "en",
"duration": 12.5
}
```
**ਮਾਡਲ id ਦੀਆਂ ਉਦਾਹਰਨਾਂ:** `openai/whisper-1` (ਇੱਕ OpenAI ਕੁੰਜੀ ਦੀ ਲੋੜ ਹੈ),
`openrouter/deepgram/nova-3` (ਇੱਕ OpenRouter ਕੁੰਜੀ ਦੀ ਲੋੜ ਹੈ),
`deepgram/nova-3` (ਇੱਕ ਮੂਲ Deepgram ਕੁੰਜੀ ਦੀ ਲੋੜ ਹੈ)। ਸਿਰਫ਼
`deepgram/nova-3` ਬੇਨਤੀ OpenRouter ਦੀ ਵਰਤੋਂ **ਨਹੀਂ** ਕਰਦੀ।
**ਸਮਰਥਿਤ ਫਾਰਮੈਟ:** `mp3`, `wav`, `m4a`, `flac`, `ogg`, `webm`
---
## Ollama ਅਨੁਕੂਲਤਾ
Ollama ਦੇ API ਫਾਰਮੈਟ ਦੀ ਵਰਤੋਂ ਕਰਨ ਵਾਲੇ ਕਲਾਇੰਟਾਂ ਲਈ:
```bash
# ਚੈਟ ਐਂਡਪੁਆਇੰਟ (Ollama ਫਾਰਮੈਟ)
POST /v1/api/chat
# ਮਾਡਲ ਸੂਚੀ (Ollama ਫਾਰਮੈਟ)
GET /api/tags
```
ਬੇਨਤੀਆਂ ਨੂੰ Ollama ਅਤੇ ਅੰਦਰੂਨੀ ਫਾਰਮੈਟਾਂ ਵਿਚਕਾਰ ਆਪਣੇ-ਆਪ ਅਨੁਵਾਦ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।
## ਟੋਕਨਾਈਜ਼ਡ VS Code / ਹੈਡਰ-ਰਹਿਤ ਉਪਨਾਮ
ਜਦੋਂ ਕੋਈ ਇੰਟੀਗ੍ਰੇਸ਼ਨ `Authorization` ਹੈਡਰ ਸ਼ਾਮਲ ਨਹੀਂ ਕਰ ਸਕਦੀ ਅਤੇ API ਕੁੰਜੀ ਨੂੰ ਬੇਸ URL ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ, ਤਾਂ ਇਹ ਉਪਨਾਮ ਵਰਤੋ।
```bash
# OpenAI-ਸ਼ੈਲੀ ਕੈਟਾਲਾਗ ਉਪਨਾਮ
GET /api/v1/vscode/{token}/
GET /api/v1/vscode/{token}/models
# OpenAI-ਸ਼ੈਲੀ ਚੈਟ ਉਪਨਾਮ
POST /api/v1/vscode/{token}/chat/completions
POST /api/v1/vscode/{token}/responses
# Ollama-ਸ਼ੈਲੀ ਉਪਨਾਮ
POST /api/v1/vscode/{token}/api/chat
GET /api/v1/vscode/{token}/api/tags
```
ਉਦਾਹਰਨ:
```bash
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"}]}'
```
ਨੋਟ:
- ਟੋਕਨਾਈਜ਼ਡ ਉਪਨਾਮ `/v1/*` ਅਤੇ `/api/tags` ਵਾਲੇ ਉਹੀ ਹੈਂਡਲਰ ਮੁੜ ਵਰਤਦੇ ਹਨ; ਜਵਾਬਾਂ ਦੀ ਬਣਤਰ ਇੱਕੋ ਜਿਹੀ ਰਹਿੰਦੀ ਹੈ।
- ਜਦੋਂ ਵੀ ਕਲਾਇੰਟ ਕਸਟਮ ਹੈਡਰਾਂ ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੋਵੇ, `Authorization: Bearer ...` ਨੂੰ ਤਰਜੀਹ ਦਿਓ।
- URL-ਆਧਾਰਿਤ ਟੋਕਨ OmniRoute ਤੋਂ ਬਾਹਰ ਰਿਵਰਸ-ਪ੍ਰੌਕਸੀ ਲੌਗਾਂ, ਬ੍ਰਾਊਜ਼ਰ ਇਤਿਹਾਸ ਅਤੇ ਟੈਲੀਮੈਟਰੀ ਵਿੱਚ ਦਿਖਾਈ ਦੇ ਸਕਦੇ ਹਨ। ਇਨ੍ਹਾਂ ਨੂੰ ਡਿਫੌਲਟ ਪ੍ਰਮਾਣੀਕਰਨ ਮੋਡ ਦੀ ਬਜਾਏ ਇੱਕ ਅਨੁਕੂਲਤਾ ਵਿਕਲਪ ਵਜੋਂ ਵਰਤੋ।
---
## ਟੈਲੀਮੈਟਰੀ
```bash
# ਲੇਟੈਂਸੀ ਟੈਲੀਮੈਟਰੀ ਸੰਖੇਪ ਪ੍ਰਾਪਤ ਕਰੋ (ਹਰੇਕ ਪ੍ਰਦਾਤਾ ਲਈ p50/p95/p99)
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
# ਸਾਰੀਆਂ API ਕੁੰਜੀਆਂ ਲਈ ਬਜਟ ਸਥਿਤੀ ਪ੍ਰਾਪਤ ਕਰੋ
GET /api/usage/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"
}
```
> **ਸਕੀਮਾ ਨੋਟਸ** (`setBudgetSchema`): `apiKeyId` ਲਾਜ਼ਮੀ ਹੈ; `dailyLimitUsd`, `weeklyLimitUsd`, ਜਾਂ `monthlyLimitUsd` ਵਿੱਚੋਂ ਘੱਟੋ-ਘੱਟ ਇੱਕ ਦਾ ਮੁੱਲ ਸਿਫ਼ਰ ਤੋਂ ਵੱਧ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ। ਵਿਕਲਪਿਕ ਫ਼ੀਲਡ: `warningThreshold` (01), `resetInterval` (`daily` | `weekly` | `monthly`), `resetTime` (`HH:MM`)। ਪੁਰਾਣੀ `{keyId, limit, period}` ਬਣਤਰ `400 Bad Request` ਵਾਪਸ ਕਰਦੀ ਹੈ।
## ਟੋਕਨ ਸੀਮਾਵਾਂ
ਪ੍ਰਤੀ-API-key **ਟੋਕਨ** ਬਜਟ (ਉੱਪਰ ਦਿੱਤੇ USD-ਅਧਾਰਿਤ ਬਜਟ ਤੋਂ ਵੱਖਰੇ)। ਬੇਨਤੀ ਪਾਥ 'ਤੇ ਹੀ ਲਾਗੂ ਕੀਤੇ ਜਾਂਦੇ ਹਨ: ਜਦੋਂ ਕਿਸੇ key ਦੀ ਮੌਜੂਦਾ ਵਿੰਡੋ ਵਰਤੋਂ ਆਪਣੀ ਸੀਮਾ ਤੱਕ ਪਹੁੰਚ ਜਾਂਦੀ ਹੈ, ਤਾਂ ਬੇਨਤੀਆਂ `429 Too Many Requests` ਨਾਲ ਰੱਦ ਕਰ ਦਿੱਤੀਆਂ ਜਾਂਦੀਆਂ ਹਨ। ਸੀਮਾਵਾਂ ਨੂੰ ਕਿਸੇ ਖਾਸ `model`, ਕਿਸੇ `provider` ਤੱਕ ਸੀਮਿਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ, ਜਾਂ ਪੂਰੀ key ਉੱਤੇ `global` ਤੌਰ 'ਤੇ ਲਾਗੂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ; ਜਦੋਂ ਕਈ ਸੀਮਾਵਾਂ ਕਿਸੇ ਬੇਨਤੀ ਨਾਲ ਮੇਲ ਖਾਂਦੀਆਂ ਹਨ, ਤਾਂ ਸਭ ਤੋਂ ਸਖ਼ਤ ਸੀਮਾ ਲਾਗੂ ਹੁੰਦੀ ਹੈ।
```bash
# ਕਿਸੇ key ਦੀਆਂ ਟੋਕਨ ਸੀਮਾਵਾਂ ਦੀ ਸੂਚੀ ਦਿਖਾਓ (ਲਾਈਵ ਵਿੰਡੋ ਵਰਤੋਂ ਸਮੇਤ)
GET /api/usage/token-limits?apiKeyId=key-123
# ਟੋਕਨ ਸੀਮਾ ਬਣਾਓ ਜਾਂ ਅੱਪਡੇਟ ਕਰੋ
POST /api/usage/token-limits
Content-Type: application/json
{
"apiKeyId": "key-123",
"scopeType": "model",
"scopeValue": "openai/gpt-4o",
"tokenLimit": 1000000,
"resetInterval": "monthly",
"enabled": true
}
# id ਦੁਆਰਾ ਟੋਕਨ ਸੀਮਾ ਮਿਟਾਓ
DELETE /api/usage/token-limits?id=tl-abc
```
> **ਸਕੀਮਾ ਨੋਟਸ** (`setTokenLimitSchema`): `apiKeyId` ਅਤੇ `scopeType` (`model` | `provider` | `global`) ਲਾਜ਼ਮੀ ਹਨ। `scopeValue` ਲਾਜ਼ਮੀ ਹੈ, ਜਦੋਂ ਤੱਕ `scopeType`, `global` ਨਾ ਹੋਵੇ (ਉਦਾਹਰਨ ਵਜੋਂ, `model` ਸਕੋਪ ਲਈ model id, ਅਤੇ `provider` ਸਕੋਪ ਲਈ provider id)। `tokenLimit` ਇੱਕ ਧਨਾਤਮਕ ਪੂਰਨ ਅੰਕ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ (string ਤੋਂ ਰੂਪਾਂਤਰਿਤ)। ਵਿਕਲਪਿਕ: `id` (ਬਣਾਉਣ ਲਈ ਛੱਡ ਦਿਓ, ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਦਿਓ), `resetInterval` (`daily` | `weekly` | `monthly`, ਮੂਲ ਮੁੱਲ `monthly`), `resetTime` (`HH:MM`), `enabled` (ਮੂਲ ਮੁੱਲ `true`)। `GET` ਜਵਾਬ ਹਰ ਸੀਮਾ ਵਿੱਚ `tokensUsed`, `remaining`, `windowStart`, `periodStartAt`, ਅਤੇ `nextResetAt` ਸ਼ਾਮਲ ਕਰਕੇ ਵਾਧੂ ਜਾਣਕਾਰੀ ਪ੍ਰਦਾਨ ਕਰਦੇ ਹਨ। ਇਹ ਇੱਕ ਪ੍ਰਬੰਧਨ-ਸ਼੍ਰੇਣੀ endpoint ਹੈ (ਪ੍ਰਮਾਣੀਕਰਨ authz pipeline ਦੁਆਰਾ ਕੇਂਦਰੀ ਤੌਰ 'ਤੇ ਲਾਗੂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ)।
## ਬੇਨਤੀ ਪ੍ਰੋਸੈਸਿੰਗ
1. Client `/v1/*` ਨੂੰ ਬੇਨਤੀ ਭੇਜਦਾ ਹੈ
2. Route handler, `handleChat`, `handleEmbedding`, `handleAudioTranscription`, ਜਾਂ `handleImageGeneration` ਨੂੰ ਕਾਲ ਕਰਦਾ ਹੈ
3. Model ਨੂੰ ਹੱਲ ਕੀਤਾ ਜਾਂਦਾ ਹੈ (ਸਿੱਧਾ provider/model ਜਾਂ alias/combo)
4. Account ਉਪਲਬਧਤਾ ਫਿਲਟਰਿੰਗ ਨਾਲ ਸਥਾਨਕ DB ਵਿੱਚੋਂ credentials ਚੁਣੇ ਜਾਂਦੇ ਹਨ
5. Chat ਲਈ: `handleChatCore` semantic/signature cache ਦੀ ਜਾਂਚ ਕਰਦਾ ਹੈ ਅਤੇ combo compression ਸੈਟਿੰਗਾਂ ਨੂੰ ਹੱਲ ਕਰਦਾ ਹੈ
6. ਸਮਰੱਥ ਹੋਣ 'ਤੇ provider translation ਤੋਂ ਪਹਿਲਾਂ proactive compression ਚੱਲਦੀ ਹੈ (`lite`, Caveman, RTK, ਜਾਂ stacked)
7. Provider executor upstream ਬੇਨਤੀ ਭੇਜਦਾ ਹੈ
8. ਜਵਾਬ ਨੂੰ ਵਾਪਸ client format ਵਿੱਚ ਅਨੁਵਾਦ ਕੀਤਾ ਜਾਂਦਾ ਹੈ (chat), ਜਾਂ ਜਿਵੇਂ ਹੈ ਤਿਵੇਂ ਵਾਪਸ ਕੀਤਾ ਜਾਂਦਾ ਹੈ (embeddings/images/audio)
9. ਵਰਤੋਂ, compression analytics, ਅਤੇ ਬੇਨਤੀ logs ਦਰਜ ਕੀਤੇ ਜਾਂਦੇ ਹਨ
10. ਗਲਤੀਆਂ ਹੋਣ 'ਤੇ combo ਨਿਯਮਾਂ ਅਨੁਸਾਰ fallback ਲਾਗੂ ਹੁੰਦਾ ਹੈ
ਪੂਰਾ architecture ਹਵਾਲਾ: [`ARCHITECTURE.md`](../architecture/ARCHITECTURE.md)
---
## Combo ਪ੍ਰਬੰਧਨ
ਉੱਚ-ਪੱਧਰੀ routing combos (ਜਿਨ੍ਹਾਂ ਦਾ ਸੰਖੇਪ ਪਹਿਲਾਂ ਹੀ `/api/combos*` ਹੇਠ ਦਿੱਤਾ ਗਿਆ ਹੈ) ਨੂੰ model id pattern ਤੋਂ 1:1 ਵੀ map ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ, ਜਿਸ ਨਾਲ OpenAI-ਸ਼ੈਲੀ model id ਨੂੰ ਪਾਰਦਰਸ਼ੀ ਢੰਗ ਨਾਲ ਕਿਸੇ combo ਵੱਲ redirect ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ------ | -------------------------------- | ---------------------------------------------------------------------------- |
| GET | `/api/model-combo-mappings` | ਸਾਰੀਆਂ model→combo mappings ਦੀ ਸੂਚੀ ਦਿਖਾਓ |
| POST | `/api/model-combo-mappings` | Mapping ਬਣਾਓ — body: `{pattern, comboId, priority?, enabled?, description?}` |
| GET | `/api/model-combo-mappings/[id]` | ਇੱਕ mapping ਪ੍ਰਾਪਤ ਕਰੋ |
| PUT | `/api/model-combo-mappings/[id]` | ਮੌਜੂਦਾ mapping ਦੇ fields ਅੱਪਡੇਟ ਕਰੋ |
| DELETE | `/api/model-combo-mappings/[id]` | ਇੱਕ mapping ਹਟਾਓ |
**ਪ੍ਰਮਾਣੀਕਰਨ:** management session/API key (`requireManagementAuth`).
---
## ਵੈੱਬਹੁੱਕ
OmniRoute ਇਵੈਂਟਾਂ (ਬੇਨਤੀ ਦੀ ਪੂਰਤੀ, ਕੋਟਾ ਖ਼ਤਮ ਹੋਣਾ, ਕੁੰਜੀ ਰੋਟੇਸ਼ਨ ਆਦਿ) ਲਈ ਆਊਟਬਾਊਂਡ ਵੈੱਬਹੁੱਕ ਸਬਸਕ੍ਰਿਪਸ਼ਨਾਂ।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ------ | ------------------------- | ------------------------------------------------------------------------- |
| GET | `/api/webhooks` | ਵੈੱਬਹੁੱਕਾਂ ਦੀ ਸੂਚੀ ਦਿਓ (ਸੀਕ੍ਰੇਟਾਂ ਨੂੰ `<prefix>...` ਵਜੋਂ ਲੁਕਾਇਆ ਜਾਂਦਾ ਹੈ) |
| POST | `/api/webhooks` | ਵੈੱਬਹੁੱਕ ਬਣਾਓ — ਬਾਡੀ: `{url, events?: ["*"], secret?, description?}` |
| GET | `/api/webhooks/[id]` | ਇੱਕ ਵੈੱਬਹੁੱਕ ਪ੍ਰਾਪਤ ਕਰੋ |
| PUT | `/api/webhooks/[id]` | url/events/secret/description ਅੱਪਡੇਟ ਕਰੋ |
| DELETE | `/api/webhooks/[id]` | ਇੱਕ ਵੈੱਬਹੁੱਕ ਹਟਾਓ |
| POST | `/api/webhooks/[id]/test` | ਵੈੱਬਹੁੱਕ URL ਨੂੰ ਇੱਕ ਟੈਸਟ ਪੇਲੋਡ ਭੇਜੋ ਅਤੇ ਡਿਲਿਵਰੀ ਸਥਿਤੀ ਵਾਪਸ ਦਿਓ |
**ਪ੍ਰਮਾਣੀਕਰਨ:** ਪ੍ਰਬੰਧਨ ਸੈਸ਼ਨ/API ਕੁੰਜੀ (`requireManagementAuth`)।
---
## ਰਜਿਸਟਰ ਕੀਤੀਆਂ ਕੁੰਜੀਆਂ (ਸਵੈਚਲਿਤ ਪ੍ਰਬੰਧਨ)
ਰੋਜ਼ਾਨਾ/ਘੰਟਾਵਾਰ ਕੋਟਿਆਂ ਦੇ ਨਾਲ, ਕਿਸੇ ਬੈਕਿੰਗ ਪ੍ਰਦਾਤਾ/ਖਾਤੇ ਲਈ API ਕੁੰਜੀਆਂ ਜਾਰੀ ਕਰਨ ਅਤੇ ਰੋਟੇਟ ਕਰਨ ਵਾਸਤੇ ਸਵੈਚਲਿਤ ਕੁੰਜੀ ਪ੍ਰਬੰਧਨ ਉਪ-ਸਿਸਟਮ ਦੁਆਰਾ ਵਰਤੀਆਂ ਜਾਂਦੀਆਂ ਹਨ।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ------ | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| GET | `/api/v1/registered-keys` | ਰਜਿਸਟਰ ਕੀਤੀਆਂ ਕੁੰਜੀਆਂ ਦੀ ਸੂਚੀ ਦਿਓ (ਸਿਰਫ਼ ਲੁਕਾਇਆ ਹੋਇਆ ਪ੍ਰੀਫਿਕਸ) |
| POST | `/api/v1/registered-keys` | ਨਵੀਂ ਰਜਿਸਟਰ ਕੀਤੀ ਕੁੰਜੀ ਜਾਰੀ ਕਰੋ — ਬਾਡੀ: `{name, provider?, accountId?, idempotencyKey?, expiresAt?, dailyBudget?, hourlyBudget?}`। ਅਸਲ ਕੁੰਜੀ ਸਿਰਫ਼ **ਇੱਕ ਵਾਰ** ਵਾਪਸ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਕੋਟੇ ਕਾਰਨ ਇਨਕਾਰ ਹੋਣ 'ਤੇ `429` ਵਾਪਸ ਕਰਦਾ ਹੈ। |
| GET | `/api/v1/registered-keys/[id]` | ਰਜਿਸਟਰ ਕੀਤੀ ਕੁੰਜੀ ਦਾ ਮੈਟਾਡੇਟਾ ਪ੍ਰਾਪਤ ਕਰੋ (ਕੋਈ ਅਸਲ ਕੁੰਜੀ ਸਮੱਗਰੀ ਨਹੀਂ) |
| DELETE | `/api/v1/registered-keys/[id]` | ਰਜਿਸਟਰ ਕੀਤੀ ਕੁੰਜੀ ਰੱਦ ਕਰੋ |
| POST | `/api/v1/registered-keys/[id]/revoke` | ਸਪਸ਼ਟ ਰੱਦਗੀ ਐਂਡਪੌਇੰਟ (DELETE ਦੇ ਸਮਾਨ ਪ੍ਰਭਾਵ) |
**ਪ੍ਰਮਾਣੀਕਰਨ:** Bearer API ਕੁੰਜੀ (`isAuthenticated`)। `/v1/quotas/check` ਅਤੇ `/v1/issues/report` ਵੀ ਵੇਖੋ।
---
## ਏਜੰਟ ਪ੍ਰੋਟੋਕੋਲ
OmniRoute ਵਰਤੋਂਕਾਰਾਂ ਦੀ ਓਰੋਂ ਰਿਮੋਟ ਤੌਰ 'ਤੇ ਚਲਾਏ ਗਏ ਕਲਾਉਡ ਏਜੰਟ ਕਾਰਜ (Claude Code, Codex Cloud, OpenHands ਆਦਿ)।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ------ | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| GET | `/api/v1/agents/tasks` | ਕਾਰਜਾਂ ਦੀ ਸੂਚੀ — ਵਿਕਲਪਿਕ `?provider=`, `?status=`, `?limit=` (1500, ਮੂਲ 50) |
| POST | `/api/v1/agents/tasks` | ਕਾਰਜ ਬਣਾਓ — ਬਾਡੀ `CreateCloudAgentTaskSchema` ਦੁਆਰਾ ਪ੍ਰਮਾਣਿਤ (`providerId`, `prompt`, `source`, `options?`)। ਕਾਰਜ ਐਨਵਲਪ ਨਾਲ `201` ਵਾਪਸ ਕਰਦਾ ਹੈ |
| DELETE | `/api/v1/agents/tasks?id=...` | ਇੱਕ ਕਾਰਜ ਮਿਟਾਓ |
| GET | `/api/v1/agents/tasks/[id]` | ਕਾਰਜ ਪੜ੍ਹੋ — ਜਦੋਂ `external_id` ਸੈੱਟ ਹੋਵੇ, ਤਾਂ ਅੱਪਸਟ੍ਰੀਮ ਕਲਾਉਡ ਏਜੰਟ ਤੋਂ ਸਥਿਤੀ ਨੂੰ ਸਮਕਾਲੀ ਤੌਰ 'ਤੇ ਤਾਜ਼ਾ ਕਰਦਾ ਹੈ |
| POST | `/api/v1/agents/tasks/[id]` | ਭੇਦਕ ਕਾਰਵਾਈ: `{action: "approve"}`, `{action: "message", message}`, ਜਾਂ `{action: "cancel"}` |
| DELETE | `/api/v1/agents/tasks/[id]` | id ਦੁਆਰਾ ਕੋਈ ਖਾਸ ਕਾਰਜ ਮਿਟਾਓ |
> **ਪ੍ਰਮਾਣੀਕਰਨ:** ਹਰ ਵਿਧੀ ਲਈ ਪ੍ਰਬੰਧਨ ਪ੍ਰਮਾਣੀਕਰਨ ਲੋੜੀਂਦਾ ਹੈ (`requireCloudAgentManagementAuth`)। v3.8.0 ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਬਿਨਾਂ ਪ੍ਰਮਾਣੀਕਰਨ ਦੇ ਸਨ — ਬ੍ਰੇਕਿੰਗ ਤਬਦੀਲੀ ਲਈ ਕਮਿਟ `588a0333` ਵੇਖੋ।
```bash
# ਇੱਕ Claude Code ਕਲਾਉਡ ਕਾਰਜ ਬਣਾਓ
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":"..."}}'
```
---
## ਪ੍ਰਬੰਧਨ ਪ੍ਰੌਕਸੀਆਂ
ਆਊਟਬਾਊਂਡ HTTP(S)/SOCKS ਪ੍ਰੌਕਸੀਆਂ, ਜਿਨ੍ਹਾਂ ਨੂੰ ਪ੍ਰਦਾਤਾਵਾਂ, ਖਾਤਿਆਂ ਜਾਂ ਵਿਸ਼ਵ ਪੱਧਰ 'ਤੇ ਅਸਾਈਨ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ------ | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| GET | `/api/v1/management/proxies` | ਪ੍ਰੌਕਸੀਆਂ ਦੀ ਸੂਚੀ (`?id=` ਨਾਲ ਇੱਕ ਪ੍ਰੌਕਸੀ ਵਾਪਸ ਮਿਲਦੀ ਹੈ; `?id=&where_used=1` ਨਾਲ ਅਸਾਈਨਮੈਂਟ ਗ੍ਰਾਫ ਵਾਪਸ ਮਿਲਦਾ ਹੈ) |
| POST | `/api/v1/management/proxies` | ਪ੍ਰੌਕਸੀ ਬਣਾਓ — ਬਾਡੀ `createProxyRegistrySchema` ਦੁਆਰਾ ਪ੍ਰਮਾਣਿਤ |
| PATCH | `/api/v1/management/proxies` | ਪ੍ਰੌਕਸੀ ਅੱਪਡੇਟ ਕਰੋ — ਬਾਡੀ `updateProxyRegistrySchema` ਦੁਆਰਾ ਪ੍ਰਮਾਣਿਤ (`id` ਲੋੜੀਂਦਾ ਹੈ) |
| DELETE | `/api/v1/management/proxies?id=...&force=1` | ਪ੍ਰੌਕਸੀ ਮਿਟਾਓ (ਅਸਾਈਨਮੈਂਟਾਂ ਨੂੰ ਵੱਖ ਕਰਨ ਲਈ `force=1` ਵਰਤੋ) |
| GET | `/api/v1/management/proxies/assignments` | ਅਸਾਈਨਮੈਂਟਾਂ ਦੀ ਸੂਚੀ — `proxy_id`, `scope`, `scope_id` ਦੁਆਰਾ ਫਿਲਟਰ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ; ਕਿਸੇ ਕਨੈਕਸ਼ਨ ਲਈ ਸਰਗਰਮ ਪ੍ਰੌਕਸੀ ਰਿਜ਼ਾਲਵ ਕਰਨ ਵਾਸਤੇ `resolve_connection_id=<id>` ਪਾਸ ਕਰੋ |
| PUT | `/api/v1/management/proxies/assignments` | ਅਸਾਈਨ ਕਰੋ — ਬਾਡੀ `proxyAssignmentSchema` ਦੁਆਰਾ ਪ੍ਰਮਾਣਿਤ (`{scope, scopeId?, proxyId?}`)। ਡਿਸਪੈਚਰ ਕੈਸ਼ ਸਾਫ਼ ਕਰਦਾ ਹੈ |
| PUT | `/api/v1/management/proxies/bulk-assign` | ਬਲਕ ਅਸਾਈਨ ਕਰੋ — ਬਾਡੀ `bulkProxyAssignmentSchema` ਦੁਆਰਾ ਪ੍ਰਮਾਣਿਤ (`{scope, scopeIds[], proxyId?}`) |
| GET | `/api/v1/management/proxies/health?hours=24` | ਇੱਕ ਸਮਾਂ-ਵਿੰਡੋ ਦੌਰਾਨ ਪ੍ਰੌਕਸੀ ਦੀ ਸਮੁੱਚੀ ਸਿਹਤ (ਸਫਲਤਾ/ਅਸਫਲਤਾ ਗਿਣਤੀਆਂ, ਲੇਟੈਂਸੀ) |
**ਪ੍ਰਮਾਣੀਕਰਨ:** ਹਰ ਰੂਟ 'ਤੇ ਪ੍ਰਬੰਧਨ ਸੈਸ਼ਨ/API ਕੁੰਜੀ (`requireManagementAuth`) ਲੋੜੀਂਦੀ ਹੈ।
> ਕਾਰਜ ਵੇਰਵੇ ਦੇ `POST /api/v1/management/proxies/[id]/assignments` ਅਤੇ `POST /api/v1/management/proxies/[id]/health`, ਉੱਪਰ ਦਰਸਾਏ ਸਮਤਲ `/assignments` ਅਤੇ `/health` ਰੂਟਾਂ ਦੁਆਰਾ ਸਰਵ ਕੀਤੇ ਜਾਂਦੇ ਹਨ — ਕੋਡਬੇਸ ਵਿੱਚ ਪ੍ਰਤੀ-id ਉਪ-ਰੂਟ ਮੌਜੂਦ ਨਹੀਂ ਹਨ।
---
## ਲਚੀਲਾਪਣ (ਵਿਸਤ੍ਰਿਤ)
OmniRoute ਅਸਥਾਈ ਅਸਫਲਤਾਵਾਂ ਲਈ ਤਿੰਨ ਸੁਤੰਤਰ ਵਿਧੀਆਂ ਉਪਲਬਧ ਕਰਦਾ ਹੈ; ਹੇਠਾਂ ਦਿੱਤੇ ਪ੍ਰਬੰਧਨ ਐਂਡਪੌਇੰਟ ਆਪਰੇਟਰਾਂ ਨੂੰ ਉਨ੍ਹਾਂ ਦੀ ਸਥਿਤੀ ਪੜ੍ਹਨ ਅਤੇ ਉਨ੍ਹਾਂ ਨੂੰ ਓਵਰਰਾਈਡ ਕਰਨ ਦੀ ਸਹੂਲਤ ਦਿੰਦੇ ਹਨ:
| ਦਾਇਰਾ | ਸਥਿਤੀ ਸਟੋਰੇਜ | ਪੜ੍ਹਨਾ | ਰੀਸੈੱਟ / ਸਾਫ਼ ਕਰਨਾ |
| --------------- | ----------------------------------------- | ----------------------------------------- | ------------------------------------------------------------ |
| ਪ੍ਰਦਾਤਾ ਬ੍ਰੇਕਰ | `domain_circuit_breakers` + ਇਨ-ਮੈਮੋਰੀ | `/api/monitoring/health` | `POST /api/resilience/reset` |
| ਕਨੈਕਸ਼ਨ ਕੂਲਡਾਊਨ | ਪ੍ਰਦਾਤਾ ਕਨੈਕਸ਼ਨਾਂ ਉੱਤੇ `rateLimitedUntil` | `/api/rate-limits`, `/api/providers/[id]` | (ਲੋੜ ਪੈਣ 'ਤੇ ਮੁੜ ਸਮਰੱਥ ਹੁੰਦਾ ਹੈ; ਪ੍ਰਦਾਤਾ PUT ਰਾਹੀਂ ਸਾਫ਼ ਕਰੋ) |
| ਮਾਡਲ ਲੌਕਆਉਟ | ਇਨ-ਮੈਮੋਰੀ ਮਾਡਲ-ਉਪਲਬਧਤਾ ਰਜਿਸਟਰੀ | `GET /api/resilience/model-cooldowns` | `DELETE /api/resilience/model-cooldowns` |
`PATCH /api/resilience`, `providerBreaker.oauth` ਅਤੇ `providerBreaker.apikey` ਅਧੀਨ ਪ੍ਰਦਾਤਾ ਬ੍ਰੇਕਰ ਓਵਰਰਾਈਡ ਸਵੀਕਾਰ ਕਰਦਾ ਹੈ। ਹਰੇਕ ਪ੍ਰੋਫਾਈਲ `degradationThreshold`, `failureThreshold`, ਅਤੇ `resetTimeoutMs` ਦਾ ਸਮਰਥਨ ਕਰਦੀ ਹੈ; ਇਹੀ ਫੀਲਡ Dashboard → Settings → Resilience ਵਿੱਚ ਵੀ ਉਪਲਬਧ ਹਨ।
```bash
# ਕਿਸੇ ਇੱਕ ਮਾਡਲ ਲੌਕਆਉਟ ਨੂੰ ਸਾਫ਼ ਕਰੋ
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"}'
# ਸਾਰੇ ਲੌਕਆਉਟ ਮਿਟਾਓ
curl -X DELETE http://localhost:20128/api/resilience/model-cooldowns \
-H "Cookie: auth_token=..." \
-d '{"all":true}'
```
ਪੂਰੇ ਸੰਕਲਪਿਕ ਹਵਾਲੇ ਅਤੇ ਬ੍ਰੇਕਰ ਦੀਆਂ ਡਿਫੌਲਟ ਸੈਟਿੰਗਾਂ ਲਈ: [`CLAUDE.md`](../../CLAUDE.md) → "Resilience Runtime State" ਵੇਖੋ।
---
## ਸਕਿੱਲਾਂ
ਕਸਟਮ ਐਗਜ਼ੀਕਿਊਟੇਬਲ ਹੈਂਡਲਰਾਂ ਨਾਲ OmniRoute ਦਾ ਵਿਸਤਾਰ ਕਰਨ ਲਈ ਸਕਿੱਲ ਫਰੇਮਵਰਕ, ਅਤੇ ਮਾਰਕੀਟਪਲੇਸ ਇੰਟੀਗ੍ਰੇਸ਼ਨਾਂ।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ------ | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| GET | `/api/skills` | ਇੰਸਟਾਲ ਕੀਤੀਆਂ ਸਕਿੱਲਾਂ ਦੀ ਸੂਚੀ — `?q=`, `?mode=on\|off\|auto`, `?source=skillsmp\|skillssh\|local` ਰਾਹੀਂ ਫਿਲਟਰ ਕਰਨ ਯੋਗ, ਪੰਨਾਬੱਧ |
| GET | `/api/skills/[id]` | ਇੱਕ ਸਕਿੱਲ ਪ੍ਰਾਪਤ ਕਰੋ |
| PUT | `/api/skills/[id]` | ਸਕਿੱਲ ਅੱਪਡੇਟ ਕਰੋ (ਨਾਮ, ਵੇਰਵਾ, ਮੋਡ, ਸਕੀਮਾ, ਹੈਂਡਲਰ, ਟੈਗ) |
| DELETE | `/api/skills/[id]` | ਇੱਕ ਸਕਿੱਲ ਅਨਇੰਸਟਾਲ ਕਰੋ |
| POST | `/api/skills/install` | ਰਾਅ ਮੈਨੀਫੈਸਟ ਤੋਂ ਇੱਕ ਸਕਿੱਲ ਇੰਸਟਾਲ ਕਰੋ — ਬਾਡੀ: `{name, version, description, schema:{input, output}, handlerCode, apiKeyId?}` |
| GET | `/api/skills/executions` | ਹਾਲੀਆ ਸਕਿੱਲ ਐਗਜ਼ੀਕਿਊਸ਼ਨਾਂ ਦੀ ਸੂਚੀ (ਇਨਪੁੱਟਾਂ/ਆਉਟਪੁੱਟਾਂ/ਅਵਧੀ ਸਮੇਤ ਆਡਿਟ ਟ੍ਰੇਲ) |
| GET | `/api/skills/marketplace?q=...` | SkillsMP ਮਾਰਕੀਟਪਲੇਸ ਤੋਂ ਖੋਜ/ਲੋਕਪ੍ਰਿਯ ਸੂਚੀ (`skillsmpApiKey` ਸੈਟਿੰਗ ਲੋੜੀਂਦੀ ਹੈ) |
| POST | `/api/skills/marketplace/install` | SkillsMP ਤੋਂ id ਰਾਹੀਂ ਇੱਕ ਸਕਿੱਲ ਇੰਸਟਾਲ ਕਰੋ |
| GET | `/api/skills/skillssh?q=&limit=` | skills.sh ਰਜਿਸਟਰੀ ਵਿੱਚ ਖੋਜ ਕਰੋ |
| POST | `/api/skills/skillssh/install` | skills.sh ਤੋਂ id ਰਾਹੀਂ ਇੱਕ ਸਕਿੱਲ ਇੰਸਟਾਲ ਕਰੋ |
**ਪ੍ਰਮਾਣੀਕਰਨ:** ਪ੍ਰਬੰਧਨ ਸੈਸ਼ਨ/API ਕੁੰਜੀ। ਮਾਰਕੀਟਪਲੇਸ ਖੋਜ ਰੂਟ ਪ੍ਰਬੰਧਨ ਪ੍ਰਮਾਣੀਕਰਨ ਜਾਂ Bearer API ਕੁੰਜੀ (`isAuthenticated`) ਵਿੱਚੋਂ ਕਿਸੇ ਇੱਕ ਨੂੰ ਸਵੀਕਾਰ ਕਰਦੇ ਹਨ।
---
## ਮੈਮੋਰੀ
ਸਥਾਈ ਗੱਲਬਾਤੀ/ਤੱਥਾਤਮਕ ਮੈਮੋਰੀ ਸਟੋਰ, ਜੋ ਪ੍ਰਤੀ API ਕੁੰਜੀ / ਸੈਸ਼ਨ ਦੇ ਦਾਇਰੇ ਵਿੱਚ ਹੁੰਦਾ ਹੈ।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ------ | -------------------- | ------------------------------------------------------------------------------------------------------------- |
| GET | `/api/memory` | ਮੈਮੋਰੀਆਂ ਦੀ ਸੂਚੀ — `?apiKeyId=`, `?type=`, `?sessionId=`, `?q=`, ਨਾਲ `offset/limit` ਜਾਂ `page/limit` ਪੰਨਾ-ਵੰਡ |
| POST | `/api/memory` | ਮੈਮੋਰੀ ਬਣਾਓ — Zod ਦੁਆਰਾ ਪ੍ਰਮਾਣਿਤ ਬਾਡੀ: `{content, key, type?, sessionId?, apiKeyId?, metadata?, expiresAt?}` |
| GET | `/api/memory/[id]` | ਇੱਕ ਮੈਮੋਰੀ ਪ੍ਰਾਪਤ ਕਰੋ |
| DELETE | `/api/memory/[id]` | ਇੱਕ ਮੈਮੋਰੀ ਮਿਟਾਓ |
| GET | `/api/memory/health` | ਮੈਮੋਰੀ ਉਪ-ਸਿਸਟਮ ਦੀ ਸਿਹਤ (DB ਕਨੈਕਟੀਵਿਟੀ, ਐਮਬੈਡਿੰਗ ਬੈਕਐਂਡ, ਵੈਕਟਰ ਇੰਡੈਕਸ ਸਥਿਤੀ) |
**ਪ੍ਰਮਾਣੀਕਰਨ:** ਪ੍ਰਬੰਧਨ ਸੈਸ਼ਨ/API ਕੁੰਜੀ (`requireManagementAuth`)। `type` enum: `FACTUAL`, `EPISODIC`, `SEMANTIC`, `PROCEDURAL` (`src/lib/memory/types.ts` ਵਿੱਚ `MemoryType` ਵੇਖੋ)।
---
## MCP ਸਰਵਰ
OmniRoute ਵਿੱਚ 3 ਟ੍ਰਾਂਸਪੋਰਟਾਂ (stdio, SSE, streamable-http) ਅਤੇ ਦਾਇਰਾ-ਨਿਰਧਾਰਤ ਟੂਲਾਂ ਵਾਲਾ ਇੱਕ ਐਮਬੈਡਡ Model Context Protocol ਸਰਵਰ ਸ਼ਾਮਲ ਹੈ। ਹੇਠਾਂ ਦਿੱਤੇ ਡੈਸ਼ਬੋਰਡ ਐਂਡਪੌਇੰਟ ਸਥਿਤੀ/ਆਡਿਟ ਡੇਟਾ ਪੜ੍ਹਦੇ ਹਨ ਅਤੇ HTTP ਟ੍ਰਾਂਸਪੋਰਟਾਂ ਨੂੰ ਪ੍ਰੌਕਸੀ ਕਰਦੇ ਹਨ।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ------ | ---------------------- | ------------------------------------------------------------------------------------------------ | -------------------- |
| GET | `/api/mcp/status` | ਹਾਰਟਬੀਟ, ਟ੍ਰਾਂਸਪੋਰਟ, ਔਨਲਾਈਨ ਸਥਿਤੀ, ਆਖਰੀ ਕਾਲ, ਪ੍ਰਮੁੱਖ ਟੂਲ, 24h ਸਫਲਤਾ ਦਰ |
| GET | `/api/mcp/tools` | `name`, `description`, `scopes`, `phase`, `auditLevel`, `sourceEndpoints` ਸਮੇਤ MCP ਟੂਲਾਂ ਦੀ ਸੂਚੀ |
| GET | `/api/mcp/sse` | SSE ਟ੍ਰਾਂਸਪੋਰਟ ਲਈ SSE ਸਟ੍ਰੀਮ ਖੋਲ੍ਹੋ (ਜੇ MCP ਅਯੋਗ ਹੋਵੇ ਜਾਂ ਟ੍ਰਾਂਸਪੋਰਟ ਮੇਲ ਨਾ ਖਾਏ ਤਾਂ `503` ਵਾਪਸ ਕਰਦਾ ਹੈ) |
| POST | `/api/mcp/sse` | SSE ਟ੍ਰਾਂਸਪੋਰਟ ਉੱਤੇ JSON-RPC ਫ੍ਰੇਮ ਭੇਜੋ |
| GET | `/api/mcp/stream` | Streamable HTTP ਟ੍ਰਾਂਸਪੋਰਟ ਦਾ SSE ਪਾਸਾ ਖੋਲ੍ਹੋ (ਸਰਵਰ ਦੁਆਰਾ ਸ਼ੁਰੂ ਕੀਤੇ ਸੁਨੇਹੇ) |
| POST | `/api/mcp/stream` | Streamable HTTP ਟ੍ਰਾਂਸਪੋਰਟ ਉੱਤੇ JSON-RPC ਫ੍ਰੇਮ ਭੇਜੋ |
| DELETE | `/api/mcp/stream` | ਇੱਕ Streamable HTTP ਸੈਸ਼ਨ ਸਮਾਪਤ ਕਰੋ |
| GET | `/api/mcp/audit` | ਆਡਿਟ ਲੌਗ ਦੀ ਪੁੱਛਗਿੱਛ ਕਰੋ — `?limit=`, `?offset=`, `?tool=`, `?success=true | false`, `?apiKeyId=` |
| GET | `/api/mcp/audit/stats` | ਸਮੂਹਿਕ ਆਡਿਟ ਅੰਕੜੇ (ਕੁੱਲ ਗਿਣਤੀਆਂ, ਸਫਲਤਾ ਦਰ, ਔਸਤ ਮਿਆਦ, ਪ੍ਰਮੁੱਖ ਟੂਲ) |
**ਪ੍ਰਮਾਣੀਕਰਨ:** `sse`/`stream` ਟ੍ਰਾਂਸਪੋਰਟ MCP-ਵਿਸ਼ੇਸ਼ ਪ੍ਰਮਾਣੀਕਰਨ ਸਤਹ ਦੀ ਪਾਲਣਾ ਕਰਦੇ ਹਨ (`mcp` ਦਾਇਰੇ ਵਾਲੀ Bearer API ਕੁੰਜੀ); `status`/`tools`/`audit*` ਰੂਟ ਡੈਸ਼ਬੋਰਡ ਤੋਂ ਪੜ੍ਹੇ ਜਾ ਸਕਦੇ ਹਨ (ਡੈਸ਼ਬੋਰਡ ਹੋਸਟ ਤੱਕ ਪਹੁੰਚ ਤੋਂ ਇਲਾਵਾ ਕਿਸੇ ਵਾਧੂ ਪ੍ਰਮਾਣੀਕਰਨ ਦੀ ਲੋੜ ਨਹੀਂ)।
> ਦੋਵੇਂ HTTP ਟ੍ਰਾਂਸਪੋਰਟ `settings.mcpEnabled` ਅਤੇ `settings.mcpTransport` ਦੁਆਰਾ ਨਿਯੰਤਰਿਤ ਹਨ — ਟ੍ਰਾਂਸਪੋਰਟ ਮੇਲ ਨਾ ਖਾਣ 'ਤੇ `400` ਵਾਪਸ ਹੁੰਦਾ ਹੈ, ਅਤੇ MCP ਅਯੋਗ ਹੋਣ ਦੀ ਸਥਿਤੀ ਵਿੱਚ `503` ਵਾਪਸ ਹੁੰਦਾ ਹੈ।
---
## A2A ਸਰਵਰ
OmniRoute ਜਾਂਚ/ਡੈਸ਼ਬੋਰਡ ਦੀ ਵਰਤੋਂ ਲਈ ਇੱਕ A2A (Agent-to-Agent) JSON-RPC 2.0 ਐਂਡਪੌਇੰਟ ਦੇ ਨਾਲ ਇੱਕ REST ਰੈਪਰ ਉਪਲਬਧ ਕਰਾਉਂਦਾ ਹੈ।
### JSON-RPC
```bash
POST /a2a
Authorization: Bearer your-api-key # ਵਿਕਲਪਿਕ, ਜਦੋਂ ਤੱਕ OMNIROUTE_API_KEY ਸੈੱਟ ਨਾ ਹੋਵੇ
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 1,
"method": "message/send",
"params": {
"skill": "smart-routing",
"messages": [{"role": "user", "content": "Route this coding task"}]
}
}
```
ਸਮਰਥਿਤ ਵਿਧੀਆਂ (ਸਾਰੀਆਂ `settings.a2aEnabled` ਦੁਆਰਾ ਨਿਯੰਤਰਿਤ ਹਨ):
| ਵਿਧੀ | ਵੇਰਵਾ |
| ---------------- | -------------------------------------------------------------------- |
| `message/send` | ਸਮਕਾਲੀ ਸਕਿੱਲ ਐਗਜ਼ੀਕਿਊਸ਼ਨ; `{task, artifacts, metadata}` ਵਾਪਸ ਕਰਦਾ ਹੈ |
| `message/stream` | ਉਸੇ ਸਕਿੱਲ ਸੈੱਟ ਦਾ ਸਟ੍ਰੀਮਿੰਗ SSE ਐਗਜ਼ੀਕਿਊਸ਼ਨ |
| `tasks/get` | `taskId` ਦੁਆਰਾ ਕੋਈ ਟਾਸਕ ਪ੍ਰਾਪਤ ਕਰੋ |
| `tasks/cancel` | `taskId` ਦੁਆਰਾ ਕੋਈ ਟਾਸਕ ਰੱਦ ਕਰੋ |
ਬਿਲਟ-ਇਨ ਸਕਿੱਲ: `smart-routing`, `quota-management`, `provider-discovery`, `cost-analysis`, `health-report`
### ਏਜੰਟ ਕਾਰਡ
```bash
GET /.well-known/agent.json
```
ਸਰਵਜਨਕ A2A ਏਜੰਟ ਕਾਰਡ (ਨਾਮ, ਵੇਰਵਾ, ਸਮਰੱਥਾਵਾਂ, ਸਕਿੱਲ ਕੈਟਾਲਾਗ, ਪ੍ਰਮਾਣੀਕਰਨ ਸਕੀਮ) ਵਾਪਸ ਕਰਦਾ ਹੈ — ਸਰਵਜਨਕ ਤੌਰ 'ਤੇ 1 ਘੰਟੇ ਲਈ ਕੈਸ਼ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਪ੍ਰਮਾਣੀਕਰਨ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ।
### REST ਸਹਾਇਕ
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ---- | ---------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| GET | `/api/a2a/status` | A2A ਸਮਰੱਥ + ਟਾਸਕ ਅੰਕੜੇ + ਕੈਸ਼ ਕੀਤੇ ਏਜੰਟ ਕਾਰਡ ਦਾ ਸੰਖੇਪ |
| GET | `/api/a2a/tasks` | ਟਾਸਕ ਸੂਚੀਬੱਧ ਕਰੋ — `?state=submitted\|working\|completed\|failed\|cancelled`, `?skill=`, `?limit=` (≤200), `?offset=` |
| POST | `/api/a2a/tasks` | (REST ਸਹਾਇਕ ਵਜੋਂ ਲਾਗੂ ਨਹੀਂ ਕੀਤਾ ਗਿਆ — JSON-RPC `message/send` ਰਾਹੀਂ ਬਣਾਓ) |
| GET | `/api/a2a/tasks/[id]` | ਇੱਕ ਟਾਸਕ ਪ੍ਰਾਪਤ ਕਰੋ |
| POST | `/api/a2a/tasks/[id]/cancel` | ਇੱਕ ਟਾਸਕ ਰੱਦ ਕਰੋ |
**ਪ੍ਰਮਾਣੀਕਰਨ:** REST ਸਹਾਇਕ ਮੈਨੇਜਮੈਂਟ ਪ੍ਰਮਾਣੀਕਰਨ ਤੋਂ ਬਿਨਾਂ ਚੱਲਦੇ ਹਨ (ਡੈਸ਼ਬੋਰਡ ਦੁਆਰਾ ਪੜ੍ਹਨਯੋਗ); JSON-RPC `/a2a` ਰੂਟ, ਜੇ ਸੰਰਚਿਤ ਹੋਵੇ, ਤਾਂ Bearer `OMNIROUTE_API_KEY` ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ।
---
## ਕਲਾਉਡ, Evals ਅਤੇ Assess
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ------ | ------------------------------- | ------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------- |
| POST | `/api/cloud/auth` | ਕਿਸੇ Bearer ਕੁੰਜੀ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ ਅਤੇ ਕਲਾਉਡ ਸਿੰਕ ਕਲਾਇੰਟਾਂ ਲਈ ਮਾਸਕ ਕੀਤੇ ਪ੍ਰਦਾਤਾ ਕਨੈਕਸ਼ਨ + ਮਾਡਲ ਉਪਨਾਮ ਵਾਪਸ ਕਰੋ |
| POST | `/api/cloud/credentials/update` | ਕਲਾਉਡ-ਸਿੰਕ ਕੀਤੇ ਪ੍ਰਦਾਤਾ ਲਈ ਇਨਕ੍ਰਿਪਟ ਕੀਤੇ ਕ੍ਰੈਡੈਂਸ਼ਲ ਅੱਪਡੇਟ ਕਰੋ |
| POST | `/api/cloud/model/resolve` | ਸਥਾਨਕ ਰੂਟਿੰਗ ਟੇਬਲ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਕਿਸੇ ਲਾਜ਼ਮੀ ਮਾਡਲ id ਨੂੰ ਕਿਸੇ ਠੋਸ ਪ੍ਰਦਾਤਾ/ਮਾਡਲ ਵਿੱਚ ਰਿਜ਼ਾਲਵ ਕਰੋ |
| GET | `/api/cloud/models/alias` | ਕਲਾਉਡ ਸਿੰਕ ਲਈ ਉਪਲਬਧ ਕਰਵਾਏ ਗਏ ਮਾਡਲ ਉਪਨਾਮ ਸੂਚੀਬੱਧ ਕਰੋ |
| GET | `/api/assess` | ਨਵੀਨਤਮ ਮੁਲਾਂਕਣ ਵਰਗੀਕਰਨ ਪੜ੍ਹੋ (ਹਰੇਕ ਪ੍ਰਦਾਤਾ/ਮਾਡਲ ਲਈ) |
| POST | `/api/assess` | ਮੁਲਾਂਕਣ ਚਲਾਓ — ਬੌਡੀ: `{scope: {type:"all"} | {type:"provider", providerId} | {type:"model", modelId}, trigger?}` |
| GET | `/api/evals` | ਬਿਲਟ-ਇਨ eval ਸੂਟਾਂ + ਸਭ ਤੋਂ ਹਾਲੀਆ ਰਨਾਂ ਨੂੰ ਸੂਚੀਬੱਧ ਕਰੋ |
| POST | `/api/evals` | ਇੱਕ eval ਰਨ ਟ੍ਰਿਗਰ ਕਰੋ |
| POST | `/api/evals/suites` | ਇੱਕ ਕਸਟਮ eval ਸੂਟ ਬਣਾਓ — ਬੌਡੀ ਦੀ ਪੁਸ਼ਟੀ `evalSuiteSaveSchema` ਦੁਆਰਾ ਕੀਤੀ ਜਾਂਦੀ ਹੈ |
| GET | `/api/evals/suites/[id]` | ਇੱਕ ਕਸਟਮ eval ਸੂਟ ਪ੍ਰਾਪਤ ਕਰੋ |
**ਪ੍ਰਮਾਣੀਕਰਨ:** `/api/cloud/auth` ਸਿੱਧੇ ਤੌਰ 'ਤੇ Bearer ਕੁੰਜੀ ਦੀ ਪੁਸ਼ਟੀ ਕਰਦਾ ਹੈ; ਹੋਰ `/api/cloud/*`, `/api/evals/*`, ਅਤੇ `/api/assess` ਰੂਟਾਂ ਲਈ ਮੈਨੇਜਮੈਂਟ ਸੈਸ਼ਨ/API ਕੁੰਜੀ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। `/api/assess` POST ਇੱਕ ਵੱਖਰੇ-ਯੂਨੀਅਨ ਸਕੋਪ ਸਕੀਮਾ ਨਾਲ `validateBody` ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ।
---
## ACP (Agent Client Protocol) ਪ੍ਰਬੰਧਨ
ਚਾਈਲਡ ਪ੍ਰੋਸੈੱਸਾਂ ਵਜੋਂ। ਇਹ ਐਂਡਪੌਇੰਟ ACP ਏਜੰਟ ਦੀ ਪਛਾਣ ਅਤੇ ਕਸਟਮ ਏਜੰਟ
ਰਜਿਸਟ੍ਰੇਸ਼ਨ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਦੇ ਹਨ।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ------ | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| GET | `/api/acp/agents` | ਇੰਸਟਾਲੇਸ਼ਨ ਸਥਿਤੀ, ਵਰਜਨ ਅਤੇ ਬਾਈਨਰੀ ਸਮੇਤ ਸਾਰੇ ਜਾਣੇ-ਪਛਾਣੇ CLI ਏਜੰਟਾਂ (ਬਿਲਟ-ਇਨ + ਕਸਟਮ) ਦੀ ਸੂਚੀ ਦਿਖਾਓ |
| POST | `/api/acp/agents` | ਕਸਟਮ ACP ਏਜੰਟ ਰਜਿਸਟਰ ਕਰੋ ਜਾਂ ਕੈਸ਼ ਰਿਫ੍ਰੈਸ਼ ਕਰੋ — ਬਾਡੀ: `{id, name, binary, versionCommand, providerAlias, spawnArgs, protocol}` ਜਾਂ `{action: "refresh"}` |
| DELETE | `/api/acp/agents` | ਕਸਟਮ ACP ਏਜੰਟ ਹਟਾਓ — ਕਵੇਰੀ ਪੈਰਾਮੀਟਰ: `?id=<agentId>` |
**ਜਵਾਬ ਦੀ ਉਦਾਹਰਨ** (`GET /api/acp/agents`):
```json
{
"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
}
```
**ਪ੍ਰਮਾਣੀਕਰਨ:** ਪ੍ਰਬੰਧਨ ਸੈਸ਼ਨ (ਡੈਸ਼ਬੋਰਡ `auth_token` ਕੂਕੀ) ਜਾਂ
ਪ੍ਰਬੰਧਨ-ਸਕੋਪ ਵਾਲੀ API ਕੁੰਜੀ ਦੀ ਲੋੜ ਹੈ।
ਪੂਰੇ ਵੇਰਵਿਆਂ ਲਈ [ACP ਫ੍ਰੇਮਵਰਕ](../frameworks/ACP.md) ਵੇਖੋ।
---
## ਵਿਸ਼ਲੇਸ਼ਣ ਅਤੇ ਨਿਰੀਖਣਯੋਗਤਾ
ਰੂਟਿੰਗ, ਕੰਪ੍ਰੈਸ਼ਨ ਅਤੇ ਪ੍ਰਦਾਤਾ ਵਿਭਿੰਨਤਾ ਦੀ ਨਿਗਰਾਨੀ ਲਈ ਰੀਅਲ-ਟਾਈਮ ਵਿਸ਼ਲੇਸ਼ਣ ਐਂਡਪੌਇੰਟ।
ਇਹ `/dashboard/analytics/*` ਪੰਨਿਆਂ ਨੂੰ ਚਲਾਉਂਦੇ ਹਨ।
### ਆਟੋ-ਰੂਟਿੰਗ ਵਿਸ਼ਲੇਸ਼ਣ
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ---- | ------------------------------------ | --------------------------------------------------------------------------- |
| GET | `/api/analytics/auto-routing` | ਇਕੱਤਰਿਤ ਆਟੋ-ਰੂਟਿੰਗ ਅੰਕੜੇ: ਕੁੱਲ ਕਾਲਾਂ, ਰਣਨੀਤੀ ਵੰਡ, ਟੀਅਰ ਵੰਡ, ਪ੍ਰਮੁੱਖ ਪ੍ਰਦਾਤਾ |
| GET | `/api/analytics/auto-routing?days=7` | ਸਮਾਂ-ਵਿੰਡੋ ਅਧਾਰਿਤ ਅੰਕੜੇ (ਡਿਫੌਲਟ 24h) |
**ਜਵਾਬ ਦੀ ਉਦਾਹਰਨ**:
```json
{
"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 }
]
}
```
### ਕੰਪ੍ਰੈਸ਼ਨ ਵਿਸ਼ਲੇਸ਼ਣ
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ---- | ---------------------------- | ----------------------------------------------------------------- |
| GET | `/api/analytics/compression` | ਇਕੱਤਰਿਤ ਕੰਪ੍ਰੈਸ਼ਨ ਅੰਕੜੇ: ਬਚਾਏ ਗਏ ਟੋਕਨ, ਬਚਤ %, ਮੋਡ ਵੰਡ, ਇੰਜਣ ਵਰਤੋਂ |
**ਜਵਾਬ ਦੀ ਉਦਾਹਰਨ**:
```json
{
"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
}
}
```
### ਪ੍ਰਦਾਤਾ ਵਿਭਿੰਨਤਾ ਟ੍ਰੈਕਿੰਗ
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ---- | -------------------------- | ----------------------------------------------------------------------------------------------------------- |
| GET | `/api/analytics/diversity` | Shannon entropy-ਅਧਾਰਿਤ ਵਿਭਿੰਨਤਾ ਟ੍ਰੈਕਿੰਗ: ਪ੍ਰਦਾਤਾਵਾਂ ਦੇ ਫੈਲਾਅ ਨੂੰ ਮਾਪ ਕੇ ਇਕਹਿਰੇ ਨਾਕਾਮੀ ਬਿੰਦੂਆਂ ਨੂੰ ਰੋਕਦੀ ਹੈ |
**ਜਵਾਬ ਦੀ ਉਦਾਹਰਨ**:
```json
{
"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"]
}
```
**ਪ੍ਰਮਾਣੀਕਰਨ:** ਪ੍ਰਬੰਧਨ ਸੈਸ਼ਨ ਜਾਂ ਪ੍ਰਬੰਧਨ-ਸਕੋਪ ਵਾਲੀ API ਕੁੰਜੀ ਦੀ ਲੋੜ ਹੈ।
---
## ਐਡਮਿਨ ਕਾਰਵਾਈਆਂ
ਕਾਰਜਸ਼ੀਲ ਪ੍ਰਬੰਧਨ ਲਈ ਸਿਰਫ਼ ਐਡਮਿਨ ਵਾਸਤੇ ਉਪਲਬਧ ਐਂਡਪੌਇੰਟ।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ---- | ------------------------ | --------------------------------------------------------------------------------------------- |
| GET | `/api/admin/concurrency` | ਮੌਜੂਦਾ ਸਮਕਾਲੀਤਾ ਸੀਮਾਵਾਂ ਪੜ੍ਹੋ (ਗਲੋਬਲ + ਪ੍ਰਤੀ-ਪ੍ਰਦਾਤਾ) |
| POST | `/api/admin/concurrency` | ਸਮਕਾਲੀਤਾ ਸੀਮਾਵਾਂ ਅੱਪਡੇਟ ਕਰੋ — ਬਾਡੀ: `{global?: number, perProvider?: Record<string, number>}` |
**ਪ੍ਰਮਾਣੀਕਰਨ:** ਐਡਮਿਨ ਸਕੋਪ ਵਾਲੇ ਪ੍ਰਬੰਧਨ ਸੈਸ਼ਨ ਦੀ ਲੋੜ ਹੈ।
---
## CLI ਟੂਲ ਪ੍ਰਬੰਧਨ
OmniRoute ਨਾਲ ਏਕੀਕ੍ਰਿਤ ਹੋਣ ਵਾਲੇ CLI ਟੂਲਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ (antigravity, chipotle, commandCode,
devin-cli, ਆਦਿ)। ਪੂਰੀ ਸੂਚੀ ਲਈ [ਪ੍ਰਦਾਤਾ ਹਵਾਲਾ](./PROVIDER_REFERENCE.md) ਵੇਖੋ।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ---- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| GET | `/api/cli-tools/all-statuses` | ਸਾਰੇ CLI ਟੂਲਾਂ ਦੀ ਸਥਿਤੀ (ਇੰਸਟਾਲ ਹੋਏ, ਵਰਜਨ, ਆਖਰੀ ਵਾਰ ਦੇਖੇ ਗਏ) |
| GET | `/api/cli-tools/status` | ਇੱਕ CLI ਟੂਲ ਲਈ ਸਥਿਤੀ ਦਾ ਵੇਰਵਾ (`?tool=` ਕਿਊਰੀ) |
| POST | `/api/cli-tools/apply` | ਟੂਲ ਦੀ ਤਿਆਰ ਕੀਤੀ ਸੰਰਚਨਾ ਲਿਖੋ (`dryRun` ਪੂਰਵਦਰਸ਼ਨ ਕਰਦਾ ਹੈ; ਕੰਟੇਨਰਾਈਜ਼ਡ ਹੋਣ 'ਤੇ `422` + `containerEphemeralTarget`; `migration` ਪੁਰਾਣੀ Codex YAML ਦਰਸਾਉਂਦਾ ਹੈ) |
| GET | `/api/cli-tools/backups` | CLI ਟੂਲ ਸੰਰਚਨਾ ਬੈਕਅੱਪਾਂ ਦੀ ਸੂਚੀ ਦਿਖਾਓ |
| POST | `/api/cli-tools/backups` | ਸਾਰੀਆਂ CLI ਟੂਲ ਸੰਰਚਨਾਵਾਂ ਦਾ ਬੈਕਅੱਪ ਬਣਾਓ |
| POST | `/api/cli-tools/backups` | ਰੀਸਟੋਰ ਕਰੋ: ਬਾਡੀ ਵਿੱਚ `{tool, backupId}` ਦੇ ਨਾਲ ਇਹੀ ਐਂਡਪੌਇੰਟ ਉਸ ਬੈਕਅੱਪ ਨੂੰ ਰੀਸਟੋਰ ਕਰਦਾ ਹੈ |
| GET | `/api/cli-tools/antigravity-mitm` | Antigravity MITM ਪ੍ਰੌਕਸੀ ਦੀ ਸਥਿਤੀ ("antigravity-mitm" CLI ਟੂਲ) |
| POST | `/api/cli-tools/antigravity-mitm/alias` | antigravity-mitm ਉਪਨਾਮਾਂ ਦੀ ਸੰਰਚਨਾ ਕਰੋ |
**ਪ੍ਰਮਾਣੀਕਰਨ:** ਪ੍ਰਬੰਧਨ ਸੈਸ਼ਨ ਦੀ ਲੋੜ ਹੈ।
---
## ਏਜੰਟ ਹੁਨਰ
AI ਏਜੰਟ ਹੁਨਰਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ (OpenAI ਦੇ ਕਸਟਮ GPTs ਵਰਗੇ, ਪਰ ਏਜੰਟਾਂ ਲਈ)।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ------ | ---------------------------- | ------------------------------------------------------------------------------- |
| GET | `/api/agent-skills` | ਸਾਰੇ ਏਜੰਟ ਹੁਨਰਾਂ ਦੀ ਸੂਚੀ ਦਿਖਾਓ (ਅੰਦਰੂਨੀ + ਕਸਟਮ) |
| GET | `/api/agent-skills/[id]` | ਕੋਈ ਖਾਸ ਏਜੰਟ ਹੁਨਰ ਪ੍ਰਾਪਤ ਕਰੋ |
| POST | `/api/agent-skills` | ਕਸਟਮ ਏਜੰਟ ਹੁਨਰ ਬਣਾਓ — ਬਾਡੀ: `{name, description, prompt, model?, temperature?}` |
| PUT | `/api/agent-skills/[id]` | ਕਸਟਮ ਏਜੰਟ ਹੁਨਰ ਅੱਪਡੇਟ ਕਰੋ |
| DELETE | `/api/agent-skills/[id]` | ਕਸਟਮ ਏਜੰਟ ਹੁਨਰ ਮਿਟਾਓ |
| GET | `/api/agent-skills/[id]/raw` | ਕੱਚਾ ਪ੍ਰੌਂਪਟ + ਮੈਟਾਡੇਟਾ ਪ੍ਰਾਪਤ ਕਰੋ (ਕੋਈ ਐਗਜ਼ੀਕਿਊਸ਼ਨ ਨਹੀਂ) |
| POST | `/api/agent-skills/generate` | ਕੁਦਰਤੀ ਭਾਸ਼ਾ ਦੇ ਵੇਰਵੇ ਤੋਂ AI ਦੀ ਮਦਦ ਨਾਲ ਨਵਾਂ ਹੁਨਰ ਤਿਆਰ ਕਰੋ |
**ਪ੍ਰਮਾਣੀਕਰਨ:** ਪ੍ਰਬੰਧਨ ਸੈਸ਼ਨ ਜਾਂ ਪ੍ਰਬੰਧਨ-ਸਕੋਪ ਵਾਲੀ API ਕੁੰਜੀ ਦੀ ਲੋੜ ਹੈ।
---
## ਕੈਸ਼ ਪ੍ਰਬੰਧਨ
ਸਿਮੈਂਟਿਕ ਕੈਸ਼ ਅਤੇ ਰੀਜ਼ਨਿੰਗ ਕੈਸ਼ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ------ | ---------------------- | ------------------------------------------------------------------------------------------------------------------ |
| GET | `/api/cache` | ਕੈਸ਼ ਦੀ ਸੰਖੇਪ ਜਾਣਕਾਰੀ: ਕੁੱਲ ਐਂਟਰੀਆਂ, ਹਿੱਟ ਦਰ, ਡਿਸਕ ਉੱਤੇ ਆਕਾਰ |
| GET | `/api/cache/entries` | ਕੈਸ਼ ਕੀਤੀਆਂ ਐਂਟਰੀਆਂ ਦੀ ਸੂਚੀ (ਪੰਨਾ-ਵੰਡ ਸਮੇਤ) |
| DELETE | `/api/cache/entries` | ਕੈਸ਼ ਐਂਟਰੀਆਂ ਮਿਟਾਓ (ਕੁਐਰੀ ਪੈਰਾਮੀਟਰਾਂ ਅਨੁਸਾਰ ਫਿਲਟਰ ਕਰੋ) |
| GET | `/api/cache/stats` | ਕੈਸ਼ ਦੇ ਵਿਸਤ੍ਰਿਤ ਅੰਕੜੇ (ਹਰੇਕ ਪ੍ਰਦਾਤਾ, ਹਰੇਕ ਮਾਡਲ ਲਈ) |
| GET | `/api/cache/reasoning` | ਰੀਜ਼ਨਿੰਗ ਕੈਸ਼ ਦੀ ਸਥਿਤੀ (ਰੀਜ਼ਨਿੰਗ ਰੀਪਲੇ ਲਈ) |
| DELETE | `/api/cache/reasoning` | ਰੀਜ਼ਨਿੰਗ ਕੈਸ਼ ਸਾਫ਼ ਕਰੋ — ਕੁਐਰੀ ਪੈਰਾਮੀਟਰ: `?toolCallId=<id>` (ਇੱਕ) ਜਾਂ `?provider=<p>` ਜਾਂ ਕੋਈ ਪੈਰਾਮੀਟਰ ਨਹੀਂ (ਸਾਰੇ) |
**ਪ੍ਰਮਾਣੀਕਰਨ:** ਪ੍ਰਬੰਧਨ ਸੈਸ਼ਨ ਲੋੜੀਂਦਾ ਹੈ।
---
## ਮੈਮੋਰੀ ਸਿਸਟਮ
ਸਥਾਈ ਮੈਮੋਰੀ (FTS5 + ਵੈਕਟਰ ਐਮਬੈਡਿੰਗਜ਼) ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ------ | ------------------ | ------------------------------------------------------------------ |
| GET | `/api/memory` | ਮੈਮੋਰੀ ਐਂਟਰੀਆਂ ਦੀ ਸੂਚੀ (ਸਕੋਪ, ਕਿਸਮ, ਖੋਜ ਕੁਐਰੀ ਅਨੁਸਾਰ ਫਿਲਟਰ ਕਰੋ) |
| POST | `/api/memory` | ਨਵੀਂ ਮੈਮੋਰੀ ਐਂਟਰੀ ਬਣਾਓ — ਬਾਡੀ: `{scope, type, content, metadata?}` |
| GET | `/api/memory/[id]` | ਕੋਈ ਖ਼ਾਸ ਮੈਮੋਰੀ ਐਂਟਰੀ ਪ੍ਰਾਪਤ ਕਰੋ |
| PUT | `/api/memory/[id]` | ਮੈਮੋਰੀ ਐਂਟਰੀ ਅੱਪਡੇਟ ਕਰੋ |
| DELETE | `/api/memory/[id]` | ਮੈਮੋਰੀ ਐਂਟਰੀ ਮਿਟਾਓ |
| GET | `/api/memory?q=` | ਮੈਮੋਰੀ ਖੋਜੋ (FTS5 + ਵੈਕਟਰ) — ਅੰਕੜੇ ਉਸੇ ਜਵਾਬ ਵਿੱਚ ਸ਼ਾਮਲ ਹੁੰਦੇ ਹਨ |
**ਪ੍ਰਮਾਣੀਕਰਨ:** ਪ੍ਰਬੰਧਨ ਸੈਸ਼ਨ ਜਾਂ ਪ੍ਰਬੰਧਨ-ਸਕੋਪ ਵਾਲੀ API ਕੁੰਜੀ ਲੋੜੀਂਦੀ ਹੈ।
---
## ਵੈੱਬਹੁੱਕ
ਇਵੈਂਟਾਂ ਲਈ ਵੈੱਬਹੁੱਕ ਸਬਸਕ੍ਰਿਪਸ਼ਨਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ------ | ------------------------------- | --------------------------------------------------------------------- |
| GET | `/api/webhooks` | ਸਾਰੀਆਂ ਵੈੱਬਹੁੱਕ ਸਬਸਕ੍ਰਿਪਸ਼ਨਾਂ ਦੀ ਸੂਚੀ |
| POST | `/api/webhooks` | ਵੈੱਬਹੁੱਕ ਸਬਸਕ੍ਰਿਪਸ਼ਨ ਬਣਾਓ — ਬਾਡੀ: `{url, events[], secret?, active?}` |
| GET | `/api/webhooks/[id]` | ਕੋਈ ਖ਼ਾਸ ਵੈੱਬਹੁੱਕ ਸਬਸਕ੍ਰਿਪਸ਼ਨ ਪ੍ਰਾਪਤ ਕਰੋ |
| PUT | `/api/webhooks/[id]` | ਵੈੱਬਹੁੱਕ ਸਬਸਕ੍ਰਿਪਸ਼ਨ ਅੱਪਡੇਟ ਕਰੋ |
| DELETE | `/api/webhooks/[id]` | ਵੈੱਬਹੁੱਕ ਸਬਸਕ੍ਰਿਪਸ਼ਨ ਮਿਟਾਓ |
| GET | `/api/webhooks/[id]/deliveries` | ਵੈੱਬਹੁੱਕ ਲਈ ਡਿਲੀਵਰੀ ਇਤਿਹਾਸ ਦੀ ਸੂਚੀ (ਸਫਲਤਾ/ਅਸਫਲਤਾ ਲੌਗ) |
| POST | `/api/webhooks/[id]/test` | ਵੈੱਬਹੁੱਕ ਨੂੰ ਟੈਸਟ ਇਵੈਂਟ ਭੇਜੋ |
**ਪ੍ਰਮਾਣੀਕਰਨ:** ਪ੍ਰਬੰਧਨ ਸੈਸ਼ਨ ਲੋੜੀਂਦਾ ਹੈ।
ਇਵੈਂਟ ਕਿਸਮਾਂ ਦੀ ਪੂਰੀ ਜਾਣਕਾਰੀ ਲਈ [ਵੈੱਬਹੁੱਕ ਫਰੇਮਵਰਕ](../frameworks/WEBHOOKS.md) ਵੇਖੋ।
---
## ਸਕਿਲਜ਼ ਫ੍ਰੇਮਵਰਕ
ਸਕਿਲਜ਼ (ਏਜੈਂਟਿਕ ਐਕਸਟੈਂਸ਼ਨ ਫ੍ਰੇਮਵਰਕ) ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ------ | ------------------------ | ------------------------------------------------------------------------------------------- |
| GET | `/api/skills` | ਸਾਰੀਆਂ ਇੰਸਟਾਲ ਕੀਤੀਆਂ ਸਕਿਲਜ਼ (ਬਿਲਟ-ਇਨ + ਕਸਟਮ) ਦੀ ਸੂਚੀ ਦਿਖਾਓ |
| POST | `/api/skills/install` | ਲੋਕਲ ਪਾਥ ਜਾਂ URL ਤੋਂ ਸਕਿਲ ਇੰਸਟਾਲ ਕਰੋ |
| DELETE | `/api/skills/[id]` | ਸਕਿਲ ਅਣਇੰਸਟਾਲ ਕਰੋ |
| PUT | `/api/skills/[id]` | ਸਕਿਲ ਨੂੰ ਸਮਰੱਥ ਜਾਂ ਅਸਮਰੱਥ ਕਰੋ — ਬਾਡੀ: `{enabled?: boolean, mode?: "on" \| "off" \| "auto"}` |
| POST | `/api/skills/executions` | ਸਕਿਲ ਚਲਾਓ — ਬਾਡੀ: `{skillName, apiKeyId, input?, sessionId?}` |
| GET | `/api/skills/executions` | ਸਾਰੀਆਂ ਸਕਿਲਜ਼ ਲਈ ਐਗਜ਼ੀਕਿਊਸ਼ਨ ਇਤਿਹਾਸ ਦੀ ਸੂਚੀ ਦਿਖਾਓ (`?apiKeyId=` ਦੁਆਰਾ ਫਿਲਟਰ ਕਰੋ) |
**ਪ੍ਰਮਾਣੀਕਰਨ:** ਪ੍ਰਬੰਧਨ ਸੈਸ਼ਨ ਜਾਂ ਪ੍ਰਬੰਧਨ-ਸਕੋਪ ਵਾਲੀ API ਕੁੰਜੀ ਲੋੜੀਂਦੀ ਹੈ।
ਪੂਰੇ ਵੇਰਵਿਆਂ ਲਈ [ਸਕਿਲਜ਼ ਫ੍ਰੇਮਵਰਕ](../frameworks/SKILLS.md) ਵੇਖੋ।
---
## ਪਲੱਗਇਨ
OmniRoute ਪਲੱਗਇਨਾਂ (ਤੀਜੀ-ਧਿਰ ਐਕਸਟੈਂਸ਼ਨਾਂ) ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ------ | ---------------------------------- | ---------------------------------- |
| GET | `/api/plugins` | ਇੰਸਟਾਲ ਕੀਤੇ ਪਲੱਗਇਨਾਂ ਦੀ ਸੂਚੀ ਦਿਖਾਓ |
| POST | `/api/plugins/marketplace/install` | ਮਾਰਕੀਟਪਲੇਸ ਤੋਂ ਪਲੱਗਇਨ ਇੰਸਟਾਲ ਕਰੋ |
| DELETE | `/api/plugins/[name]` | ਪਲੱਗਇਨ ਅਣਇੰਸਟਾਲ ਕਰੋ |
| POST | `/api/plugins/[name]/activate` | ਪਲੱਗਇਨ ਸਰਗਰਮ ਕਰੋ |
| POST | `/api/plugins/[name]/deactivate` | ਪਲੱਗਇਨ ਅਕਿਰਿਆਸ਼ੀਲ ਕਰੋ |
| GET | `/api/plugins/[name]/config` | ਪਲੱਗਇਨ ਸੰਰਚਨਾ ਪ੍ਰਾਪਤ ਕਰੋ |
| PUT | `/api/plugins/[name]/config` | ਪਲੱਗਇਨ ਸੰਰਚਨਾ ਅੱਪਡੇਟ ਕਰੋ |
**ਪ੍ਰਮਾਣੀਕਰਨ:** ਪ੍ਰਬੰਧਨ ਸੈਸ਼ਨ ਲੋੜੀਂਦਾ ਹੈ।
ਪੂਰੇ ਵੇਰਵਿਆਂ ਲਈ [ਪਲੱਗਇਨ ਫ੍ਰੇਮਵਰਕ](../frameworks/PLUGIN_SDK.md) ਵੇਖੋ।
---
## ਸ਼ੈਡੋ ਰਾਊਟਿੰਗ
ਪ੍ਰਦਾਤਾਵਾਂ ਦੀ ਸ਼ੈਡੋ / A-B ਤੁਲਨਾ **ਇੱਕ ਸੁਤੰਤਰ REST ਸਰਫੇਸ ਨਹੀਂ ਹੈ** — ਇਸਨੂੰ ਕੌਂਬੋ ਰਾਊਟਿੰਗ ਰਾਹੀਂ ਸੰਰਚਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ([ਆਟੋ-ਕੌਂਬੋ](../routing/AUTO-COMBO.md) ਵੇਖੋ)। ਹਰ ਕੌਂਬੋ ਲਈ ਤੁਲਨਾ ਮੈਟ੍ਰਿਕਸ `GET /api/combos/metrics` ਦੁਆਰਾ ਪ੍ਰਦਾਨ ਕੀਤੇ ਜਾਂਦੇ ਹਨ।
---
## ਗਾਰਡਰੇਲਜ਼
ਰਨਟਾਈਮ ਗਾਰਡਰੇਲਜ਼ (PII ਪਛਾਣ, ਪ੍ਰੌਮਪਟ ਇੰਜੈਕਸ਼ਨ ਪਛਾਣ, ਵਿਜ਼ਨ ਬ੍ਰਿਜਿੰਗ) ਦੀ ਜਾਂਚ ਕਰੋ। ਗਾਰਡਰੇਲਜ਼ ਹਰ ਬੇਨਤੀ 'ਤੇ ਚੱਲਦੇ ਹਨ; ਹਰ ਕਾਲ ਲਈ ਔਪਟ-ਆਉਟ `x-omniroute-disabled-guardrails` ਬੇਨਤੀ ਹੈਡਰ ਰਾਹੀਂ ਹੁੰਦਾ ਹੈ — ਸਮਰੱਥ/ਅਸਮਰੱਥ ਕਰਨ ਲਈ ਕੋਈ ਸਥਾਈ ਸਰਫੇਸ ਨਹੀਂ ਹੈ।
| ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ |
| ---- | ---------------------- | ------------------------------------------------------------------------------------------ |
| GET | `/api/guardrails` | ਰਜਿਸਟਰ ਕੀਤੇ ਗਾਰਡਰੇਲਜ਼ ਅਤੇ ਉਨ੍ਹਾਂ ਦੀ ਸਥਿਤੀ (ਨਾਮ / ਸਮਰੱਥ / ਤਰਜੀਹ) ਦੀ ਸੂਚੀ ਦਿਖਾਓ |
| POST | `/api/guardrails/test` | ਨਮੂਨਾ ਇਨਪੁੱਟ ਉੱਤੇ ਪ੍ਰੀ-ਕਾਲ ਪਾਈਪਲਾਈਨ ਦੀ ਡ੍ਰਾਈ-ਰਨ ਕਰੋ — ਬਾਡੀ: `{input, disabledGuardrails?}` |
**ਪ੍ਰਮਾਣੀਕਰਨ:** ਪ੍ਰਬੰਧਨ ਸੈਸ਼ਨ ਲੋੜੀਂਦਾ ਹੈ।
ਪੂਰੇ ਵੇਰਵਿਆਂ ਲਈ [ਸੁਰੱਖਿਆ > ਗਾਰਡਰੇਲਜ਼](../security/GUARDRAILS.md) ਵੇਖੋ।
---
---
## ਪ੍ਰਮਾਣਿਕਤਾ
ਚਾਰ ਕ੍ਰਿਡੈਂਸ਼ਲ ਪਰਿਵਾਰਾਂ (ਡੈਸ਼ਬੋਰਡ ਸੈਸ਼ਨ, ਸਥਾਨਕ CLI ਟੋਕਨ, `oma_live_…` ਐਕਸੈੱਸ ਟੋਕਨ, ਪ੍ਰਬੰਧਨ-ਸਕੋਪ ਵਾਲੀ API ਕੁੰਜੀ) ਅਤੇ ਇਹ ਇਨਫਰੈਂਸ ਕੁੰਜੀਆਂ ਤੋਂ ਕਿਵੇਂ ਵੱਖਰੇ ਹਨ, ਇਸ ਲਈ [ਪ੍ਰਬੰਧਨ ਪ੍ਰਮਾਣਿਕਤਾ](../guides/MANAGEMENT-AUTH.md) ਵੇਖੋ।
- ਡੈਸ਼ਬੋਰਡ ਰੂਟ (`/dashboard/*`) `auth_token` ਕੁਕੀ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਨ
- ਲੌਗਇਨ ਸੁਰੱਖਿਅਤ ਕੀਤੇ ਪਾਸਵਰਡ ਹੈਸ਼ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ; ਫਾਲਬੈਕ ਵਜੋਂ `INITIAL_PASSWORD` ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ
- `requireLogin` ਨੂੰ `/api/settings/require-login` ਰਾਹੀਂ ਟੌਗਲ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ
- `REQUIRE_API_KEY=true` ਹੋਣ 'ਤੇ `/v1/*` ਰੂਟ ਵਿਕਲਪਿਕ ਤੌਰ 'ਤੇ Bearer API ਕੁੰਜੀ ਦੀ ਮੰਗ ਕਰਦੇ ਹਨ
- ਇਸ ਹਵਾਲੇ ਵਿੱਚ "ਪ੍ਰਬੰਧਨ ਟੋਕਨ" / "ਪ੍ਰਬੰਧਨ-ਸਕੋਪ ਵਾਲੀ API ਕੁੰਜੀ" ਦਾ ਅਰਥ ਉਸ ਗਾਈਡ ਵਿੱਚ ਦਿੱਤੇ ਪਰਿਵਾਰਾਂ ਵਿੱਚੋਂ ਇੱਕ ਹੈ—ਇਹ ਕੋਈ ਅਪਰਿਭਾਸ਼ਿਤ ਵਾਧੂ ਗੁਪਤ ਕਿਸਮ ਨਹੀਂ ਹੈ
> **ਬ੍ਰੇਕਿੰਗ ਤਬਦੀਲੀ (v3.8.0)** — `/api/v1/agents/tasks/*` ਅਤੇ ਕੂਲਡਾਊਨ ਪ੍ਰਬੰਧਨ ਐਂਡਪੌਇੰਟਾਂ ਲਈ ਹੁਣ **ਪ੍ਰਬੰਧਨ ਪ੍ਰਮਾਣਿਕਤਾ** (ਡੈਸ਼ਬੋਰਡ `auth_token` ਕੁਕੀ ਜਾਂ ਪ੍ਰਬੰਧਨ-ਸਕੋਪ ਵਾਲੀ API ਕੁੰਜੀ) ਲੋੜੀਂਦੀ ਹੈ। ਜਿਹੜੇ ਕਲਾਇੰਟ ਪਹਿਲਾਂ ਬਿਨਾਂ ਪ੍ਰਮਾਣਿਕਤਾ ਦੇ ਇਨ੍ਹਾਂ ਰੂਟਾਂ ਨੂੰ ਕਾਲ ਕਰਦੇ ਸਨ, ਉਨ੍ਹਾਂ ਨੂੰ `401 Unauthorized` ਜਵਾਬ ਮਿਲੇਗਾ। ਕਮਿਟ `588a0333` (`fix(auth): require management auth for agent and cooldown APIs`) ਵੇਖੋ।