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:
| Domain | Endpoints | Auth header |
|---|---|---|
llm.kindo.ai | Chat completions (/v1/chat/completions, /v1/completions) | Authorization: Bearer or api-key |
api.kindo.ai | Models, agents, and all other endpoints | x-api-key |
Note: the llm.kindo.ai domain is OpenAI-compatible — standard OpenAI SDKs work out of the box.
Getting Your API Key
- Sign in to the Kindo Terminal.
- Open Settings (gear icon) > API.
- 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.
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.
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.
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.
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.
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:
inputsis optional.- Each input
namemust 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.
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:
| Method | Purpose |
|---|---|
GET | Retrieve resources |
POST | Create resources or trigger actions |
PUT | Update resources |
DELETE | Remove 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:
| Code | Meaning |
|---|---|
200 | Success |
400 | Bad request — check your request body |
401 | Unauthorized — check your API key |
403 | Forbidden — insufficient permissions |
404 | Resource not found |
429 | Rate limited — retry after the specified delay |
500 | Server error — contact support if persistent |
Error responses include a JSON body with a message field describing the issue.
Next Steps
- First API Call for a hands-on quickstart
- OpenAPI spec for the full
api.kindo.aiendpoint reference - Glossary for API-related terminology