Doku · API & MCP

Verlässliche Antworten per API.

Die c:node Contract-API liefert Antworten, Rechtsnormen und Verwaltungsleistungen mit Quelle, Lizenz und Prüfstatus. Ihr ruft sie per REST auf oder bindet sie per MCP direkt in Claude, Copilot und eure eigenen Agenten ein.

Überblick

Die Contract-API ist die öffentliche Schnittstelle zum c:node Graph. Jede Antwort ist so gebaut, dass ihr sie nachprüfen könnt: Sie nennt die Quelle (ref), den Prüfstatus (grounding), die Lizenz und, wo nötig, die Namensnennung der Datenquelle.

Base URLhttps://contract.c-node.ai
FormatJSON · Server-Sent Events
Versionv1 · OpenAPI 3
MCPhttps://mcp.c-node.ai/mcp

Die Beleg-Felder

FeldBedeutung
refStandard-Referenz der Quelle, z. B. ELI:BSIGesetz§10, CELEX:32024R1689 oder XZUFI:S1000030000000045.
groundingPrüfstatus gegen die zitierte Stelle, z. B. verified.
licenseLizenzklasse der Quelle: open, attribution oder internal.
attributionsPflicht-Namensnennungen (Quelle, Lizenz, URL) für die gelieferten Daten.
citations · factscoreBei /v1/ask: nur geprüfte Quellen, dazu je Aussage ein Urteil (belegt oder offen) und der Anteil belegter Aussagen.
content_hashBei Nachweis-Datensätzen: SHA-256 über den Inhalt, für Protokollierung nach EU AI Act Art. 12.

Was unsere Kennzahlen messen

KennzahlBedeutung
99,9 %+ der Begriffe mit Quelle belegtmetrics.verified_pct aus /v1/graph: Anteil der Begriffe, die an einer offiziellen Quelle verankert sind. Er sagt, dass es eine Quelle gibt – nicht, wie viele Einträge inhaltlich stimmen.
98,8 % geprüfte Präzision der RechtsinhalteStichprobe von 1.235 Normen, Begriffen und Urteilen, jeweils gegen die amtliche Quelle geprüft. 95-%-Konfidenzintervall (Wilson) 98,0–99,3 %. Lauf graph-v32-2026-10-12T105151Z, Stand 12.10.2026.

Jede Präzisionsangabe nennt den gespeicherten Lauf, aus dem sie stammt. So lässt sie sich nachvollziehen und mit späteren Läufen vergleichen.

Die vollständige maschinenlesbare Spezifikation liegt unter /openapi.json.

Quickstart

Die ersten beiden Aufrufe funktionieren ohne Key gegen die Sandbox. Für Wissens-Endpunkte braucht ihr einen Contract-Key.

1 · Verbindung prüfen
curl https://contract.c-node.ai/v1/health
2 · Einen Nachweis abrufen (ohne Key)
curl "https://contract.c-node.ai/v1/provenance?ref=CELEX:32024R1689"
3 · Mit Key: alle Paragrafen eines Gesetzes
curl "https://contract.c-node.ai/v1/legal?law=BSIGesetz&limit=2" \ -H "X-API-Key: $CNODE_API_KEY"
Python
import os, httpx r = httpx.get("https://contract.c-node.ai/v1/ask", params={"q": "Welche Pflichten haben Anbieter von Hochrisiko-KI?"}, headers={"X-API-Key": os.environ["CNODE_API_KEY"]}, timeout=60) answer = r.json() print(answer["answer"], answer["citations"])

Authentifizierung

Schickt euren Contract-Key im Header X-API-Key. Nur so wird jeder Aufruf eurem Key zugerechnet – Profil, Kontingent, Rate-Limit und /v1/usage. Den Query-Parameter ?key= nimmt die API zwar an, er landet aber leicht in Logs und Browser-Verläufen, und der Verbrauch wird dann nicht eurem Key zugeordnet. Nutzt ihn nicht.

curl https://contract.c-node.ai/v1/usage -H "X-API-Key: $CNODE_API_KEY"
  • Ohne Key landet ihr in der Sandbox (Profil public-observatory): Graph-Übersicht, Nachweise, Audit, Namensnennungen und die Company-Brain-Vorschau.
  • Contract-Key (nk_…): an das Profil eures Tarifs gebunden, schaltet /v1/ask, /v1/retrieve, /v1/legal, /v1/leistung und /v1/betroffenheit frei.
  • Mandanten-Key (Enterprise): zusätzlich an euren eigenen Mandanten-Graph gebunden – für Company Brain, Befunde und Ingest. Antworten verbinden dann den c:node Graph mit eurem eigenen Wissen.
