reports:create. Answers 202 with a job_id.
The resource is deliberately generic
There is noreport_type naming anyone’s product, and no column only one design
partner would populate. The domain lives in three places that are all yours:
- which agent runs it — your assistant, your persona, your knowledge
- what you asked it for —
task - what you pointed it at —
inputs.documents,inputs.data
Text or JSON
format decides which output column is authoritative.
format: text — the default
format: text — the default
Prose.
output.text carries it.format: json — with a schema
format: json — with a schema
output.data carries the result.Reading one
output key is present whether you are reading a listing or a detail. What
changes is whether the body is in it or only its size — so a client parses one
shape.
On the detail endpoint both text and data are always present, so you do
not have to branch on format to know which to read, and so a text report is
visibly not carrying an empty JSON object.
Four statuses, and the job has five
The report saysprocessing, completed, failed or cancelled. That is the
resource.
“Queued behind three others” and “on attempt two of three” are real questions
with real answers, and they are one dereference away under
generation.job_id:
jobs:read. See Jobs. The resource and the job are two
different things, and duplicating the job’s vocabulary into the resource would
mean keeping two in step.
Listing
reports:read. Returns next_cursor, read back as cursor. Listings
carry output without its body.
There is no delete
Three endpoints exist and none of them removes anything. There is noreports:delete scope to be issued.
Retention for generated analysis is a real decision that has not been made — a
report is model output over customer content, so it may end up following the
conversation retention rules. A soft-delete column nothing writes to would be a
promise this API has not made, so there is not one.
Isolation
A report belongs to a(workspace, application, environment) triple, the same as
a document. A development credential does not reach a production
report even when both name the same workspace.
Idempotency
POST /reports sets Idempotent-Replay: true on a replay — not
Idempotency-Replayed, which is what the runtime endpoints use.
