Docs · API & MCP

Reliable answers via API.

The c:node Contract API delivers answers, legal provisions and public administration services with source, licence and verification status. You call it via REST or plug it into Claude, Copilot and your own agents directly via MCP.

Overview

The Contract API is the public interface to the c:node Graph. Every answer is built so that you can verify it: it names the source (ref), the verification status (grounding), the licence and, where required, the attribution of the data source.

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

The evidence fields

FieldMeaning
refStandard reference of the source, e.g. ELI:BSIGesetz§10, CELEX:32024R1689 or XZUFI:S1000030000000045.
groundingVerification status against the cited passage, e.g. verified.
licenseLicence class of the source: open, attribution or internal.
attributionsMandatory attributions (source, licence, URL) for the data delivered.
citations · factscoreFor /v1/ask: verified sources only, plus a verdict per statement (belegt = evidenced or offen = open) and the share of evidenced statements.
content_hashFor provenance records: SHA-256 over the content, for logging under EU AI Act Art. 12.

What our figures measure

FigureMeaning
99.9%+ of concepts backed by a sourcemetrics.verified_pct from /v1/graph: the share of concepts anchored to an official source. It tells you a source exists – not how many entries are correct.
98.8% checked precision of legal contentSample of 1,235 norms, terms and rulings, each checked against the official source. 95% confidence interval (Wilson) 98.0–99.3%. Run graph-v32-2026-10-12T105151Z, as of 12 Oct 2026.

Every precision figure names the stored run it comes from, so you can trace it and compare it with later runs.

The complete machine-readable specification is available at /openapi.json.

Quickstart

The first two calls work against the sandbox without a key. For knowledge endpoints you need a Contract key.

1 · Check the connection
curl https://contract.c-node.ai/v1/health
2 · Fetch a provenance record (no key)
curl "https://contract.c-node.ai/v1/provenance?ref=CELEX:32024R1689"
3 · With a key: all sections of a law
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": "What obligations do providers of high-risk AI have?"}, headers={"X-API-Key": os.environ["CNODE_API_KEY"]}, timeout=60) answer = r.json() print(answer["answer"], answer["citations"])

Authentication

Send your contract key in the X-API-Key header. Only then is every call attributed to your key – profile, allowance, rate limit and /v1/usage. The API also accepts the ?key= query parameter, but it easily ends up in logs and browser histories, and usage is then not attributed to your key. Don’t use it.

curl https://contract.c-node.ai/v1/usage -H "X-API-Key: $CNODE_API_KEY"
  • Without a key you land in the sandbox (profile public-observatory): graph overview, provenance, audit, attributions and the Company Brain preview.
  • Contract key (nk_…): bound to your plan’s profile, unlocks /v1/ask, /v1/retrieve, /v1/legal, /v1/leistung and /v1/betroffenheit.
  • Tenant key (Enterprise): additionally bound to your own tenant graph – for Company Brain, findings and ingest. Answers then combine the c:node Graph with your own knowledge.
KeyWhere fromWhat for
Contract key nk_…your account at billing.c-node.ai (API key section)Contract API; via MCP only the c:node Graph tools
Organisation key ck_…c:node → Settings → API keys & MCPMCP and the app API for servers and agents without a person – not for the Contract API
Sign-in (OAuth)your c:node account at auth.c-node.aiMCP in Claude, Claude Code, Copilot Studio – as a person, with your workspace
Keys belong on the server. Put the key in an environment variable or your secret store, never in frontend code or a repository. You get keys with your plan or through a short call.

Profiles & plans

Every key is bound to a profile. The profile defines which licence classes and knowledge domains an answer may use – the models only see what your profile allows. GET /v1/profiles lists them live.

ProfilePlanWhat the key sees
public-observatorySandbox, no keyGraph overview and provenance.
research-openResearchResearch and innovation, open licences.
free-marketStarterMarket, trade, investment, market trends and public finance.
commercial-fullProfessionalFull commercial access (without non-commercial sources), including law and public services.
Tenant profileEnterpriseFull access plus your own tenant graph.
de-federalon requestFederal data space Germany, full access.
trialTrialTime-limited, for evaluation.