SchlüsselWoherWofür
Contract-Key nk_…euer Konto auf billing.c-node.ai (Bereich API-Key)Contract-API; per MCP nur die Werkzeuge des c:node Graph
Organisations-Schlüssel ck_…c:node → Einstellungen → API-Schlüssel & MCPMCP und App-API für Server und Agenten ohne Person – nicht für die Contract-API
Anmeldung (OAuth)euer c:node-Konto bei auth.c-node.aiMCP in Claude, Claude Code, Copilot Studio – als Person, mit eurem Arbeitsbereich
Keys gehören auf den Server. Legt den Key in eine Umgebungsvariable oder euren Secret-Store, nie in Frontend-Code oder ein Repository. Keys erhaltet ihr mit eurem Tarif oder über ein kurzes Gespräch.

Profile & Tarife

Jeder Key ist an ein Profil gebunden. Das Profil legt fest, welche Lizenzklassen und Wissensdomänen eine Antwort nutzen darf – die Modelle sehen nur, was euer Profil zulässt. GET /v1/profiles listet sie live.

ProfilTarifWas der Key sieht
public-observatorySandbox, ohne KeyGraph-Übersicht und Nachweise.
research-openResearchForschung und Innovation, offene Lizenzen.
free-marketStarterMarkt, Handel, Investitionen, Markttrends und öffentliche Finanzen.
commercial-fullProfessionalKommerzieller Vollzugriff (ohne nicht-kommerzielle Quellen), inklusive Recht und Verwaltungsleistungen.
Mandanten-ProfilEnterpriseVollzugriff plus euer eigener Mandanten-Graph.
de-federalauf AnfrageFöderaler Datenraum Deutschland, Vollzugriff.
trialTestzugangZeitlich begrenzt für die Evaluierung.

Verlässliche Antworten über die API zählen in dasselbe Monats-Kontingent wie App und MCP. Abgerechnet wird die verlässliche Antwort; Nachschlagen in Paragrafen und Leistungen zählt nicht (siehe Fehler & Limits).

Selbst hosten (On-Prem)

c:node läuft auch auf eurer Infrastruktur: Oberfläche, Chat und Graph-Runtime als Docker-Stack auf eurem Server, auf Wunsch air-gapped. Für lokale Antworten reicht ein offenes Modell über Ollama – oder ihr bringt euren eigenen API-Key mit.

LizenzKommerzielle Lizenz · Quellcode für Lizenznehmer
VoraussetzungDocker + Docker Compose
Lokal erreichbarShell :3010 · API :8080

Quellcode und Installationsanleitung stellen wir Lizenznehmern bereit. Sprecht uns an – wir richten den Zugang ein und begleiten die Installation.

Was läuft bei euch, was kommt von uns? Oberfläche und Graph-Runtime laufen bei euch – eine Basis, auch air-gapped, die ihr selbst betreiben und prüfen könnt. Die trainierte c:node-Intelligenz mit dem c:node Graph für Recht, Register und Markt sowie Betrieb mit SLA gibt es in den Tarifen.

MCP: c:node in Claude, Copilot & euren Agenten

Eine Adresse für alle Tarife: https://mcp.c-node.ai/mcp (Streamable HTTP). Das Modell formuliert, c:node liefert die belegte Grundlage. Jede Antwort trägt ihren Beleg-Status wie in der App – belegt, teils belegt oder allgemeine Einschätzung – im Feld evidence (Status und Anzeigetext). Geprüfte Treffer ohne Beleg-Wirkung stehen unter checked_sources. Welche Werkzeuge ihr seht, hängt von eurer Anmeldung, eurem Tarif, eurer Rolle und den Einstellungen eures Arbeitsbereichs ab.

  1. In Claude (claude.ai oder Desktop): Einstellungen → Konnektoren → „Benutzerdefinierten Konnektor hinzufügen“.
  2. Name c:node, URL https://mcp.c-node.ai/mcp. Eine Client-ID braucht ihr nicht.
  3. „Verbinden“ → bei auth.c-node.ai anmelden → auf der Zustimmungsseite euren Arbeitsbereich wählen und „Zulassen“.
  4. In Claude Team und Enterprise legt der Owner den Konnektor einmal an; jede Person meldet sich selbst an. So gelten ihre eigenen Rechte, Ebenen und Konnektoren.

Einmal eintragen, für alle eure Projekte:

claude mcp add --transport http --scope user cnode https://mcp.c-node.ai/mcp

Danach in Claude Code /mcp → cnode → „Authenticate“. Der Browser öffnet die Anmeldung bei auth.c-node.ai; nach „Zulassen“ geht es in Claude Code weiter. Ohne --scope user gilt der Eintrag nur im aktuellen Projekt.

Ohne Person, etwa auf einem Server oder in CI: ein Organisations-Schlüssel im Header. Damit gibt es keine private Ebene und keine Konnektoren-Suche, denn beide hängen an einer Person.

