Durable runs
Typed, observable execution for every multi-query or over-budget selection.
run/1 is the only durable execution resource. It accepts two explicit kinds:
selection: one normalized selection that exceeds the synchronous budget;selection_batch: one shared selection template with 1–1,000 independent reference bindings.
It never accepts an endpoint name, URL, executable expression, container, command, filesystem path, or opaque job payload.
| Intent | Route |
|---|---|
| Validate/estimate | POST /api/v2/runs:estimate |
| Create | POST /api/v2/runs |
| List/retrieve | GET /api/v2/runs, GET /api/v2/runs/{run_id} |
| Items/results/events | GET /api/v2/runs/{run_id}/items, /results, or /events |
| Cancel | POST /api/v2/runs/{run_id}:cancel |
Creation returns 202 Accepted only after the run is durably admitted, with tenant ownership,
pinned releases, initial progress, expiry, and links. An accepted run survives client disconnects
and API service restarts. Use a stable Idempotency-Key; the supported SDK requires one. Reusing a
key with identical canonical content recovers the original run, while reuse with different content
returns 409.
No synchronous batch
There is no /search/batch and no scorer-specific batch route. This prevents an unobservable job
from masquerading as a synchronous request and ensures partial errors never discard valid work.