Reliable answers via the API come out of the same monthly allowance as the app and MCP. The billing unit is the reliable answer; looking up provisions and services does not count (see Errors & limits).

Self-hosting (on-prem)

c:node also runs on your infrastructure: interface, chat and graph runtime as a Docker stack on your server, air-gapped if needed. For local answers an open model via Ollama is enough – or bring your own API key.

LicenceCommercial licence · source code for licensees
RequirementDocker + Docker Compose
Local endpointsShell :3010 · API :8080

We provide the source code and installation guide to licensees. Get in touch – we set up access and support the installation.

What runs on your side, what comes from us? The interface and graph runtime run on your side – a working base, air-gapped too, that you can operate and audit yourself. The trained c:node intelligence with the c:node Graph for law, registers and market, plus operation with an SLA, is available in the plans.

MCP: c:node in Claude, Copilot & your agents

One URL for every plan: https://mcp.c-node.ai/mcp (Streamable HTTP). The model writes, c:node delivers the evidenced basis. Every answer carries its evidence status as in the app – evidenced, partly evidenced or general assessment – in the evidence field (status and label). Hits that were checked but do not count as evidence appear under checked_sources. Which tools you see depends on your sign-in, your plan, your role and your workspace settings.

  1. In Claude (claude.ai or desktop): Settings → Connectors → “Add custom connector”.
  2. Name c:node, URL https://mcp.c-node.ai/mcp. No client ID needed.
  3. “Connect” → sign in at auth.c-node.ai → on the consent page choose your workspace and click “Allow”.
  4. In Claude Team and Enterprise the owner adds the connector once; everyone signs in themselves, so their own permissions, layers and connectors apply.

Add it once, for all your projects:

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

Then in Claude Code run /mcp → cnode → “Authenticate”. The browser opens the sign-in at auth.c-node.ai; after “Allow” you continue in Claude Code. Without --scope user the entry only applies to the current project.

Without a person, e.g. on a server or in CI: an organisation key in the header. This gives no private layer and no connector search, because both belong to a person.

claude mcp add --transport http --scope user cnode https://mcp.c-node.ai/mcp \ --header "Authorization: Bearer $CNODE_ORG_KEY"
  1. Open the agent → Tools → “Add a tool” → “Model Context Protocol” → new server.
  2. Server URL https://mcp.c-node.ai/mcp.
  3. Authentication OAuth 2.0, Dynamic discovery: Copilot Studio finds auth.c-node.ai from the server URL and registers itself. On first connect you sign in, pick the workspace and consent.
  4. Alternatively OAuth 2.0, manual with a fixed client we set up for you: authorization URL https://auth.c-node.ai/authorize, token and refresh URL https://auth.c-node.ai/token, scopes e.g. cnode:graph.read cnode:workspace.read cnode:usage.read. Send us the redirect URL Copilot Studio shows afterwards.
  5. Without a personal sign-in you can use API key: header X-API-Key with an organisation key ck_….
  6. Your Power Platform (DLP) policies apply in addition.
Sign-in with Microsoft is coming. Until then, sign in at auth.c-node.ai with an e-mail code or Google.

Any MCP client with Streamable HTTP works with a key in the X-API-Key header or as Authorization: Bearer <key>. For VS Code in .vscode/mcp.json – Copilot asks for the key on first start and does not store it in the project:

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

With an organisation key ck_… you see your workspace tools according to the key’s role; with a contract key only the c:node Graph. auth.c-node.ai accepts clients with their own sign-in via client metadata (CIMD) or as a native app redirecting to localhost; for other web services we set up a fixed client.

