[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-ai\u002Fchat\u002Fjson":3,"docs-tabs-ai\u002Fchat\u002Fjson":6},{"content":4,"lastmod":5},"\n## Гарантированный JSON-ответ\n\nПараметр `response_format` заставляет модель вернуть машиночитаемый ответ вместо свободного текста. Есть два уровня строгости: `json_object` гарантирует корректный JSON произвольной формы, `json_schema` — соответствие заданной схеме.\n\n## Режим `json_object`\n\nПри `response_format: {\"type\": \"json_object\"}` модель возвращает корректный JSON в поле `content`. Вайбкод автоматически добавляет в системное сообщение инструкцию вернуть только JSON. Структуру результата опишите явно в системном сообщении:\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fchat\u002Fcompletions \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"model\": \"bitrix\u002Fbitrixgpt-5.5\",\n    \"messages\": [\n      {\"role\": \"system\", \"content\": \"Классифицируй лид. Верни JSON: {\\\"quality\\\": \\\"high|medium|low\\\", \\\"score\\\": 0-100}\"},\n      {\"role\": \"user\", \"content\": \"ООО Вектор, бюджет 2 миллиона в месяц\"}\n    ],\n    \"response_format\": {\"type\": \"json_object\"}\n  }'\n```\n\nОтвет:\n\n```json\n{\n  \"id\": \"chatcmpl-acdb112cf9cdf9f9\",\n  \"object\": \"chat.completion\",\n  \"model\": \"bitrix\u002Fbitrixgpt-5.5\",\n  \"choices\": [\n    {\n      \"index\": 0,\n      \"finish_reason\": \"stop\",\n      \"message\": {\n        \"role\": \"assistant\",\n        \"content\": \"{\\\"quality\\\":\\\"high\\\",\\\"score\\\":92}\"\n      }\n    }\n  ],\n  \"usage\": {\"prompt_tokens\": 56, \"completion_tokens\": 14, \"total_tokens\": 70}\n}\n```\n\n## Режим `json_schema`\n\n`response_format: {\"type\": \"json_schema\", \"json_schema\": {...}}` гарантирует, что ответ модели **строго соответствует** заданной JSON Schema — модель не может вернуть лишние поля, пропустить обязательные или перепутать типы. Это строже, чем `json_object`, который гарантирует только корректный JSON.\n\nРежим доступен не на всех моделях. Актуальный список — в ответе [`GET \u002Fv1\u002Fme`](\u002Fdocs\u002Fkeys-auth), поле `ai.structuredOutputs.models`.\n\n## Поля `json_schema`\n\n| Поле | Тип | Обяз. | Описание |\n|------|-----|:-----:|---------|\n| `name` | string | да | Имя схемы. До 64 символов, допустимы `a-zA-Z0-9_-` |\n| `schema` | object | да | Сама JSON Schema |\n| `strict` | boolean | нет | `true` — строгая проверка соответствия схеме. Рекомендуемое значение |\n| `description` | string | нет | Описание схемы для модели, помогает ей верно истолковать поля |\n\n## Пример со схемой\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fchat\u002Fcompletions \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"model\": \"bitrix\u002Fopenai\u002Fgpt-oss-120b\",\n    \"messages\": [\n      {\"role\": \"system\", \"content\": \"Верни строгий JSON по схеме.\"},\n      {\"role\": \"user\", \"content\": \"Привет\"}\n    ],\n    \"response_format\": {\n      \"type\": \"json_schema\",\n      \"json_schema\": {\n        \"name\": \"hello_response\",\n        \"strict\": true,\n        \"schema\": {\n          \"type\": \"object\",\n          \"properties\": {\"message\": {\"type\": \"string\"}},\n          \"required\": [\"message\"],\n          \"additionalProperties\": false\n        }\n      }\n    }\n  }'\n```\n\nПоле `choices[0].message.content` содержит строку, которая разбирается в объект, точно соответствующий схеме — например `{\"message\":\"Привет\"}`.\n\n## Пример ответа при ошибке\n\n`400 model_does_not_support_structured_outputs` — модель не поддерживает `json_schema`. В поле `structuredOutputsModels` приходит список подходящих моделей:\n\n```json\n{\n  \"error\": {\n    \"message\": \"Model 'openai\u002Fo3' does not support response_format=json_schema. Use one of: bitrix\u002Fbitrixgpt-5.5, bitrix\u002Fbitrixgpt-5.5-thinking, openai\u002Fgpt-4o, bitrix\u002Fopenai\u002Fgpt-oss-120b, openai\u002Fgpt-4o-mini.\",\n    \"type\": \"invalid_request_error\",\n    \"code\": \"model_does_not_support_structured_outputs\",\n    \"param\": \"response_format.type\",\n    \"structuredOutputsModels\": [\"bitrix\u002Fbitrixgpt-5.5\", \"bitrix\u002Fbitrixgpt-5.5-thinking\", \"openai\u002Fgpt-4o\", \"bitrix\u002Fopenai\u002Fgpt-oss-120b\", \"openai\u002Fgpt-4o-mini\", \"openai\u002Fo3-mini\"]\n  }\n}\n```\n\n`422 structured_output_truncated` — генерация оборвана по лимиту токенов до полного JSON:\n\n```json\n{\n  \"error\": {\n    \"message\": \"The model's response was cut off (finish_reason=length) before a complete JSON document was produced, so it does not satisfy the requested response_format. Raise max_tokens, or reduce the schema\u002Fprompt size.\",\n    \"type\": \"invalid_request_error\",\n    \"code\": \"structured_output_truncated\",\n    \"hint\": \"For reasoning models, max_tokens must cover the reasoning phase plus the JSON answer.\",\n    \"param\": \"max_tokens\",\n    \"finishReason\": \"length\",\n    \"suggestedMaxTokens\": 2048\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `model_does_not_support_structured_outputs` | Модель не поддерживает `json_schema`. Список подходящих — в поле `structuredOutputsModels` |\n| 422 | `structured_output_truncated` | Модель оборвала генерацию до полного JSON или вернула пустой ответ |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Обрезанный ответ даёт `422 structured_output_truncated`.** Если модель оборвала генерацию до полного JSON (`finish_reason: \"length\"`), запрос с `response_format` возвращает `422` с полями `finishReason` и `suggestedMaxTokens`. Так ведут себя модели с рассуждением: фаза рассуждения расходует бюджет `max_tokens` до того, как модель напишет JSON. Обрабатывайте эту ошибку и повторяйте запрос с увеличенным `max_tokens` — можно взять значение из `suggestedMaxTokens`. Для строгого JSON задавайте `max_tokens` с запасом либо используйте модель без рассуждения.\n\nПоля `suggestedMaxTokens` и `param: \"max_tokens\"` присутствуют **только** при `finish_reason: \"length\"` — они указывают, что помогает увеличение бюджета токенов. Если причина завершения любая другая, а корректного JSON так и нет, ответ тоже `422`, но уже без этих двух полей — увеличение `max_tokens` не поможет, возьмите модель без рассуждения. Строка `hint` и поле `finishReason` есть в обеих ветках, `finishReason` может быть `null`.\n\nЕсли же модель с рассуждением на `json_object` завершилась сама и положила готовый корректный JSON в служебный канал `reasoning_content`, платформа восстанавливает этот JSON и возвращает `200` с ним в `content` — отдельной обработки не требуется.\n\n**Обрезанная попытка тарифицируется.** Ответ `422` приходит после того, как модель отработала, поэтому токены попытки учитываются в статистике расхода [`GET \u002Fv1\u002Fai\u002Fusage`](\u002Fdocs\u002Fai\u002Fconsumption\u002Fusage) и в месячной AI-квоте портала. Повтор с увеличенным `max_tokens` — это ещё один оплачиваемый вызов.\n\n**Заниженный `max_tokens` на бесплатной модели с рассуждением поднимается автоматически.** Если у бесплатной модели с рассуждением запрошен структурированный ответ, а `max_tokens` задан явно и ниже нижней границы, платформа поднимает его до этой границы и сообщает об этом на успешном ответе `200`: в теле появляется массив `warnings` с элементом `{\"code\": \"MAX_TOKENS_RAISED\", \"message\": \"...\"}`. Это не ошибка — читайте `warnings` как необязательное поле. Если `max_tokens` в запросе не задан, правка не применяется.\n\n**В потоковом режиме ошибка (и восстановленный ответ) приходят внутри потока.** Служебное событие `{\"error\":{\"code\":\"structured_output_truncated\"}}` идёт перед `data: [DONE]`. Восстановленный из `reasoning_content` JSON приходит событием потока с полем `content` перед терминальным событием с `finish_reason` — читайте поток до конца.\n\n**`json_object` не проверяет структуру.** Он гарантирует только то, что ответ разберётся как JSON. Набор полей и их типы остаются на усмотрение модели — если структура важна, используйте `json_schema` со `strict: true`.\n\n## Смотрите также\n\n- [Создать чат-комплишен](.\u002Fcompletions.md)\n- [Потоковая передача](.\u002Fstreaming.md)\n- [Вызов функций](.\u002Ftools.md)\n- [Список моделей](\u002Fdocs\u002Fai\u002Fmodels\u002Flist)\n","2026-07-21",{}]