Skip to main content

What this family does

Two resources share this family because they are the same idea seen from both ends. Contradictions are conflicts Exo detected and will not resolve on your behalf. Proposals are connections the background daemon believes exist and will not commit without a decision. Accepting a proposal writes the edge. Rejecting one records the rejection, which is how the daemon learns what this subject does not consider related.

Routes

Headers that apply here

Neither header is declared as an OpenAPI parameter, so neither appears in the generated schema tables.
  • X-Exo-Subject selects which subject the call acts for on the subject-aware routes above. Omit it to act as the key owner. See Subjects.
  • Idempotency-Key makes a retry safe on POST /v1/proposals/{proposal_id}/accept, POST /v1/proposals/{proposal_id}/reject. See Idempotency.

The shape of a call

List open contradictions.
The response:

Traps

Every contradiction is open. The v1 store tracks no resolution state, so filtering status=resolved returns an empty page. Resolve a tension by superseding the side that lost, with POST /v1/graph/nodes/{node_id}/supersede. Both decision routes replay. Accept and reject honour Idempotency-Key, so a retried decision returns the original outcome rather than fighting the first one. Proposals are subject-scoped. A proposal id that belongs to another subject is 404 proposal_not_found.

API reference

Base URL, authentication, and the conventions every route shares.

Errors

The problem envelope and the full code catalogue.