claude mcp add --transport http --scope user cnode https://mcp.c-node.ai/mcp \ --header "Authorization: Bearer $CNODE_ORG_KEY"
  1. Agent öffnen → Werkzeuge → „Werkzeug hinzufügen“ → „Model Context Protocol“ → neuer Server.
  2. Server-URL https://mcp.c-node.ai/mcp.
  3. Authentifizierung OAuth 2.0, Dynamische Erkennung: Copilot Studio findet auth.c-node.ai über die Server-URL und registriert sich selbst. Beim ersten Verbinden meldet ihr euch an, wählt den Arbeitsbereich und stimmt zu.
  4. Alternativ OAuth 2.0, manuell mit einem festen Client, den wir für euch einrichten: Autorisierungs-URL https://auth.c-node.ai/authorize, Token- und Refresh-URL https://auth.c-node.ai/token, Scopes z. B. cnode:graph.read cnode:workspace.read cnode:usage.read. Die Redirect-URL, die Copilot Studio danach anzeigt, schickt ihr uns.
  5. Ohne persönliche Anmeldung geht auch API-Schlüssel: Header X-API-Key mit einem Organisations-Schlüssel ck_….
  6. Eure Power-Platform-Richtlinien (DLP) gelten zusätzlich.
Anmeldung mit Microsoft folgt. Bis dahin meldet ihr euch bei auth.c-node.ai mit E-Mail-Code oder Google an.

Jeder MCP-Client mit Streamable HTTP funktioniert mit einem Schlüssel im Header X-API-Key oder als Authorization: Bearer <key>. Für VS Code in .vscode/mcp.json – Copilot fragt den Schlüssel beim ersten Start ab und speichert ihn nicht im Projekt:

{ "inputs": [{ "type": "promptString", "id": "cnode-key", "description": "c:node-Schlüssel (ck_… oder Contract-Key)", "password": true }], "servers": { "cnode": { "type": "http", "url": "https://mcp.c-node.ai/mcp", "headers": { "X-API-Key": "${input:cnode-key}" } } } }

Mit einem Organisations-Schlüssel ck_… seht ihr die Werkzeuge eures Arbeitsbereichs nach der Rolle des Schlüssels, mit einem Contract-Key nur den c:node Graph. Clients mit eigener Anmeldung nimmt auth.c-node.ai über Client-Metadaten (CIMD) oder als native App mit Rücksprung auf localhost an; für andere Webdienste richten wir einen festen Client ein.

Anmeldung & Arbeitsbereich

  • Angemeldet wird immer bei auth.c-node.ai mit eurem c:node-Konto (E-Mail-Code oder Google). Ein Konnektor legt kein neues Konto an – ihr braucht also schon ein Konto, etwa über euren Tarif oder eine Einladung.
  • Die Zustimmungsseite zeigt, welche Rechte der Client bekommt, und unter „Arbeitsbereich“, für welchen. Der Arbeitsbereich kommt immer aus der Anmeldung, nie aus einer Eingabe im Chat. Wer in mehreren Arbeitsbereichen ist, legt je Arbeitsbereich einen Konnektor an oder verbindet neu, um zu wechseln.
  • Eigene c:node-Instanz: gleiche Adresse – c:node leitet euch anhand der Anmeldung zu eurer Instanz. Euer Konto muss Mitglied des Arbeitsbereichs der Instanz sein; das richtet euer c:node-Kontakt ein. Organisations-Schlüssel einer eigenen Instanz funktionieren über MCP noch nicht, bitte die Anmeldung nutzen.
  • Für Admins: Einstellungen → API-Schlüssel & MCP – MCP für den Arbeitsbereich an- oder ausschalten, erlaubte Rechte wählen, „Alle MCP-Sitzungen beenden“.

Die alten Adressen nena-mcp.c-node.ai/mcp und mcp.c-node.ai/agents/mcp funktionieren bis 05.01.2027. Stellt bitte auf https://mcp.c-node.ai/mcp um.

MCP: Rechte & Werkzeuge

Bei der Anmeldung erteilt ihr dem Client Rechte (Scopes). Ein Werkzeug erscheint nur, wenn das Recht erteilt ist, euer Tarif und eure Rolle es zulassen und euer Arbeitsbereich MCP dafür freigibt. Die Liste wird bei jeder Anfrage neu berechnet.

