Doku · API & MCP

Belegte 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

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.

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. Der Query-Parameter ?key= wird ebenfalls akzeptiert, landet aber leichter in Logs und Browser-Verläufen – nutzt ihn nur, wo kein Header möglich ist.

curl https://contract.c-node.ai/v1/profiles -H "X-API-Key: $CNODE_API_KEY"
  • Ohne Key landet ihr in der Sandbox (Profil public-observatory): Graph-Übersicht, Nachweise, Audit und Namensnennungen.
  • Contract-Key: an ein Profil gebunden, schaltet /v1/ask, /v1/legal, /v1/leistung und /v1/betroffenheit frei.
  • Mandanten-Key: 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.
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 & Scope

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.

ProfilZweckKey
public-observatoryÖffentliche Sandbox: Graph-Übersicht und Nachweise.nein
trialTestzugang für die Evaluierung.ja
free-marketMarkt-Wissen (Markt, Handel, Investitionen, öffentliche Finanzen).ja
research-openForschungspartner: Forschung und Innovation.ja
de-federalFöderaler Datenraum Deutschland, Vollzugriff.ja
commercial-fullKommerzieller Vollzugriff (ohne nicht-kommerzielle Quellen).ja

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

Der c:node MCP-Server stellt die Contract-API als Werkzeuge bereit. Das Modell formuliert, c:node liefert die belegte Grundlage: Fragt ihr Claude nach einer Rechtsgrundlage, ruft es cnode_ask auf und antwortet mit Quelle.

claude mcp add --transport http cnode https://mcp.c-node.ai/mcp \ --header "X-API-Key: $CNODE_API_KEY"

In .vscode/mcp.json eintragen. Copilot fragt den Key beim ersten Start ab und speichert ihn nicht im Projekt:

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

Jeder MCP-Client mit Streamable HTTP funktioniert: URL https://mcp.c-node.ai/mcp, Key im Header X-API-Key oder als Authorization: Bearer <key>. Verbrauch und Profil laufen dann über euren eigenen Key. Im On-Prem-Betrieb läuft der MCP-Server in eurer Umgebung und spricht eure eigene Contract-API an.

Werkzeuge

WerkzeugWas es tutEndpunkt
cnode_askBelegte Antwort auf eine Frage, jede Aussage mit Quelle.GET /v1/ask
cnode_legalParagraf per Referenz, alle Paragrafen eines Gesetzes oder Volltextsuche.GET /v1/legal
cnode_leistungVerwaltungsleistung mit ihrer Rechtsgrundlage.GET /v1/leistung
cnode_dossierHash-verkettetes Antrags-Dossier. Bereitet vor, löst nichts aus.POST /v1/dossier
cnode_brain_previewCompany Brain aus einer Domain, ohne zu speichern.GET /v1/demo/brain/stream
cnode_brain_bootstrapCompany Brain für euren Mandanten aufbauen und speichern.POST /v1/brain/bootstrap
cnode_findingsAktuelle Befunde eures Mandanten, je mit Belegen.GET /v1/findings
cnode_health · cnode_profilesVerbindungs-Check und die Profile eures Keys.GET /v1/health · /v1/profiles

Selbst hosten (Open Core)

Die c:node-Shell ist Open Core: Oberfläche, Chat und Graph-Runtime laufen per Docker auf eurem Rechner oder Server. Für lokale Antworten reicht ein offenes Modell über Ollama – oder ihr bringt euren eigenen API-Key mit.

LizenzAGPL-3.0 · kommerzielle Lizenz verfügbar
VoraussetzungDocker + Docker Compose
Lokal erreichbarShell :3010 · API :8080
Quickstart
git clone https://github.com/CreativateLabs/cnode-shell cd cnode-shell cp .env.example .env # optional anpassen docker compose up --build
Optional: lokales Modell
ollama pull qwen2.5:7b

Danach läuft die Shell unter http://localhost:3010 und die API unter http://localhost:8080. Umfang des Open Core, Mandanten-Konfiguration und die kommerzielle Lizenz beschreibt das README auf GitHub.

Was ist offen, was nicht? Offen sind Oberfläche und Graph-Runtime – eine lauffähige 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.

Wissen

Belegte Antworten und Rechtsquellen. Alle Endpunkte hier brauchen einen Contract-Key.

GET/v1/askBelegte 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/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).
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/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 und Tag begrenzt; das Ergebnis einer Domain wird 24 Stunden zwischengespeichert und erneut abgespielt. Parameter: domain, z. B. firma.de.

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

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"}' → { "ok": true, "tenant": "…", "concept": "Einkaufsrichtlinie 2026", "ref": "tenant:…:einkaufsrichtlinie-2026", "how": "…", "embedded": true }

Felder: title oder label, text oder content, optional source und ref.

Betrieb

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

Zeigt euer aktuelles Minutenkontingent und den Verbrauch: gelieferte Antworten, davon abrechenbar, Ingests und den durchschnittlichen Factscore.

GET/v1/graphKennzahlen des c:node Graphohne Key

Begriffe, Relationen, Domänen und Prüfquote des Graphen, den euer Profil sieht.

Fehler & Limits

Fehler kommen als JSON mit einem Feld detail.

StatusBedeutung
400Parameter fehlt, z. B. /v1/legal ohne ref, law oder q.
401Kein oder ungültiger Key für einen Endpunkt, der einen Contract-Key braucht.
403Key gültig, aber ohne Mandant (Company Brain, Befunde, Ingest).
404Referenz oder Rechtsakt nicht im Graph.
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.

Jeder /v1-Aufruf außer /v1/health ist pro Client begrenzt; euer aktuelles Kontingent zeigt /v1/usage. Protokolliert werden nur eine pseudonyme Client-ID, der Pfad und der Status – keine Inhalte.