Canon

Record a claim about a subject

Appends an assertion. Existing assertions are never edited or deleted — a retraction is a new assertion with retract: true, and supersedes must name a SAME-SUBJECT assertion id (supersession is by exact subject identity, never by similarity).

governing_resource and fence travel together (both or neither): the write lands only while that fence is the one currently held for the resource, so a stale fence records nothing and answers 403.

Requested authority is clamped server-side to the credential's ceiling; the response reports the authority actually recorded.

Requires the coord:write scope on the presented credential. Enforced by Kairos on this surface — the gateway forwards the credential without inspecting it. A credential with no scope record resolves to LEGACY_DEFAULT, which does NOT include coord:write: mint a key with it explicitly (POST /v2/workspaces/{id}/keys) or grant it through OAuth consent.

Canon — the coordination layer. Where memory answers what do my agents know, Canon answers what do my agents agree is true: an append-only assertion store with enforced authority ordering (operator > observation > inference — authority outranks recency), bitemporal reads (valid time vs transaction time), explicit contested state, and advisory claims with fencing tokens.

Proxied verbatim to Kairos; the gateway authenticates and parses NOTHING here, so the Authorization header goes upstream untouched and Kairos is the sole authority — the same terms as /v1. Either il_* credential is accepted; a Supabase session JWT is not.

Canon is optional per deployment, and detectable. Where it is not enabled, EVERY /coord/v1 path answers 404 — including the four verbs below — and the gateway forwards that 404 unchanged rather than substituting an error of its own. The memory API is completely unaffected either way: enabling or disabling Canon changes nothing about /v1, /v2 or /mcp. Probe GET /coord/v1/healthz (or read capabilities.canon from GET /v2/me) before relying on Canon.

post/coord/v1/assert

Request

  • Base URL: https://api.infolang.ai
  • URL: https://api.infolang.ai/coord/v1/assert
  • Auth: one of:
    • HTTP bearer
    • HTTP bearer

Request body

subjectstring required

Exact identity of the thing being asserted about. Never resolved by similarity — supersession requires naming the same subject exactly

claimunknown
mode'correct' | 'update' | 'refine' | 'escalate' required
authority'inference' | 'observation' | 'operator' required

REQUESTED authority. Clamped server-side to the calling credential's ceiling; the response reports what was actually recorded, which may be lower

retractboolean

A retraction is a NEW assertion, not a delete — the store is append-only and nothing is ever edited away

valid_timestring date-time
evidencestring[]
supersedesstring

Id of a SAME-SUBJECT assertion this one supersedes

governing_resourcestring

Resource whose held claim protects this write. Must be sent together with fence — both or neither

fenceinteger

Fencing token from claim. Required iff governing_resource is set

Response

Recorded. authority is what was STORED, not necessarily what was requested

idstring required
authority'inference' | 'observation' | 'operator' required

Authority actually RECORDED — may be lower than requested

similar_existing_subjectsstring[]

Write-time drift advisory: close existing subjects. A pointer only — nothing was merged, and nothing will be

mirroredboolean
broadcastboolean

Changes

No recorded changes to this operation across all 1 revision of this API.