> ## Documentation Index
> Fetch the complete documentation index at: https://docs.get-exo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a graph node

> Drill into one knowledge-graph node: its metadata, the full text of its chunks, and up to 100 of its strongest edges with the neighbouring node labels resolved.

Scoped to the effective subject (the API key owner by default, or the subject named by `X-Exo-Subject`). A node belonging to another subject or another org returns 404.

## Authorization

This route requires the `read` scope.

A missing or invalid credential returns 401 [`authentication_error`](/errors/authentication_error). A valid credential without the scope returns 403 [`permission_denied`](/errors/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.

| Header            | Applies        | What it does                                                                                                                                           |
| ----------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `X-Exo-API-Key`   | Required       | Your Exo API key, `exo_<env>_<token>`. `Authorization: Bearer exo_...` is accepted as an alternate.                                                    |
| `X-Exo-Subject`   | Optional       | Acts for a provisioned subject instead of the key owner. An unprovisioned id returns 403 [`subject_not_provisioned`](/errors/subject_not_provisioned). |
| `Idempotency-Key` | Not applicable | The replay engine covers POST requests only.                                                                                                           |
| `X-Request-Id`    | Response       | Returned on every response, including `204`s. Quote it in a support request.                                                                           |

## Success responses

| Status | Meaning                                                     |
| ------ | ----------------------------------------------------------- |
| `200`  | The node, its content and its strongest neighbouring edges. |

## Errors

| Status | Code                                                   | When                                                           |
| ------ | ------------------------------------------------------ | -------------------------------------------------------------- |
| `400`  | [`invalid_request`](/errors/invalid_request)           | Malformed request, for example an invalid cursor.              |
| `401`  | [`authentication_error`](/errors/authentication_error) | Missing or invalid credentials.                                |
| `403`  | [`permission_denied`](/errors/permission_denied)       | Missing scope, or an unprovisioned subject selector.           |
| `404`  | [`not_found`](/errors/not_found)                       | The resource does not exist, or is not visible to this caller. |
| `409`  | [`conflict`](/errors/conflict)                         | A conflict with the current state of the resource.             |
| `422`  | [`validation_error`](/errors/validation_error)         | The request was understood but failed field validation.        |
| `429`  | [`rate_limit_exceeded`](/errors/rate_limit_exceeded)   | Rate limit exceeded. Retry after the Retry-After interval.     |
| `503`  | [`service_degraded`](/errors/service_degraded)         | A dependency is temporarily unavailable. Safe to retry.        |

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](/platform/errors).


## OpenAPI

````yaml openapi.json GET /v1/recall/graph/node/{node_id}
openapi: 3.1.0
info:
  contact:
    name: Exo
    url: https://get-exo.com/
  description: >-
    The Exo public developer API: ingest content, retrieve identity-conditioned
    context, and read the knowledge graph. Authenticate every request with an
    Exo API key, either as the X-Exo-API-Key header or as Authorization: Bearer
    exo_... . Errors follow RFC 9457 problem+json with a stable snake_case code
    on every body.
  title: Exo API
  version: 1.0.0
servers:
  - url: https://api.get-exo.com
security:
  - ApiKeyHeader: []
  - BearerAuth: []
tags:
  - name: retrieve
    x-group: Retrieval
  - name: search
    x-group: Search
  - name: ingest
    x-group: Ingestion
  - name: jobs
    x-group: Jobs
  - name: subjects
    x-group: Subjects
  - name: recall
    x-group: Recall
  - name: graph
    x-group: Graph
  - name: insights
    x-group: Contradictions and proposals
  - name: condition
    x-group: Condition
  - name: brain
    x-group: Brain
  - name: sessions
    x-group: Coding sessions
  - name: connectors
    x-group: Connectors
  - name: events
    x-group: Events and webhooks
  - name: meta
    x-group: Identity
  - name: keys
    x-group: Keys and sandbox
  - name: usage
    x-group: Usage
  - name: settings
    x-group: Settings
  - name: exports
    x-group: Exports
  - name: team
    x-group: Team
  - name: admin
    x-group: Account and purge
