Skip to content

Handler commands

Every request goes to your tenant’s own host, https://<tenant id>.atlanticagenticlabs.com, and is scoped to that tenant by row-level security. The examples read AAL_TENANT, AAL_KEY and your Access service token from the environment: see Authentication.

GET /api/v1/agents/{agent_id}/commands

Authentication: A person’s session, or a machine key with your Access service token, as the route’s role allows. A route that approves, decides, pays or changes a limit refuses a machine key (person_required).

Parameter In Type Required
agent_id path string yes
Status Meaning
200 OK: the JSON document this route reads.
400 Bad request, bad_query: a path or query parameter, or a body field, is missing or not valid.
4XX Refused: {error, message} with a fixed error code, listed under Errors.
Terminal window
curl "https://$AAL_TENANT.atlanticagenticlabs.com/api/v1/agents/AGENT_ID/commands" \
-H "Authorization: Bearer $AAL_KEY" \
-H "CF-Access-Client-Id: $CF_ACCESS_CLIENT_ID" \
-H "CF-Access-Client-Secret: $CF_ACCESS_CLIENT_SECRET"
POST /api/v1/agents/{agent_id}/commands

Authentication: A person’s session, or a machine key with your Access service token, as the route’s role allows. A route that approves, decides, pays or changes a limit refuses a machine key (person_required).

Parameter In Type Required
agent_id path string yes

Request body (JSON):

{
"type": "agent.pause",
"params": {
"reason": "Supplier feed down"
},
"deployment": "example-air-prod",
"ttl_s": 300
}
Status Meaning
202 Accepted: recorded and queued. It is carried out after this answer, not before it.
400 Bad request, bad_query: a path or query parameter, or a body field, is missing or not valid.
4XX Refused: {error, message} with a fixed error code, listed under Errors.

202 response:

{
"command_id": "0f1e2d3c4b5a69788796a5b4c3d2e1f0",
"status": "queued",
"agent": "research:summary",
"deployment": "example-air-prod",
"type": "agent.pause",
"params": {
"reason": "Supplier feed down"
},
"reason": null,
"detail": null,
"issued_by": {
"email": "handler@example.test",
"role": "handler",
"kind": "client"
},
"flagged": false,
"issued_at": "2026-10-30T09:00:00Z",
"expires_at": "2026-10-30T09:05:00Z",
"updated_at": "2026-10-30T09:00:00Z"
}
Terminal window
curl -X POST "https://$AAL_TENANT.atlanticagenticlabs.com/api/v1/agents/AGENT_ID/commands" \
-H "Authorization: Bearer $AAL_KEY" \
-H "CF-Access-Client-Id: $CF_ACCESS_CLIENT_ID" \
-H "CF-Access-Client-Secret: $CF_ACCESS_CLIENT_SECRET" \
-H "Content-Type: application/json" \
-d '{"type":"agent.pause","params":{"reason":"Supplier feed down"},"deployment":"example-air-prod","ttl_s":300}'
GET /api/v1/agents/{agent_id}/commands/{command_id}

Authentication: A person’s session, or a machine key with your Access service token, as the route’s role allows. A route that approves, decides, pays or changes a limit refuses a machine key (person_required).

Parameter In Type Required
agent_id path string yes
command_id path string yes
Status Meaning
200 OK: the JSON document this route reads.
400 Bad request, bad_query: a path or query parameter, or a body field, is missing or not valid.
4XX Refused: {error, message} with a fixed error code, listed under Errors.
Terminal window
curl "https://$AAL_TENANT.atlanticagenticlabs.com/api/v1/agents/AGENT_ID/commands/COMMAND_ID" \
-H "Authorization: Bearer $AAL_KEY" \
-H "CF-Access-Client-Id: $CF_ACCESS_CLIENT_ID" \
-H "CF-Access-Client-Secret: $CF_ACCESS_CLIENT_SECRET"
POST /api/v1/approvals/decisions

An approval screen that is not per agent: the same command as approval.decide on /agents/{agent}/commands.

Authentication: A person’s session, or a machine key with your Access service token, as the route’s role allows. A route that approves, decides, pays or changes a limit refuses a machine key (person_required).

Request body (JSON):