RechtErlaubtab Tarif
cnode:graph.readc:node Graph: Antworten, Recht, Verwaltungsleistungen, Dossier, Company-Brain-VorschauResearch
cnode:workspace.readFragen an euren Arbeitsbereich; ab Professional auch Agenten, Gedächtnis, Bibliothek lesen, Benachrichtigungen, LagebildStarter
cnode:connectors.readIn euren verbundenen Systemen suchen, mit eurem eigenen ZugangProfessional
cnode:library.writeDateien in die Bibliothek legen (privat als Standard)Professional
cnode:tasks.runAufgaben starten und ihren Stand abfragenProfessional
cnode:drafts.createEntwürfe zur Freigabe anlegen, Vorschläge ablehnenProfessional
cnode:usage.readEigenes Kontingent sehenalle
cnode:adminVerwaltung: Verbrauch und MCP-Richtlinie des ArbeitsbereichsEnterprise, Admins
cnode:graph.writeCompany Brain im eigenen Mandanten-Graph aktualisierenmit Mandanten-Key

Werkzeuge nach Tarif

WerkzeugWas es tutResearchStarterProfessionalEnterprise
cnode_graph_askAntwort aus dem c:node Graph mit Beleg-Status (evidence) und Quellen✓✓✓✓
cnode_legal
cnode_law_search
cnode_leistung
Paragraf per Referenz oder Zitat, Normsuche mit Volltext, Verwaltungsleistung mit Rechtsgrundlage✓✓✓✓
cnode_health
cnode_usage
Verbindungs-Check, eigenes Kontingent✓✓✓✓
cnode_modelsWelche Antwort-Modi und Modelle euer Tarif freischaltet, mit Klasse und Gewicht✓✓✓✓
cnode_askFrage an euren Arbeitsbereich: eure Unterlagen plus c:node Graph–✓✓✓
cnode_dossier
cnode_brain_preview
Antrags-Dossier zusammenstellen, Company-Brain-Vorschau einer Domain–✓✓✓
cnode_thread_results
cnode_memory_overview
Ergebnisse eines Chats (Artefakte, Angelegtes mit Link, Aufgaben, Freigaben, Läufe); Überblick über das Gedächtnis – c:node Graph als Aggregat und eure Einträge je Ebene. Nur lesen–✓✓✓
cnode_memory_search
cnode_library_list
cnode_library_read
cnode_library_upload
Gedächtnis und Bibliothek durchsuchen, lesen, Dateien ablegen––✓✓
cnode_connector_searchIn euren verbundenen Systemen suchen––✓✓
cnode_list_agents
cnode_ask_agent
cnode_consult_agent
cnode_consult_team
Fach-Agenten und Fachrollen-Team––✓✓
cnode_run_task
cnode_task_status
Aufgaben: Recherche, Entscheidungsvorlage, Dokument-Analyse, Rechts- und Compliance-Prüfung––✓✓
cnode_draft_followup
cnode_list_pending_actions
cnode_reject_action
cnode_approve_action
cnode_notifications
Entwürfe und Freigabe-Links, offene Vorschläge, Benachrichtigungen––✓✓
cnode_tasks_list
cnode_task_create
cnode_task_update
Aufgaben auflisten; neue Aufgabe als Entwurf anlegen; Änderung an einer Aufgabe vorschlagen – wirksam erst nach Freigabe in c:node––✓✓
cnode_lagebildLagebild eurer eigenen Domain––✓✓
cnode_admin_usageVerbrauch und MCP-Richtlinie des Arbeitsbereichs–––✓ Admins

Rollen: Betrachter sehen die lesenden Werkzeuge; Mitglieder zusätzlich Fragen, Agenten, Aufgaben, Entwürfe und Upload; Admins zusätzlich die Verwaltung. Mit einem Contract-Key seht ihr nur die Werkzeuge des c:node Graph nach eurem Profil, dazu cnode_profiles und mit Mandanten-Key cnode_brain_bootstrap und cnode_findings. Für Contract-Keys heißt cnode_graph_ask bis 05.01.2027 zusätzlich noch cnode_ask (alter Name).

Freigaben passieren nur in c:node. Über MCP legt c:node höchstens einen Entwurf oder eine Freigabe-Anfrage an und gibt euch den Link zur Freigabe-Karte (approve_url). Gesendet oder eingetragen wird erst, wenn ihr in c:node „Freigeben“ drückt. Auch cnode_approve_action liefert nur diesen Link.

MCP: Verbrauch & Grenzen

  • Eine verlässliche Antwort über MCP zählt wie in der App, aus demselben Monats-Kontingent eures Teams. Gezählt wird nach Modellklasse: Standard (z. B. Gemini Flash) 1×, Premium (Claude oder Gemini Pro) 2×, im Modus „Gründlich“ 3×. Welche Modi und Modelle euer Tarif freischaltet, zeigt cnode_models.
  • Ab 80 % des Kontingents zeigt c:node einen Hinweis. Mehrverbrauch bis 150 % ist inklusive und wird nicht berechnet; danach pausieren Antworten bis zum nächsten Monat oder einem Upgrade.
  • Suchen, Nachschlagen und Lesen – Paragrafen, Verwaltungsleistungen, Bibliothek, Status – zählen nicht als Antwort.
  • Ab 80 % des Kontingents gibt c:node einen Hinweis. Bei 150 % nimmt c:node bis zum Monatswechsel keine weiteren Antworten an; das Werkzeug meldet das mit einem Link zu eurem Tarif.
  • Grenzen je Person und Minute: 30 Antworten, 120 Nachschlage-Aufrufe, 6 Aufgaben, 10 Entwürfe oder Uploads. Darüber nennt das Werkzeug die Wartezeit.
  • Eigene c:node-Instanzen haben kein Tarif-Kontingent; MCP-Antworten werden dort je Kanal mitgezählt.

