Files
OmniRoute/docs/i18n/el/docs/reference/API_REFERENCE.md
Diego Rodrigues de Sa e Souza 9debec71ec feat(i18n): 9 new locales — all 24 official EU languages (51 locales) (#13044)
Batch 1 of the locale expansion: Greek, Croatian, Serbian, Lithuanian, Estonian, Latvian, Slovenian, Maltese and Irish across the dashboard catalog, docs mirrors, CLI catalog, README, locale index and the site. 42 → 51 locales.

Also fixes the ICU literal escape the translation backend dropped around angle placeholders, four translations that invented or renamed a placeholder, the language bars that linked to mirrors that do not exist, and the migration count drift (171 → 172).

⚠️ base-red inherited: #12732 — the four unit shards and Fast Quality Gates fail identically on unrelated PRs cut from the same base.
2026-09-10 10:13:09 -03:00

156 KiB
Raw Blame History

API_REFERENCE (Ελληνικά)

🌐 Languages: 🇺🇸 English · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇮🇩 id · 🇮🇹 it · 🇯🇵 ja · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇳🇱 nl · 🇳🇴 no · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇻🇳 vi · 🇨🇳 zh-CN · 🇹🇼 zh-TW



title: "API Reference" version: 3.8.51 lastUpdated: 2026-08-31

Αναφορά API

🌐 Languages: 🇺🇸 English · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇮🇩 id · 🇮🇹 it · 🇯🇵 ja · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇳🇱 nl · 🇳🇴 no · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇻🇳 vi · 🇨🇳 zh-CN · 🇹🇼 zh-TW

Βασική αναφορά για το OmniRoute API. Καλύπτει την δημόσια επιφάνεια /v1 και τα πιο χρησιμοποιούμενα endpoints διαχείρισης· το αναγνώσιμο από μηχανές docs/openapi.yaml και το δέντρο διαδρομών κάτω από src/app/api/ αποτελούν τις εξαντλητικές πηγές.


Πίνακας Περιεχομένων


Ολοκλήρωση Συνομιλιών

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· αποφεύγει το ανά-κλήση κόστος tokens)
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
X-OmniRoute-Request-Id Απόκριση Αναγνωριστικό συσχέτισης αιτήματος (όταν είναι γνωστό)
X-OmniRoute-Version Απόκριση Έκδοση κατασκευής OmniRoute (πάντα παρούσα)
X-OmniRoute-Cost-Saved Απόκριση Δολάρια USD που εξοικονομήθηκαν από την κρυφή μνήμη σε HIT (μόνο για επιτυχίες κρυφής μνήμης)
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) δεν πραγματοποιείται upstream κλήση, οπότε το X-OmniRoute-Response-Cost είναι 0.0000000000 (το επιπλέον κόστος εξυπηρέτησης της επιτυχίας). Το αρχικό/υποθετικό κόστος αναφέρεται ξεχωριστά στο X-OmniRoute-Cost-Saved. Οι καταναλωτές χρέωσης θα πρέπει να αθροίζουν το X-OmniRoute-Response-Cost (οι επιτυχίες δεν έχουν κόστος)· η ανάλυση κρυφής μνήμης μπορεί να συγκεντρώνει το X-OmniRoute-Cost-Saved.

Αποκλειστικές Μισθώσεις Διαχειριζόμενης Συνεδρίας

Η αποκλειστική μίσθωση διαχειριζόμενης συνεδρίας είναι ένα προαιρετικό, ουδέτερο ως προς τον πελάτη συμβόλαιο δρομολόγησης: ένας ενεργός κάτοχος διατηρεί μία επιλέξιμη σύνδεση OmniRoute. Δεν μισθώνει μοντέλο, δεν απαιτεί OAuth, δεν αναγνωρίζει συγκεκριμένο πελάτη και δεν απαιτεί συγκεκριμένο πάροχο.

Το κλειδί API που χρησιμοποιείται για την πιστοποίηση πρέπει να έχει εμβέλεια lease:exclusive και μια ρητή μη κενή λίστα allowedConnections. Το όριο μετάλλαξης της βάσης δεδομένων επιβάλλει και τα δύο πεδία μαζί κατά τη δημιουργία κλειδιού και τις μερικές ενημερώσεις.

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"}

Οι επιτυχείς αποκρίσεις απόκτησης, ανανέωσης και αποδέσμευσης εκθέτουν χρονικές σφραγίδες, state και την ακριβή θετική generation, αλλά ποτέ την επιλεγμένη σύνδεση ή τα διαπιστευτήρια. Η ανανέωση και η αποδέσμευση παρέχουν την generation στο σώμα JSON:

{ "action": "renew", "generation": 1 }
{ "action": "release", "generation": 1, "reason": "OWNER_EXIT" }

Ένας ενεργός κάτοχος μίσθωσης μπορεί να ζητήσει ρητά μεταδεδομένα εμφάνισης που διασφαλίζουν την ιδιωτικότητα για την τρέχουσα δέσμευσή του:

{ "action": "status", "generation": 1 }
{
  "state": "ACTIVE",
  "generation": 1,
  "acquiredAt": "2026-08-28T12:00:00.000Z",
  "renewedAt": "2026-08-28T12:00:30.000Z",
  "expiresAt": "2026-08-28T12:02:30.000Z",
  "connection": {
    "displayName": "Primary Codex",
    "provider": "codex"
  }
}

Αυτή η προαιρετική ενέργεια κατάστασης φράσσεται από τον αδιαφανή κάτοχο, το πιστοποιημένο διαχειριζόμενο κλειδί API και την ακριβή ενεργή generation σε μία συναλλαγή βάσης δεδομένων. Το displayName είναι μόνο το διαμορφωμένο όνομα σύνδεσης μετά από περικοπή κενών· είναι null όταν δεν υπάρχει ασφαλές διαμορφωμένο όνομα. Το OmniRoute δεν υποκαθιστά ποτέ μια διεύθυνση email ή μια δημιουργημένη ταυτότητα λογαριασμού. Η τιμή του παρόχου είναι μια μη ευαίσθητη ετικέτα εμφάνισης και ποτέ ένα δημιουργημένο αναγνωριστικό συμβατού παρόχου. Διαπιστευτήρια, tokens, cookies, ακατέργαστα αναγνωριστικά σύνδεσης ή κλειδιού API, κατακερματισμοί κατόχου, μυστικά φράγματος και εσωτερικά δεδομένα δρομολόγησης εξαιρούνται.

Οι αναζητήσεις με λάθος κλειδί, λάθος κάτοχο, παρωχημένη generation, ανύπαρκτη, ληγμένη, αποδεσμευμένη ή ακυρωμένη μίσθωση επιστρέφουν όλες το ίδιο σφάλμα 409 LEASE_FENCE_STALE χωρίς μεταδεδομένα σύνδεσης. Ένας πελάτης που έλαβε την απόκριση αναμονής χωρητικότητας δεν έχει ενεργή δέσμευση για επιθεώρηση. Όταν η δρομολόγηση μεταβαίνει μια ενεργή μίσθωση, η ίδια generation παραμένει έγκυρη και η κατάσταση επιστρέφει ατομικά τη νέα δέσμευση, ποτέ την παλιά. Οι υπάρχοντες πελάτες παραμένουν αμετάβλητοι, καθώς οι αποκρίσεις απόκτησης, ανανέωσης, αποδέσμευσης και αναμονής διατηρούν τα προηγούμενα σχήματά τους.

Αυτό το συμβόλαιο διακομιστή δεν αλλάζει το stock OpenAI Codex /status. Το stock Codex αναφέρει αυτήν τη στιγμή τον πάροχο μοντέλου και την ενσωματωμένη κατάσταση πιστοποίησης/λογαριασμού, αλλά δεν αποδίδει αυθαίρετα μεταδεδομένα λογαριασμού προσαρμοσμένου παρόχου· μια μεταγενέστερη ενσωμάτωση πελάτη πρέπει να καλέσει αυτήν την ενέργεια και να αποφασίσει πώς θα εμφανίσει το connection.displayName.

Κάθε διαχειριζόμενο αίτημα συμπερασμού παρέχει έπειτα και τις δύο κεφαλίδες ελέγχου:

X-OmniRoute-Lease-Owner: vlo_<43-base64url-characters>
X-OmniRoute-Lease-Generation: 1

Ο ακριβής κάτοχος, η generation, η ενεργή σύνδεση και το πιστοποιημένο κλειδί API φράσσονται αμέσως πριν από κάθε υποστηριζόμενη απόπειρα upstream. Η αναπαραγωγή κατόχου και generation με άλλο κλειδί αποτυγχάνει ακόμη και όταν αυτό το κλειδί επιτρέπει την ίδια σύνδεση. Οι ακατέργαστοι κάτοχοι δεν διατηρούνται, δεν καταγράφονται, δεν αποθηκεύονται στο στιγμιότυπο αιτήματος και δεν προωθούνται upstream.

Η προσωρινή διαμάχη επιστρέφει HTTP 429 με Retry-After και:

{
  "state": "WAITING_FOR_CAPACITY",
  "error": { "type": "lease_error", "code": "LEASE_CAPACITY_UNAVAILABLE" },
  "reason": "NO_FREE_ELIGIBLE_CONNECTION",
  "retryAfter": 30
}

