Chat Completion Object
/v1/chat/completions returns chat.completion for non-streaming requests and chat.completion.chunk for streaming requests.
This page focuses on the most stable, broadly useful OpenAI-compatible response structure on Crazyrouter today.
Non-streaming object
Minimal production request:cURL
How to read it
message.contentis the final text answermessage.tool_callsonly appears when the model is requesting tool executionmessage.reasoning_contentmay appear for some models or routes, but should not currently be treated as a guaranteed field
Streaming object
For streaming requests, the server returnschat.completion.chunk SSE events:
Fields you will usually care about
| Field | Meaning |
|---|---|
object | chat.completion for non-streaming, chat.completion.chunk for streaming |
model | The actual model used for the response |
choices[].message.content | Final non-streaming text |
choices[].message.tool_calls | Non-streaming tool requests |
choices[].delta.content | Streaming text delta |
choices[].finish_reason | Stop reason such as stop, length, or tool_calls |
Upstream models may pass through extra fields. Client code should rely on the stable common fields first rather than assuming every model exposes the same extensions.