Graph-API
Die Graph-API bietet Zugriff auf den vollständigen Graphen des Notion-Workspaces — alle Knoten (Seiten, Datenbanken, Nutzer) und ihre Beziehungen (Kanten). Dies ist der primäre Endpunkt, den die 3D-Visualisierung von IVGraph nutzt.
GET /api/notion-graph/
Gibt den vollständigen Graphen für den Workspace des authentifizierten Nutzers zurück.
Authentifizierung: JWT (oder ohne Authentifizierung im Demomodus)
Parameter:
| Parameter | Typ | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|---|
| demo | string | nein | — | Setze den Wert auf true, um Demodaten zu erhalten (ohne Authentifizierung) |
| workspace_id | UUID | nein | primary | Bestimmter Workspace, der geladen werden soll |
| connection_id | UUID | nein | — | Bestimmte Airbyte-Verbindung |
| admin_user | int | nein | — | Nutzer-ID überschreiben (nur für Mitarbeitende) |
Beispielanfrage:
# Authenticated user's graph
curl -H "Authorization: Bearer <jwt_token>" \
"https://ivgraph.com/api/notion-graph/"
# Demo mode (no auth)
curl "https://ivgraph.com/api/notion-graph/?demo=true"
# Specific workspace
curl -H "Authorization: Bearer <jwt_token>" \
"https://ivgraph.com/api/notion-graph/?workspace_id=abc-123"
import requests
resp = requests.get(
"https://ivgraph.com/api/notion-graph/",
headers={"Authorization": "Bearer <jwt_token>"}
)
graph = resp.json()
print(f"{graph['stats']['nodes']} nodes, {graph['stats']['links']} edges")
const resp = await fetch("https://ivgraph.com/api/notion-graph/", {
headers: { Authorization: "Bearer <jwt_token>" }
});
const graph = await resp.json();
console.log(`${graph.stats.nodes} nodes, ${graph.stats.links} edges`);
Antwort:
{
"nodes": [
{
"id": "550e8400-e29b-41d4-a716-446655440001",
"type": "page",
"title": "Project Alpha",
"url": "https://www.notion.so/Project-Alpha-550e8400...",
"icon": {"type": "emoji", "emoji": "\ud83d\ude80"},
"connections_in": 5,
"connections_out": 12,
"connections_total": 17,
"pagerank": 0.42
}
],
"links": [
{
"id": "edge-uuid",
"source": "550e8400-e29b-41d4-a716-446655440001",
"target": "550e8400-e29b-41d4-a716-446655440002",
"type": "reference"
}
],
"metadata": {
"generated_at": "2026-04-10T12:00:00Z",
"user": "username",
"connection_id": "conn-uuid",
"sync_time": "2026-04-10T10:00:00Z"
},
"stats": {
"nodes": 342,
"links": 1205,
"total_blocks": 4500
}
}
Antwort bei Überschreitung des Knotenlimits des Abonnements (nur zur Information, der Graph wird weiterhin zurückgegeben):
{
"nodes": ["..."],
"links": ["..."],
"metadata": {},
"stats": {},
"node_limit_exceeded": true,
"node_limit": 500,
"node_count": 742
}
Antwort, wenn keine Verbindung vorhanden ist:
{
"nodes": [],
"links": [],
"metadata": {"status": "no_connection"},
"stats": {"nodes": 0, "links": 0, "total_blocks": 0}
}
Datenschemata
Knoten
| Feld | Typ | Beschreibung |
|---|---|---|
| id | UUID | ID der Notion-Seite, der Notion-Datenbank oder des Notion-Nutzers |
| type | string | page, database oder user |
| title | string | Seitentitel oder Datenbankname |
| url | string | Notion-URL |
| icon | object|null | Symboldaten (siehe unten) |
| connections_in | int | Anzahl eingehender Kanten |
| connections_out | int | Anzahl ausgehender Kanten |
| connections_total | int | Gesamtzahl der Kanten |
| pagerank | float | PageRank-Wert (0.0 — 1.0) |
Symbol
| Feld | Typ | Beschreibung |
|---|---|---|
| type | string | emoji, file oder external |
| emoji | string | Emoji-Zeichen (wenn type=emoji) |
| file.url | string | Datei-URL (wenn type=file) |
| external.url | string | Externe URL (wenn type=external) |
Kante
| Feld | Typ | Beschreibung |
|---|---|---|
| id | UUID | Kantenkennung |
| source | UUID | ID des Quellknotens |
| target | UUID | ID des Zielknotens |
| type | string | reference, parent, mention oder relation |
Kantentypen
| Typ | Beschreibung |
|---|---|
reference |
Seite verlinkt auf eine andere Seite |
parent |
Seite ist einer Datenbank oder Seite untergeordnet |
mention |
Seite erwähnt eine andere Seite oder einen Nutzer |
relation |
Datenbankeigenschaft vom Typ Relation |