Αυτή η απόκριση σημαίνει μόνο ότι το κανονικό επιλέξιμο σύνολο ήταν μη κενό και κάθε ελεύθερος υποψήφιος κατεχόταν από μια ξένη ενεργή μίσθωση. Μη υποστηριζόμενα μοντέλα/πάροχοι, αναντιστοιχία πολιτικής, περίοδος ψύξης, ποσόστωση, υγεία και άλλες συνήθεις αποτυχίες επιλεξιμότητας διατηρούν τις υπάρχουσες αποκρίσεις OmniRoute.

x-omniroute-compression

Παράκαμψη ανά αίτημα του πλάνου συμπίεσης. Υψηλότερη προτεραιότητα — υπερισχύει της παράκαμψης combo δρομολόγησης, του ενεργού προφίλ, της αυτόματης ενεργοποίησης και της Προεπιλογής πίνακα. Τιμές:

Τιμή Αποτέλεσμα
off Καμία συμπίεση για αυτό το αίτημα.
default Το προεπιλεγμένο προφίλ που προκύπτει από τον πίνακα (αγνοεί το ενεργό προφίλ).
engine:<id> Μεμονωμένη μηχανή όταν είναι ενεργοποιημένη, π.χ. engine:rtk.
<combo> Ένα ονομαστό combo, αντιστοιχισμένο κατ' όνομα (χωρίς διάκριση πεζών/κεφαλαίων) πρώτα, έπειτα κατά id.

Σημειώσεις:

  • Άγνωστες τιμές αγνοούνται (το αίτημα δεν απορρίπτεται ποτέ)· η επίλυση διαπερνά στην κανονική προτεραιότητα χειριστή.
  • Αν πολλά combo μοιράζονται ένα όνομα, περάστε το id του combo για ντετερμινιστική αντιστοίχιση.
  • Ένα combo με όνομα off ή default δεν μπορεί να επιλεγεί κατ' όνομα (αυτές οι λέξεις-κλειδιά ερμηνεύονται πρώτα)· αναφερθείτε σε τέτοιο combo μέσω του id του.
  • Ο κεντρικός διακόπτης συμπίεσης είναι αυστηρή πύλη: όταν η συμπίεση είναι απενεργοποιημένη καθολικά, αυτή η κεφαλίδα δεν μπορεί να την ενεργοποιήσει.

Το εφαρμοσμένο πλάνο αντηχείται πίσω στην κεφαλίδα απόκρισης:

X-OmniRoute-Compression: <mode>; source=<source>

όπου <source> είναι ένα από τα εξής: request-header, routing-override, active-profile, auto-trigger, default ή off.


Ενσωματώσεις (Embeddings)

POST /v1/embeddings
Authorization: Bearer your-api-key
Content-Type: application/json

{
  "model": "nebius/Qwen/Qwen3-Embedding-8B",
  "input": "The food was delicious"
}

Διαθέσιμοι πάροχοι: 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). Για τις λειτουργίες embed/rerank/classify/segment της Jina χρησιμοποιούνται κατά προτεραιότητα τα διαπιστευτήρια jina-ai του πίνακα ελέγχου· το JINA_AI_API_KEY αποτελεί εναλλακτική μόνο όταν δεν υπάρχει κλειδί πίνακα ελέγχου. Η κάρτα jina-reader αφορά αποκλειστικά το Reader / r.jina.ai (POST /v1/web/fetch) και δεν εξυπηρετεί ποτέ embeddings ή rerank.

Τα μοντέλα του μητρώου που διαφημίζουν υποστήριξη πολλαπλών τρόπων (multimodal) δέχονται επίσης έως 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) δέχεται επίσης την εγγενή τεκμηρίωση EmbeddingsV5Request της Jina και τα προωθεί αυτούσια στο https://api.jina.ai/v1/embeddings:

{
  "model": "jina-ai/jina-embeddings-v5-omni-small",
  "task": "retrieval.query",
  "normalized": true,
  "input": [
    { "text": "a red bicycle" },
    { "image": "https://example.com/bike.png" },
    {
      "content": [{ "text": "caption" }, { "image": "data:image/png;base64,..." }]
    }
  ]
}

Οι εγγενείς τιμές { image | audio | video | pdf } μπορεί να είναι δημόσιο URL HTTPS, URI data: ή ακατέργαστο base64. Το OmniRoute δεν μετατρέπει αυτά τα αντικείμενα σε συμβολοσειρές ούτε ανακτά εγγενή URL εικόνων — η Jina ανακτά τα δημόσια πολυμέσα μόνη της. Επιπλέον πεδία Jina (task, normalized, truncate, embedding_type) προωθούνται. Τα SKU Jina αποκλειστικά κειμένου εξακολουθούν να απορρίπτουν έγγραφα που δεν είναι κείμενο.

Ασφάλεια και όρια μεταφοράς:

  • Τα URL απομακρυσμένων πολυμέσων πρέπει να είναι δημόσια HTTPS. Τα κανονικά στοιχεία {type,source:url} ανακτώνται από την πλευρά του διακομιστή (επαναεπικύρωση ανακατευθύνσεων, χρονικό όριο, όρια μεγέθους, δημόσιο DNS, σύνδεση pinning) και ενσωματώνονται πριν από την κλήση παρόχου. Τα εγγενή στοιχεία Jina {image:"https://..."} προωθούνται ως έχουν μετά τον ίδιο έλεγχο δημοσίου HTTPS· η Jina ανακτά το URL.
  • Τα ενσωματωμένα πολυμέσα base64 περιορίζονται σε 8 MiB αποκωδικοποιημένα ανά στοιχείο και 16 MiB αποκωδικοποιημένα συνολικά στο αίτημα.

Μετάφραση παρόχου (τα κανονικά στοιχεία δεν προωθούνται ποτέ αναλλοίωτα):

  • Μοντέλα Jina πολλαπλών τρόπων: κάθε στοιχείο ανώτατου επιπέδου γίνεται ένα αντικείμενο με κλειδί βάσει τρόπου (text / image / audio / video / pdf) χρησιμοποιώντας URI data για ενσωματωμένα πολυμέσα· ένα διάνυσμα ανά στοιχείο ανώτατου επιπέδου.
  • Οικογένεια Gemini Embedding 2: ένας πίνακας ανώτατου επιπέδου γίνεται ένα ενιαίο εγγενές αίτημα models/{model}:embedContent με content.parts (text ή inline_data).
  • Άγνωστα/δυναμικά μοντέλα χωρίς ρητά μεταδεδομένα τρόπου απορρίπτουν δομημένη εισαγωγή με HTTP 400.
{
  "model": "jina-ai/jina-embeddings-v5-omni-small",
  "input": [
    { "type": "text", "text": "A red bicycle" },
    {
      "type": "image",
      "source": { "type": "url", "url": "https://example.com/bicycle.png" }
    }
  ],
  "dimensions": 512,
  "encoding_format": "float"
}

Οι μη υποστηριζόμενοι συνδυασμοί μοντέλου/τρόπου επιστρέφουν HTTP 400 αντί να μετατρέπουν το στοιχείο. Τα πεδία επέκτασης που δεν αφορούν εισαγωγή σε κληροδοτημένα αιτήματα συμβολοσειράς/token συνεχίζουν να διαβιβάζονται αναλλοίωτα.

# Εμφάνιση όλων των μοντέλων embedding
GET /v1/embeddings

Δημιουργία Εικόνων

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 (τοπικά).

# Λίστα όλων των μοντέλων εικόνας
GET /v1/images/generations

OCR Εγγράφων

POST /v1/ocr
Authorization: Bearer your-api-key
Content-Type: application/json

{
  "model": "mistral/mistral-ocr-latest",
  "document": {
    "type": "document_url",
    "document_url": "https://example.com/invoice.pdf"
  }
}

Το model επιλέγει τον πάροχο OCR μέσω ενός προθέματος provider/model· ένα απλό αναγνωριστικό μοντέλου (π.χ. mistral-ocr-latest) επιλύεται στον καταχωρημένο πάροχό του, και αν το model παραλειφθεί, προεπιλέγεται το Mistral (mistral-ocr-latest). Καταχωρημένοι πάροχοι (open-sse/config/ocrRegistry.ts):

Αναγνωριστικό παρόχου Αναγνωριστικό μοντέλου Τιμή model Σημειώσεις
mistral mistral-ocr-latest mistral/mistral-ocr-latest (ή απλό mistral-ocr-latest) Σύγχρονο — η απόκριση επιστρέφεται απευθείας από την ενιαία κλήση upstream.
azure-document-intelligence prebuilt-read azure-document-intelligence/prebuilt-read Ασύγχρονο upstream (analyze + polling) — δείτε παρακάτω.
vertex-deepseek-ocr deepseek-ocr-maas vertex-deepseek-ocr/deepseek-ocr-maas Σύγχρονο, μέσω του endpoint συνεργάτη openapi/chat/completions του Vertex AI — δείτε παρακάτω για auth/URL.

Και οι τρεις πάροχοι αποκρίνονται με το ίδιο σώμα σε μορφή Mistral:

{
  "pages": [{ "index": 0, "markdown": "# Extracted text..." }],
  "model": "mistral-ocr-latest",
  "usage_info": { "pages_processed": 1 }
}

Ροή polling του Azure Document Intelligence

