Docs · API & MCP

Des réponses sourcées via API.

La Contract-API de c:node fournit des réponses, des normes juridiques et des services administratifs avec source, licence et statut de vérification. Vous l’appelez via REST ou l’intégrez via MCP directement dans Claude, Copilot et vos propres agents.

Vue d’ensemble

La Contract-API est l’interface publique du c:node Graph. Chaque réponse est conçue pour que vous puissiez la vérifier : elle indique la source (ref), le statut de vérification (grounding), la licence et, si nécessaire, la mention de la source de données.

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

Les champs de preuve

ChampSignification
refRéférence standard de la source, p. ex. ELI:BSIGesetz§10, CELEX:32024R1689 ou XZUFI:S1000030000000045.
groundingStatut de vérification par rapport au passage cité, p. ex. verified.
licenseClasse de licence de la source : open, attribution ou internal.
attributionsMentions obligatoires (source, licence, URL) pour les données fournies.
citations · factscorePour /v1/ask : uniquement des sources vérifiées, avec pour chaque affirmation un verdict (belegt = sourcée ou offen = ouverte) et la part d’affirmations sourcées.
content_hashPour les enregistrements de preuve : SHA-256 du contenu, pour la journalisation selon l’EU AI Act, art. 12.

La spécification complète, lisible par machine, se trouve sous /openapi.json.

Quickstart

Les deux premiers appels fonctionnent sans clé, contre la Sandbox. Pour les endpoints de connaissances, il vous faut une clé Contract.

1 · Vérifier la connexion
curl https://contract.c-node.ai/v1/health
2 · Récupérer une preuve (sans clé)
curl "https://contract.c-node.ai/v1/provenance?ref=CELEX:32024R1689"
3 · Avec clé : tous les paragraphes d’une loi
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": "Quelles obligations ont les fournisseurs d’IA à haut risque ?"}, headers={"X-API-Key": os.environ["CNODE_API_KEY"]}, timeout=60) answer = r.json() print(answer["answer"], answer["citations"])

Authentification

Envoyez votre clé Contract dans l’en-tête X-API-Key. Le paramètre de requête ?key= est également accepté, mais il se retrouve plus facilement dans les logs et l’historique du navigateur – ne l’utilisez que là où aucun en-tête n’est possible.

curl https://contract.c-node.ai/v1/profiles -H "X-API-Key: $CNODE_API_KEY"
  • Sans clé, vous arrivez dans la Sandbox (profil public-observatory) : aperçu du graphe, preuves, audit et mentions de sources.
  • Clé Contract : liée à un profil, elle donne accès à /v1/ask, /v1/legal, /v1/leistung et /v1/betroffenheit.
  • Clé d’espace dédié : liée en plus au graphe de votre propre espace dédié – pour le Company Brain, les constats et l’ingestion. Les réponses relient alors le c:node Graph à vos propres connaissances.
Les clés restent côté serveur. Placez la clé dans une variable d’environnement ou votre gestionnaire de secrets, jamais dans du code frontend ou un dépôt. Vous obtenez vos clés avec votre offre ou via un court échange.

Profils & périmètre

Chaque clé est liée à un profil. Le profil détermine quelles classes de licence et quels domaines de connaissances une réponse peut utiliser – les modèles ne voient que ce que votre profil autorise. GET /v1/profiles les liste en direct.

ProfilUsageClé
public-observatorySandbox publique : aperçu du graphe et preuves.non
trialAccès d’essai pour l’évaluation.oui
free-marketConnaissances de marché (marché, commerce, investissements, finances publiques).oui
research-openPartenaires de recherche : recherche et innovation.oui
de-federalEspace de données fédéral allemand, accès complet.oui
commercial-fullAccès commercial complet (sans les sources non commerciales).oui

MCP : c:node dans Claude, Copilot & vos agents

Le serveur MCP de c:node expose la Contract-API sous forme d’outils. Le modèle formule, c:node fournit la base sourcée : si vous demandez à Claude une base juridique, il appelle cnode_ask et répond avec la source.

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

À ajouter dans .vscode/mcp.json. Copilot demande la clé au premier lancement et ne l’enregistre pas dans le projet :

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

Tout client MCP compatible Streamable HTTP fonctionne : URL https://mcp.c-node.ai/mcp, clé dans l’en-tête X-API-Key ou sous la forme Authorization: Bearer <key>. La consommation et le profil passent alors par votre propre clé. En mode on-premise, le serveur MCP tourne dans votre environnement et interroge votre propre Contract-API.

Outils

