API reference
Responses API
POST /v1/responses, translated onto chat completions. For the SDKs that use that path by default.
Last updated: 2026-10-03
POST /v1/responses is available. It is for anyone whose SDK sends text to
that path instead of /v1/chat/completions — the official Laravel package does,
and recent versions of the OpenAI Python library encourage it.
curl https://api.ai.itsincom.org/v1/responses \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gemma-4-26b","input":"Summarise in one line: ..."}'
The response has the shape of the Responses API, including output_text so
that you do not have to walk output:
{
"id": "resp_…",
"object": "response",
"status": "completed",
"output": [{"type":"message","role":"assistant","content":[{"type":"output_text","text":"…"}]}],
"output_text": "…",
"usage": {"input_tokens": 19, "output_tokens": 3, "total_tokens": 22}
}
What is supported
| field | notes |
|---|---|
input |
a string, or a list of messages with role and content |
instructions |
becomes the system message |
max_output_tokens, temperature, top_p |
|
text.format |
json_object and json_schema, with the same constraint as guaranteed JSON |
tools |
in the Responses API shape, with name and parameters at the top level |
tool_choice |
auto, none, required, or {"type":"function","name":"…"} |
Function calls come out as items of output with "type": "function_call",
not inside the message: it is the difference that wastes the most time when
moving from one dialect to the other.
What is not supported
Streaming. "stream": true answers 501 with
code: stream_not_implemented. For streaming use /v1/chat/completions,
which sends the chunks in the OpenAI format.
Server-side state. There is none: previous_response_id and store do not
exist, and you send the whole conversation every time. The state is yours.
What the request log keeps, and for how long, is in
Sovereignty.
Our own tools — web search, code interpreter — do not exist. tools
accepts only your own functions.
It is not a second engine
It is a translator: the request is passed to /v1/chat/completions and the
response rewritten. So there are no two paths to keep aligned, which is how this
kind of compatibility stops working after three months. If something works on
chat completions it works here, and the other way round.