Euren Stand zeigt cnode_usage – oder in c:node unter Einstellungen.

MCP: Fehlerbehebung

Was ihr sehtWoran es liegtWas hilft
401 „c:node MCP braucht eine Anmeldung oder einen Schlüssel“Noch nicht angemeldet, Anmeldung abgelaufen oder Schlüssel ungültig. Der Header WWW-Authenticate nennt unter resource_metadata, wo der Client die Anmeldung findet – das ist so gewollt.Verbindung neu herstellen (Claude Code: /mcp → cnode → „Authenticate“) oder Schlüssel prüfen.
invalid_redirect_uri bei der AnmeldungDer Client registriert sich mit einer Rücksprung-Adresse, die auth.c-node.ai nicht automatisch annimmt. Angenommen werden Claude, Clients mit Client-Metadaten (CIMD) und native Apps mit Rücksprung auf localhost, 127.0.0.1 oder [::1] sowie Copilot Studio mit Rücksprung auf https://global.consent.azure-apim.net/redirect/….Claude Code aktualisieren. Für andere Webdienste einen festen Client anfragen oder einen Organisations-Schlüssel nutzen.
Zustimmungsseite endet mit access_denied„Ablehnen“ gedrückt – oder euer Konto ist nicht Mitglied des Arbeitsbereichs, den der Client verlangt.Neu verbinden und „Zulassen“. Die Mitgliedschaft richtet euer Admin oder c:node-Kontakt ein.
Anmeldung klappt nicht, es gibt noch kein KontoEin Konnektor legt kein Konto an.Erst ein c:node-Konto anlegen oder einladen lassen, dann verbinden.
Verbunden, aber 0 WerkzeugeAuf der Zustimmungsseite wurde ein Arbeitsbereich gewählt, zu dem es keinen c:node-Arbeitsbereich gibt – oder MCP ist dort ausgeschaltet.Neu verbinden und den richtigen Arbeitsbereich wählen. Admins prüfen Einstellungen → API-Schlüssel & MCP.
Ein Werkzeug fehlt oder meldet „in eurem c:node-Paket nicht enthalten“Tarif, Rolle oder ein bei der Anmeldung nicht erteiltes Recht.Tabelle Rechte & Werkzeuge prüfen; bei fehlendem Recht neu verbinden.
„Grenze erreicht“ oder „Kontingent ausgeschöpft“Minutengrenze je Person oder 150 % des Monats-Kontingents.Kurz warten bzw. Tarif anpassen.
„Freigeben geht nur in c:node“So gewollt: Über MCP wird nichts freigegeben.Den Link approve_url öffnen und in c:node freigeben.

Wissen

Verlässliche Antworten und Rechtsquellen. Alle Endpunkte hier brauchen einen Contract-Key.

GET/v1/askVerlässliche Antwort auf eine FrageKey

Beantwortet eine Frage ausschließlich aus den Konzepten, die euer Profil zulässt. Zitate stammen nur aus geprüften Referenzen. Findet c:node keinen Beleg, sagt die Antwort das, statt zu raten.

ParameterBeschreibung
qDie Frage in natürlicher Sprache (mind. 3 Zeichen). Pflicht.
kAnzahl der Konzepte, auf die sich die Antwort stützt (1–20, Standard 6).
Antwort · Struktur (gekürzt)
{ "question": "Welche Pflichten haben Anbieter von Hochrisiko-KI-Systemen?", "grounded": true, "answer": "… [CELEX:32024R1689] …", "citations": ["CELEX:32024R1689"], "verdict": "…", "factscore": 1.0, "verification": [ { "claim": "…", "verdict": "belegt", "source": "CELEX:32024R1689", "via": "citation" } ], "profile": "de-federal", "attributions": [] }

Ohne Beleg: "grounded": false und die Antwort „Das steht (noch) nicht im Wissensgraph.“ Aussagen ohne Stütze erhalten das Urteil offen.

GET/v1/ask/streamDasselbe als Stream (SSE)Key

Gleiche Parameter und Prüfung wie /v1/ask. Die Antwort kommt als Server-Sent Events: token-Events mit Textstücken, danach ein done-Event mit Zitaten, Urteil und Factscore, zum Schluss [DONE].