OutilCe qu’il faitEndpoint
cnode_askRéponse sourcée à une question, chaque affirmation avec sa source.GET /v1/ask
cnode_legalParagraphe par référence, tous les paragraphes d’une loi ou recherche plein texte.GET /v1/legal
cnode_leistungService administratif avec sa base juridique.GET /v1/leistung
cnode_dossierDossier de demande chaîné par hash. Prépare, ne déclenche rien.POST /v1/dossier
cnode_brain_previewCompany Brain à partir d’un domaine, sans enregistrement.GET /v1/demo/brain/stream
cnode_brain_bootstrapConstruire et enregistrer le Company Brain de votre espace dédié.POST /v1/brain/bootstrap
cnode_findingsConstats actuels de votre espace dédié, chacun avec ses preuves.GET /v1/findings
cnode_health · cnode_profilesVérification de connexion et profils de votre clé.GET /v1/health · /v1/profiles

Auto-hébergement (Open Core)

Le shell c:node est Open Core : l’interface, le chat et le runtime du graphe tournent via Docker sur votre machine ou votre serveur. Pour des réponses locales, un modèle ouvert via Ollama suffit – ou vous apportez votre propre clé API.

LicenceAGPL-3.0 · licence commerciale disponible
PrérequisDocker + Docker Compose
Accès localShell :3010 · API :8080
Quickstart
git clone https://github.com/CreativateLabs/cnode-shell cd cnode-shell cp .env.example .env # à adapter si besoin docker compose up --build
Optionnel : modèle local
ollama pull qwen2.5:7b

Le shell tourne ensuite sous http://localhost:3010 et l’API sous http://localhost:8080. Le périmètre de l’Open Core, la configuration des espaces dédiés et la licence commerciale sont décrits dans le README sur GitHub.

Qu’est-ce qui est ouvert, qu’est-ce qui ne l’est pas ? L’interface et le runtime du graphe sont ouverts – une base fonctionnelle, y compris air-gapped, que vous pouvez exploiter et auditer vous-même. L’intelligence c:node entraînée, avec le c:node Graph pour le droit, les registres et le marché, ainsi que l’exploitation avec SLA, sont disponibles dans les offres.

Connaissances

Réponses sourcées et sources juridiques. Tous les endpoints de cette section nécessitent une clé Contract.

GET/v1/askRéponse sourcée à une questionClé

Répond à une question exclusivement à partir des concepts que votre profil autorise. Les citations proviennent uniquement de références vérifiées. Si c:node ne trouve pas de preuve, la réponse le dit au lieu de deviner.

ParamètreDescription
qLa question en langage naturel (3 caractères min.). Obligatoire.
kNombre de concepts sur lesquels s’appuie la réponse (1–20, par défaut 6).
Réponse · structure (abrégée)
{ "question": "Quelles obligations ont les fournisseurs de systèmes d’IA à haut risque ?", "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": [] }

Sans preuve : "grounded": false et la réponse « Cela ne figure pas (encore) dans le graphe de connaissances. » Les affirmations sans appui reçoivent le verdict offen (ouverte).

GET/v1/ask/streamLa même chose en flux (SSE)Clé

Mêmes paramètres et même vérification que /v1/ask. La réponse arrive sous forme de Server-Sent Events : des événements token avec des fragments de texte, puis un événement done avec les citations, le verdict et le factscore, et enfin [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": "La déclaration …"} data: {"type": "done", "citations": […], "factscore": …, "attributions": […]} data: [DONE]
GET/v1/legalNormes juridiques (ELI / CELEX)Clé

Un paragraphe par référence, tous les paragraphes d’une loi ou une recherche plein texte. L’un des trois paramètres est obligatoire.

ParamètreDescription
refRéférence exacte, p. ex. ELI:BSIGesetz§1.
lawNom de la loi, p. ex. BSIGesetz – renvoie ses paragraphes.
qRecherche plein texte (tous les termes doivent apparaître).
limit · offsetPagination (1–500, par défaut 50). S’il y a d’autres résultats, next_offset figure dans la réponse.
Réponse · réelle, texte abrégé
{ "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/leistungServices administratifs avec base juridiqueClé

Services administratifs issus de XZuFi/LeiKa. rechtsgrundlagen ne contient que des liens vers des lois présentes dans le c:node Graph – rien n’est deviné. Paramètres : ref ou q, plus limit/offset.

Réponse · réelle
{ "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" } ] }

Preuves & audit

Des enregistrements pour la traçabilité : d’où provient une affirmation, qui un acte juridique concerne et quelles sources doivent être mentionnées. Avec Essayer, vous appelez la Sandbox en direct.

GET/v1/provenanceEnregistrement de preuve pour une référencesans clé

Fournit pour une référence le statut de vérification, la licence, une indication d’incertitude et un hash du contenu – conçu pour la journalisation selon l’EU AI Act, art. 12. Paramètre : ref.

