What comes back: the node’s graph position, title, metadata and authority.
What does not: its content. Forget is an erasure verb, so it deleted the
node’s text outright and nothing can undo that. Edges removed around the
node stay removed. The restored node is therefore visible and linkable but
contributes no retrievable text until you write new content to it with
PATCH /v1/graph/nodes/{id}.Past the 30-day undelete window a tombstone is gone by contract, so this
returns exactly the same 404 as a node that never existed, whether or not
the garbage collector has physically removed the row yet. Restoring a node
that is not tombstoned is a no-op success (restored: false), so a
retried undelete is always safe. A node not owned by the effective subject
is 404.
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.
A dependency is temporarily unavailable. Safe to retry.
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.
restored is true when this call cleared a tombstone and false when the
node was already live (a no-op success). contentRestored is ALWAYS
false: forget erases the node's text, and no undelete can bring it back.
deletedAt is the tombstone this call cleared, null on the no-op.