paths:
  /v1/recall/graph/node/{node_id}:
    get:
      tags:
        - recall
      summary: Get a graph node
      description: >-
        Drill into one knowledge-graph node: its metadata, the full text of its
        chunks, and up to 100 of its strongest edges with the neighbouring node
        labels resolved.


        Scoped to the effective subject (the API key owner by default, or the
        subject named by `X-Exo-Subject`). A node belonging to another subject
        or another org returns 404.
      operationId: getRecallGraphNode
      parameters:
        - in: path
          name: node_id
          required: true
          schema:
            title: Node Id
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GraphNodeDetailResponse'
          description: The node, its content and its strongest neighbouring edges.
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Malformed request, for example an invalid cursor.
        '401':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Missing or invalid credentials.
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Missing scope or unprovisioned subject.
        '404':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: The requested resource does not exist.
        '409':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Conflict, for example a duplicate in-flight idempotent request.
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Validation Error
        '429':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: >-
            Rate limit exceeded; retry after the interval in the Retry-After
            header.
        '503':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: A dependency is temporarily unavailable; safe to retry with backoff.
components:
  schemas:
    GraphNodeDetailResponse:
      description: |-
        Full node detail for GET /api/v1/graph/nodes/{nodeId} (Story 4-4).

        Single-item response (unwrapped, ARCH-19). Includes content,
        metadata, connected edges with neighbor labels, domain, and projects.
        Reusable across dashboard click, project view, and context trace.
      properties:
        authorityLevel:
          default: 1
          title: Authoritylevel
          type: number
        content:
          anyOf:
            - type: string
            - type: 'null'
          title: Content
        createdAt:
          default: ''
          title: Createdat
          type: string
        decayRate:
          default: 0
          title: Decayrate
          type: number
        domain:
          anyOf:
            - type: string
            - type: 'null'
          title: Domain
        domains:
          anyOf:
            - additionalProperties:
                type: number
              type: object
            - type: 'null'
          title: Domains
        edges:
          items:
            $ref: '#/components/schemas/GraphNodeDetailEdge'
          title: Edges
          type: array
        id:
          title: Id
          type: string
        label:
          title: Label
          type: string
        nodeType:
          title: Nodetype
          type: string
        origin:
          anyOf:
            - type: string
            - type: 'null'
          title: Origin
        projects:
          items:
            type: string
          title: Projects
          type: array
      required:
        - id
        - label
        - nodeType
      title: GraphNodeDetailResponse
      type: object
    Problem:
      description: |-
        RFC 9457 problem+json envelope (spec D9), documented in OpenAPI.

        Invariant: ``code`` equals the tail of the ``type`` URI
        (``https://docs.get-exo.com/errors/<code>``).
      properties:
        code:
          title: Code
          type: string
        detail:
          title: Detail
          type: string
        documentationUrl:
          anyOf:
            - type: string
            - type: 'null'
          title: Documentationurl
        errors:
          anyOf:
            - items:
                $ref: '#/components/schemas/FieldViolation'
              type: array
            - type: 'null'
          title: Errors
        requestId:
          default: ''
          title: Requestid
          type: string
        status:
          title: Status
          type: integer
        suggestedAction:
          anyOf:
            - type: string
            - type: 'null'
          title: Suggestedaction
        title:
          title: Title
          type: string
        type:
          title: Type
          type: string
      required:
        - type
        - title
        - status
        - detail
        - code
      title: Problem
      type: object
    GraphNodeDetailEdge:
      description: |-
        Connected edge in the node detail response (Story 4-4).

        Includes the neighbor node's label and type for display without
        requiring additional API calls.
      properties:
        conductance:
          default: 1
          title: Conductance
          type: number
        direction:
          default: outgoing
          title: Direction
          type: string
        edgeType:
          title: Edgetype
          type: string
        neighborId:
          title: Neighborid
          type: string
        neighborLabel:
          title: Neighborlabel
          type: string
        neighborType:
          default: derived
          title: Neighbortype
          type: string
        weight:
          default: 1
          title: Weight
          type: number
      required:
        - edgeType
        - neighborId
        - neighborLabel
      title: GraphNodeDetailEdge
      type: object
    FieldViolation:
      description: A single field-level violation inside a Problem ``errors[]`` list.
      properties:
        code:
          title: Code
          type: string
        field:
          title: Field
          type: string
        message:
          title: Message
          type: string
        pointer:
          title: Pointer
          type: string
      required:
        - pointer
        - field
        - code
        - message
      title: FieldViolation
      type: object
  securitySchemes:
    ApiKeyHeader:
      description: An Exo API key (exo_...) sent as the X-Exo-API-Key header.
      in: header
      name: X-Exo-API-Key
      type: apiKey
    BearerAuth:
      description: The same Exo API key (exo_...) sent as an Authorization bearer token.
      scheme: bearer
      type: http

````