Sign-in & workspace

  • You always sign in at auth.c-node.ai with your c:node account (e-mail code or Google). A connector does not create a new account – you need an account already, e.g. through your plan or an invitation.
  • The consent page shows which permissions the client gets and, under “Workspace”, for which workspace. The workspace always comes from the sign-in, never from anything typed in the chat. If you belong to several workspaces, add one connector per workspace or reconnect to switch.
  • Your own c:node instance: same URL – c:node routes you to your instance based on your sign-in. Your account must be a member of the instance’s workspace; your c:node contact sets this up. Organisation keys of a dedicated instance do not work via MCP yet; please use the sign-in.
  • For admins: Settings → API keys & MCP – switch MCP on or off for the workspace, choose the allowed permissions, “End all MCP sessions”.

The old URLs nena-mcp.c-node.ai/mcp and mcp.c-node.ai/agents/mcp keep working until 5 January 2027. Please switch to https://mcp.c-node.ai/mcp.

MCP: scopes & tools

When you sign in, you grant the client permissions (scopes). A tool only appears if the permission is granted, your plan and role allow it and your workspace enables MCP for it. The list is recomputed on every request.

ScopeAllowsFrom plan
cnode:graph.readc:node Graph: answers, law, public services, dossier, Company Brain previewResearch
cnode:workspace.readQuestions to your workspace; from Professional also agents, memory, reading the library, notifications, situation reportStarter
cnode:connectors.readSearch your connected systems with your own accessProfessional
cnode:library.writePut files into the library (private by default)Professional
cnode:tasks.runStart tasks and check their statusProfessional
cnode:drafts.createCreate drafts for approval, reject proposalsProfessional
cnode:usage.readSee your own allowanceall
cnode:adminAdministration: workspace usage and MCP policyEnterprise, admins
cnode:graph.writeUpdate the Company Brain in your own tenant graphwith a tenant key

Tools by plan

ToolWhat it doesResearchStarterProfessionalEnterprise
cnode_graph_askAnswer from the c:node Graph with evidence status (evidence) and sources✓✓✓✓
cnode_legal
cnode_law_search
cnode_leistung
Provision by reference or citation, provision search with full text, public service with its legal basis✓✓✓✓
cnode_health
cnode_usage
Connection check, own allowance✓✓✓✓
cnode_modelsWhich answer modes and models your plan unlocks, with class and weight✓✓✓✓
cnode_askQuestion to your workspace: your documents plus the c:node Graph–✓✓✓
cnode_dossier
cnode_brain_preview
Assemble an application dossier, Company Brain preview of a domain–✓✓✓
cnode_thread_results
cnode_memory_overview
Results of a chat (artefacts, items created with link, tasks, approvals, runs); memory overview – c:node Graph as an aggregate and your own entries per level. Read only–✓✓✓
cnode_memory_search
cnode_library_list
cnode_library_read
cnode_library_upload
Search and read memory and library, add files––✓✓
cnode_connector_searchSearch your connected systems––✓✓
cnode_list_agents
cnode_ask_agent
cnode_consult_agent
cnode_consult_team
Domain agents and the expert team––✓✓
cnode_run_task
cnode_task_status
Tasks: research, decision memo, document analysis, legal and compliance check––✓✓
cnode_draft_followup
cnode_list_pending_actions
cnode_reject_action
cnode_approve_action
cnode_notifications
Drafts and approval links, open proposals, notifications––✓✓
cnode_tasks_list
cnode_task_create
cnode_task_update
List tasks; create a new task as a draft; propose a change to a task – effective only after approval in c:node––✓✓
cnode_lagebildSituation report for your own domain––✓✓
cnode_admin_usageWorkspace usage and MCP policy–––✓ admins

Roles: viewers see the read tools; members additionally questions, agents, tasks, drafts and upload; admins additionally administration. With a contract key you only see the c:node Graph tools for your profile, plus cnode_profiles and, with a tenant key, cnode_brain_bootstrap and cnode_findings. For contract keys, cnode_graph_ask is also still available as cnode_ask (old name) until 5 January 2027.

