Get one action with its diff, guardrail scores, status, result or error, and audit trail.
Request
curl "https://api.appgoat.ai/v1/actions/123" \
-H "x-api-key: $APPGOAT_API_KEY"const res = await fetch("https://api.appgoat.ai/v1/actions/123", {
headers: {
"x-api-key": process.env.APPGOAT_API_KEY,
},
});
const { data, meta } = await res.json();import os, requests
res = requests.get(
"https://api.appgoat.ai/v1/actions/123",
headers={"x-api-key": os.environ["APPGOAT_API_KEY"]}
)
body = res.json()Path parameters
idstringrequiredAction id (
act_…).Response
200 with data: Action. See the envelope for meta.
idstringtypeActionTypeconnection_idstringstatus"draft" | "pending_approval" | "approved" | "applied" | "failed" | "rejected"paramsobjectdiffDiffguardrailGuardrailresultanyWhat the provider returned when applied.
errorstring | nullcreated_bystringapi, mcp, playbook:<name> or dashboard.
approved_bystring | nulluser:<id>, auto (rule) or api.
rejected_reasonstring | nullcreditsintegercreated_atstringapplied_atstring | nullexpires_atstring | nullapprove_urlstring | nullDashboard page where a person approves it.
auditobject[]Only on GET /actions/{id}.
audit[].eventstringaudit[].actorstringaudit[].atstringaudit[].detailobject | nullExample
{
"data": {
"id": "act_Qm3xXk2Lw9PaZr0cVb",
"type": "review.reply",
"connection_id": "string",
"status": "draft",
"params": {},
"diff": {
"target": {},
"changes": [
{}
],
"summary": "string",
"notes": [
"string"
]
},
"guardrail": {
"status": "passed",
"score": 4.5,
"checks": {},
"warnings": [
"string"
],
"checks_failed": [
{}
],
"model": "string"
},
"result": null,
"error": "string",
"created_by": "string",
"approved_by": "string",
"rejected_reason": "string",
"credits": 1,
"created_at": "2026-10-22T10:00:00Z",
"applied_at": "2026-10-22T10:00:00Z",
"expires_at": "2026-10-22T10:00:00Z",
"approve_url": "string",
"audit": [
{
"event": "string",
"actor": "string",
"at": "2026-10-22T10:00:00Z",
"detail": {}
}
]
},
"meta": {
"credits_used": 0,
"credits_remaining": 9981,
"request_id": "req_123"
}
}Status codes
200
The action.
Missing or invalid API key.
404
not_foundNot found.
429
rate_limitedToo many requests per second for your plan.