{
"agent": "research:summary",
"run_id": "run-0001",
"decision": "approve",
"reason": "Checked against the source pack",
"evidence_sha256": "9f86d081884c7d65...",
"deployment": "example-air-prod",
"ttl_s": 300
}
Status Meaning
202 Accepted: recorded and queued. It is carried out after this answer, not before it.
4XX Refused: {error, message} with a fixed error code, listed under Errors.
Terminal window
curl -X POST "https://$AAL_TENANT.atlanticagenticlabs.com/api/v1/approvals/decisions" \
-H "Authorization: Bearer $AAL_KEY" \
-H "CF-Access-Client-Id: $CF_ACCESS_CLIENT_ID" \
-H "CF-Access-Client-Secret: $CF_ACCESS_CLIENT_SECRET" \
-H "Content-Type: application/json" \
-d '{"agent":"research:summary","run_id":"run-0001","decision":"approve","reason":"Checked against the source pack","evidence_sha256":"9f86d081884c7d65...","deployment":"example-air-prod","ttl_s":300}'
GET /api/v1/command-settings

Authentication: A person’s session, or a machine key with your Access service token, as the route’s role allows. A route that approves, decides, pays or changes a limit refuses a machine key (person_required).

Status Meaning
200 OK: the JSON document this route reads.
4XX Refused: {error, message} with a fixed error code, listed under Errors.

200 response:

{
"enabled": true,
"types": {
"agent.pause": true,
"approval.decide": true
},
"staff_may_issue": false,
"version": "3",
"available": true,
"key_id": "cmd-2026-10",
"types_known": [
"agent.pause",
"agent.resume",
"approval.decide"
],
"deployments": []
}
Terminal window
curl "https://$AAL_TENANT.atlanticagenticlabs.com/api/v1/command-settings" \
-H "Authorization: Bearer $AAL_KEY" \
-H "CF-Access-Client-Id: $CF_ACCESS_CLIENT_ID" \
-H "CF-Access-Client-Secret: $CF_ACCESS_CLIENT_SECRET"
PUT /api/v1/command-settings

Authentication: A person’s session, or a machine key with your Access service token, as the route’s role allows. A route that approves, decides, pays or changes a limit refuses a machine key (person_required).

Status Meaning
200 OK: the request was carried out. The answer is JSON.
4XX Refused: {error, message} with a fixed error code, listed under Errors.
Terminal window
curl -X PUT "https://$AAL_TENANT.atlanticagenticlabs.com/api/v1/command-settings" \
-H "Authorization: Bearer $AAL_KEY" \
-H "CF-Access-Client-Id: $CF_ACCESS_CLIENT_ID" \
-H "CF-Access-Client-Secret: $CF_ACCESS_CLIENT_SECRET"
GET /api/v1/commands

Authentication: A person’s session, or a machine key with your Access service token, as the route’s role allows. A route that approves, decides, pays or changes a limit refuses a machine key (person_required).

Status Meaning
200 OK: the JSON document this route reads.
4XX Refused: {error, message} with a fixed error code, listed under Errors.
Terminal window
curl "https://$AAL_TENANT.atlanticagenticlabs.com/api/v1/commands" \
-H "Authorization: Bearer $AAL_KEY" \
-H "CF-Access-Client-Id: $CF_ACCESS_CLIENT_ID" \
-H "CF-Access-Client-Secret: $CF_ACCESS_CLIENT_SECRET"
GET /api/v1/commands/{command_id}

Authentication: A person’s session, or a machine key with your Access service token, as the route’s role allows. A route that approves, decides, pays or changes a limit refuses a machine key (person_required).

Parameter In Type Required
command_id path string yes
Status Meaning
200 OK: the JSON document this route reads.
400 Bad request, bad_query: a path or query parameter, or a body field, is missing or not valid.
4XX Refused: {error, message} with a fixed error code, listed under Errors.
Terminal window
curl "https://$AAL_TENANT.atlanticagenticlabs.com/api/v1/commands/COMMAND_ID" \
-H "Authorization: Bearer $AAL_KEY" \
-H "CF-Access-Client-Id: $CF_ACCESS_CLIENT_ID" \
-H "CF-Access-Client-Secret: $CF_ACCESS_CLIENT_SECRET"