Обе используют minimal/low/medium/high/xhigh/max, без параметра всё равно рассуждают; none возвращает 400
max_completion_tokens
Мысли и видимый ответ делят бюджет; старый псевдоним max_tokens принят, не max_output_tokens Responses
temperature/top_p
Диапазоны 0~2, (0,1], оба по умолчанию 1; оставьте их или меняйте одно. top_p: 0 даёт 400
n
Только 1; больше 1 возвращает 400
Несовместимые настройки
stop, verbosity, logit_bias, prediction, modalities, audio, web_search_options не поддерживаются; не копируйте общие примеры
Штрафы и Logprobs
frequency_penalty/presence_penalty не поддерживается и может дать ошибку; logprobs: true возвращает 400
tool_choice
Только auto; none, required, конкретная функция дают 400. Имя функции — максимум одна точка
reasoning_content
Внешний нативный API не возвращает читаемые оригинальные мысли; не храните их этим полем. Используйте Responses / Messages
strict
Функции и структура по умолчанию false; при включении каждый объект требует additionalProperties: false, все свойства в required; корень простой объект без oneOf/allOf
Обязательно, минимум 1; бюджет мыслей/ответа, не имя и минимум Responses
thinking/output_config.effort
Рекомендуется thinking.type: adaptive с low/medium/high/xhigh/max; ни minimal, ни disabled не выключают мысли
thinking.budget_tokens
Старое enabled принято, не задаёт глубину; бюджет не меньше 1024 и меньше max_tokens; глубина через output_config.effort
thinking.display
summarized — сводка, omitted — только шифрование; передавайте блоки неизменными, особенно redacted_thinking
temperature
Диапазон 0~1, не максимум Chat / Responses; обычно исключайте семплирование
Несовместимые поля
top_k, stop_sequences, inference_geo явно не поддерживаются и отвергаются
tool_choice
Принимается auto/any/none, не {type: "tool"} для конкретного инструмента; disable_parallel_tool_use: true ограничивает параллельность
output_config.format
Структура через {type: "json_schema", schema: ...}; citations.enabled: true блока document не поддерживается
Поиск и история
Поиск web_search; allowed_domains/blocked_domains/max_uses возвращает 400. Нативный Messages не хранит диалог; каждый тур все сообщения/результаты, аналога previous_response_id нет
Без переключателя; стабильные инструкции, примеры, материалы сначала, переменное позже, префикс одинаковый
prompt_cache_key
Необязательный ID группы Chat / Responses по общему префиксу; не создавайте отдельный каждому пользователю/запросу, рассеивая маршруты
prompt_cache_retention
Responses использует in_memory/24h как подсказку хранения, управляемую сервером; не новые поля OpenAI и не устаревшее
cache_control
Messages принимает метки сверху, в блоках/инструментах; ttl только 5m, не 1h Claude
Использование кеша
Chat usage.prompt_tokens_details.cached_tokens, Responses usage.input_tokens_details.cached_tokens, Messages usage.cache_read_input_tokens; ID не доказывает попадания