Summary
- Function and tool calling:
toolsandtool_choiceare silently ignored, so the model never sees them. - Structured outputs and JSON mode:
response_formatis silently ignored. - Vision: image inputs are rejected. Message content must be plain text.
- Audio: no audio input or output, speech synthesis, or transcription.
- Embeddings: no
/v1/embeddingsendpoint.
Available endpoints
Only the endpoints below exist. Every other OpenAI API path returns404 Not Found.
Request parameters
Chat completions requests are validated against an allowlist. Every parameter falls into one of three groups: forwarded to the model, silently ignored, or rejected with a400 error.
Supported
These parameters are accepted and passed through to the model:model,messagestemperature,top_p,top_k,presence_penalty,frequency_penalty,seedmax_tokens,max_completion_tokens,stopn(only1is accepted; any other value is rejected with a400error)stream,stream_options(include_usage,include_obfuscation)logprobs,top_logprobs,userreasoning(object witheffortand/ormax_tokens)reasoning_effort(folded intoreasoning.effort; an explicitreasoning.effortwins)
Silently ignored
The following parameters do not produce an error. For client compatibility, Kyara removes unrecognized top-level parameters from the request instead of rejecting it. Sending
tools or response_format returns a normal text response. The model never sees those fields, so tool calls and structured output simply will not happen.tools,tool_choice,functions,parallel_tool_callsresponse_format(JSON mode and structured outputs)logit_bias,predictionmodalities,audio,web_search_optionsstore,metadata,service_tier
Rejected with an error
The following request shapes return a400 validation error:
- Message
contentthat is not a plain string. Multimodal content arrays containingimage_urlor audio parts are rejected. - Message roles other than
system,developer,user, orassistant. There is notoolrole. - Unknown fields inside
messages,stream_options, orreasoningobjects.
Notes
top_kis accepted as an extension beyond the OpenAI standard; many models support it.- To control reasoning, send
"reasoning": { "effort": "medium" }. The top-levelreasoning_effortalso works and is folded intoreasoning.effort, with an explicitreasoning.effortwinning. - Support for sampling parameters varies per model, so check the catalog.