List evidence
const url = 'https://example.com/api/v1/evidence';const options = { method: 'GET', headers: {cookie: 'bl_%3Cslug%3E_session=%3Cbl_%3Cslug%3E_session%3E'}};
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/api/v1/evidence \ --cookie bl_%3Cslug%3E_session=%3Cbl_%3Cslug%3E_session%3EEntries of the evidence chain, newest first, with the anchor that covers each. Asked for one process, or for a dataplane.* kind, the data plane requests on record are listed too.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Only the evidence of this process; then the data plane requests of the process are listed too.
Only this kind, e.g. dsp.in or dataplane.request.
The next_cursor of the previous page.
At most this many, 1 to 500; default 50.
Rows to skip: pages by number (LIST-6). A cursor pages by seq.
Recorded at or after / at or before (RFC 3339).
The counterparty’s DID.
Search in summary, process id, id and counterparty, ignoring case;
| separates alternatives, and a user’s name finds their pseudonym.
Responses
Section titled “Responses”OK.
A page of a list that also counts all matching rows (the evidence log, LIST-6).
object
An entry of the evidence chain or a data plane request on record, as
the list shows it (documents entry_view and leaf_view).
object
The entry’s place in the chain; for a request, its window’s entry.
In Dutch; pseudonyms replaced by names where known.
Who acted, for administrative entries.
The anchor that covers it, once anchored.
A data plane request (a leaf of a window) rather than a chain entry.
The request’s content moved to the archive.
Pass as cursor for the next page; null on the last page and when paging by offset.
How many rows match the filter, up to a cap.
True when total stopped at the cap: there are at least that many.
Example generated
{ "items": [ { "seq": 1, "id": "example", "at": "2026-04-15T12:00:00Z", "kind": "example", "process_id": "example", "counterparty_did": "example", "summary": "example", "actor_name": "example", "payload_sha256": "example", "prev_hash": "example", "entry_hash": "example", "signature": "example", "counterparty_signature": "example", "anchored_by": "example", "has_payload": true, "meta": "example", "leaf": true, "archived": true } ], "next_cursor": "example", "total": 1, "total_capped": true}No valid session, DPoP-bound token or API key.
The body of every failed call to a management API.
object
object
Stable, machine-readable: invalid_request, unauthenticated,
forbidden, not_found, conflict, upstream_unavailable,
unavailable, internal, or a more specific code of the operation.
For people; may change between versions.
Example
{ "error": { "code": "not_found", "message": "unknown negotiation" }}The caller lacks the role this operation needs; or a change with the session cookie came from a page of another site (cross_site_request, decisions #83).
The body of every failed call to a management API.
object
object
Stable, machine-readable: invalid_request, unauthenticated,
forbidden, not_found, conflict, upstream_unavailable,
unavailable, internal, or a more specific code of the operation.
For people; may change between versions.
Example
{ "error": { "code": "not_found", "message": "unknown negotiation" }}