Το analyze API του Azure Document Intelligence είναι ασύγχρονο: το αρχικό αίτημα επιστρέφει μια κεφαλίδα Operation-Location αντί για σώμα απόκρισης, και το αποτέλεσμα πρέπει να ανακτηθεί μέσω polling. Ο χειριστής (open-sse/handlers/ocr.ts) εκτελεί polling σε αυτό το URL κάθε δευτερόλεπτο για έως 30 προσπάθειες, αποτυγχάνει αμέσως (σταματά το polling) σε μη-ok απόκριση polling ή κατάσταση "failed", και επιστρέφει 504 αν η λειτουργία εξακολουθεί να εκτελείται μετά την εξάντληση του προϋπολογισμού προσπαθειών. Η τελική απόκριση Azure κανονικοποιείται στο ίδιο σχήμα pages/markdown που χρησιμοποιεί το Mistral πριν επιστραφεί στον καλούντα, οπότε ο κώδικας του πελάτη δεν χρειάζεται να χειριστεί τον πάροχο ως ειδική περίπτωση.

Επίλυση auth και endpoint του Vertex AI DeepSeek OCR

Το vertex-deepseek-ocr επαναχρησιμοποιεί την ίδια αυθεντικοποίηση Vertex AI που υποστηρίζει ήδη το OmniRoute για κίνηση chat/εικόνας (open-sse/executors/vertex.ts): το κλειδί API της σύνδεσης είναι είτε διαπιστευτήριο JSON Λογαριασμού Υπηρεσίας (που ανταλλάσσεται για ένα βραχύβιο OAuth access token μέσω της ροής JWT-bearer) είτε ένα ήδη εκδοθέν OAuth access token που χρησιμοποιείται ως έχει. Η URL του upstream endpoint είναι το γενικό endpoint συνεργάτη openapi/chat/completions του Vertex, που δημιουργείται από το project και την περιοχή της σύνδεσης — ένα ρητό providerSpecificData.project/providerSpecificData.region υπερισχύει πάντα· διαφορετικά, το project προέρχεται από το project_id του JSON Λογαριασμού Υπηρεσίας και η περιοχή προεπιλέγεται σε us-central1. Και οι δύο επιλύσεις πραγματοποιούνται στο open-sse/handlers/ocr.ts (resolveVertexOcrAccessToken, resolveVertexOcrBaseUrl), και καταναλώνονται από το src/app/api/v1/ocr/route.ts πριν από την αποστολή στο handleOcr.


Λίστα Μοντέλων

GET /v1/models
Authorization: Bearer your-api-key

→ Επιστρέφει όλα τα μοντέλα chat, embedding και εικόνας + συνδυασμούς σε μορφή OpenAI

Προθήματα αναγνωριστικού μοντέλου (?prefix=)

Τα περισσότερα μοντέλα διαφημίζονται με ένα πρόθημα παρόχου. Το πρόθημα που λαμβάνετε ελέγχεται από τη σημαία δυνατότητας MODELS_CATALOG_PREFIX_MODE, και μπορεί να παρακαμφθεί ανά αίτημα με μια παράμετρο ερωτήματος — χρήσιμο για έναν πελάτη που θέλει μια καθαρή λίστα χωρίς να αλλάξει τη ρύθμιση ολόκληρου του διακομιστή για όλους:

GET /v1/models?prefix=alias        # ένα αναγνωριστικό ανά μοντέλο — το σύντομο πρόθημα alias
GET /v1/models?prefix=dual         # και οι δύο μορφές (προεπιλογή διακομιστή)
GET /v1/models?prefix=canonical    # μόνο το πλήρες πρόθημα provider-id
Λειτουργία Εκπέμπει Σημειώσεις
dual cc/claude-sonnet-4-6 και claude/claude-sonnet-4-6 Προεπιλογή. Και τα δύο αναγνωριστικά δρομολογούνται στο ίδιο μοντέλο· διατηρούνται ώστε οι ρυθμίσεις πελατών που έχουν κωδικοποιήσει οποιαδήποτε μορφή να συνεχίσουν να λειτουργούν. Περίπου διπλασιάζει τον κατάλογο.
alias cc/claude-sonnet-4-6 Μία εγγραφή ανά μοντέλο. Οι πάροχοι χωρίς διακριτό alias εξακολουθούν να εκπέμπουν την εγγραφή τους, οπότε δεν χάνεται τίποτα.
canonical claude/claude-sonnet-4-6 Μία εγγραφή ανά μοντέλο υπό το πλήρες πρόθημα provider-id. Οι πάροχοι χωρίς διακριτό alias (π.χ. antigravity/…, agy/…) εκπέμπουν και εδώ το μοναδικό τους αναγνωριστικό, οπότε δεν χάνεται τίποτα.

Ένας καθρέφτης σε λειτουργία dual μπορεί επίσης να αναγνωριστεί χωρίς την παράμετρο ερωτήματος: φέρει ένα πεδίο parent που δείχνει στο κύριο αναγνωριστικό.

Οι πελάτες που εμφανίζουν επιλογέα μοντέλου θα πρέπει να ζητούν ?prefix=alias — αυτό κάνει και η επέκταση OmniCopilot VS Code.

Παραλλαγές μοντέλων χωρίς thinking

Για μοντέλα Claude με δυνατότητα thinking, το /v1/models διαφημίζει επίσης μια παραλλαγή χωρίς thinking της οποίας το αναγνωριστικό φέρει πρόθημα claude-3-omniroute-no-thinking/:

claude-3-omniroute-no-thinking/<provider>/<model>

Η επιλογή αυτού του αναγνωριστικού (π.χ. σε ρύθμιση Claude Code που επισυνάπτει πάντα ένα μπλοκ thinking) επιστρέφει στο πραγματικό <provider>/<model> με κατεσταλμένο το συλλογισμό — thinking:{type:"disabled"} στο μονοπάτι /v1/messages, ή με τα πεδία reasoning/reasoning_effort αφαιρεμένα στο μονοπάτι /v1/chat/completions. Η παραλλαγή εμφανίζεται μόνο για μοντέλα της οικογένειας Claude που υποστηρίζουν thinking και τιμούν το disabled (έτσι π.χ. τα μοντέλα που λειτουργούν μόνο σε προσαρμοστική λειτουργία και απορρίπτουν το disabled εξαιρούνται). Οι διαχειριστές μπορούν να επιβάλουν την ενεργοποίηση ή απενεργοποίηση της παραλλαγής ανά μοντέλο μέσω του ModelSpec.noThinkingAlias.


Manifest Πρόσθετου Παρόχου

GET /api/v1/provider-plugin-manifest

Επιστρέφει το JSON-safe manifest πρόσθετου παρόχου που χρησιμοποιείται από το Bifrost, το CLIProxyAPI και μελλοντικούς δρομολογητές sidecar. Η απόκριση δημιουργείται από το μητρώο παρόχων TypeScript και σκόπιμα εξαιρεί τα μυστικά OAuth client, την επίλυση περιβάλλοντος χρόνου εκτέλεσης, τις συναρτήσεις εκτέλεσης, τις κεφαλίδες αιτημάτων και τα δεδομένα λογαριασμού.

Χρησιμοποιήστε αυτό το endpoint όταν ένα sidecar εκτελείται εκτός διεργασίας και δεν μπορεί να εισάγει το open-sse/config/providerPluginManifestRegistry.ts απευθείας.


Endpoints Συμβατότητας