curl -N "https://contract.c-node.ai/v1/ask/stream?q=Meldepflicht%20Wohnsitz" \ -H "X-API-Key: $CNODE_API_KEY" data: {"type": "token", "text": "Die Anmeldung …"} data: {"type": "done", "citations": […], "factscore": …, "attributions": […]} data: [DONE]
GET/v1/retrieveBelege ohne formulierte AntwortKey

Liefert die Konzepte, auf die sich /v1/ask stützen würde – je mit Referenz, Definition, Score und Ebene (macro = c:node Graph, micro = euer Mandant) –, aber keine formulierte Antwort und keine Prüfung je Aussage. Für Aufrufer, die die Antwort mit dem eigenen Modell schreiben; deutlich schneller als /v1/ask. Gleiche Parameter wie /v1/ask. Zählt wie eine Antwort (abrechenbar, wenn belegt).

curl "https://contract.c-node.ai/v1/retrieve?q=Meldepflicht%20Wohnsitz&k=4" \ -H "X-API-Key: $CNODE_API_KEY" → { "mode": "retrieve", "grounded": true, "concepts": […], "citations": […], "sources": [{ "concept": "…", "ref": "…", "definition": "…", "score": …, "layer": "macro" }], "relations": […], "profile": "…", "attributions": […] }
GET/v1/legalRechtsnormen (ELI / CELEX)Key

Ein Paragraf per Referenz, alle Paragrafen eines Gesetzes oder eine Volltextsuche. Einer der drei Parameter ist Pflicht.

ParameterBeschreibung
refExakte Referenz, z. B. ELI:BSIGesetz§1.
lawGesetzesname, z. B. BSIGesetz – liefert dessen Paragrafen.
qVolltextsuche (alle Begriffe müssen vorkommen).
citeZitat, wie man es tippt, z. B. § 309 BGB – liefert die Norm im Volltext (wie /v1/legal/norm).
limit · offsetPaginierung (1–500, Standard 50). Gibt es weitere Treffer, steht next_offset in der Antwort.
Antwort · echt, Text gekürzt
{ "profile": "de-federal", "total": 66, "count": 2, "limit": 2, "offset": 0, "next_offset": 2, "results": [ { "label": "BSIGesetzPar10", "ref": "ELI:BSIGesetz§10", "std": "ELI", "text": "Anordnungen von Maßnahmen zur Abwendung oder Behebung von Sicherheitsvorfällen. …", "grounding": "verified", "license": "open" } ], "attributions": [] }
GET/v1/legal/searchNormen zu Zitat oder Thema, mit VolltextKey

Findet Normen zu einer Frage, einem Thema oder einem Zitat. Zitate in der Frage werden zuerst aufgelöst ("match": "citation"), danach folgen gerankte Treffer ("match": "search"), jeweils mit Volltext, Quelle und Stand. missing nennt zitierte Normen oder Gesetze, die der Bestand nicht enthält.

ParameterBeschreibung
qFrage, Thema oder Zitat, z. B. Art. 28 DSGVO oder Klauselverbote in AGB. Pflicht.
kAnzahl Treffer (1–30, Standard 8).
lawAuf ein Gesetz beschränken, z. B. BGB.
curl "https://contract.c-node.ai/v1/legal/search?q=Klauselverbote%20in%20AGB&k=3" \ -H "X-API-Key: $CNODE_API_KEY"
GET/v1/legal/normEine Norm per Zitat, mit VolltextKey

Löst ein Zitat so auf, wie man es tippt – cite=§ 309 BGB, cite=Art. 28 DSGVO – oder nimmt eine exakte ref. Antwort: die Norm mit Volltext, Quell-URL und Stand, oder ehrlich "found": false mit reason (no_citation, law_not_held, norm_not_found, not_in_profile). Dasselbe liefert /v1/legal?cite=….

GET/v1/legal/coverageWelche Gesetze im Bestand sindKey

Normen je Gesetz und den Stand je Gesetz – damit ihr wisst, was /v1/legal/search und /v1/legal/norm abdecken.

GET/v1/leistungVerwaltungsleistungen mit RechtsgrundlageKey

Verwaltungsleistungen aus XZuFi/LeiKa. rechtsgrundlagen enthält nur Verknüpfungen zu Gesetzen, die im c:node Graph liegen – nichts wird geraten. Parameter: ref oder q, dazu limit/offset.

Antwort · echt
{ "profile": "de-federal", "total": 2, "count": 1, "results": [ { "label": "LeistungS1000030000000045", "ref": "XZUFI:S1000030000000045", "bezeichnung": "Wohnsitz Anmeldung als Hauptwohnsitz — Verwaltungsleistung (XZuFi/LeiKa, …)", "license": "attribution", "rechtsgrundlagen": [] } ], "attributions": [ { "source": "Freie Hansestadt Bremen — Bürgerservice (XZuFi/FIM)", "license": "Datenlizenz Deutschland (dl-de/by-2-0)", "url": "https://www.govdata.de" } ] }