GET/v1/auditQuelles entreprises un acte juridique concerne-t-il ?sans clé

Relie un acte juridique de l’UE aux secteurs concernés et aux entreprises inscrites au registre du commerce. Paramètre : act, p. ex. ArtificialIntelligenceAct.

GET/v1/betroffenheitImpact régional par acte juridiqueClé

Étend /v1/audit à la dimension régionale : loi → secteur → entreprises concernées → Land → indicateurs régionaux (PIB, taux de chômage, revenus). Chaque chiffre dérivé porte sa chaîne de preuves. Paramètres : act (optionnel), limit (1–100).

POST/v1/dossierDossier de demande chaîné par hashClé

Assemble à partir des champs d’une demande un dossier vérifiable : chaque champ avec sa source, le verdict de confiance eIDAS sur le sceau et une chaîne de hash infalsifiable. Si la demande cite un service sans base juridique, c:node la complète à partir du graphe. Les réponses contiennent des données personnelles et ne sont pas mises en cache.

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": "Adresse", "wert": "…", "quelle": "Attestation de domicile", "siegel": { "aussteller": "…", "typ": "…" } } ] }'
GET/v1/attributionsMentions de sources obligatoiressans clé

Toutes les sources de données de votre profil avec licence et URL – pour les mentions légales, une liste des sources ou un export.

Company Brain

Un domaine devient un profil d’entreprise sourcé : c:node lit les pages publiques, vérifie les mentions légales et le registre du commerce, ancre l’entreprise dans son secteur et fournit des constats sur la réglementation et les appels d’offres en cours – chacun avec sa source.

GET/v1/demo/brain/streamAperçu à partir d’un domaine (SSE)sans clé

L’aperçu public : diffuse l’exécution pour un domaine, sans rien enregistrer. Limité par IP et par jour ; le résultat d’un domaine est mis en cache 24 heures et rejoué. Paramètre : domain, p. ex. firma.de.

Types d’événements dans cet ordre : step, page, feed, impressum, register, profile, anchor, finding, done (en cas d’erreur error), terminé par [DONE].

curl -N "https://contract.c-node.ai/v1/demo/brain/stream?domain=firma.de"
POST/v1/brain/bootstrapConstruire le Brain de votre espace dédiéClé d’espace dédié

Exécute le traitement complet et enregistre le profil, les pages et les constats dans le graphe de votre espace dédié. Ensuite, /v1/ask et /v1/findings connaissent votre entreprise. Body : {"domain": "firma.de"}. Délai maximal 90 secondes (504 en cas de dépassement).

En flux : GET /v1/brain/stream?domain=… fournit les mêmes événements que l’aperçu et enregistre à la fin.

GET/v1/findingsConstats actuels de votre espace dédiéClé d’espace dédié

Les constats proactifs issus de la dernière exécution : réglementation, appels d’offres, registre et contexte sectoriel, chacun avec ses preuves. S’il n’y a pas encore eu d’exécution, findings est vide et hint indique l’étape suivante.

Graphe de l’espace dédié

POST/v1/ingestAjouter vos propres connaissancesClé d’espace dédié

Écrit un document ou une note dans le graphe privé de votre espace dédié. L’entrée est immédiatement exploitable via /v1/ask. Le c:node Graph lui-même reste inchangé.

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

Champs : title ou label, text ou content, optionnellement source et ref.

Exploitation

GET/v1/healthStatut de l’APIsans clé
GET/v1/profilesProfils et ce qu’ils peuvent voirsans clé
GET/v1/usageConsommation et rate limitsans clé

Affiche votre quota actuel par minute et votre consommation : réponses fournies, dont facturables, ingestions et factscore moyen.

GET/v1/graphIndicateurs du c:node Graphsans clé

Termes, relations, domaines et taux de vérification du graphe que votre profil voit.

Erreurs & limites

Les erreurs sont renvoyées en JSON avec un champ detail.

StatutSignification
400Paramètre manquant, p. ex. /v1/legal sans ref, law ni q.
401Clé absente ou invalide pour un endpoint qui requiert une clé Contract.
403Clé valide, mais sans espace dédié (Company Brain, constats, ingestion).
404Référence ou acte juridique absent du graphe.
429Rate limit atteint. Attendez le nombre de secondes indiqué dans l’en-tête Retry-After.
503Génération de réponses momentanément saturée. Réessayez après Retry-After.
504L’exécution du Brain a dépassé le délai maximal.

Chaque appel /v1, sauf /v1/health, est limité par client ; /v1/usage affiche votre quota actuel. Seuls un identifiant client pseudonymisé, le chemin et le statut sont journalisés – aucun contenu.