Μέθοδος Διαδρομή Μορφή
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 (edit/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 Rerank τύπου Cohere/Voyage
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 Tokenized ψευδώνυμο OpenAI
POST /api/v1/vscode/{token}/responses Tokenized ψευδώνυμο OpenAI Responses
POST /api/v1/vscode/{token}/api/chat Tokenized ψευδώνυμο Ollama
GET /api/v1/vscode/{token}/api/tags Tokenized ψευδώνυμο ετικετών Ollama

Όλες οι διαδρομές POST ακολουθούν το ίδιο σχήμα: Bearer your-api-key + σώμα JSON επικυρωμένο από Zod (v1RerankSchema, v1ModerationSchema, v1AudioSpeechSchema, κ.λπ., βλ. src/shared/validation/schemas.ts). Επιστρέφεται 4xx σε αποτυχία σχήματος.

Για clients που δεν μπορούν να επισυνάψουν Authorization: Bearer ..., το OmniRoute δέχεται επίσης κλειδιά API στο URL είτε μέσω συμβατότητας query-string (?token=..., ?apiKey=..., ?api_key=..., ?key=...) είτε μέσω των αφιερωμένων endpoints /api/v1/vscode/{token}/... που τεκμηριώνονται παρακάτω.

# Rerank
POST /v1/rerank      { "model": "jina-ai/jina-reranker-v3.5", "query": "...", "documents": ["..."] }

# Jina classify (διαπιστευτήρια Foundation API)
POST /v1/classify    { "model": "jina-embeddings-v5-text-small", "input": ["..."], "labels": ["a", "b"] }

# Jina segmenter
POST /v1/segment     { "content": "...", "return_chunks": true }

# Jina search (s.jina.ai; ψευδώνυμα παρόχου: jina-search, jina-ai, jina)
POST /v1/search      { "query": "...", "provider": "jina-search" }

# Moderations
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

# Δημιουργία βίντεο / μουσικής (αναγνωριστικό μοντέλου με πρόθεμα παρόχου)
POST /v1/videos/generations { "model": "runway/gen-3", "prompt": "..." }
POST /v1/music/generations  { "model": "suno/v3.5",   "prompt": "..." }

Αφιερωμένες Διαδρομές Παρόχου

POST /v1/providers/{provider}/chat/completions
POST /v1/providers/{provider}/embeddings
POST /v1/providers/{provider}/images/generations

Το πρόθεμα παρόχου προστίθεται αυτόματα αν λείπει. Μη αντιστοιχισμένα μοντέλα επιστρέφουν 400.


Files API

Endpoint αρχείων συμβατό με OpenAI για μαζική εισαγωγή/εξαγωγή δεδομένων και μεταφορτώσεις αρχείων ανά σκοπό.

Μέθοδος Διαδρομή Περιγραφή
POST /v1/files Μεταφόρτωση αρχείου (multipart: 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 Ροή επιστροφής του ακατέργαστου περιεχομένου αρχείου

Πιστοποίηση: Bearer API key — τα αρχεία έχουν εμβέλεια ανά κλειδί API μέσω getApiKeyRequestScope.


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 key. Οι παρτίδες έχουν εμβέλεια ανά κλειδί API.


Search API

Αφαιρετικό επίπεδο παρόχου αναζήτησης ιστού (Tavily, Brave, Exa, Serper, κ.λπ.).

Μέθοδος Διαδρομή Περιγραφή
GET /v1/search Λίστα διαμορφωμένων παρόχων αναζήτησης και δυνατοτήτων τους
POST /v1/search Εκτέλεση ερωτήματος αναζήτησης — το σώμα επικυρώνεται από το v1SearchSchema, υποστηρίζει προσωρινή αποθήκευση/συνένωση
GET /v1/search/analytics Στατιστικά επισκέψεων/καθυστέρησης/κρυφής μνήμης ανά πάροχο

Πιστοποίηση: Bearer API key (extractApiKey + isValidApiKey). Η πολιτική αναζήτησης επιβάλλεται μέσω enforceApiKeyPolicy.


API Ανάκτησης Ιστού

Εξαγωγή περιεχομένου από URL μέσω ενός ρυθμισμένου παρόχου ανάκτησης ιστού (Firecrawl, Jina Reader, Tavily Extract, TinyFish Fetch, Nimble Extract).

Μέθοδος Διαδρομή Περιγραφή
POST /v1/web/fetch Ανάκτηση/scrape ενός URL — το σώμα επικυρώνεται από το v1WebFetchSchema

Έλεγχος ταυτότητας: Bearer API key (extractApiKey + isValidApiKey). Η πολιτική επιβάλλεται μέσω enforceApiKeyPolicy.

Εναλλακτική δρομολόγηση με επίγνωση ορίου χρήσης (#8297): όταν δεν δίνεται ρητός provider, η ομάδα (firecrawljina-readertavily-searchtinyfishnimble-search) διατρέχεται με σταθερή σειρά προτεραιότητας (πλήρωση-πρώτα) — ένας πάροχος με περιορισμό ρυθμού αλλά ρυθμισμένος παρακάμπτεται αντί να διακόπτεται το αίτημα, και μια αποτυχία upstream που επιδέχεται επανάληψη/υπέρβαση ορίου (HTTP 429 πάντα· 402/403 για δωρεάν επίπεδα τύπου ορίου Firecrawl/Tavily/TinyFish — όχι για το Jina Reader, και ποτέ για ένα απλό κακό αίτημα 400) μεταφέρεται στον επόμενο αδοκίμαστο πάροχο με διαπιστευτήρια κατά τη στιγμή του αιτήματος. Όταν εξαντληθούν όλοι οι πάροχοι στην ομάδα, το endpoint επιστρέφει έναν μόνο κωδικό 429 (με κεφαλίδα Retry-After) αντί του προηγούμενου γενικού 400. Όταν ζητείται ρητός provider, δεν υπάρχει αθόρυβη εναλλακτική δρομολόγηση — ένας ρητός πάροχος με περιορισμό ρυθμού ή αποτυχία εκθέτει το δικό του σφάλμα (429 αν υπάρχει περιορισμός ρυθμού, αλλιώς η κατάσταση upstream).


Ροή WebSocket

GET /v1/ws?handshake=1

Επικυρώνει μια χειραψία αναβάθμισης WebSocket και επιστρέφει τα παραδείγματα μηνυμάτων πρωτοκόλλου wire (request, cancel). Τα πραγματικά WS frames διαχειρίζεται ο ενσωματωμένος WS server εκτός του πίνακα διαδρομών Next.js.

Έλεγχος ταυτότητας: Bearer API key κατά τη χειραψία.

Responses API μέσω WebSocket (μόνο codex)

# Ίδιος host:port με το HTTP API (προεπιλογή 20128)· αναβάθμιση της σύνδεσης:
wscat -c "ws://localhost:20128/v1/responses?api_key=<OMNIROUTE_API_KEY>"
# (ή: -H "Authorization: Bearer <OMNIROUTE_API_KEY>")

# Το πρώτο frame ΠΡΕΠΕΙ να είναι response.create:
{ "type": "response.create", "model": "gpt-5.5", "input": [ { "role": "user", "content": "hi" } ] }

Ένας διακομιστής μεσολάβησης Responses-API-over-WebSocket είναι συνδεδεμένος αποκλειστικά στο codex (backend ChatGPT). Ακούει στην ίδια θύρα με το API/dashboard στις διαδρομές /v1/responses, /responses και /api/v1/responses. Στο πρώτο frame response.create εκτελεί έλεγχο ταυτότητας + προετοιμασία μέσω της εσωτερικής γέφυρας codex-responses-ws, επιλέγει μια σύνδεση codex OAuth και δρομολογεί σε wss://chatgpt.com/backend-api/codex/responses μέσω της μεταφοράς wreq-js. Τα μοντέλα που δεν είναι 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 key κατά τη χειραψία. Ο ενσωματωμένος HTTP server (server-ws.mjs) πρέπει να είναι το ενεργό σημείο εισόδου (είναι, από προεπιλογή, όταν υπάρχει το app/server-ws.mjs).

Αναγνωριστικό μοντέλου: χρησιμοποιήστε το ανεπεξέργαστο αναγνωριστικό ChatGPT (χωρίς πρόθεμα codex/)

Το Codex CLI της OpenAI επικυρώνει το όνομα μοντέλου από την πλευρά του πελάτη όταν supports_websockets = true και απορρίπτει αναγνωριστικά με πρόθεμα παρόχου όπως codex/gpt-5.5 (The 'codex/gpt-5.5' model is not supported when using Codex with a ChatGPT account). Στείλτε το ανεπεξέργαστο αναγνωριστικό (π.χ. gpt-5.5). Η γέφυρα του OmniRoute είναι αποκλειστικά codex, οπότε επαναλύει ένα ανεπεξέργαστο αναγνωριστικό ως μοντέλο codex (resolveCodexWsModelInfo) πριν τη δρομολόγηση upstream — ακόμα και αν ένα ανεπεξέργαστο gpt-5.5 θα δρομολογούταν διαφορετικά σε άλλον πάροχο μέσω HTTP.

Ρύθμιση του OpenAI Codex CLI

Κατευθύνετε το Codex CLI στο OmniRoute προσθέτοντας έναν προσαρμοσμένο πάροχο με υποστήριξη WebSocket στο ~/.codex/config.toml (χρησιμοποιήστε ξεχωριστό CODEX_HOME για να αποφύγετε την τροποποίηση υπάρχουσας ρύθμισης):

model = "gpt-5.5"                 # ανεπεξέργαστο αναγνωριστικό — ΟΧΙ "codex/gpt-5.5"
model_provider = "omniroute"

[model_providers.omniroute]
name = "OmniRoute (WS)"
base_url = "http://localhost:20128/v1"   # χωρίς τελεία κάθετο· το URL του WS προκύπτει αυτόματα (χρησιμοποιήστε https/wss στην παραγωγή)
wire_api = "responses"                    # η μόνη υποστηριζόμενη τιμή από τον Φεβρουάριο 2026
supports_websockets = true                # ενεργοποιεί τη μεταφορά Responses-over-WS
env_key = "OMNIROUTE_API_KEY"             # περιέχει το API key του OmniRoute (Bearer)
export OMNIROUTE_API_KEY=sk-...           # ένα API key του OmniRoute (οποιοδήποτε key αν REQUIRE_API_KEY=false)
codex exec "Responda apenas: PONG"

Το CLI αναβαθμίζει το base_url + /responses σε WebSocket και το OmniRoute το δρομολογεί στην επιλεγμένη σύνδεση codex OAuth. Επικυρώθηκε από άκρο σε άκρο έναντι του τοπικού server: το ChatGPT επιστρέφει codex.rate_limits + response.created και μεταδίδει ροή την ολοκλήρωση.


Ποσοστώσεις & Αναφορά Προβλημάτων

Μέθοδος Διαδρομή Περιγραφή
GET /v1/quotas/check Προ-επικύρωση ποσοστώσεων για ένα provider + accountId πριν από την έκδοση εγγεγραμμένου κλειδιού
POST /v1/issues/report Αναφορά αποτυχίας ποσοστώσεων/έκδοσης κλειδιού στο GitHub (απαιτεί GITHUB_ISSUES_REPO + token)

Αυθεντικοποίηση: Bearer API key (isAuthenticated).


Αυτοεξυπηρέτηση χρήσης (/api/usage/om-usage)

Οποιοδήποτε API key μπορεί να διαβάσει τη δική του χρήση και ποσοστώσεις — χωρίς διαχειριστική αυθεντικοποίηση. Αυτό είναι το endpoint που χρησιμοποιεί ένας client (CLI, ο πίνακας OmniCopilot) για να εμφανίσει στον κάτοχο κλειδιού τις δαπάνες του.

# Μορφή κειμένου (το ιστορικό συμβόλαιο — απλό κείμενο για τερματικό)
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-key του dashboard το εναλλάσσει ανά κλειδί). Χωρίς αυτό, το endpoint απαντά με 403.

Το ?format=json επιστρέφει ένα διακριτό σχήμα ώστε ο καλών να μην διαβάζει ποτέ ένα πεδίο δεδομένων από μια άρνηση. Σε επιτυχία:

{
  "allowed": true,
  // υπάρχει μόνο όταν το κλειδί έχει επιλέξει όρια χρήσης ανά κλειδί (ημερήσιο/εβδομαδιαίο USD):
  "personal": {
    "dailySpentUsd": 1.25,
    "dailyLimitUsd": 5,
    "dailyResetAtIso": "…",
    "weeklySpentUsd": 8,
    "weeklyLimitUsd": 20,
    "weeklyResetAtIso": "…" /*  */,
  },
  // το στιγμιότυπο ποσοστώσεων του επιλεγμένου provider, ή null όταν δεν έχει αποθηκευτεί τίποτα ακόμα:
  "provider": {
    "connectionId": "…",
    "provider": "claude",
    "plan": "…",
    "quotas": {/*  */},
  },
  // το στιγμιότυπο κάθε σύνδεσης, ώστε ένα UI να μπορεί να εμφανίσει πολλούς providers παράλληλα:
  "providers": [
    { "connectionId": "…", "provider": "claude" /*  */ },
    { "provider": "codex" /*  */ },
  ],
}

Σε άρνηση (401 μη έγκυρο κλειδί / 403 δεν επιτρέπεται), η ίδια διαδρομή επιστρέφει { "allowed": false, "error": { "message": "…" } } — ένα παρόν-αλλά-κενό personal/provider (το κλειδί επιτρέπεται, δεν έχει μαθευτεί τίποτα ακόμα) είναι διαφορετική κατάσταση από μια άρνηση, και μόνο η μορφή JSON τις διακρίνει.

Αυθεντικοποίηση: το Bearer API key του καλούντος, επικυρωμένο με isValidApiKey — αυτή δεν είναι η διεπαφή διαχείρισης (/api/keys/…), η οποία παραμένει πίσω από το requireManagementAuth.


Σημασιολογική Κρυφή Μνήμη

# Λήψη στατιστικών κρυφής μνήμης
GET /api/cache/stats

# Εκκαθάριση όλων των κρυφών μνημών
DELETE /api/cache/stats

Παράδειγμα απόκρισης:

{
  "semanticCache": {
    "memorySize": 42,
    "memoryMaxSize": 500,
    "dbSize": 128,
    "hitRate": 0.65
  },
  "idempotency": {
    "activeKeys": 3,
    "windowMs": 5000
  }
}

Επίπτωση στην καθυστέρηση

Μια ΕΠΙΤΥΧΊΑ σημασιολογικής κρυφής μνήμης εξυπηρετεί την απόκριση από την κρυφή μνήμη χωρίς κλήση upstream, οπότε η αναφερόμενη X-OmniRoute-Response-Latency είναι σχεδόν μηδενική (ανεξαρτήτως της αρχικής καθυστέρησης upstream). Οι clients που είναι ευαίσθητοι στην καθυστέρηση (benchmarking, παρακολούθηση p50/p99) θα πρέπει να ελέγχουν την κεφαλίδα απόκρισης X-OmniRoute-Cache-Latency:

Τιμή Σημασία
synthetic Η απόκριση εξυπηρετήθηκε από κρυφή μνήμη· η καθυστέρηση δεν είναι πραγματικός χρόνος upstream
(απούσα) Απόκριση από πραγματική κλήση upstream

Παράκαμψη κρυφής μνήμης ανά κλειδί

Τα API keys μπορούν να εξαιρεθούν από τις αναγνώσεις σημασιολογικής κρυφής μνήμης μέσω του cacheDefaultMode:

Τιμή Συμπεριφορά
legacy Κανονική συμπεριφορά κρυφής μνήμης (προεπιλογή)
bypass Παράλειψη αναζήτησης στην κρυφή μνήμη· πάντα κλήση upstream

Ορίζεται κατά τη δημιουργία κλειδιού (POST /api/keys) ή ενημέρωση (PATCH /api/keys/[id]):

{ "cacheDefaultMode": "bypass" }

Παράκαμψη ανά αίτημα

Οποιοδήποτε αίτημα μπορεί να παρακάμψει την κρυφή μνήμη ανεξαρτήτως ρυθμίσεων κλειδιού:

X-OmniRoute-No-Cache: true

Πίνακας Ελέγχου & Διαχείριση

Οι διαδρομές διαχείρισης (/api/* εκτός από δημόσια auth/login) δεν εξουσιοδοτούνται από κανονικά κλειδιά API συμπέρασης. Οικογένειες διαπιστευτηρίων, εμβέλειες και παραδείγματα curl: Αυθεντικοποίηση Διαχείρισης.

Αυθεντικοποίηση

Τελικό Σημείο Μέθοδος Περιγραφή
/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 Τιμολόγηση μοντέλων

Χρήση & Αναλυτικά

Τελικό Σημείο Μέθοδος Περιγραφή
/api/usage/history GET Ιστορικό χρήσης
/api/usage/logs GET Αρχεία καταγραφής χρήσης
/api/usage/request-logs GET Αρχεία καταγραφής σε επίπεδο αιτήματος
/api/usage/[connectionId] GET Χρήση ανά σύνδεση
/api/usage/token-limits GET/POST/DELETE Προϋπολογισμοί ορίου token ανά κλειδί API
/api/usage/model-latency-stats GET Κυλιόμενο συνολικό στατιστικό καθυστέρησης ανά πάροχο/μοντέλο (avg/p50/p95/p99, ποσοστό επιτυχίας)· φίλτρα: windowHours/minSamples/maxRows/provider/model (#6873)
/api/usage/cache-health GET Σύνοψη υγείας cache ερωτημάτων σε call_logs — αναλογία εγγραφής/ανάγνωσης, κατανομή μεγέθους εγγραφής p50/p90/p99, συγκέντρωση μεγάλων εγγραφών, ανάλυση ανά μοντέλο και ετυμηγορία healthy/degraded/thrash/no-data· παράμετροι ερωτήματος range (1h|24h|7d|30d, προεπιλογή 24h) και προαιρετικό model (#8827)

Ρυθμίσεις

Τελικό Σημείο Μέθοδος Περιγραφή
/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 Λειτουργία επανεγγραφής αιτήματος σκέψης/συλλογισμού (passthrough / auto-strip / custom / adaptive). Ανεξάρτητο από τη συμπίεση. Βλ. 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 Ανάγνωση διατηρημένης επεξεργασμένης ακατέργαστης εξόδου με αναγνωριστικό δείκτη
/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)
/api/cache/stats GET/DELETE Στατιστικά cache / εκκαθάριση
/api/modality-bridge/stats GET Στη μνήμη attempts, επιτυχίες/bridged, αποτυχίες, επιτυχίες cache, totalLatencyMs, latencySamples, averageLatencyMs με αριθμητή δείγμα, και χρόνος τελευταίας χρήσης (επαναφορά κατά επανεκκίνηση· διαχείριση auth)
/api/modality-bridge/video/runtime GET Αυστηρός έλεγχος αξιόπιστου loopback πριν από διαχείριση auth/probe· εκκαθαρισμένη διαθεσιμότητα και εκδόσεις FFmpeg/ffprobe (no-store)
/api/modality-bridge/video/extract POST Εσωτερικός αυθεντικοποιημένος αξιόπιστος μεσίτης byte loopback· είσοδος 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

Συγχρονισμός Cloud

Τελικό Σημείο Μέθοδος Περιγραφή
/api/sync/cloud Διάφορες Λειτουργίες συγχρονισμού cloud
/api/sync/initialize POST Αρχικοποίηση συγχρονισμού
/api/cloud/* Διάφορες Διαχείριση 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 Προσθήκη προσαρμοσμένου πράκτορα ή ανανέωση cache εντοπισμού
/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/* απαιτούν διαχείριση auth (requireManagementAuth). Βλ. Ανθεκτικότητα (εκτεταμένη) για πλήρη ανάλυση του διακόπτη κυκλώματος παρόχου έναντι ψύξης σύνδεσης έναντι κλειδαριάς μοντέλου.

Αξιολογήσεις

Τελικό Σημείο Μέθοδος Περιγραφή
/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 Τελικό σημείο generateContent Gemini

Αυτά τα τελικά σημεία αντικατοπτρίζουν τη μορφή API του Gemini για πελάτες που αναμένουν εγγενή συμβατότητα SDK Gemini.

Εσωτερικά / APIs Συστήματος

Τελικό Σημείο Μέθοδος Περιγραφή
/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+)

POST /api/system/env/repair
Content-Type: application/json

{
  "provider": "claude-code"
}

Επιδιορθώνει ελλείπουσες ή κατεστραμμένες μεταβλητές περιβάλλοντος OAuth για έναν συγκεκριμένο πάροχο. Επιστρέφει:

{
  "success": true,
  "repaired": ["CLAUDE_CODE_OAUTH_CLIENT_ID", "CLAUDE_CODE_OAUTH_CLIENT_SECRET"],
  "backupPath": "/home/user/.omniroute/backups/env-repair-2026-04-11.bak"
}

Μεταγραφή Ήχου

POST /v1/audio/transcriptions
Authorization: Bearer your-api-key
Content-Type: multipart/form-data

Μεταγράψτε αρχεία ήχου χρησιμοποιώντας οποιονδήποτε διαμορφωμένο πάροχο STT. Το πρώτο τμήμα της διαδρομής επιλέγει τον εγγενή πάροχο (openai/…, deepgram/…). Τα gateways που επανεξάγουν το μοντέλο άλλου προμηθευτή χρησιμοποιούν ένα αναγνωριστικό με προσδιορισμό (openrouter/deepgram/nova-3).

Αίτημα:

curl -X POST http://localhost:20128/v1/audio/transcriptions \
  -H "Authorization: Bearer your-api-key" \
  -F "file=@recording.mp3" \
  -F "model=openai/whisper-1"

Απόκριση:

{
  "text": "Hello, this is the transcribed audio content.",
  "task": "transcribe",
  "language": "en",
  "duration": 12.5
}

Παραδείγματα αναγνωριστικών μοντέλου: openai/whisper-1 (απαιτεί κλειδί OpenAI), openrouter/deepgram/nova-3 (απαιτεί κλειδί OpenRouter), deepgram/nova-3 (απαιτεί εγγενές κλειδί Deepgram). Ένα απλό αίτημα deepgram/nova-3 δεν χρησιμοποιεί το OpenRouter.

Υποστηριζόμενες μορφές: mp3, wav, m4a, flac, ogg, webm.


Συμβατότητα Ollama

Για πελάτες που χρησιμοποιούν τη μορφή API του Ollama:

# Τελικό σημείο συνομιλίας (μορφή Ollama)
POST /v1/api/chat

# Καταχώριση μοντέλων (μορφή Ollama)
GET /api/tags

Τα αιτήματα μεταφράζονται αυτόματα μεταξύ της μορφής Ollama και της εσωτερικής μορφής.

Ψευδώνυμα Tokenized VS Code / Χωρίς Επικεφαλίδα

Χρησιμοποιήστε αυτά τα ψευδώνυμα όταν μια ενσωμάτωση δεν μπορεί να εισάγει μια επικεφαλίδα Authorization και χρειάζεται το κλειδί API ενσωματωμένο στη βασική διεύθυνση URL.

# Ψευδώνυμο καταλόγου τύπου 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

Παράδειγμα:

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"}]}'

Σημειώσεις:

  • Τα tokenized ψευδώνυμα επαναχρησιμοποιούν τους ίδιους χειριστές με τα /v1/* και /api/tags· τα σχήματα απόκρισης παραμένουν πανομοιότυπα.
  • Προτιμήστε το Authorization: Bearer ... όποτε ο πελάτης υποστηρίζει προσαρμοσμένες επικεφαλίδες.
  • Τα διακριτικά βάσει URL ενδέχεται να εμφανίζονται σε αρχεία καταγραφής reverse-proxy, ιστορικό προγράμματος περιήγησης και τηλεμετρία εκτός του OmniRoute. Αντιμετωπίστε τα ως επιλογή συμβατότητας και όχι ως προεπιλεγμένη λειτουργία ελέγχου ταυτότητας.

Τηλεμετρία

# Λήψη περίληψης τηλεμετρίας καθυστέρησης (p50/p95/p99 ανά πάροχο)
GET /api/telemetry/summary

Απόκριση:

{
  "providers": {
    "claudeCode": { "p50": 245, "p95": 890, "p99": 1200, "count": 150 },
    "github": { "p50": 180, "p95": 620, "p99": 950, "count": 320 }
  }
}

Προϋπολογισμός

# Λήψη κατάστασης προϋπολογισμού για όλα τα κλειδιά 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.

Όρια Token

Προϋπολογισμοί token ανά κλειδί API (διαφορετικοί από τον παραπάνω προϋπολογισμό σε USD). Επιβάλλονται ενσωματωμένα στη διαδρομή αιτήματος: όταν η χρήση του τρέχοντος παραθύρου ενός κλειδιού φτάσει το όριό του, τα αιτήματα απορρίπτονται με 429 Too Many Requests. Τα όρια μπορούν να εφαρμοστούν σε συγκεκριμένο model, σε provider, ή globalα σε ολόκληρο το κλειδί· όταν πολλά όρια ταιριάζουν σε ένα αίτημα, ισχύει το πιο περιοριστικό.

# Λίστα ορίων token ενός κλειδιού (περιλαμβάνει την τρέχουσα χρήση παραθύρου)
GET /api/usage/token-limits?apiKeyId=key-123

# Δημιουργία ή ενημέρωση ορίου token
POST /api/usage/token-limits
Content-Type: application/json

{
  "apiKeyId": "key-123",
  "scopeType": "model",
  "scopeValue": "openai/gpt-4o",
  "tokenLimit": 1000000,
  "resetInterval": "monthly",
  "enabled": true
}

# Διαγραφή ορίου token με βάση το id
DELETE /api/usage/token-limits?id=tl-abc

Σημειώσεις σχήματος (setTokenLimitSchema): Τα apiKeyId και scopeType (model | provider | global) είναι υποχρεωτικά. Το scopeValue είναι υποχρεωτικό εκτός αν το scopeType είναι global (π.χ. ένα model id για το εύρος model, ένα provider id για το εύρος provider). Το tokenLimit πρέπει να είναι θετικός ακέραιος (μετατρέπεται αυτόματα από string). Προαιρετικά: id (παράλειψη για δημιουργία, παροχή για ενημέρωση), resetInterval (daily | weekly | monthly, προεπιλογή monthly), resetTime (HH:MM), enabled (προεπιλογή true). Οι αποκρίσεις GET εμπλουτίζουν κάθε όριο με tokensUsed, remaining, windowStart, periodStartAt και nextResetAt. Πρόκειται για endpoint διαχείρισης (η αυθεντικοποίηση επιβάλλεται κεντρικά από το pipeline authz).

Επεξεργασία Αιτήματος

  1. Ο client αποστέλλει αίτημα στο /v1/*
  2. Ο handler διαδρομής καλεί handleChat, handleEmbedding, handleAudioTranscription ή handleImageGeneration
  3. Το μοντέλο επιλύεται (απευθείας provider/model ή alias/combo)
  4. Τα διαπιστευτήρια επιλέγονται από την τοπική βάση δεδομένων με φιλτράρισμα διαθεσιμότητας λογαριασμού
  5. Για chat: το handleChatCore ελέγχει τη σημασιολογική/υπογραφής κρυφή μνήμη και επιλύει τις ρυθμίσεις συμπίεσης combo
  6. Η προληπτική συμπίεση εκτελείται πριν τη μετάφραση provider όταν είναι ενεργοποιημένη (lite, Caveman, RTK ή σε στοίβα)
  7. Ο εκτελεστής provider αποστέλλει το upstream αίτημα
  8. Η απόκριση μεταφράζεται πίσω στη μορφή client (chat) ή επιστρέφεται αυτούσια (embeddings/images/audio)
  9. Καταγράφονται η χρήση, τα αναλυτικά συμπίεσης και τα αρχεία καταγραφής αιτημάτων
  10. Το fallback εφαρμόζεται σε σφάλματα σύμφωνα με τους κανόνες combo

Πλήρης αναφορά αρχιτεκτονικής: ARCHITECTURE.md


Διαχείριση Combo

Τα combo δρομολόγησης υψηλότερου επιπέδου (ήδη συνοψισμένα στο /api/combos*) μπορούν επίσης να αντιστοιχιστούν 1:1 από ένα μοτίβο model id, επιτρέποντας διαφανή ανακατεύθυνση ενός model id τύπου OpenAI σε ένα combo.

Μέθοδος Διαδρομή Περιγραφή
GET /api/model-combo-mappings Λίστα όλων των αντιστοιχίσεων model→combo
POST /api/model-combo-mappings Δημιουργία αντιστοίχισης — body: {pattern, comboId, priority?, enabled?, description?}
GET /api/model-combo-mappings/[id] Ανάκτηση μίας μεμονωμένης αντιστοίχισης
PUT /api/model-combo-mappings/[id] Ενημέρωση πεδίων μιας υπάρχουσας αντιστοίχισης
DELETE /api/model-combo-mappings/[id] Αφαίρεση αντιστοίχισης

Αυθεντικοποίηση: session/κλειδί API διαχείρισης (requireManagementAuth).


Webhooks

Εξερχόμενες συνδρομές webhook για συμβάντα OmniRoute (ολοκλήρωση αιτήματος, εξάντληση ορίου, εναλλαγή κλειδιών, κ.λπ.).

Μέθοδος Διαδρομή Περιγραφή
GET /api/webhooks Λίστα webhooks (τα μυστικά εμφανίζονται μασκαρισμένα ως <prefix>...)
POST /api/webhooks Δημιουργία webhook — σώμα: {url, events?: ["*"], secret?, description?}
GET /api/webhooks/[id] Ανάκτηση ενός webhook
PUT /api/webhooks/[id] Ενημέρωση url/events/secret/description
DELETE /api/webhooks/[id] Αφαίρεση ενός webhook
POST /api/webhooks/[id]/test Αποστολή δοκιμαστικού ωφέλιμου φορτίου στο URL του webhook και επιστροφή κατάστασης παράδοσης

Αυθεντικοποίηση: Συνεδρία διαχείρισης / κλειδί 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.


Πρωτόκολλο Agents

Εργασίες cloud agent (Claude Code, Codex Cloud, OpenHands, κ.λπ.) που εκτελούνται απομακρυσμένα εκ μέρους των χρηστών του OmniRoute.

Μέθοδος Διαδρομή Περιγραφή
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] Ανάγνωση εργασίας — συγχρονισμένη ανανέωση κατάστασης από τον upstream cloud agent όταν έχει οριστεί 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 αυτές ήταν χωρίς πιστοποίηση — βλ. commit 588a0333 για την ανατρεπτική αλλαγή.

# Δημιουργία εργασίας cloud task τύπου 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?}). Εκκαθαρίζει την κρυφή μνήμη dispatcher
PUT /api/v1/management/proxies/bulk-assign Μαζική ανάθεση — το σώμα επικυρώνεται από το bulkProxyAssignmentSchema ({scope, scopeIds[], proxyId?})
GET /api/v1/management/proxies/health?hours=24 Συγκεντρωτική υγεία διακομιστή μεσολάβησης (αριθμοί επιτυχιών/αποτυχιών, λανθάνουσα καθυστέρηση) σε ένα χρονικό παράθυρο

Πιστοποίηση: session/κλειδί API διαχείρισης σε κάθε διαδρομή (requireManagementAuth).

Τα POST /api/v1/management/proxies/[id]/assignments και POST /api/v1/management/proxies/[id]/health που αναφέρονται στην περιγραφή εργασίας εξυπηρετούνται από τις επίπεδες διαδρομές /assignments και /health που εμφανίζονται παραπάνω — δεν υπάρχουν υποδιαδρομές ανά id στη βάση κώδικα.


Ανθεκτικότητα (εκτεταμένη)

Το OmniRoute εκθέτει τρεις ανεξάρτητους μηχανισμούς προσωρινής αποτυχίας· τα παρακάτω endpoints διαχείρισης επιτρέπουν στους διαχειριστές να τους διαβάζουν και να τους παρακάμπτουν:

Εύρος Αποθήκευση κατάστασης Ανάγνωση Επαναφορά / εκκαθάριση
Breaker παρόχου domain_circuit_breakers + στη μνήμη /api/monitoring/health POST /api/resilience/reset
Cooldown σύνδεσης rateLimitedUntil στις συνδέσεις παρόχου /api/rate-limits, /api/providers/[id] (επανενεργοποιείται lazily· εκκαθάριση μέσω PUT παρόχου)
Κλείδωμα μοντέλου Μητρώο διαθεσιμότητας μοντέλων στη μνήμη GET /api/resilience/model-cooldowns DELETE /api/resilience/model-cooldowns

Το PATCH /api/resilience δέχεται παρακάμψεις του breaker παρόχου μέσω των providerBreaker.oauth και providerBreaker.apikey. Κάθε προφίλ υποστηρίζει τα degradationThreshold, failureThreshold και resetTimeoutMs· τα ίδια πεδία εκτίθενται στο Dashboard → Settings → Resilience.

# Εκκαθάριση κλειδώματος ενός μεμονωμένου μοντέλου
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}'

Πλήρης εννοιολογική αναφορά και προεπιλογές breaker: δείτε CLAUDE.md → "Resilience Runtime State".


Skills

Πλαίσιο Skills για την επέκταση του OmniRoute με προσαρμοσμένους εκτελέσιμους χειριστές, καθώς και ενσωματώσεις marketplace.

Μέθοδος Διαδρομή Περιγραφή
GET /api/skills Λίστα εγκατεστημένων skills — με δυνατότητα φιλτραρίσματος βάσει ?q=, ?mode=on|off|auto, ?source=skillsmp|skillssh|local, με σελιδοποίηση
GET /api/skills/[id] Ανάκτηση ενός skill
PUT /api/skills/[id] Ενημέρωση skill (όνομα, περιγραφή, mode, schema, handler, tags)
DELETE /api/skills/[id] Απεγκατάσταση ενός skill
POST /api/skills/install Εγκατάσταση skill από ακατέργαστο manifest — body: {name, version, description, schema:{input, output}, handlerCode, apiKeyId?}
GET /api/skills/executions Λίστα πρόσφατων εκτελέσεων skill (ιστορικό ελέγχου με εισόδους/εξόδους/διάρκεια)
GET /api/skills/marketplace?q=... Αναζήτηση/λίστα δημοφιλών από το marketplace SkillsMP (απαιτεί ρύθμιση skillsmpApiKey)
POST /api/skills/marketplace/install Εγκατάσταση skill βάσει id από το SkillsMP
GET /api/skills/skillssh?q=&limit= Αναζήτηση στο μητρώο skills.sh
POST /api/skills/skillssh/install Εγκατάσταση skill βάσει id από το skills.sh

Αυθεντικοποίηση: session/API key διαχείρισης. Οι διαδρομές αναζήτησης marketplace δέχονται είτε αυθεντικοποίηση διαχείρισης είτε Bearer API key (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 Κατάσταση υποσυστήματος μνήμης (συνδεσιμότητα ΒΔ, backend ενσωματώσεων, κατάσταση διανυσματικού ευρετηρίου)

Αυθεντικοποίηση: συνεδρία/κλειδί API διαχείρισης (requireManagementAuth). Απαρίθμηση type: FACTUAL, EPISODIC, SEMANTIC, PROCEDURAL (βλ. MemoryType στο src/lib/memory/types.ts).


MCP Server

Το OmniRoute διαθέτει ενσωματωμένο διακομιστή Model Context Protocol με 3 μεταφορές (stdio, SSE, streamable-http) και εργαλεία περιορισμένης εμβέλειας. Τα παρακάτω endpoints του πίνακα ελέγχου διαβάζουν δεδομένα κατάστασης/ελέγχου και δρομολογούν διαμέσου των μεταφορών HTTP.

Μέθοδος Διαδρομή Περιγραφή
GET /api/mcp/status Παλμός, μεταφορά, κατάσταση σύνδεσης, τελευταία κλήση, κορυφαία εργαλεία, ποσοστό επιτυχίας 24ώρου
GET /api/mcp/tools Λίστα εργαλείων MCP με name, description, scopes, phase, auditLevel, sourceEndpoints
GET /api/mcp/sse Άνοιγμα ροής SSE για τη μεταφορά SSE (επιστρέφει 503 εάν το MCP είναι απενεργοποιημένο ή υπάρχει αναντιστοιχία μεταφοράς)
POST /api/mcp/sse Αποστολή πλαισίου JSON-RPC μέσω της μεταφοράς SSE
GET /api/mcp/stream Άνοιγμα της πλευράς SSE της μεταφοράς Streamable HTTP (μηνύματα που εκκινούνται από τον διακομιστή)
POST /api/mcp/stream Αποστολή πλαισίου JSON-RPC μέσω της μεταφοράς Streamable HTTP
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 (κλειδί API τύπου Bearer με εμβέλεια mcpοι διαδρομές status/tools/audit* είναι αναγνώσιμες από τον πίνακα ελέγχου (δεν απαιτείται πρόσθετη αυθεντικοποίηση πέραν της πρόσβασης στον κεντρικό υπολογιστή του πίνακα ελέγχου).

Και οι δύο μεταφορές HTTP ελέγχονται από τις παραμέτρους settings.mcpEnabled και settings.mcpTransport — αναντιστοιχία μεταφοράς επιστρέφει 400, ενώ απενεργοποιημένη κατάσταση MCP επιστρέφει 503.


A2A Server

Το OmniRoute παρέχει ένα A2A (Agent-to-Agent) JSON-RPC 2.0 endpoint καθώς και ένα REST wrapper για επιθεώρηση/χρήση από το dashboard.

JSON-RPC

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 Σύγχρονη εκτέλεση skill· επιστρέφει {task, artifacts, metadata}
message/stream Streaming SSE εκτέλεση του ίδιου συνόλου skill
tasks/get Ανάκτηση εργασίας βάσει taskId
tasks/cancel Ακύρωση εργασίας βάσει taskId

Ενσωματωμένα skills: smart-routing, quota-management, provider-discovery, cost-analysis, health-report.

Agent Card

GET /.well-known/agent.json

Επιστρέφει το δημόσιο A2A agent card (όνομα, περιγραφή, δυνατότητες, κατάλογος skill, σχήμα αυθεντικοποίησης) — αποθηκεύεται δημόσια στην cache για 1 ώρα. Δεν απαιτείται αυθεντικοποίηση.

REST βοηθητικά endpoints

Μέθοδος Διαδρομή Περιγραφή
GET /api/a2a/status Κατάσταση ενεργοποίησης A2A + στατιστικά εργασιών + σύνοψη agent card από cache
GET /api/a2a/tasks Λίστα εργασιών — ?state=submitted|working|completed|failed|cancelled, ?skill=, ?limit= (≤200), ?offset=
POST /api/a2a/tasks (Δεν υλοποιείται ως REST helper — δημιουργία μέσω JSON-RPC message/send)
GET /api/a2a/tasks/[id] Ανάκτηση μίας εργασίας
POST /api/a2a/tasks/[id]/cancel Ακύρωση εργασίας

Αυθεντικοποίηση: τα REST βοηθητικά endpoints λειτουργούν χωρίς αυθεντικοποίηση διαχείρισης (ανάγνωση από dashboard)· η διαδρομή JSON-RPC /a2a χρησιμοποιεί Bearer OMNIROUTE_API_KEY εφόσον έχει ρυθμιστεί.


Cloud, Evals & Assess

Μέθοδος Διαδρομή Περιγραφή
POST /api/cloud/auth Επαλήθευση ενός Bearer key και επιστροφή κρυφών συνδέσεων παρόχου + ψευδώνυμα μοντέλων για clients cloud συγχρονισμού
POST /api/cloud/credentials/update Ενημέρωση κρυπτογραφημένων διαπιστευτηρίων για έναν πάροχο που συγχρονίζεται με το cloud
POST /api/cloud/model/resolve Επίλυση ενός λογικού αναγνωριστικού μοντέλου σε συγκεκριμένο πάροχο/μοντέλο χρησιμοποιώντας τον τοπικό πίνακα δρομολόγησης
GET /api/cloud/models/alias Λίστα ψευδωνύμων μοντέλων όπως εκτίθενται στο cloud sync
GET /api/assess Ανάγνωση των τελευταίων κατηγοριοποιήσεων αξιολόγησης (ανά πάροχο/μοντέλο)
POST /api/assess Εκτέλεση αξιολόγησης — body: `{scope: {type:"all"} {type:"provider", providerId} {type:"model", modelId}, trigger?}`
GET /api/evals Λίστα ενσωματωμένων σουιτών eval + πιο πρόσφατες εκτελέσεις
POST /api/evals Εκκίνηση εκτέλεσης eval
POST /api/evals/suites Δημιουργία προσαρμοσμένης σουίτας eval — body επικυρωμένο από evalSuiteSaveSchema
GET /api/evals/suites/[id] Ανάκτηση προσαρμοσμένης σουίτας eval

Αυθεντικοποίηση: το /api/cloud/auth επικυρώνει απευθείας ένα Bearer key· οι υπόλοιπες διαδρομές /api/cloud/*, /api/evals/* και /api/assess απαιτούν session διαχείρισης ή API key. Το POST /api/assess χρησιμοποιεί validateBody με ένα σχήμα scope discriminated-union.


Διαχείριση ACP (Πρωτόκολλο Πελάτη Πράκτορα)

ως θυγατρικές διεργασίες. Αυτά τα endpoints διαχειρίζονται την ανίχνευση πρακτόρων 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):

{
  "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
}

Αυθεντικοποίηση: Απαιτεί σύνοδο διαχείρισης (cookie auth_token του dashboard) ή κλειδί API με εύρος διαχείρισης.

Δείτε το ACP Framework για πλήρεις λεπτομέρειες.


Αναλυτικά & Παρατηρησιμότητα

Endpoints αναλυτικών σε πραγματικό χρόνο για την παρακολούθηση δρομολόγησης, συμπίεσης και ποικιλομορφίας παρόχων. Αυτά τροφοδοτούν τις σελίδες /dashboard/analytics/*.

Αναλυτικά αυτόματης δρομολόγησης

Μέθοδος Διαδρομή Περιγραφή
GET /api/analytics/auto-routing Συγκεντρωτικά στατιστικά αυτόματης δρομολόγησης: συνολικές κλήσεις, κατανομή στρατηγικής, κατανομή βαθμίδας, κορυφαίοι πάροχοι
GET /api/analytics/auto-routing?days=7 Στατιστικά με χρονικό παράθυρο (προεπιλογή 24ω)

Παράδειγμα απόκρισης:

{
  "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 Συγκεντρωτικά στατιστικά συμπίεσης: tokens που αποθηκεύτηκαν, ποσοστό εξοικονόμησης, κατανομή λειτουργίας, χρήση μηχανής

Παράδειγμα απόκρισης:

{
  "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: αποτρέπει μεμονωμένα σημεία αποτυχίας μετρώντας την κατανομή παρόχων

Παράδειγμα απόκρισης:

{
  "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

Διαχείριση εργαλείων CLI που ενσωματώνονται με το OmniRoute (antigravity, chipotle, commandCode, devin-cli, κ.λπ.). Δείτε την Αναφορά Παρόχου για την πλήρη λίστα.

Μέθοδος Διαδρομή Περιγραφή
GET /api/cli-tools/all-statuses Κατάσταση όλων των εργαλείων CLI (εγκατεστημένα, έκδοση, τελευταία εμφάνιση)
GET /api/cli-tools/status Λεπτομέρειες κατάστασης για ένα εργαλείο CLI (ερώτημα ?tool=)
POST /api/cli-tools/apply Εγγραφή της παραγόμενης ρύθμισης ενός εργαλείου (dryRun για προεπισκόπηση· 422 + containerEphemeralTarget όταν είναι σε container· 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 Κατάσταση proxy MITM του Antigravity (το εργαλείο CLI "antigravity-mitm")
POST /api/cli-tools/antigravity-mitm/alias Ρύθμιση ψευδωνύμων antigravity-mitm

Πιστοποίηση: Απαιτεί διαχειριστική συνεδρία.


Δεξιότητες Πράκτορα

Διαχείριση δεξιοτήτων πράκτορα ΤΝ (παρόμοιο με τα custom GPTs του OpenAI αλλά για πράκτορες).

Μέθοδος Διαδρομή Περιγραφή
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 Δημιουργία νέας δεξιότητας με ΤΝ από περιγραφή σε φυσική γλώσσα

Πιστοποίηση: Απαιτεί διαχειριστική συνεδρία ή κλειδί 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 περιορισμένο στη διαχείριση.


Webhooks

Διαχείριση συνδρομών webhook για συμβάντα.

Μέθοδος Διαδρομή Περιγραφή
GET /api/webhooks Λίστα όλων των συνδρομών webhook
POST /api/webhooks Δημιουργία συνδρομής webhook — σώμα: {url, events[], secret?, active?}
GET /api/webhooks/[id] Ανάκτηση συγκεκριμένης συνδρομής webhook
PUT /api/webhooks/[id] Ενημέρωση συνδρομής webhook
DELETE /api/webhooks/[id] Διαγραφή συνδρομής webhook
GET /api/webhooks/[id]/deliveries Λίστα ιστορικού παράδοσης για ένα webhook (αρχείο καταγραφής επιτυχίας/αποτυχίας)
POST /api/webhooks/[id]/test Αποστολή δοκιμαστικού συμβάντος σε ένα webhook

Αυθεντικοποίηση: Απαιτεί σύνοδο διαχείρισης.

Δείτε το Πλαίσιο Webhooks για πλήρη λίστα τύπων συμβάντων.


Πλαίσιο Δεξιοτήτων

Διαχείριση Δεξιοτήτων (το πλαίσιο αgentic επεκτάσεων).

Μέθοδος Διαδρομή Περιγραφή
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 με εμβέλεια διαχείρισης.

Δείτε το Πλαίσιο Δεξιοτήτων για πλήρεις λεπτομέρειες.


Πρόσθετα

Διαχείριση πρόσθετων 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 Ενημέρωση ρυθμίσεων πρόσθετου

Αυθεντικοποίηση: Απαιτεί διαχειριστική συνεδρία.

Δείτε το Πλαίσιο Πρόσθετων για πλήρεις λεπτομέρειες.


Shadow Routing

Η σκιώδης / σύγκριση A-B μεταξύ παρόχων δεν αποτελεί ανεξάρτητη REST επιφάνεια — ρυθμίζεται μέσω της σύνθετης δρομολόγησης (δείτε Auto-Combo). Τα μετρικά σύγκρισης ανά combo εξυπηρετούνται από το GET /api/combos/metrics.


Προστατευτικές Ράβδοι

Επιθεώρηση των προστατευτικών ράβδων χρόνου εκτέλεσης (ανίχνευση PII, ανίχνευση έγχυσης prompt, γεφύρωση όρασης). Οι προστατευτικές ράβδοι εκτελούνται σε κάθε αίτημα· η εξαίρεση ανά κλήση γίνεται μέσω της κεφαλίδας αιτήματος x-omniroute-disabled-guardrails — δεν υπάρχει μόνιμη επιφάνεια ενεργοποίησης/απενεργοποίησης.

Μέθοδος Διαδρομή Περιγραφή
GET /api/guardrails Λίστα των καταχωρημένων προστατευτικών ράβδων και της κατάστασής τους (όνομα / ενεργό / προτεραιότητα)
POST /api/guardrails/test Δοκιμαστική εκτέλεση της αγωγής προ-κλήσης σε δείγμα εισόδου — σώμα: {input, disabledGuardrails?}

Αυθεντικοποίηση: Απαιτεί διαχειριστική συνεδρία.

Δείτε Ασφάλεια > Προστατευτικές Ράβδοι για πλήρεις λεπτομέρειες.



Αυθεντικοποίηση

Δείτε Αυθεντικοποίηση Διαχείρισης για τις τέσσερις οικογένειες διαπιστευτηρίων (συνεδρία dashboard, τοπικό CLI token, oma_live_… Access Token, API key με εύρος manage) και τον τρόπο που διαφέρουν από τα κλειδιά inference.

  • Οι διαδρομές Dashboard (/dashboard/*) χρησιμοποιούν cookie auth_token
  • Η σύνδεση χρησιμοποιεί αποθηκευμένο hash κωδικού πρόσβασης· εναλλακτικά το INITIAL_PASSWORD
  • Το requireLogin εναλλάσσεται μέσω /api/settings/require-login
  • Οι διαδρομές /v1/* απαιτούν προαιρετικά Bearer API key όταν REQUIRE_API_KEY=true
  • Ο όρος «management token» / «management-scoped API key» σε αυτή την αναφορά σημαίνει μία από τις οικογένειες που περιγράφονται στον οδηγό — όχι κάποιον απροσδιόριστο επιπλέον τύπο μυστικού

Αλλαγή που διακόπτει συμβατότητα (v3.8.0)Τα /api/v1/agents/tasks/* και τα endpoints διαχείρισης cooldown απαιτούν πλέον auth διαχείρισης (cookie auth_token dashboard ή API key με εύρος management). Οι πελάτες που καλούσαν προηγουμένως αυτές τις διαδρομές χωρίς αυθεντικοποίηση θα λαμβάνουν 401 Unauthorized. Δείτε commit 588a0333 (fix(auth): require management auth for agent and cooldown APIs).