Agents API quickstart
The Agents API is Kindo’s control-plane surface for discovering agents your organization has configured, triggering a run, and polling the run for its result. It is HTTP+JSON only — there is no SDK shim; any HTTP client works.
The flow is:
GET /v1/agents/list— find theagentIdyou want to run.GET /v1/agents/{agentId}— inspect the expectedinputslabels.POST /v1/agents/runs— trigger a run, receive arunId.GET /v1/runs/{runId}— poll untilstatusis terminal.
Prerequisites
- A Kindo API key (see Authentication).
- At least one agent configured for your organization in the Kindo Terminal.
1. Discover an agentId
curl https://api.kindo.ai/v1/agents/list \ -H "Authorization: Bearer $KINDO_API_KEY"This endpoint accepts no query parameters and returns the visible
agents in a single page, capped at 500 entries. See
Request shape → GET /v1/agents/list
for the cap and envelope details.
{ "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": { "userPermissions": ["view", "edit"] } } ], "total": 1}2. Fetch the input schema
GET /v1/agents/{agentId} returns the agent’s configuration,
including the inputs array — the exact labels you must use when
triggering a run.
curl https://api.kindo.ai/v1/agents/18d20df4-d9b3-4cb0-a009-9f11ec9c5d3d \ -H "Authorization: Bearer $KINDO_API_KEY"{ "agentId": "18d20df4-d9b3-4cb0-a009-9f11ec9c5d3d", "name": "Daily Security Scan", "description": "Runs the daily vulnerability check workflow.", "inputs": ["query"], "hasTriggers": false, "modelsInUse": ["claude-sonnet-4-5-20250929"], "recentRunIds": ["7a7ced7d-95a8-416f-95bb-5c0ff3599f53"], "lastRunAtUtc": "2026-03-12T15:00:00.000Z", "metadata": { "userPermissions": ["view", "edit"] }}Each name in the run request’s inputs array must match one of
the strings in this inputs list exactly.
3. Trigger a run
curl -X POST https://api.kindo.ai/v1/agents/runs \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $KINDO_API_KEY" \ -d '{ "agentId": "18d20df4-d9b3-4cb0-a009-9f11ec9c5d3d", "inputs": [ { "name": "query", "value": "Run the daily security scan" } ] }'The endpoint responds 202 Accepted with the runId:
{ "runId": "7a7ced7d-95a8-416f-95bb-5c0ff3599f53"}4. Poll the run
curl https://api.kindo.ai/v1/runs/7a7ced7d-95a8-416f-95bb-5c0ff3599f53 \ -H "Authorization: Bearer $KINDO_API_KEY"{ "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": "{\"role\":\"assistant\",\"parts\":[{\"type\":\"text\",\"text\":\"Security scan complete. No critical findings.\"}]}", "status": "success"}result is a JSON-encoded string of the final assistant message
payload — parse with JSON.parse to recover the structured
{ role, parts, ... } object. It is null while in_progress,
always null on failure or cancelled, and also null on
success when the run produced no assistant payload.
status is one of in_progress, success, failure, or
cancelled. Anything other than in_progress is terminal; keep
polling while status is in_progress. See Runs for the
full lifecycle.
Next steps
- Request shape — every field on every endpoint.
- Runs — run lifecycle, polling cadence, and how runs relate to conversations.
- Errors — common error envelopes.