List provenance records
const url = 'https://example.com/v1/provenance?limit=25&scopeKind=tenant';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://example.com/v1/provenance?limit=25&scopeKind=tenant' \ --header 'Authorization: Bearer <token>'Cursor-paginated. Metadata rows only — clients fetch the DAG payload via GET /v1/provenance/{runId}. Fixed sort: createdAt desc, id desc. Filters: ?runId=, ?agentId=, ?flowId=, ?createdAfter=, and scopeKind/scopeId for one project’s records, or every project’s in an org (records from before Kindgi 0.1.3 have no project and are listed only without a scope).
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”1..100. Default 25.
Where the previous page ended: its nextCursor, as it came. A runtime that seals cursors takes one only for the same list, filters and caller, within a day; otherwise 400 bad-input, and the list starts again without it. Absent → first page.
Discriminator for the ?scopeKind + ?scopeId + ?inherit triplet. Tenant carries no id (implicit from session); org/project require scopeId.
Optional scope discriminator. If absent, no scope filter is applied.
Required IF scopeKind is org or project. MUST be absent if scopeKind=tenant (the workspace is implicit from the session). Malformed combinations return 400 scope-invalid.
Filter records to this run id (exact match).
Only the records of this agent’s turns, at any version: the agent the record’s run names, as GET /v1/runs?agentId= matches it. Turns that ran before Kindgi 0.1.3 don’t name their agent and aren’t matched.
Only the records of this flow’s runs, at any version (flowRef.id, exact match). An agent’s turns aren’t matched: use agentId for those.
ISO 8601 timestamp; return records created strictly after this.
Responses
Section titled “Responses”Page of records.
object
Lightweight metadata row returned by list. Excludes the full DAG payload — clients fetch the DAG via GET /v1/provenance/{runId}.
object
Schema version of the record document (semver).
object
True when the emission-time signature is present. Independent of whether the export route can produce a signed bundle.
The project of the record’s run. Absent on records from before Kindgi 0.1.3; those are listed only without a scope.
The flow, on every page of a list asked for with ?flowId=, an empty one too: it holds only that flow’s runs’ records. Absent from a runtime that doesn’t list records by flow, which ignores flowId and lists them all.
Examplegenerated
{ "data": [ { "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "runId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "tenantId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "version": "example", "flowRef": { "id": "example", "version": "example" }, "signed": true, "createdAt": "2026-04-15T12:00:00Z", "projectId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" } ], "hasMore": true, "nextCursor": "example", "flowId": "example"}Malformed cursor, createdAfter timestamp or scope.
object
object
Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).
Optional, kind-specific.
object
Server-assigned request id; also echoed via X-Request-Id header.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": {}, "requestId": "example" }}Missing / malformed / expired / revoked bearer token.
object
object
Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).
Optional, kind-specific.
object
Server-assigned request id; also echoed via X-Request-Id header.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": {}, "requestId": "example" }}The database was too busy to answer in time (database-busy); Retry-After (whole seconds) says when to try again.
object
object
Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).
Optional, kind-specific.
object
Server-assigned request id; also echoed via X-Request-Id header.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": {}, "requestId": "example" }}