Dike

Graph Traverse

Walk the citation graph between documents — cites, amends, repeals, implements, interprets.

POST /v1/graph/traverse

Iterative BFS over the legal_edges collection, batched per level — no $graphLookup. Depth is capped at 3.

A direction: "both", depth: 1 call from eg-leg-1948-131 (Egypt's Civil Code) returns something like:

flowchart LR
    R["eg-cass-civ-1995-1234<br/>(cassation ruling)"] -- cites --> C["eg-leg-1948-131<br/>Civil Code"]
    C -- amends --> A["eg-leg-2021-45<br/>(later amendment)"]
    C -- repeals --> P["eg-leg-1937-58<br/>(prior code, superseded)"]

eg-leg-1948-131 is the canonical_id you queried; everything one hop out in either direction comes back as a hydrated node plus the edge connecting it. Raising depth walks further out, one BFS level at a time.

Request

{
  "canonical_id": "eg-leg-1948-131",
  "direction": "both",
  "edge_types": ["cites", "amends"],
  "depth": 1,
  "limit": 100
}
FieldTypeDefaultNotes
canonical_idstringrequired
directionstringrequiredin, out, or both
edge_typesstring[]allcites, amends, repeals, implements, interprets
depthinteger11–3
limitinteger1001–100

Response

{
  "nodes": [
    { "canonical_id": "eg-leg-1948-131", "title": "القانون المدني", "doc_type": "legislation", "year": 1948, "status": "in_force" }
  ],
  "edges": [
    { "from_id": "eg-cass-civ-1995-1234", "to_id": "eg-leg-1948-131", "edge_type": "cites", "article_ref": "163", "confidence": 0.97 }
  ]
}

Nodes are hydrated (title/doc_type/year/status included), not just bare IDs — no follow-up /v1/document call needed to render a graph view. edges[].confidence reflects the citation-extraction model's confidence in that edge, not a relevance score.

Errors

  • 401 unauthorized
  • 422 validation_error
  • 503 upstream_unavailable