Approvals only happen in c:node. Via MCP, c:node creates a draft or an approval request at most and gives you the link to the approval card (approve_url). Nothing is sent or booked until you press “Approve” in c:node. cnode_approve_action, too, only returns this link.

MCP: usage & limits

  • A reliable answer via MCP counts the same as in the app and comes out of your team’s monthly allowance. Answers count by model class: standard (e.g. Gemini Flash) 1×, premium (Claude or Gemini Pro) 2×, in “Thorough” mode 3×. cnode_models shows which modes and models your plan unlocks.
  • From 80 % of the allowance, c:node shows a notice. Usage up to 150 % is included and not charged; after that, answers pause until next month or an upgrade.
  • Searching, looking up and reading – provisions, public services, library, status – do not count as answers.
  • From 80 % of the allowance c:node shows a notice. At 150 % c:node takes no further answers until the month changes; the tool says so and links to your plan.
  • Limits per person and minute: 30 answers, 120 lookups, 6 tasks, 10 drafts or uploads. Above that, the tool tells you how long to wait.
  • Dedicated c:node instances have no plan allowance; MCP answers are counted per channel there.

cnode_usage shows where you stand – or in c:node under Settings.

MCP: troubleshooting

What you seeWhyWhat helps
401 “c:node MCP braucht eine Anmeldung oder einen Schlüssel”Not signed in yet, sign-in expired or key invalid. The WWW-Authenticate header names under resource_metadata where the client finds the sign-in – that is intended.Reconnect (Claude Code: /mcp → cnode → “Authenticate”) or check the key.
invalid_redirect_uri during sign-inThe client registers with a redirect address that auth.c-node.ai does not accept automatically. Accepted are Claude, clients with client metadata (CIMD) and native apps redirecting to localhost, 127.0.0.1 or [::1], and Copilot Studio redirecting to https://global.consent.azure-apim.net/redirect/….Update Claude Code. For other web services, ask for a fixed client or use an organisation key.
Consent page ends with access_denied“Deny” was pressed – or your account is not a member of the workspace the client asks for.Reconnect and “Allow”. Your admin or c:node contact sets up the membership.
Sign-in fails, there is no account yetA connector does not create an account.Create a c:node account or get invited first, then connect.
Connected, but 0 toolsOn the consent page a workspace was chosen that has no c:node workspace – or MCP is switched off there.Reconnect and choose the right workspace. Admins check Settings → API keys & MCP.
A tool is missing or says it is not included in your c:node planPlan, role or a permission not granted at sign-in.Check scopes & tools; reconnect if a permission is missing.
“Limit reached” or “allowance used up”Per-person minute limit or 150 % of the monthly allowance.Wait briefly or adjust your plan.
“Approve only in c:node”Intended: nothing is approved via MCP.Open the approve_url link and approve in c:node.

Knowledge

Reliable answers and legal sources. All endpoints here require a Contract key.

GET/v1/askReliable answer to a questionKey

Answers a question exclusively from the concepts your profile allows. Citations come only from verified references. If c:node finds no evidence, the answer says so instead of guessing.

ParameterDescription
qThe question in natural language (min. 3 characters). Required.
kNumber of concepts the answer draws on (1–20, default 6).
Response · structure (shortened)
{ "question": "What obligations do providers of high-risk AI systems have?", "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": [] }

Without evidence: "grounded": false and the answer “That is not (yet) in the knowledge graph.” Statements without support receive the verdict offen (open).

GET/v1/ask/streamThe same as a stream (SSE)Key

