POST /v1/agents/{agent_id}/run takes two flavours of body. Use JSON for text-only runs;
use multipart/form-data whenever you need to attach files.
Attach one or more files
Send the request asmultipart/form-data and add a files field per attachment.
Either
query or at least one file is required. You can send files with no text query
if the agent’s system prompt fully covers what to do with them.Shape the output with output_config
By default, the agent’s extracted_data follows the key definitions configured in the
dashboard. To override that per-task, send an output_config object:
output_schema: a JSON or natural-language schema describing the desired shape. Strings, numbers, arrays, and nested objects are all supported. This overrides any dashboard-defined keys for this task.instructions: free-text guidance appended to the LLM’s output-format prompt. Use this for hints that don’t fit cleanly in the schema (“dates asYYYY-MM-DD”, “skip header rows”, etc.).
JSON body: text + schema
Multipart body: files + schema
When sending files,output_config is a string field carrying the JSON payload:
Reading the structured result
The schema’d object has its own endpoint./summary returns the agent’s final
written answer and /result returns the whole reasoning transcript — neither is the
structured payload.
Response
200 whenever the task exists in
your workspace, so branch on which field came back rather than on the status code:
Citations: where each value came from
Add?include_citations=true to get the place in the source document each value was
read from, so a field can be linked or highlighted back to the page it came from.
Response
- Keep citations on the agent (Configure → structured output) decides whether citations are produced. Off by default.
include_citations=trueon the request decides whether they are returned.
documents is omitted — not an error.
Reading the boxes:
- Only leaves with a document source get wrapped. A value from a database lookup or computed by the agent stays a plain value, so handle both shapes.
- Prefer
normalized_bounding_box— polygon vertices in0–1, origin top-left. It renders at any scale.bounding_boxis[x1, y1, x2, y2]in absolute pixels and only means something against thewidth/heightfor that file and page indocuments. - Always read
file. A run that split or processed several documents folds them all into one structured output, so a page number alone does not identify a page. - Spreadsheet sources carry
sheet/cell/row/columnand text sources carryline_start/line_endinstead of a box. documents[].urlis time-limited, and absent for a file that cannot be resolved (deleted, or generated by a tool rather than uploaded). The citation is still valid; it just cannot be rendered from that response.
include_citations=true also works on POST /v1/agents/{agent_id}/run with
async=false&result=structured, where the documents block comes back as
result_documents./result if you need the full reasoning trail (every tool call the agent made
along the way). It’s useful during development, overkill in production.