Skip to main content
POST
Assert an edge
Provenance is stamped origin=api (via created_by + directionality_source) and the edge weight/confidence are capped at ASSERTED_EDGE_AUTHORITY_CAP (0.4) so a leaked key cannot inject a dominating edge into the identity graph. NLI contradiction screening is SKIPPED in v1 (documented). Both endpoints must be owned by the effective subject; otherwise 404. Idempotent on the deterministic edge id.

Authorization

This route requires the graph:write scope. A key carrying memory:forget or write also qualifies. A missing or invalid credential returns 401 authentication_error. A valid credential without the scope returns 403 permission_denied, and the problem body names the exact scope required.

Headers

These are request conventions the contract does not declare as parameters, so they do not appear in the schema tables below.

Success responses

Errors

Beyond the shared statuses, this route can answer with idempotency_in_flight, idempotency_key_reuse. Every problem body names its own code, and the type URI always resolves to the matching page. Every error is an RFC 9457 application/problem+json body carrying a stable code, a requestId, and a suggestedAction where Exo has one. See Errors.

Notes

  • Asserted edges are capped. weight and confidence are limited to 0.4, so organic evidence always outranks an assertion and a leaked key cannot inject a dominating edge.
  • Provenance is stamped origin: "api", which is what lets you tell your assertions apart from what Exo inferred.
  • Contradiction screening is skipped in v1. Asserting an edge that conflicts with existing evidence is accepted rather than refused.
  • Idempotent on a deterministic edge id. Asserting the same edge twice does not create two edges.

Authorizations

X-Exo-API-Key
string
header
required

An Exo API key (exo_...) sent as the X-Exo-API-Key header.

Body

application/json

Body for POST /v1/graph/edges. Both endpoints must be owned by the effective subject. weight is capped at ASSERTED_EDGE_AUTHORITY_CAP.

sourceNodeId
string
required
Maximum string length: 512
targetNodeId
string
required
Maximum string length: 512
edgeType
string
default:relates_to
Maximum string length: 200
rationale
string | null
Maximum string length: 4000
weight
number | null

Response

Successful Response

An edge asserted through the API, as stored.

Returned by POST /v1/graph/edges. origin is always api and weight is the capped value actually written (see the asserted-edge authority cap), which may be lower than the weight requested.

edgeType
string
required
id
string
required
sourceNodeId
string
required
targetNodeId
string
required
weight
number
required
origin
string
default:api
rationale
string | null