Same parameters and verification as /v1/ask. The response arrives as server-sent events: token events with text chunks, then a done event with citations, verdict and factscore, and finally [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/retrieveEvidence without a phrased answerKey

Returns the concepts /v1/ask would ground on – each with reference, definition, score and layer (macro = c:node Graph, micro = your tenant) – but no phrased answer and no per-statement check. For callers who write the answer with their own model; considerably faster than /v1/ask. Same parameters as /v1/ask. Counts like an answer (billable when grounded).

curl "https://contract.c-node.ai/v1/retrieve?q=residence%20registration&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/legalLegal provisions (ELI / CELEX)Key

One section by reference, all sections of a law or a full-text search. One of the three parameters is required.

ParameterDescription
refExact reference, e.g. ELI:BSIGesetz§1.
lawName of the law, e.g. BSIGesetz – returns its sections.
qFull-text search (all terms must appear).
citeCitation as you would type it, e.g. § 309 BGB – returns the provision in full text (like /v1/legal/norm).
limit · offsetPagination (1–500, default 50). If there are more hits, next_offset is included in the response.
Response · real, text shortened (source text in German)
{ "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/searchProvisions for a citation or topic, with full textKey

Finds provisions for a question, a topic or a citation. Citations in the question are resolved first ("match": "citation"), then ranked hits follow ("match": "search"), each with full text, source and status date. missing lists cited provisions or laws that the corpus does not hold.

ParameterDescription
qQuestion, topic or citation, e.g. Art. 28 DSGVO or Klauselverbote in AGB. Required.
kNumber of hits (1–30, default 8).
lawRestrict to one law, e.g. 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/normOne provision by citation, with full textKey

Resolves a citation as you would type it – cite=§ 309 BGB, cite=Art. 28 DSGVO – or takes an exact ref. Response: the provision with full text, source URL and status date, or an honest "found": false with a reason (no_citation, law_not_held, norm_not_found, not_in_profile). /v1/legal?cite=… returns the same.

GET/v1/legal/coverageWhich laws the corpus holdsKey

Provisions per law and the status date per law – so you know what /v1/legal/search and /v1/legal/norm cover.

GET/v1/leistungPublic administration services with legal basisKey

Public administration services from XZuFi/LeiKa (German service catalogues). rechtsgrundlagen (legal bases) only contains links to laws that are in the c:node Graph – nothing is guessed. Parameters: ref or q, plus limit/offset.

Response · real (source data in German)
{ "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" } ] }

Provenance & audit

Records for traceability: where a statement comes from, whom a legal act affects, and which sources must be attributed. With Try it you call the sandbox live.

GET/v1/provenanceProvenance record for a referenceno key

Returns the verification status, licence, an uncertainty statement and a content hash for a reference – built for logging under EU AI Act Art. 12. Parameter: ref.

GET/v1/auditWhich companies does a legal act affect?no key

Links an EU legal act to the affected sectors and companies from the commercial register. Parameter: act, e.g. ArtificialIntelligenceAct.

GET/v1/betroffenheitRegional impact per legal actKey

Extends /v1/audit with the region: law → sector → affected companies → federal state → regional indicators (GDP, unemployment rate, income). Every derived figure carries its evidence chain. Parameters: act (optional), limit (1–100).

POST/v1/dossierHash-chained application dossierKey

Assembles a verifiable dossier from application fields: every field with its source, the eIDAS trust verdict on the seal and a tamper-proof hash chain. If the application names a service without legal bases, c:node adds them from the graph. Responses contain personal data and are not cached.

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": "Address", "wert": "…", "quelle": "Certificate of registration", "siegel": { "aussteller": "…", "typ": "…" } } ] }'
GET/v1/attributionsMandatory attributionsno key

All data sources of your profile with licence and URL – for your imprint, source list or export.

Company Brain

A domain becomes an evidenced company profile: c:node reads the public pages, checks the imprint and commercial register, anchors the company in its sector and delivers findings on regulation and open public tenders – each with a source.

GET/v1/demo/brain/streamPreview from a domain (SSE)no key

The public preview: streams the run for a domain, stores nothing. Limited to a few runs per IP and hour, plus a daily allowance; the result for a domain is cached for 24 hours and replayed. Parameter: domain, e.g. firma.de; optionally lang (de, en, fr), mode (brief by default, swot or lagebild) and, with mode=lagebild, goal (gesamt, chancen, pflichten, foerderung, wettbewerb).