Nachweis & Audit

Datensätze zur Nachvollziehbarkeit: woher eine Aussage stammt, wen ein Rechtsakt betrifft, und welche Quellen genannt werden müssen. Mit Ausprobieren ruft ihr die Sandbox live auf.

GET/v1/provenanceNachweis-Datensatz zu einer Referenzohne Key

Liefert für eine Referenz den Prüfstatus, die Lizenz, eine Aussage zur Unsicherheit und einen Inhalts-Hash – gebaut für Protokollierung nach EU AI Act Art. 12. Parameter: ref.

GET/v1/auditWelche Unternehmen betrifft ein Rechtsakt?ohne Key

Verbindet einen EU-Rechtsakt mit den betroffenen Branchen und Firmen aus dem Handelsregister. Parameter: act, z. B. ArtificialIntelligenceAct.

GET/v1/betroffenheitRegionale Betroffenheit je RechtsaktKey

Erweitert /v1/audit um die Region: Gesetz → Branche → betroffene Firmen → Bundesland → regionale Kennzahlen (BIP, Arbeitslosenquote, Einkommen). Jede abgeleitete Zahl trägt ihre Beleg-Kette. Parameter: act (optional), limit (1–100).

POST/v1/dossierHash-verkettetes Antrags-DossierKey

Stellt aus Antragsfeldern ein prüfbares Dossier zusammen: jedes Feld mit Quelle, das eIDAS-Vertrauensurteil zum Siegel und eine manipulationssichere Hash-Kette. Nennt der Antrag eine Leistung ohne Rechtsgrundlagen, ergänzt c:node sie aus dem Graph. Antworten enthalten personenbezogene Daten und werden nicht zwischengespeichert.

curl -X POST https://contract.c-node.ai/v1/dossier \ -H "X-API-Key: $CNODE_API_KEY" -H "Content-Type: application/json" \ -d '{ "leistung": "XZUFI:S1000030000000045", "felder": [ { "name": "Anschrift", "wert": "…", "quelle": "Meldebescheinigung", "siegel": { "aussteller": "…", "typ": "…" } } ] }'
GET/v1/attributionsPflicht-Namensnennungenohne Key

Alle Datenquellen eures Profils mit Lizenz und URL – für Impressum, Quellenverzeichnis oder Export.

Company Brain

Aus einer Domain wird ein belegtes Firmenprofil: c:node liest die öffentlichen Seiten, prüft Impressum und Handelsregister, verankert die Firma in ihrer Branche und liefert Befunde zu Regulierung und offenen Ausschreibungen – je mit Quelle.

GET/v1/demo/brain/streamVorschau aus einer Domain (SSE)ohne Key

Die öffentliche Vorschau: streamt den Lauf für eine Domain, speichert nichts. Pro IP auf wenige Läufe je Stunde begrenzt, dazu ein Tageskontingent; das Ergebnis einer Domain wird 24 Stunden zwischengespeichert und erneut abgespielt. Parameter: domain, z. B. firma.de; optional lang (de, en, fr), mode (brief als Standard, swot oder lagebild) und bei mode=lagebild goal (gesamt, chancen, pflichten, foerderung, wettbewerb).

Event-Typen in dieser Reihenfolge: step, page, feed, impressum, register, profile, anchor, finding, done (bei Fehlern error), abgeschlossen mit [DONE].

curl -N "https://contract.c-node.ai/v1/demo/brain/stream?domain=firma.de"
POST/v1/brain/bootstrapBrain für euren Mandanten aufbauenMandanten-Key

Führt den Lauf komplett aus und speichert Profil, Seiten und Befunde in eurem Mandanten-Graph. Danach kennen /v1/ask und /v1/findings eure Firma. Body: {"domain": "firma.de"}. Zeitlimit 90 Sekunden (504 bei Überschreitung).

Als Stream: GET /v1/brain/stream?domain=… liefert dieselben Events wie die Vorschau und speichert am Ende.

GET/v1/findingsAktuelle Befunde eures MandantenMandanten-Key

Die proaktiven Befunde aus dem letzten Lauf: Regulierung, Ausschreibungen, Register und Branchenkontext, je mit Belegen. Gab es noch keinen Lauf, ist findings leer und hint nennt den nächsten Schritt.

Mandanten-Graph

Mit einem Mandanten-Key verbinden /v1/ask, /v1/retrieve, /v1/graph und /v1/findings den c:node Graph mit eurem eigenen Wissen. Über scopes wählt ihr, welche Ebenen eures Mandanten mitgelesen werden: org (Standard), team:<id>, user:<id>, kommagetrennt.

