Skip to main content

Endpoints

Assertions are source claims with evidence spans and resolved identity links. Resolution status describes processing of the claim; resolved does not prove that the claim is true. See assertion concepts for the lifecycle and the distinction from truth maintenance.

Search Assertions

POST /v1/assertions/search Search assertions using text or resolved entity links, with optional status, source, and predicate filters. Prefer identity filters when you already know the entity; text search also helps find unresolved mentions. Search requires read:assertion; a missing scope returns 403 even when no records match. Results, counts, and pagination are computed after record authorization, including searches filtered by entity links. total counts authorized matches in the current scan. Without a text query, it counts matches remaining after the supplied cursor; with a text query, it counts all authorized matches before the page offset is applied. Continue with the returned cursor unchanged and the same filters while has_more is true.
string
Text query over subject, predicate, object text, and object literal.
string
Resolved entity ID appearing as either subject or object.
string
Resolved subject entity ID.
string
Resolved object entity ID.
string
Filter by resolution status. One of: pending, resolved, partial, abstained, failed, superseded.
string
Filter by source record ID.
string
Filter by predicate string (e.g., works_at).
boolean
default:"false"
Include soft-deleted assertions.
integer
default:"50"
Maximum results to return.
string
Pagination cursor from a previous response.

Create Assertion

POST /v1/assertions accepts a complete Assertion record and returns 201 with the stored record. It does not generate evidence or queue extraction from a three-field claim. Prefer document ingestion when adding new source material. The JSON body must include the common record fields (id, space_id, created_at, updated_at, created_by, provenance, and security) plus these assertion fields: evidence requires revision (a document revision record ID), start, end, and quote_hash; node is optional. Supply verified offsets and a hash of the actual source quote. Do not invent provenance to satisfy this schema. Optional fields include predicate_id, source_event_time, resolution_status (default pending), subject_entity, object_entity, confidence, and resolution metadata. Returned search/get examples below are abbreviated; full records include all required fields.

Get Assertion

GET /v1/assertions/{id} Retrieve a single assertion by its ID.
string
required
Assertion record ID (e.g., assertion:550e8400-...).

Delete and restore

DELETE /v1/assertions/{id} requires write:assertion and record write authorization. It sets deleted_at and returns 204 without a record body. Ordinary reads then return 404; search excludes the record unless the caller requests include_deleted and is authorized to read it. Deleting an already deleted or missing assertion returns 404. POST /v1/assertions/{id}/restore clears the soft-deletion marker and returns the assertion as JSON. It requires both write:assertion and read:assertion with their record checks before changing the row. A write-only caller receives 403, including when the requested row is already active. A missing row in the caller’s space returns 404. Restoration retains the existing security classification and evidence; it does not create a new extraction or adjudicate the claim. Delete, restore, and resolution updates can return 409 if authorization fields or the soft-deletion marker change before the write. See authorization conflicts.

Update Resolution Status

PATCH /v1/assertions/{id}/resolution Update the resolution status of an existing assertion. Because the response contains the existing assertion’s content, this route requires both write:assertion and read:assertion with their record checks before changing the status. A write-only caller receives 403 without a status change. Changing this field alone does not resolve entity references, generate evidence, or perform truth adjudication. The update writes the resolution status and supplied rationale without replacing security, subjects, entity links, or evidence. Omitting rationale keeps the stored retry_state.abstention_reason unchanged.
string
required
Assertion record ID.
string
required
New resolution status. One of: pending, resolved, partial, abstained, failed, superseded.
string
Optional rationale for the status change.