curl --request POST \
--url https://api.example.com/api/v2/responses \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"attachments": [
{
"ref": "<string>",
"mime_type": "<string>",
"name": "<string>"
}
],
"input": "<string>",
"locale": "<string>",
"metadata": {},
"request_context": {},
"knowledge_policy": "auto",
"memory_policy": "auto",
"preview": false,
"stream": false,
"timeout_ms": 60000,
"tool_policy": "auto",
"agent": "<string>",
"external_ref": "<string>",
"options": {
"knowledge_policy": "auto",
"memory_policy": "auto",
"preview": false,
"stream": false,
"timeout_ms": 60000,
"tool_policy": "auto"
}
}
'import requests
url = "https://api.example.com/api/v2/responses"
payload = {
"attachments": [
{
"ref": "<string>",
"mime_type": "<string>",
"name": "<string>"
}
],
"input": "<string>",
"locale": "<string>",
"metadata": {},
"request_context": {},
"knowledge_policy": "auto",
"memory_policy": "auto",
"preview": False,
"stream": False,
"timeout_ms": 60000,
"tool_policy": "auto",
"agent": "<string>",
"external_ref": "<string>",
"options": {
"knowledge_policy": "auto",
"memory_policy": "auto",
"preview": False,
"stream": False,
"timeout_ms": 60000,
"tool_policy": "auto"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
attachments: [{ref: '<string>', mime_type: '<string>', name: '<string>'}],
input: '<string>',
locale: '<string>',
metadata: {},
request_context: {},
knowledge_policy: 'auto',
memory_policy: 'auto',
preview: false,
stream: false,
timeout_ms: 60000,
tool_policy: 'auto',
agent: '<string>',
external_ref: '<string>',
options: {
knowledge_policy: 'auto',
memory_policy: 'auto',
preview: false,
stream: false,
timeout_ms: 60000,
tool_policy: 'auto'
}
})
};
fetch('https://api.example.com/api/v2/responses', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/v2/responses",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'attachments' => [
[
'ref' => '<string>',
'mime_type' => '<string>',
'name' => '<string>'
]
],
'input' => '<string>',
'locale' => '<string>',
'metadata' => [
],
'request_context' => [
],
'knowledge_policy' => 'auto',
'memory_policy' => 'auto',
'preview' => false,
'stream' => false,
'timeout_ms' => 60000,
'tool_policy' => 'auto',
'agent' => '<string>',
'external_ref' => '<string>',
'options' => [
'knowledge_policy' => 'auto',
'memory_policy' => 'auto',
'preview' => false,
'stream' => false,
'timeout_ms' => 60000,
'tool_policy' => 'auto'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v2/responses"
payload := strings.NewReader("{\n \"attachments\": [\n {\n \"ref\": \"<string>\",\n \"mime_type\": \"<string>\",\n \"name\": \"<string>\"\n }\n ],\n \"input\": \"<string>\",\n \"locale\": \"<string>\",\n \"metadata\": {},\n \"request_context\": {},\n \"knowledge_policy\": \"auto\",\n \"memory_policy\": \"auto\",\n \"preview\": false,\n \"stream\": false,\n \"timeout_ms\": 60000,\n \"tool_policy\": \"auto\",\n \"agent\": \"<string>\",\n \"external_ref\": \"<string>\",\n \"options\": {\n \"knowledge_policy\": \"auto\",\n \"memory_policy\": \"auto\",\n \"preview\": false,\n \"stream\": false,\n \"timeout_ms\": 60000,\n \"tool_policy\": \"auto\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/api/v2/responses")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"attachments\": [\n {\n \"ref\": \"<string>\",\n \"mime_type\": \"<string>\",\n \"name\": \"<string>\"\n }\n ],\n \"input\": \"<string>\",\n \"locale\": \"<string>\",\n \"metadata\": {},\n \"request_context\": {},\n \"knowledge_policy\": \"auto\",\n \"memory_policy\": \"auto\",\n \"preview\": false,\n \"stream\": false,\n \"timeout_ms\": 60000,\n \"tool_policy\": \"auto\",\n \"agent\": \"<string>\",\n \"external_ref\": \"<string>\",\n \"options\": {\n \"knowledge_policy\": \"auto\",\n \"memory_policy\": \"auto\",\n \"preview\": false,\n \"stream\": false,\n \"timeout_ms\": 60000,\n \"tool_policy\": \"auto\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v2/responses")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"attachments\": [\n {\n \"ref\": \"<string>\",\n \"mime_type\": \"<string>\",\n \"name\": \"<string>\"\n }\n ],\n \"input\": \"<string>\",\n \"locale\": \"<string>\",\n \"metadata\": {},\n \"request_context\": {},\n \"knowledge_policy\": \"auto\",\n \"memory_policy\": \"auto\",\n \"preview\": false,\n \"stream\": false,\n \"timeout_ms\": 60000,\n \"tool_policy\": \"auto\",\n \"agent\": \"<string>\",\n \"external_ref\": \"<string>\",\n \"options\": {\n \"knowledge_policy\": \"auto\",\n \"memory_policy\": \"auto\",\n \"preview\": false,\n \"stream\": false,\n \"timeout_ms\": 60000,\n \"tool_policy\": \"auto\"\n }\n}"
response = http.request(request)
puts response.read_body{
"agent": "<string>",
"agent_version": 123,
"conversation": "<string>",
"id": "<string>",
"metadata": {},
"output": [
{
"json": "<unknown>",
"text": "<string>",
"type": "text"
}
],
"request_id": "<string>",
"status": "queued",
"trace_id": "<string>",
"usage": {
"cached_tokens": 123,
"input_tokens": 123,
"output_tokens": 123,
"total_tokens": 123
}
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}Post apiv2responses
POST /api/v2/responses — the general-purpose execution endpoint (§6).
Stateless from the caller’s side: no conversation is named and none comes
back. runtime.execution.StatelessRunner opens one internally on the
api channel because a turn needs somewhere to live, and writes no
messages to it — so the request leaves a record that it happened and what
it cost, and no copy of what was said.
Required scope: responses:create. A key without it is a 403 naming the scope; the endpoint is never silently skipped.
Idempotency. Send Idempotency-Key to make a retry safe.
- Same key, same body → the stored response, byte for byte, including its status. Some resources therefore replay 200 where the first call answered 201 or 202: the second call created nothing, and saying otherwise would be a lie a client acts on.
Idempotency-Replayed: trueis on the replay, which is how a client answers “did my retry actually run?” from the response alone. The header is not spelled the same on every endpoint — this one usesIdempotency-Replayed. Read each operation rather than assuming one name across the surface. - Same key, different body → 409
idempotency_conflict. Never a replay: returning the earlier answer for a request that does not match it turns a client-side key collision into a silently wrong result.
A key is scoped by endpoint, environment and caller identity — never by tenant alone, so two end users of one embedded application both sending Idempotency-Key: 1 cannot meet.
curl --request POST \
--url https://api.example.com/api/v2/responses \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"attachments": [
{
"ref": "<string>",
"mime_type": "<string>",
"name": "<string>"
}
],
"input": "<string>",
"locale": "<string>",
"metadata": {},
"request_context": {},
"knowledge_policy": "auto",
"memory_policy": "auto",
"preview": false,
"stream": false,
"timeout_ms": 60000,
"tool_policy": "auto",
"agent": "<string>",
"external_ref": "<string>",
"options": {
"knowledge_policy": "auto",
"memory_policy": "auto",
"preview": false,
"stream": false,
"timeout_ms": 60000,
"tool_policy": "auto"
}
}
'import requests
url = "https://api.example.com/api/v2/responses"
payload = {
"attachments": [
{
"ref": "<string>",
"mime_type": "<string>",
"name": "<string>"
}
],
"input": "<string>",
"locale": "<string>",
"metadata": {},
"request_context": {},
"knowledge_policy": "auto",
"memory_policy": "auto",
"preview": False,
"stream": False,
"timeout_ms": 60000,
"tool_policy": "auto",
"agent": "<string>",
"external_ref": "<string>",
"options": {
"knowledge_policy": "auto",
"memory_policy": "auto",
"preview": False,
"stream": False,
"timeout_ms": 60000,
"tool_policy": "auto"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
attachments: [{ref: '<string>', mime_type: '<string>', name: '<string>'}],
input: '<string>',
locale: '<string>',
metadata: {},
request_context: {},
knowledge_policy: 'auto',
memory_policy: 'auto',
preview: false,
stream: false,
timeout_ms: 60000,
tool_policy: 'auto',
agent: '<string>',
external_ref: '<string>',
options: {
knowledge_policy: 'auto',
memory_policy: 'auto',
preview: false,
stream: false,
timeout_ms: 60000,
tool_policy: 'auto'
}
})
};
fetch('https://api.example.com/api/v2/responses', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/v2/responses",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'attachments' => [
[
'ref' => '<string>',
'mime_type' => '<string>',
'name' => '<string>'
]
],
'input' => '<string>',
'locale' => '<string>',
'metadata' => [
],
'request_context' => [
],
'knowledge_policy' => 'auto',
'memory_policy' => 'auto',
'preview' => false,
'stream' => false,
'timeout_ms' => 60000,
'tool_policy' => 'auto',
'agent' => '<string>',
'external_ref' => '<string>',
'options' => [
'knowledge_policy' => 'auto',
'memory_policy' => 'auto',
'preview' => false,
'stream' => false,
'timeout_ms' => 60000,
'tool_policy' => 'auto'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v2/responses"
payload := strings.NewReader("{\n \"attachments\": [\n {\n \"ref\": \"<string>\",\n \"mime_type\": \"<string>\",\n \"name\": \"<string>\"\n }\n ],\n \"input\": \"<string>\",\n \"locale\": \"<string>\",\n \"metadata\": {},\n \"request_context\": {},\n \"knowledge_policy\": \"auto\",\n \"memory_policy\": \"auto\",\n \"preview\": false,\n \"stream\": false,\n \"timeout_ms\": 60000,\n \"tool_policy\": \"auto\",\n \"agent\": \"<string>\",\n \"external_ref\": \"<string>\",\n \"options\": {\n \"knowledge_policy\": \"auto\",\n \"memory_policy\": \"auto\",\n \"preview\": false,\n \"stream\": false,\n \"timeout_ms\": 60000,\n \"tool_policy\": \"auto\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/api/v2/responses")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"attachments\": [\n {\n \"ref\": \"<string>\",\n \"mime_type\": \"<string>\",\n \"name\": \"<string>\"\n }\n ],\n \"input\": \"<string>\",\n \"locale\": \"<string>\",\n \"metadata\": {},\n \"request_context\": {},\n \"knowledge_policy\": \"auto\",\n \"memory_policy\": \"auto\",\n \"preview\": false,\n \"stream\": false,\n \"timeout_ms\": 60000,\n \"tool_policy\": \"auto\",\n \"agent\": \"<string>\",\n \"external_ref\": \"<string>\",\n \"options\": {\n \"knowledge_policy\": \"auto\",\n \"memory_policy\": \"auto\",\n \"preview\": false,\n \"stream\": false,\n \"timeout_ms\": 60000,\n \"tool_policy\": \"auto\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v2/responses")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"attachments\": [\n {\n \"ref\": \"<string>\",\n \"mime_type\": \"<string>\",\n \"name\": \"<string>\"\n }\n ],\n \"input\": \"<string>\",\n \"locale\": \"<string>\",\n \"metadata\": {},\n \"request_context\": {},\n \"knowledge_policy\": \"auto\",\n \"memory_policy\": \"auto\",\n \"preview\": false,\n \"stream\": false,\n \"timeout_ms\": 60000,\n \"tool_policy\": \"auto\",\n \"agent\": \"<string>\",\n \"external_ref\": \"<string>\",\n \"options\": {\n \"knowledge_policy\": \"auto\",\n \"memory_policy\": \"auto\",\n \"preview\": false,\n \"stream\": false,\n \"timeout_ms\": 60000,\n \"tool_policy\": \"auto\"\n }\n}"
response = http.request(request)
puts response.read_body{
"agent": "<string>",
"agent_version": 123,
"conversation": "<string>",
"id": "<string>",
"metadata": {},
"output": [
{
"json": "<unknown>",
"text": "<string>",
"type": "text"
}
],
"request_id": "<string>",
"status": "queued",
"trace_id": "<string>",
"usage": {
"cached_tokens": 123,
"input_tokens": 123,
"output_tokens": 123,
"total_tokens": 123
}
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}{
"error": {
"code": "agent_not_available",
"message": "<string>",
"request_id": "<string>"
},
"id": "<string>",
"status": "queued",
"trace_id": "<string>"
}Authorizations
A managed API key, sent as Authorization: Bearer <key>. A workspace key is prefixed tgcc_; a reseller key is prefixed tgpk_. Keys carry scopes; the scope each operation demands is on the operation as x-required-scope.
Headers
A key of your own choosing, so a retry cannot create a second of anything. Replayable for 24 hours. An unfinished claim is released after 15 minutes, so a request that died mid-flight does not block its own retry.
255Body
Options may be sent flat in the body or nested under options; both are read and the nested value wins. An unrecognised key inside options is a 400.
The fields below are the complete set a caller may set. These are refused by name with a 400 explaining why, because the caller must not be able to override the runtime's security or billing behaviour:
billing_account— Billing is derived from the authenticated tenant.idempotency_key— Send an Idempotency-Key header instead.instructions— Prompt assembly is the runtime's, not the caller's.knowledge_groups— Knowledge scope comes from the agent and the caller's own authorization.max_tokens— Token limits are not caller-controlled.memory_namespace— Memory namespacing is derived from the execution context.model— Model selection is decided by runtime routing.prompt— Prompt assembly is the runtime's, not the caller's.provider— Provider selection is decided by runtime routing.request_id— Request ids are minted by the runtime.system_prompt— Prompt assembly is the runtime's, not the caller's.temperature— Sampling parameters are not caller-controlled.tools— Tool availability comes from the agent configuration.top_p— Sampling parameters are not caller-controlled.trace_id— Trace ids are minted by the runtime.usage_category— Billing is derived from the authenticated tenant.
Show child attributes
Show child attributes
How the request arrived. "" means "not stated" and falls through to the conversation's own channel — it is not a synonym for api, because the channel decides both rendering and which ledger line the turn bills to.
, api, web, website, whatsapp, phone, voice Caller-supplied context. The one key the runtime acts on is resource_id, which narrows the execution context to that resource — and raises rather than narrowing to nothing when the caller could not reach it.
These three can only ever subtract. There is no value meaning "retrieve more than this agent is configured for".
auto, none, required auto, none Run the agent's unpublished configuration (§94). Asking is free; being allowed is not. A machine caller needs the agent:preview scope, which is issued on its own and is not implied by any other — a key that may edit an assistant does not thereby preview its drafts.
Without permission the answer is 404, not 403: confirming that a draft exists but may not be run is the confirmation the not-found rule exists to withhold.
Statuses a preview run may execute: active, draft, paused, preview. Without preview, only active.
Ask for structured output (§31). json_schema validates the model's output against schema and retries a mismatch once before failing with 422 structured_output_failed, which names the paths that did not match. The bound is read before the run starts, so the number of model calls a structured request can cost is knowable in advance.
The schema is checked when the request is parsed — before authorization, before the idempotency claim, and before any spend — so a schema this runtime cannot enforce is a 400 rather than a charge. strict is accepted only as true: there is no mode in which a schema is requested and not enforced.
text, json_object, json_schema Answer with Server-Sent Events rather than one JSON body. The event contract is in this document's description; a failure that happens before the first event is still an ordinary JSON error with its own status code.
Out of range is refused, not clamped: a caller who asked for ten minutes and silently got sixty seconds reads the resulting timeout as a platform fault.
1000 <= x <= 120000auto, none, required The assistant to run. Required by /responses; taken from the URL by /agents/{agent_id}/runs, and from the conversation when posting a message — a body that named a different one there would be a request to run somebody else's assistant on this transcript.
Your own id for a conversation (§46). Resolving the same one twice returns the same conversation rather than a second beside it. Printable, no newlines.
200Options may be sent flat in the body or nested under options; both are read and the nested value wins. An unrecognised key inside options is a 400.
The fields below are the complete set a caller may set. These are refused by name with a 400 explaining why, because the caller must not be able to override the runtime's security or billing behaviour:
billing_account— Billing is derived from the authenticated tenant.idempotency_key— Send an Idempotency-Key header instead.instructions— Prompt assembly is the runtime's, not the caller's.knowledge_groups— Knowledge scope comes from the agent and the caller's own authorization.max_tokens— Token limits are not caller-controlled.memory_namespace— Memory namespacing is derived from the execution context.model— Model selection is decided by runtime routing.prompt— Prompt assembly is the runtime's, not the caller's.provider— Provider selection is decided by runtime routing.request_id— Request ids are minted by the runtime.system_prompt— Prompt assembly is the runtime's, not the caller's.temperature— Sampling parameters are not caller-controlled.tools— Tool availability comes from the agent configuration.top_p— Sampling parameters are not caller-controlled.trace_id— Trace ids are minted by the runtime.usage_category— Billing is derived from the authenticated tenant.
Show child attributes
Show child attributes
Response
The run completed, or ended in a status the response object names. With "stream": true the body is Server-Sent Events instead; see the event contract in this document's description. A failure that happens before the first event is an ordinary JSON error with its own status — the stream only becomes a 200 once a byte is on the wire.
§33's response object. output is an array because a run can produce more than one thing — prose plus a structured object, or a refusal — and a contract that starts as a string has nowhere to put the second one.
Omitted by POST /api/v2/responses, which is stateless: it opens an internal conversation so the turn has somewhere to live, writes no messages to it, and returns no id.
The public run id, run_…. Database primary keys are never exposed.
Show child attributes
Show child attributes
queued, running, completed, failed, cancelled, blocked Show child attributes
Show child attributes