POST/v1/ingestEigenes Wissen hinzufügenMandanten-Key

Schreibt ein Dokument oder eine Notiz in euren privaten Mandanten-Graph. Der Eintrag ist sofort über /v1/ask beantwortbar. Der c:node Graph selbst bleibt unverändert.

curl -X POST https://contract.c-node.ai/v1/ingest \ -H "X-API-Key: $CNODE_API_KEY" -H "Content-Type: application/json" \ -d '{"title": "Einkaufsrichtlinie 2026", "text": "…", "source": "Intranet", "ref": "file:einkauf-2026", "scope": "org"}' → { "ok": true, "tenant": "…", "concept": "Einkaufsrichtlinie 2026", "ref": "file:einkauf-2026", "scope": "org", "how": "…", "embedded": true }

Felder: title oder label, text oder content, optional source, ref (Kennung der Quelle; erneutes Ingest mit derselben ref ersetzt den Eintrag) und scope (org, team:<id> oder user:<id>, Standard org).

PATCH/v1/ingest?ref=…Eintrag in eine andere Ebene verschiebenMandanten-Key

Verschiebt einen Eintrag innerhalb eures Mandanten, etwa von einer persönlichen Notiz ins Org-Gedächtnis. Body: {"scope": "org"}. 404, wenn unter der ref nichts liegt.

DELETE/v1/ingest?ref=…Eintrag löschenMandanten-Key

Löscht alles, was ihr unter dieser ref eingespielt habt – Text, Aliase und Embedding –, etwa für eine DSGVO-Löschung. Wiederholte Aufrufe liefern "deleted": 0. Der c:node Graph bleibt unberührt.

curl -X DELETE "https://contract.c-node.ai/v1/ingest?ref=file:einkauf-2026" \ -H "X-API-Key: $CNODE_API_KEY"

Betrieb

GET/v1/healthStatus der APIohne Key
GET/v1/profilesProfile und was sie sehen dürfenohne Key
GET/v1/usageVerbrauch und Rate-Limitohne Key

Euer Minutenkontingent und euer Verbrauch für einen Zeitraum (since/until, z. B. since=30d): gelieferte Antworten (answers), davon abrechenbar (billable_answers), retrievals, lookups, ingests, die Aufteilung nach Kanal (by_channel, z. B. api, mcp:claude) und der durchschnittliche Factscore. Mit detail=true kommen die einzelnen Einträge dazu. Ruft den Endpunkt mit eurem Key auf – ohne Key seht ihr nur die Sandbox.

GET/v1/graphKennzahlen des c:node Graphohne Key

Begriffe, Relationen, Domänen und Anteil der Begriffe mit Quelle (verified_pct, was er misst) – für den Graph, den euer Profil sieht.

Fehler & Limits

Fehler kommen als JSON mit einem Feld detail.

StatusBedeutung
400Parameter fehlt, z. B. /v1/legal ohne ref, law, q oder cite.
401Kein oder ungültiger Key für einen Endpunkt, der einen Contract-Key braucht.
403Endpunkt braucht einen Mandanten-Key (Company Brain, Befunde, Ingest) – ohne Key oder mit einem Key ohne Mandant.
404Referenz oder Rechtsakt nicht im Graph.
422Parameter ungültig, z. B. q zu kurz oder k außerhalb des Bereichs.
429Rate-Limit erreicht. Wartet die Sekunden aus dem Header Retry-After.
503Antwort-Generierung gerade ausgelastet. Nach Retry-After erneut versuchen.
504Brain-Lauf hat das Zeitlimit überschritten.

Rate-Limit: 120 Aufrufe pro Minute und Key, für jeden /v1-Aufruf außer /v1/health. Jede Antwort trägt X-RateLimit-Limit und X-RateLimit-Remaining; euren Stand zeigt auch /v1/usage.

Abrechnung: Die Einheit ist die verlässliche Antwort – eine Antwort von /v1/ask, /v1/ask/stream oder /v1/retrieve, die sich auf geprüfte Quellen stützt. Antworten ohne Beleg, Nachschlagen (/v1/legal, /v1/legal/norm, /v1/legal/search, /v1/leistung) und Ingests werden gezählt, aber nicht als verlässliche Antwort abgerechnet. Verlässliche Antworten über die Contract-API werden mit dem Monats-Kontingent eures Tarifs verrechnet. Was darüber hinausgeht, kostet 0,04 € netto je verlässlicher Antwort, im Starter-Tarif gedeckelt auf den Wechsel zu Professional. Eine Pause bei 150 % gibt es hier nicht, es gilt das Rate-Limit.

Protokolliert werden nur eine pseudonyme Client-ID, der Pfad und der Status – keine Inhalte.