Skip to content

Agents API request shape

The Agents API is composed of two discovery endpoints plus one trigger endpoint, alongside the run-status endpoint covered in Runs. All responses are JSON. Authentication is the same Authorization: Bearer $KINDO_API_KEY used elsewhere.

GET /v1/agents/list

Lists agents the API-key holder can see. This endpoint accepts no query parameters and returns the visible agents in a single page, capped at 500 entries. The response does not include a has_more or cursor field; callers that need more than 500 agents in a single organization should reach out to Kindo.

Terminal window
curl https://api.kindo.ai/v1/agents/list \
-H "Authorization: Bearer $KINDO_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": { "userPermissions": ["view", "edit"] }
}
],
"total": 1
}

Envelope:

FieldTypeNotes
itemsarrayOne entry per accessible agent. See the item-shape table below.
totalintegerAlways equal to items.length. This endpoint is non-paginated; total is a convenience field, not a counter. Capped at 500 — see note above.

Item shape:

FieldTypeNotes
agentIdstringUUID. Use it in /v1/agents/{agentId} and runs calls.
namestringDisplay name from the Kindo Terminal.
descriptionstringFree-form description.
createdAtstringISO-8601 timestamp.
creatorNamestringName of the user or group that created the agent.
metadataobject{ "userPermissions": string[] }. Entries are the actions the caller may perform on this agent — any subset of view, edit, delete, share.

GET /v1/agents/{agentId}

Returns the full agent configuration, including the inputs label list you must match when triggering a run.

Terminal window
curl https://api.kindo.ai/v1/agents/18d20df4-d9b3-4cb0-a009-9f11ec9c5d3d \
-H "Authorization: Bearer $KINDO_API_KEY"

Response:

{
"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"] }
}
FieldTypeNotes
agentIdstringUUID.
namestringDisplay name.
descriptionstringFree-form description.
inputsarray of stringsEach entry is the label the agent expects in POST /v1/agents/runs. Returned in ascending alphabetical order, not in agent-configuration order.
hasTriggersbooleantrue when the agent has scheduled or event triggers configured. Agents with hasTriggers: true cannot be run via POST /v1/agents/runs — see Errors.
modelsInUsearray of stringsModel IDs this agent currently routes through.
recentRunIdsarray of stringsMost-recent run IDs for quick polling without listing.
lastRunAtUtcstring | nullISO-8601 timestamp of the last run, or null if it has never run.
metadataobject{ "userPermissions": string[] }. Entries are the actions the caller may perform — any subset of view, edit, delete, share.

POST /v1/agents/runs

Triggers an agent execution.

Terminal window
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" }
]
}'

Request body:

FieldRequiredTypeNotes
agentIdYesstringAn agentId returned by GET /v1/agents/list.
inputsNoarray of objectsEach entry is { "name": string, "value": string }. name must match a label from GET /v1/agents/{agentId}’s inputs. Required labels that are omitted produce a 422; entries with an unrecognized name are silently dropped.

Response (202 Accepted):

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

A 202 means Kindo accepted the trigger and will execute the run asynchronously. Use Runs to poll the result.

See also

  • Quickstart — the four-step end-to-end flow.
  • RunsGET /v1/runs/{runId} shape and lifecycle.
  • Errors — error envelopes for each endpoint.