Skip to content

API Overview

The Kindo API provides programmatic access to all platform capabilities, including chat completions, model listing, agents, integrations, and administration.

Domains

Kindo uses two API domains:

DomainEndpointsAuth header
llm.kindo.aiChat completions (/v1/chat/completions, /v1/completions)Authorization: Bearer or api-key
api.kindo.aiModels, agents, and all other endpointsx-api-key

Note: the llm.kindo.ai domain is OpenAI-compatible — standard OpenAI SDKs work out of the box.

Getting Your API Key

  1. Sign in to the Kindo Terminal.
  2. Open Settings (gear icon) > API.
  3. Copy your API key.

You can also view the exact model names available to your organization under Settings > Kindo API > Available Models.

For self-hosted installations, replace llm.kindo.ai and api.kindo.ai with your API endpoint(s).

Core Endpoints

Chat Completions

POST llm.kindo.ai/v1/chat/completions

Send a message to an AI model. This endpoint is OpenAI-compatible.

Terminal window
curl -X POST https://llm.kindo.ai/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"model": "claude-sonnet-4-5-20250929",
"messages": [
{ "role": "user", "content": "Explain Kubernetes pod security policies." }
]
}'

Supports streaming via "stream": true.

List Models

GET api.kindo.ai/v1/models

Returns all models available to your organization in the standard OpenAI models-list format.

Terminal window
curl https://api.kindo.ai/v1/models \
-H "x-api-key: YOUR_API_KEY"

Response:

{
"object": "list",
"data": [
{
"id": "claude-sonnet-4-5-20250929",
"object": "model",
"created": 0,
"owned_by": "kindo"
}
]
}

Use the id value as the model parameter in chat completion requests.

Agent Endpoints

Use these endpoints to discover your agentId and the exact input labels required before running an agent.

List Agents

GET api.kindo.ai/v1/agents/list

Returns all agents available to your organization.

Terminal window
curl https://api.kindo.ai/v1/agents/list \
-H "x-api-key: YOUR_API_KEY"

Response:

{
"items": [
{
"agentId": "18d20df4-d9b3-4cb0-a009-9f11ec9c5d3d",
"name": "Daily Security Scan",
"description": "Runs the daily vulnerability check workflow.",
"createdAt": "2026-03-10T18:45:23.000Z",
"creatorName": "Security Team",
"metadata": {}
}
],
"total": 1
}

Get Agent Details

GET api.kindo.ai/v1/agents/{agentId}

Returns agent configuration details, including the expected inputs labels.

Terminal window
curl https://api.kindo.ai/v1/agents/YOUR_AGENT_ID \
-H "x-api-key: YOUR_API_KEY"

Response:

{
"agentId": "18d20df4-d9b3-4cb0-a009-9f11ec9c5d3d",
"name": "Daily Security Scan",
"description": "Runs the daily vulnerability check workflow.",
"inputs": ["query"],
"hasTriggers": true,
"modelsInUse": ["claude-sonnet-4-5-20250929"],
"recentRunIds": ["7a7ced7d-95a8-416f-95bb-5c0ff3599f53"],
"lastRunAtUtc": "2026-03-12T15:00:00.000Z",
"metadata": {}
}

Run Agent

POST api.kindo.ai/v1/agents/runs

Trigger an agent execution programmatically.

Terminal window
curl -X POST https://api.kindo.ai/v1/agents/runs \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{ "agentId": "YOUR_AGENT_ID", "inputs": [{ "name": "query", "value": "Run the daily security scan" }] }'

Request body:

{
"agentId": "YOUR_AGENT_ID",
"inputs": [
{
"name": "query",
"value": "Run the daily security scan"
}
]
}

Notes:

  • inputs is optional.
  • Each input name must exactly match the input label shown in the agent UI.

Response (202 Accepted):

{
"runId": "7a7ced7d-95a8-416f-95bb-5c0ff3599f53"
}

Get Run Result

GET api.kindo.ai/v1/runs/{runId}

Poll a run until it completes.

Terminal window
curl https://api.kindo.ai/v1/runs/YOUR_RUN_ID \
-H "x-api-key: YOUR_API_KEY"

Response:

{
"runId": "7a7ced7d-95a8-416f-95bb-5c0ff3599f53",
"agentId": "18d20df4-d9b3-4cb0-a009-9f11ec9c5d3d",
"createdAtUtc": "2026-03-12T15:00:00.000Z",
"endedAtUtc": "2026-03-12T15:00:08.000Z",
"result": "Security scan complete. No critical findings.",
"status": "success"
}

status can be one of: cancelled, failure, in_progress, success.

Request and Response Format

All requests and responses use JSON. The API follows REST conventions:

MethodPurpose
GETRetrieve resources
POSTCreate resources or trigger actions
PUTUpdate resources
DELETERemove resources

Rate Limits

API requests are subject to your organization’s rate limits. If you exceed the limit, the API returns 429 Too Many Requests with a Retry-After header.

Security

  • DLP — The same Data Loss Prevention filters that protect the UI also apply to API requests.
  • Audit logging — All API calls are recorded in your organization’s audit trail.
  • RBAC — API keys inherit the permissions of the user who created them.

Error Handling

The API returns standard HTTP status codes:

CodeMeaning
200Success
400Bad request — check your request body
401Unauthorized — check your API key
403Forbidden — insufficient permissions
404Resource not found
429Rate limited — retry after the specified delay
500Server error — contact support if persistent

Error responses include a JSON body with a message field describing the issue.

Next Steps