control plane api
Captures
Read access to the evidence: list capture objects under a project (optionally narrowed to one workload), then fetch any single envelope by request id.
Endpoints
| method & path | does |
|---|---|
GET /customer/v1/orgs/:org_id/projects/:project_id/captures | List capture objects for the whole project, newest pages first. Cursor-paginated (limit 1–100, default 25). |
GET .../projects/:project_id/workloads/:workload_id/captures | Same, narrowed to one workload. Pages can come back sparse — the filter applies within each storage page, so keep walking the cursor. |
GET .../projects/:project_id/captures/:request_id | Fetch one full capture envelope by request id. |
List item shape
{
"captures": [
{
"key": "org_.../proj_.../api_key_.../2026/06/12/0190....jsonl",
"request_id": "0190a7c2-7e11-7cc3-a312-9f1b22d40e88",
"uploaded": "2026-06-12T00:00:12Z",
"size": 4821,
"workos_org_id": "org_...",
"workos_api_key_id": "api_key_..." // which key sent it — your env discriminator
}
],
"truncated": true,
"cursor": "opaque — pass back to get the next page"
}The storage key encodes the partition scheme — org, project, key, date — which is also your mental model for how capture volume is organized. The request_id matches the x-understudy-request-id the original response carried.
Detail
The single-capture endpoint returns the full envelope — raw bodies, resolution metadata, your tags. The field-by-field tour lives in Capture.