POST /v1/chat/completions- Той самий порт, що й Gateway (мультиплекс WS + HTTP):
http://<gateway-host>:<port>/v1/chat/completions
GET /v1/modelsGET /v1/models/{id}POST /v1/embeddingsPOST /v1/responses
openclaw agent), тому маршрутизація/дозволи/конфігурація відповідають вашому Gateway.
Автентифікація
Використовує конфігурацію автентифікації Gateway. Поширені шляхи HTTP-автентифікації:- автентифікація зі спільним секретом (
gateway.auth.mode="token"або"password"):Authorization: Bearer <token-or-password> - довірена HTTP-автентифікація з ідентичністю (
gateway.auth.mode="trusted-proxy"): маршрутизуйте через налаштований проксі з підтримкою ідентичності й дозвольте йому вставити потрібні заголовки ідентичності - відкрита автентифікація для приватного входу (
gateway.auth.mode="none"): заголовок автентифікації не потрібен
- Коли
gateway.auth.mode="token", використовуйтеgateway.auth.token(абоOPENCLAW_GATEWAY_TOKEN). - Коли
gateway.auth.mode="password", використовуйтеgateway.auth.password(абоOPENCLAW_GATEWAY_PASSWORD). - Коли
gateway.auth.mode="trusted-proxy", HTTP-запит має надходити з налаштованого довіреного джерела проксі; loopback-проксі на тому самому хості потребують явногоgateway.auth.trustedProxy.allowLoopback = true. - Внутрішні викликачі на тому самому хості, які обходять проксі, можуть використовувати
gateway.auth.password/OPENCLAW_GATEWAY_PASSWORDяк локальний прямий резервний варіант. Будь-які докази в заголовкахForwarded,X-Forwarded-*абоX-Real-IPнатомість залишають запит на шляху trusted-proxy. - Якщо
gateway.auth.rateLimitналаштовано й стається забагато невдалих спроб автентифікації, кінцева точка повертає429зRetry-After.
Межа безпеки (важливо)
Розглядайте цю кінцеву точку як поверхню з повним операторським доступом до екземпляра Gateway.- HTTP bearer-автентифікація тут не є вузькою моделлю областей доступу на користувача.
- Дійсний токен/пароль Gateway для цієї кінцевої точки слід розглядати як облікові дані власника/оператора.
- Запити проходять через той самий агентський шлях площини керування, що й довірені операторські дії.
- Для цієї кінцевої точки немає окремої межі інструментів для невласників/окремих користувачів; коли викликач проходить автентифікацію Gateway тут, OpenClaw розглядає цього викликача як довіреного оператора для цього Gateway.
- Для режимів автентифікації зі спільним секретом (
tokenіpassword) кінцева точка відновлює звичайні повні операторські значення за замовчуванням, навіть якщо викликач надсилає вужчий заголовокx-openclaw-scopes. - Довірені HTTP-режими з ідентичністю (наприклад, автентифікація через довірений проксі або
gateway.auth.mode="none") враховуютьx-openclaw-scopes, коли він присутній, а інакше повертаються до звичайного набору операторських областей за замовчуванням. - Якщо цільова політика агента дозволяє чутливі інструменти, ця кінцева точка може їх використовувати.
- Тримайте цю кінцеву точку лише на loopback/tailnet/приватному вході; не відкривайте її напряму в публічний інтернет.
gateway.auth.mode="token"або"password"+Authorization: Bearer ...- доводить володіння спільним операторським секретом gateway
- ігнорує вужчий
x-openclaw-scopes - відновлює повний набір операторських областей за замовчуванням:
operator.admin,operator.approvals,operator.pairing,operator.read,operator.talk.secrets,operator.write - розглядає чат-ходи на цій кінцевій точці як ходи від власника-відправника
- довірені HTTP-режими з ідентичністю (наприклад, автентифікація через довірений проксі або
gateway.auth.mode="none"на приватному вході)- автентифікують певну зовнішню довірену ідентичність або межу розгортання
- враховують
x-openclaw-scopes, коли заголовок присутній - повертаються до звичайного набору операторських областей за замовчуванням, коли заголовок відсутній
- втрачають семантику власника лише тоді, коли викликач явно звужує області й опускає
operator.admin - потребують
operator.adminдля елементів керування запитом рівня власника, як-отx-openclaw-model
Коли використовувати цю кінцеву точку
Використовуйте/v1/chat/completions, коли інтегруєте інструменти або довірений бекенд на боці застосунку з наявним gateway і можете безпечно зберігати операторські облікові дані gateway.
- Надавайте перевагу цьому замість додавання нового вбудованого каналу, коли ваша інтеграція є просто ще однією операторською/клієнтською поверхнею для того самого gateway.
- Для нативних мобільних клієнтів, які підключаються напряму до віддаленого gateway, надавайте перевагу WebChat або Gateway Protocol і реалізуйте потік paired-device bootstrap/device-token, щоб пристрою не був потрібен спільний HTTP-токен/пароль.
- Натомість створіть Plugin каналу, коли інтегруєте зовнішню мережу повідомлень із власними користувачами, кімнатами, доставкою Webhook або вихідним транспортом. Див. Створення Plugin.
Контракт моделі з пріоритетом агента
OpenClaw розглядає поле OpenAImodel як ціль агента, а не як сирий ідентифікатор моделі провайдера.
model: "openclaw"маршрутизує до налаштованого агента за замовчуванням.model: "openclaw/default"також маршрутизує до налаштованого агента за замовчуванням.model: "openclaw/<agentId>"маршрутизує до конкретного агента.
x-openclaw-model: <provider/model-or-bare-id>перевизначає бекенд-модель для вибраного агента. Викликачі зі спільним секретом bearer можуть використовувати цей заголовок. Викликачам з ідентичністю, як-от trusted-proxy або приватні запити без автентифікації зx-openclaw-scopes, потрібенoperator.admin; викликачі лише з правом запису отримують403 missing scope: operator.admin.x-openclaw-agent-id: <agentId>залишається підтримуваним як сумісне перевизначення.x-openclaw-session-key: <sessionKey>явно керує маршрутизацією сесії. Значення не має використовувати зарезервовані внутрішні простори імен сесій, як-отsubagent:,cron:абоacp:; такі запити відхиляються з400 invalid_request_error.x-openclaw-message-channel: <channel>задає синтетичний контекст вхідного каналу для підказок і політик, що враховують канал.
model: "openclaw:<agentId>"model: "agent:<agentId>"
Увімкнення кінцевої точки
Установітьgateway.http.endpoints.chatCompletions.enabled у true:
Вимкнення кінцевої точки
Установітьgateway.http.endpoints.chatCompletions.enabled у false:
Поведінка сесії
За замовчуванням кінцева точка є безстановою для кожного запиту (новий ключ сесії генерується під час кожного виклику). Якщо запит містить рядок OpenAIuser, Gateway виводить із нього стабільний ключ сесії, тому повторні виклики можуть спільно використовувати агентську сесію.
Для користувацьких застосунків найбезпечніше за замовчуванням повторно використовувати те саме значення user для кожної гілки розмови. Уникайте ідентифікаторів рівня облікового запису, якщо ви явно не хочете, щоб кілька розмов або пристроїв спільно використовували одну сесію OpenClaw. Використовуйте x-openclaw-session-key лише тоді, коли вам потрібен явний контроль маршрутизації між кількома клієнтами або гілками, і вибирайте ключі, що належать застосунку та не починаються із зарезервованих внутрішніх просторів імен, як-от subagent:, cron: або acp:.
Чому ця поверхня важлива
Це найцінніший набір сумісності для self-hosted фронтендів та інструментів:- Більшість налаштувань Open WebUI, LobeChat і LibreChat очікують
/v1/models. - Багато RAG-систем очікують
/v1/embeddings. - Наявні чат-клієнти OpenAI зазвичай можуть почати з
/v1/chat/completions. - Клієнти, більш нативні для агентів, дедалі частіше надають перевагу
/v1/responses.
Список моделей і маршрутизація агентів
Що повертає `/v1/models`?
Що повертає `/v1/models`?
Список цілей агентів OpenClaw.Повернені ідентифікатори — це записи
openclaw, openclaw/default і openclaw/<agentId>.
Використовуйте їх напряму як значення OpenAI model.Чи `/v1/models` перелічує агентів або під-агентів?
Чи `/v1/models` перелічує агентів або під-агентів?
Він перелічує цілі агентів верхнього рівня, а не бекенд-моделі провайдерів і не під-агентів.Під-агенти залишаються внутрішньою топологією виконання. Вони не з’являються як псевдомоделі.
Чому включено `openclaw/default`?
Чому включено `openclaw/default`?
openclaw/default — це стабільний псевдонім для налаштованого агента за замовчуванням.Це означає, що клієнти можуть продовжувати використовувати один передбачуваний ідентифікатор, навіть якщо справжній ідентифікатор агента за замовчуванням змінюється між середовищами.Як перевизначити бекенд-модель?
Як перевизначити бекенд-модель?
Використовуйте
x-openclaw-model. Це перевизначення рівня власника: воно працює зі шляхом токена/пароля bearer зі спільним секретом Gateway і потребує operator.admin на HTTP-шляхах з ідентичністю, як-от автентифікація через довірений проксі.Приклади:
x-openclaw-model: openai/gpt-5.4
x-openclaw-model: gpt-5.5Якщо ви його опустите, вибраний агент працюватиме зі своїм звичайним налаштованим вибором моделі.Як embeddings вписуються в цей контракт?
Як embeddings вписуються в цей контракт?
/v1/embeddings використовує ті самі ідентифікатори model для цілей агентів.Використовуйте model: "openclaw/default" або model: "openclaw/<agentId>".
Коли вам потрібна конкретна модель embeddings, надішліть її в x-openclaw-model від викликача зі спільним секретом або викликача з ідентичністю, який має operator.admin.
Без цього заголовка запит передається до звичайного налаштування embeddings вибраного агента.Потокове передавання (SSE)
Установітьstream: true, щоб отримувати Server-Sent Events (SSE):
Content-Type: text/event-stream- Кожен рядок події має вигляд
data: <json> - Потік завершується
data: [DONE]
Контракт чат-інструментів
/v1/chat/completions підтримує підмножину function-tool, сумісну з поширеними клієнтами OpenAI Chat.
Підтримувані поля запиту
tools: масив{ "type": "function", "function": { ... } }tool_choice:"auto","none","required"або{ "type": "function", "function": { "name": "..." } }messages[*].role: "tool"подальші ходиmessages[*].tool_call_idдля прив’язування результатів інструмента назад до попереднього виклику інструментаmax_completion_tokens: число; ліміт на виклик для загальної кількості токенів завершення (включно з reasoning-токенами). Поточна назва поля OpenAI Chat Completions; бажана, коли надсилаються іmax_completion_tokens, іmax_tokens.max_tokens: число; застарілий псевдонім, прийнятий для зворотної сумісності. Ігнорується, коли також присутнійmax_completion_tokens.temperature: число; best-effort температура семплінгу, що передається upstream-провайдеру через канал stream-param агента.top_p: число; best-effort nucleus sampling, що передається upstream-провайдеру через канал stream-param агента.frequency_penalty: число; best-effort штраф частоти, що передається upstream-провайдеру через канал stream-param агента. Перевірений діапазон: -2.0 до 2.0. Повертає400 invalid_request_errorдля значень поза діапазоном.presence_penalty: число; best-effort штраф присутності, що передається upstream-провайдеру через канал stream-param агента. Перевірений діапазон: -2.0 до 2.0. Повертає400 invalid_request_errorдля значень поза діапазоном.seed: число (ціле); best-effort seed, що передається upstream-провайдеру через канал stream-param агента. Повертає400 invalid_request_errorдля нецілих значень.stop: рядок або масив до 4 рядків; best-effort стоп-послідовності, що передаються upstream-провайдеру через канал stream-param агента. Повертає400 invalid_request_errorдля понад 4 послідовностей або нерядкових/порожніх елементів.
max_completion_tokens для endpoint-ів сімейства OpenAI і max_tokens для провайдерів, які приймають лише застарілу назву (наприклад, Mistral і Chutes). Поля семплінгу (temperature, top_p, frequency_penalty, presence_penalty, seed) проходять тим самим каналом stream-param; backend Codex Responses на основі ChatGPT вилучає їх на боці сервера, оскільки використовує фіксований семплінг. stop також передається каналом stream-param і зіставляється з полем stop транспорту (stop для backend-ів Chat Completions, stop_sequences для Anthropic); OpenAI Responses API не має параметра stop, тому stop не застосовується до моделей на основі Responses.
Непідтримувані варіанти
Endpoint повертає400 invalid_request_error для непідтримуваних варіантів інструментів, зокрема:
tools, що не є масивом- записи інструментів, що не є function
- відсутній
tool.function.name - варіанти
tool_choice, як-отallowed_toolsіcustom - значення
tool_choice.function.name, які не відповідають наданимtools
tool_choice: "required" і прив’язаного до function tool_choice endpoint звужує відкритий клієнту набір function-tool, наказує runtime викликати клієнтський інструмент перед відповіддю та повертає помилку, якщо відповідь агента не містить відповідного структурованого виклику клієнтського інструмента. Цей контракт застосовується до наданого викликачем HTTP-списку tools, а не до кожного внутрішнього інструмента агента OpenClaw.
Форма відповіді інструмента без стримінгу
Коли агент вирішує викликати інструменти, відповідь використовує:- записи
choices[0].finish_reason = "tool_calls" choices[0].message.tool_calls[]з:idtype: "function"function.namefunction.arguments(рядок JSON)
choices[0].message.content (можливо, порожньому).
Форма відповіді інструмента зі стримінгом
Колиstream: true, виклики інструментів надсилаються як інкрементальні SSE-фрагменти:
- початкова дельта ролі assistant
- необов’язкові дельти коментаря assistant
- один або кілька фрагментів
delta.tool_calls, що містять ідентичність інструмента та фрагменти аргументів - фінальний фрагмент із
finish_reason: "tool_calls" data: [DONE]
stream_options.include_usage=true, кінцевий фрагмент usage надсилається перед [DONE].
Цикл продовження після інструмента
Після отриманняtool_calls клієнт має виконати запитані function(s) і надіслати подальший запит, який містить:
- попереднє повідомлення assistant із викликом інструмента
- одне або кілька повідомлень
role: "tool"з відповіднимtool_call_id
Швидке налаштування Open WebUI
Для базового підключення Open WebUI:- Базова URL-адреса:
http://127.0.0.1:18789/v1 - Базова URL-адреса Docker на macOS:
http://host.docker.internal:18789/v1 - API-ключ: ваш bearer-токен Gateway
- Модель:
openclaw/default
GET /v1/modelsмає показуватиopenclaw/default- Open WebUI має використовувати
openclaw/defaultяк id моделі чату - Якщо для цього агента потрібен конкретний backend-провайдер/модель, задайте звичайну модель за замовчуванням агента або надішліть
x-openclaw-modelвід викликача зі shared-secret чи викликача з ідентичністю таoperator.admin
openclaw/default, більшість налаштувань Open WebUI можуть підключитися з тією самою базовою URL-адресою та токеном.
Приклади
Стабільна сесія для однієї розмови в застосунку:user у пізніших викликах для цієї розмови, щоб продовжити ту саму сесію агента.
Без стримінгу:
/v1/modelsповертає цілі агентів OpenClaw, а не сирі каталоги провайдерів.openclaw/defaultзавжди наявний, тож один стабільний id працює в різних середовищах.- Перевизначення backend-провайдера/моделі мають бути в
x-openclaw-model, а не в полі OpenAImodel. На HTTP-шляхах автентифікації з ідентичністю цей заголовок потребуєoperator.admin. /v1/embeddingsпідтримуєinputяк рядок або масив рядків.