| id | No | | |
| error | No | Human-readable failure message. Pair with `errorCode` for a stable, machine-readable code an agent runner can branch on. | |
| status | No | | |
| listUsd | No | A2 money stamp: the metered event's LIST price (USD), stamped at the success terminal (exports for deliverable renders, compose_capture for A8 previews). A plan allowance may zero the actual invoice line — this is the list price, never a Stripe charge. Absent while running, on failure, and for x402 orgs (on-chain receipts). Mirrors the get_usage ledger. | |
| category | No | Failure taxonomy when status is `error`; null otherwise. `authoring` = deterministic defect in YOUR composition/request — fix it, retrying is futile; `transient` = temporary pipeline/infra failure — safe to retry_render; `internal` = unexpected server fault — retry once then escalate. Mirrors the render.failed webhook's `category`. | |
| progress | No | Non-terminal render progress; phase is one of the worker's emitted stages. | |
| warnings | No | Non-fatal advisories surfaced at render-CREATE (omitted when none, and on GET — create-time only). | |
| createdAt | No | | |
| errorCode | No | Stable, machine-readable error code (e.g. `render_pipeline_unavailable`, `render_route_missing`, `render_pipeline_failed`). Null when status is not `error` or unavailable for an older render. | |
| outputUrl | No | | |
| retryable | No | Whether re-attempting the SAME render can succeed (status `error`); null otherwise. true → call retry_render. false → deterministic (category authoring/internal); fix the composition first — retry_render alone reproduces it. Mirrors the render.failed webhook's `retryable`. | |
| updatedAt | No | ISO-8601 timestamp of the render's most recent progress update. Compute staleness = now − updatedAt to distinguish a wedged render from a slow one and decide whether to wait, cancel, or retry. | |
| errorDetails | No | Structured failure context — `{ targetUrl?, upstreamStatus?, upstreamCode?, attemptedAt? }`. Surfaced so agent runners can distinguish operator-config issues from upstream-down vs route-missing without parsing `error`. | |
| outputExpiresAt | No | | |