Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/datagrout-ai:datagrout-ai-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.1.0
info:
title: DataGrout API
version: '2026-11-05'
description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-11-05: 21 operation(s) read from 11 public documentation page(s) (each
operation names its page in x-source). This is not the provider''s published contract; DataGrout has published no machine-readable contract
that the pipeline could find. Engine: local.'
x-evidence-tiers:
code-example: 14
documentation: 7
pages-with-code: 9
pages-read: 11
x-generated-from: documentation
x-provenance: generated
x-authored-by: API Evangelist
x-generated: '2026-11-05'
x-generator: generate-contract-from-docs.py
x-engine: local
x-sources:
- https://docs.datagrout.ai/rest-api
- https://docs.datagrout.ai/webhooks
- https://docs.datagrout.ai/quick-start
- https://library.datagrout.ai/quick-start
- https://docs.datagrout.ai/policy-security
- https://docs.datagrout.ai/cognitive-trust-certificates
- https://docs.datagrout.ai/authentication
- https://docs.datagrout.ai/jsonrpc
- https://docs.datagrout.ai/interaction-settings
- https://docs.datagrout.ai/sap-private-connector
- https://docs.datagrout.ai/mcp-inspector
servers:
- url: https://gateway.datagrout.ai
paths:
/answers:
post:
operationId: post_answers
tags:
- Answers
summary: Ask a question in plain language.
description: Plans and runs work against connected systems, returning an answer and verification status.
x-source: https://docs.datagrout.ai/rest-api
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostAnswersRequest'
responses:
'201':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/PostAnswersResponse'
x-evidence:
kind: documentation
/api/v1/servers/{uuid}:
get:
operationId: get_api_v1_servers_uuid
tags:
- Api
summary: GET /api/v1/servers/{uuid}
x-source: https://docs.datagrout.ai/rest-api
parameters:
- name: uuid
in: path
required: true
schema:
type: string
responses:
'200':
description: Success (shape read from the example response on the page)
content:
application/json:
schema:
$ref: '#/components/schemas/GetApiV1ServersUuidResponse'
x-evidence:
kind: code-example
language: curl
snippet: "curl https://gateway.datagrout.ai/api/v1/servers/YOUR_UUID -H \"Authorization: Bearer YOUR_TOKEN\"\n { \"id\": \"YOUR_UUID\"\
, \"name\": \"Sales data\" }\n GET / reads and costs nothing, which makes it the right check for whether a credential works. \n Answers\
\ \n POST /answers\n Ask a question in plain language. DataGrout plans the work, runs it against your connected systems, then checks\
\ the result against the "
/api/v1/servers/{uuid}/answers:
post:
operationId: post_api_v1_servers_uuid_answers
tags:
- Api
summary: POST /api/v1/servers/{uuid}/answers
x-source: https://docs.datagrout.ai/rest-api
parameters:
- name: uuid
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostApiV1ServersUuidAnswersRequest'
responses:
'201':
description: Success (shape read from the example response on the page)
content:
application/json:
schema:
$ref: '#/components/schemas/PostApiV1ServersUuidAnswersResponse'
x-evidence:
kind: code-example
language: curl
snippet: "curl -X POST https://gateway.datagrout.ai/api/v1/servers/YOUR_UUID/answers -H \"Authorization: Bearer YOUR_TOKEN\" -H \"Content-Type:\
\ application/json\" -d '{\"question\": \"Total open opportunity value by region this quarter\"}'\n {\n \"answer\": [\n { \"region\"\
: \"North\", \"total\": 184000 },\n { \"region\": \"South\", \"total\": 92500 }\n ],\n \"verified\": true,\n \"certificate\": { \"id\"\
: \"ctc_...\", \"url\": \"https://ctc.d"
/api/v1/servers/{uuid}/conclusions:
post:
operationId: post_api_v1_servers_uuid_conclusions
tags:
- Api
summary: POST /api/v1/servers/{uuid}/conclusions
x-source: https://docs.datagrout.ai/rest-api
parameters:
- name: uuid
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostApiV1ServersUuidConclusionsRequest'
responses:
'201':
description: Success (shape read from the example response on the page)
content:
application/json:
schema:
$ref: '#/components/schemas/PostApiV1ServersUuidConclusionsResponse'
x-evidence:
kind: code-example
language: curl
snippet: "curl -X POST https://gateway.datagrout.ai/api/v1/servers/YOUR_UUID/conclusions -H \"Authorization: Bearer YOUR_TOKEN\" -H\
\ \"Content-Type: application/json\" -d '{\n \"require\": [\"invoice-rules\"],\n \"records\": {\n \"invoice\": [{\"id\": \"inv_42\"\
, \"amount\": 1200, \"due_absolute_days\": 20522}],\n \"today\": {\"absolute_days\": 20590}\n },\n \"questions\": {\n \"fee\": {\"goal\"\
: \"late_fee(inv_42, Fee)\"},\n \"level\": {\"goal\": "
/api/v1/servers/{uuid}/memories/warehouses/facts:
post:
operationId: post_api_v1_servers_uuid_memories_warehouses_facts
tags:
- Api
summary: POST /api/v1/servers/{uuid}/memories/warehouses/facts
x-source: https://docs.datagrout.ai/rest-api
parameters:
- name: uuid
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostApiV1ServersUuidMemoriesWarehousesFactsRequest'
responses:
'201':
description: Success (shape read from the example response on the page)
content:
application/json:
schema:
$ref: '#/components/schemas/PostApiV1ServersUuidMemoriesWarehousesFactsResponse'
x-evidence:
kind: code-example
language: curl
snippet: "curl -X POST https://gateway.datagrout.ai/api/v1/servers/YOUR_UUID/memories/warehouses/facts -H \"Authorization: Bearer YOUR_TOKEN\"\
\ -H \"Content-Type: application/json\" -d '{\"statement\": \"Warehouse North stocks 40 pallets of item A.\"}'\n Returns 201 Created\
\ : \n {\n \"stored\": 3,\n \"facts\": [\n { \"id\": \"f1a2b3c4d5e6\", \"name\": \"Warehouse North\", \"type\": \"entity\" }\n ],\n\
\ \"message\": \"Remembered 3 facts.\"\n}"
/api/v1/servers/{uuid}/transforms:
post:
operationId: post_api_v1_servers_uuid_transforms
tags:
- Api
summary: POST /api/v1/servers/{uuid}/transforms
x-source: https://docs.datagrout.ai/rest-api
parameters:
- name: uuid
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostApiV1ServersUuidTransformsRequest'
responses:
'201':
description: Success (shape read from the example response on the page)
content:
application/json:
schema:
$ref: '#/components/schemas/PostApiV1ServersUuidTransformsResponse'
x-evidence:
kind: code-example
language: curl
snippet: "curl -X POST https://gateway.datagrout.ai/api/v1/servers/YOUR_UUID/transforms -H \"Authorization: Bearer YOUR_TOKEN\" -H \"\
Content-Type: application/json\" -d '{\"goal\": \"total units by city\", \"data\": [{\"city\": \"Lisbon\", \"units\": 31}, {\"city\"\
: \"Porto\", \"units\": 12}, {\"city\": \"Lisbon\", \"units\": 7}]}'\n {\n \"result\": [\n { \"city\": \"Lisbon\", \"sum_units\": 38\
\ },\n { \"city\": \"Porto\", \"sum_units\": 12 }\n ],\n \"c"
/api/v1/servers/{uuid}/webhooks:
post:
operationId: post_api_v1_servers_uuid_webhooks
tags:
- Api
summary: POST /api/v1/servers/{uuid}/webhooks
x-source: https://docs.datagrout.ai/webhooks
parameters:
- name: uuid
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostApiV1ServersUuidWebhooksRequest'
responses:
'201':
description: Success (status as documented)
x-evidence:
kind: code-example
language: curl
snippet: "curl -X POST https://gateway.datagrout.ai/api/v1/servers/YOUR_UUID/webhooks -H \"Authorization: Bearer YOUR_TOKEN\" -H \"\
Content-Type: application/json\" -d '{\"url\": \"https://hooks.example.com/datagrout\", \"events\": [\"run.completed\", \"task.failed\"\
]}'\n Field \n Required \n Meaning \n url \n yes \n Where to POST events. Must be https , and must not name a private, loopback or link-local\
\ address. \n events \n"
/api/v1/servers/{uuid}/webhooks/{webhookid}/test:
post:
operationId: post_api_v1_servers_uuid_webhooks_webhookid_test
tags:
- Api
summary: POST /api/v1/servers/{uuid}/webhooks/{webhookId}/test
x-source: https://docs.datagrout.ai/webhooks
parameters:
- name: uuid
in: path
required: true
schema:
type: string
- name: webhookid
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostApiV1ServersUuidWebhooksWebhookidTestRequest'
responses:
'201':
description: Success (status as documented)
x-evidence:
kind: code-example
language: curl
snippet: "curl -X POST https://gateway.datagrout.ai/api/v1/servers/YOUR_UUID/webhooks/WEBHOOK_ID/test -H \"Authorization: Bearer YOUR_TOKEN\"\
\ -H \"Content-Type: application/json\" -d '{\"event\": \"run.completed\"}'\n Sends one delivery of event to the webhook’s URL right\
\ away, exactly as a real one is sent, with placeholder values in data ( run_id is 0 , ids end in _sample ). event defaults to the first\
\ event th"
/ca.pem:
get:
operationId: get_ca_pem
tags:
- Ca
summary: Signature Verification – CTC signatures can be verified by anyone with the DG CA public key, which is served at GET /ca.pem.
x-source: https://docs.datagrout.ai/policy-security
responses:
'200':
description: Success (status as documented)
x-evidence:
kind: documentation
/conclusions:
post:
operationId: post_conclusions
tags:
- Conclusions
summary: Typed questions answered by rules over the facts you send.
description: Runs rule‑based logic batteries against supplied facts and returns proven, refuted or unknown answers.
x-source: https://docs.datagrout.ai/rest-api
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostConclusionsRequest'
responses:
'201':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/PostConclusionsResponse'
x-evidence:
kind: documentation
/install.sh:
get:
operationId: get_install_sh
tags:
- Install
summary: GET /install.sh
x-source: https://docs.datagrout.ai/sap-private-connector
responses:
'200':
description: Success (status as documented)
x-evidence:
kind: code-example
language: curl
snippet: "curl -fsSL https://get.netbird.io/install.sh | sh\nnetbird up\n Create a setup key in the NetBird dashboard for the DataGrout\
\ relay. \n Step 2: Generate a VPN Client Profile \n Create credentials that the DataGrout relay will use to connect. \n WireGuard \n\
\ wg genkey | tee client-private.key | wg pubkey > client-public.key\n Add the client as a peer on your server, then create a client\
\ config: \n [Interfa"
/mcp:
get:
operationId: get_mcp
tags:
- Mcp
summary: GET /mcp
x-source: https://docs.datagrout.ai/mcp-inspector
responses:
'200':
description: Success (status as documented)
x-evidence:
kind: code-example
language: curl
snippet: "curl buttons. \n A connection status badge shows whether the session is initialized. A rate limit indicator shows remaining\
\ calls per hour. \n Getting Started \n Test a DataGrout Server \n Open the MCP Inspector \n Click Your Servers in Quick Start and select\
\ a server \n The URL and authentication fill automatically \n Click Execute Request with the Initialize action selected \n Once initialized,\
\ switch t"
/memories/{name}/facts:
post:
operationId: post_memories_name_facts
tags:
- Memories
summary: Store facts
description: Adds plain‑language facts to a named memory.
x-source: https://docs.datagrout.ai/rest-api
parameters:
- name: name
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostMemoriesNameFactsRequest'
responses:
'201':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/PostMemoriesNameFactsResponse'
x-evidence:
kind: documentation
/memories/{name}/recall:
post:
operationId: post_memories_name_recall
tags:
- Memories
summary: Recall
description: Queries a memory for facts matching the question.
x-source: https://docs.datagrout.ai/rest-api
parameters:
- name: name
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostMemoriesNameRecallRequest'
responses:
'201':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/PostMemoriesNameRecallResponse'
x-evidence:
kind: documentation
/oauth/token:
post:
operationId: post_oauth_token
tags:
- Oauth
summary: POST /oauth/token
x-source: https://docs.datagrout.ai/authentication
responses:
'201':
description: Success (status as documented)
x-evidence:
kind: code-example
language: curl
snippet: "curl -X POST https://gateway.datagrout.ai/oauth/token -H \"Content-Type: application/x-www-form-urlencoded\" -d \"grant_type=client_credentials\"\
\ -d \"client_id=YOUR_CLIENT_ID\" -d \"client_secret=YOUR_CLIENT_SECRET\"\n Use the returned access token as a bearer token. Tokens\
\ are short-lived and must be refreshed. \n Authorization Code Flow \n Redirect the user to the DataGrout authorization endpoint \n\
\ Us"
/server:
get:
operationId: get_server
tags:
- Server
summary: GET / reads and costs nothing, which makes it the right check for whether a credential works.
description: Returns basic information about the server to verify that the access token is valid.
x-source: https://docs.datagrout.ai/rest-api
responses:
'200':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/GetServerResponse'
x-evidence:
kind: documentation
/skills/{skillId}/runs:
post:
operationId: post_skills_skillId_runs
tags:
- Skills
summary: Run previously verified work again, with no planning.
description: Executes a saved skill (verified work) without replanning.
x-source: https://docs.datagrout.ai/rest-api
parameters:
- name: skillId
in: path
required: true
schema:
type: string
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/PostSkillsSkillidRunsRequest'
responses:
'201':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/PostSkillsSkillidRunsResponse'
x-evidence:
kind: documentation
/tasks/{taskId}:
get:
operationId: get_tasks_taskId
tags:
- Tasks
summary: Background work task status and result.
description: Polls a background task for its current status and final result.
x-source: https://docs.datagrout.ai/rest-api
parameters:
- name: taskId
in: path
required: true
schema:
type: string
responses:
'200':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/GetTasksTaskidResponse'
x-evidence:
kind: documentation
/transforms:
post:
operationId: post_transforms
tags:
- Transforms
summary: Reshape or aggregate data on DataGrout’s servers.
description: Accepts inline data or a reference and returns the transformed result.
x-source: https://docs.datagrout.ai/rest-api
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostTransformsRequest'
responses:
'201':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/PostTransformsResponse'
x-evidence:
kind: documentation
/webhook:
get:
operationId: get_webhook
tags:
- Webhook
summary: GET /webhook
x-source: https://docs.datagrout.ai/interaction-settings
responses:
'200':
description: Success (status as documented)
x-evidence:
kind: code-example
language: curl
snippet: "curl testing. \n Webhooks \n Receive real-time notifications when events occur on your server: \n Toggle Enable Webhook \n Enter\
\ your Webhook URL (e.g. https://your-server.com/webhook ) \n Enter a Secret for signature verification \n Select which events trigger\
\ notifications:\n Tool Created / Tool Updated \n Tool Call Completed / Succeeded / Failed \n Integration Added / Removed \n Response\
\ Payload \n Contro"
/webhooks:
post:
operationId: post_webhooks
tags:
- Webhooks
summary: Register a URL to receive webhook events.
description: Creates a webhook subscription for run and task events.
x-source: https://docs.datagrout.ai/rest-api
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostWebhooksRequest'
responses:
'201':
description: Success (status as documented)
x-evidence:
kind: documentation
components:
schemas:
PostAnswersRequest:
type: object
properties:
question:
type: string
description: The question
inputs:
type: object
description: Values the question needs, as an object
required:
- question
PostAnswersResponse:
type: object
properties:
answer:
type: array
description: Array of answer objects
verified:
type: boolean
description: True when DataGrout’s verifier accepted the answer
certificate:
type: object
description: Certificate of execution
skill_id:
type: string
description: ID of the saved skill
skill_expires:
type: boolean
description: Whether the skill ID is temporary
execution_id:
type: string
description: Execution identifier
reference:
type: string
description: Reference ID for later use
usage:
type: object
description: Credits usage details
GetApiV1ServersUuidResponse:
type: object
properties:
stored:
type: integer
facts:
type: array
items:
type: object
properties:
id:
type: string
name:
type: string
type:
type: string
message:
type: string
PostApiV1ServersUuidAnswersRequest:
type: object
properties:
question:
type: string
PostApiV1ServersUuidAnswersResponse:
type: object
properties:
stored:
type: integer
facts:
type: array
items:
type: object
properties:
id:
type: string
name:
type: string
type:
type: string
message:
type: string
PostApiV1ServersUuidConclusionsRequest:
type: object
properties:
require:
type: array
items:
type: string
records:
type: object
properties:
invoice:
type: array
items:
type: object
properties:
id:
type: string
amount:
type: integer
due_absolute_days:
type: integer
today:
type: object
properties:
absolute_days:
type: integer
questions:
type: object
properties:
fee:
type: object
properties:
goal:
type: string
level:
type: object
properties:
goal:
type: string
type:
type: string
criteria:
type: array
items:
type: string
PostApiV1ServersUuidConclusionsResponse:
type: object
properties:
result:
type: array
items: {}
certificate:
type: object
properties:
id:
type: string
url:
type: string
execution_id:
type: string
usage:
type: object
properties:
credits_charged:
type: integer
credits_remaining:
type: integer
PostApiV1ServersUuidMemoriesWarehousesFactsRequest:
type: object
properties:
statement:
type: string
PostApiV1ServersUuidMemoriesWarehousesFactsResponse:
type: object
properties:
stored:
type: integer
facts:
type: array
items:
type: object
properties:
id:
type: string
name:
type: string
type:
type: string
message:
type: string
PostApiV1ServersUuidTransformsRequest:
type: object
properties:
goal:
type: string
data:
type: array
items:
type: object
properties:
city:
type: string
units:
type: integer
PostApiV1ServersUuidTransformsResponse:
type: object
properties:
stored:
type: integer
facts:
type: array
items:
type: object
properties:
id:
type: string
name:
type: string
type:
type: string
message:
type: string
PostApiV1ServersUuidWebhooksRequest:
type: object
properties:
url:
type: string
events:
type: array
items:
type: string
PostApiV1ServersUuidWebhooksWebhookidTestRequest:
type: object
properties:
event:
type: string
PostConclusionsRequest:
type: object
properties:
questions:
type: object
description: Keyed questions with goals or plain language
require:
type: array
description: Battery ids to use
records:
type: object
description: Facts as records shaped by the battery’s input schema
facts:
type: array
description: Typed facts
reference:
type: string
description: Reference to earlier response
rules:
type: array
description: Prolog clauses for this request only
namespace:
type: string
description: Memory to draw conclusions from
explain:
type: boolean
description: Add base facts each answer rests on
required:
- questions
PostConclusionsResponse:
type: object
properties:
answers:
type: object
description: Map of question keys to answer objects
mode:
type: string
description: Execution mode (e.g., scratch)
input:
type: object
description: Counts of input facts
usage:
type: object
description: Credits usage details
PostMemoriesNameFactsRequest:
type: object
properties:
statement:
type: string
description: Facts in plain language
required:
- statement
PostMemoriesNameFactsResponse:
type: object
properties:
stored:
type: integer
description: Number of facts stored
facts:
type: array
description: Array of stored fact descriptors
message:
type: string
description: Result message
PostMemoriesNameRecallRequest:
type: object
properties:
question:
type: string
description: What to look up
required:
- question
PostMemoriesNameRecallResponse:
type: object
properties:
results:
type: array
description: Aggregated results
total:
type: integer
description: Total matching facts
has_more:
type: boolean
description: Whether more results exist
interpretation:
type: string
description: How DataGrout read the question
message:
type: string
description: Result message
GetServerResponse:
type: object
properties:
id:
type: string
description: Server UUID
name:
type: string
description: Server name
PostSkillsSkillidRunsRequest:
type: object
properties:
inputs:
type: object
description: Values the skill takes
PostSkillsSkillidRunsResponse:
type: object
properties:
result:
type: array
description: Result of the skill run
certificate:
type: object
description: Certificate of execution
execution_id:
type: string
description: Execution identifier
usage:
type: object
description: Credits usage details
GetTasksTaskidResponse:
type: object
properties:
id:
type: string
description: Task ID
status:
type: string
description: Task status (running, completed, failed, cancelled)
result:
type: object
description: Result payload (same shape as direct request response)
created_at:
type: string
description: Creation timestamp
updated_at:
type: string
description: Last update timestamp
PostTransformsRequest:
type: object
properties:
goal:
type: string
description: What the result should be
data:
type: array
description: The data, as an array or object
reference:
type: string
description: A reference from an earlier response
required:
- goal
PostTransformsResponse:
type: object
properties:
result:
type: array
description: Transformed data
certificate:
type: object
description: Certificate of execution
execution_id:
type: string
description: Execution identifier
reference:
type: string
description: Reference ID for later use
usage:
type: object
description: Credits usage details
PostWebhooksRequest:
type: object
properties:
url:
type: string
description: Callback URL to receive events
required:
- url
securitySchemes:
bearer:
type: http
scheme: bearer
security:
- bearer: []
tags:
- name: Answers
- name: Api
- name: Ca
- name: Conclusions
- name: Install
- name: Mcp
- name: Memories
- name: Oauth
- name: Server
- name: Skills
- name: Tasks
- name: Transforms
- name: Webhook
- name: Webhooks