Event types in this order: step, page, feed, impressum, register, profile, anchor, finding, done (on errors error), terminated by [DONE].

curl -N "https://contract.c-node.ai/v1/demo/brain/stream?domain=firma.de"
POST/v1/brain/bootstrapBuild the Brain for your tenantTenant key

Runs the full process and stores profile, pages and findings in your tenant graph. Afterwards /v1/ask and /v1/findings know your company. Body: {"domain": "firma.de"}. Time limit 90 seconds (504 if exceeded).

As a stream: GET /v1/brain/stream?domain=… delivers the same events as the preview and stores at the end.

GET/v1/findingsCurrent findings for your tenantTenant key

The proactive findings from the last run: regulation, public tenders, registers and sector context, each with evidence. If there has been no run yet, findings is empty and hint names the next step.

Tenant graph

With a tenant key, /v1/ask, /v1/retrieve, /v1/graph and /v1/findings combine the c:node Graph with your own knowledge. With scopes you choose which layers of your tenant are read as well: org (default), team:<id>, user:<id>, comma-separated.

POST/v1/ingestAdd your own knowledgeTenant key

Writes a document or a note into your private tenant graph. The entry can be answered via /v1/ask right away. The c:node Graph itself stays unchanged.

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

Fields: title or label, text or content, optionally source, ref (identifier of the source; ingesting again with the same ref replaces the entry) and scope (org, team:<id> or user:<id>, default org).

PATCH/v1/ingest?ref=…Move an entry to another layerTenant key

Moves an entry within your tenant, e.g. from a personal note into the organisation memory. Body: {"scope": "org"}. 404 if nothing is stored under the ref.

DELETE/v1/ingest?ref=…Delete an entryTenant key

Deletes everything you ingested under this ref – text, aliases and embedding – e.g. for a GDPR erasure. Repeated calls return "deleted": 0. The c:node Graph is not touched.

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

Operations

GET/v1/healthAPI statusno key
GET/v1/profilesProfiles and what they may seeno key
GET/v1/usageUsage and rate limitno key

Your per-minute quota and your usage for a period (since/until, e.g. since=30d): answers delivered (answers), of which billable (billable_answers), retrievals, lookups, ingests, the split by channel (by_channel, e.g. api, mcp:claude) and the average factscore. detail=true adds the individual entries. Call it with your key – without a key you only see the sandbox.

GET/v1/graphc:node Graph metricsno key

Concepts, relations, domains and the share of concepts backed by a source (verified_pct, what it measures) – for the graph your profile sees.

Errors & limits

Errors come as JSON with a detail field.

StatusMeaning
400Parameter missing, e.g. /v1/legal without ref, law, q or cite.
401No or invalid key for an endpoint that requires a contract key.
403Endpoint requires a tenant key (Company Brain, findings, ingest) – without a key or with a key that has no tenant.
404Reference or legal act not in the graph.
422Invalid parameter, e.g. q too short or k out of range.
429Rate limit reached. Wait the seconds given in the Retry-After header.
503Answer generation is busy right now. Retry after Retry-After.
504Brain run exceeded the time limit.

Rate limit: 120 calls per minute and key, for every /v1 call except /v1/health. Every response carries X-RateLimit-Limit and X-RateLimit-Remaining; /v1/usage shows where you stand as well.

Billing: the unit is the reliable answer – an answer from /v1/ask, /v1/ask/stream or /v1/retrieve that rests on verified sources. Answers without evidence, lookups (/v1/legal, /v1/legal/norm, /v1/legal/search, /v1/leistung) and ingests are counted but not billed as reliable answers. Reliable answers via the Contract API are measured against your plan’s monthly allowance. Anything beyond it costs €0.04 excl. VAT per reliable answer, capped in the Starter plan at the cost of switching to Professional. There is no pause at 150 % here; the rate limit applies.

Only a pseudonymous client ID, the path and the status are logged – no content.