Skip to content

Approval

View as Markdown

A request for a human to allow an action. When approved (with a passkey) the platform runs the stored request as the requesting principal and records the outcome; the requester never receives a credential.

Field Type Description
id * string
workspace_id * string
project_id string or null
environment string or null
status * ApprovalStatus
action * object
reason string or null Why the requester wants this, in their words.
why_required array of PolicyReason
plan Plan or any or null
risk low, medium, high, critical
approver_roles array of Role
requested_by * Actor
decided_by Actor or any or null
decided_at string (date-time) or null
decision_note string or null
operation_id string or null Operation started when the approved request ran.
result object or null Outcome of the approved request.
url * string (uri)
expires_at * string (date-time)
created_at * string (date-time)

* always present

{
"id": "apr_01jbx2m9k7q4r8t5v6w3y0z1pr",
"workspace_id": "string",
"project_id": "string",
"environment": "string",
"status": "pending",
"action": {
"kind": "deployment.create",
"summary": "Deploy web (commit a1b2c3d, \"Fix rota export\") to production",
"method": "string",
"path": "string"
},
"reason": "string",
"why_required": [
{
"code": "environment_protected",
"message": "production requires approval for changes made by agents",
"policy": "guv.environment.protection"
}
],
"plan": {
"plan_hash": "sha256:9f2c1e0b7a4d3c2b1a09f8e7d6c5b4a39281706f5e4d3c2b1a0f9e8d7c6b5a49",
"dry_run": true,
"summary": "1 to update. +£5.00/month at current usage.",
"changes": [
{
"action": "update",
"resource": {
"type": "service",
"id": "svc_01jbx2m9k7q4r8t5v6w3y0z1sv",
"name": "web"
},
"environment": "production",
"summary": "Raise web memory limit from 1 GB to 2 GB",
"diff": [
{
"path": "/resources/memory_mb",
"before": 1024,
"after": 2048
}
],
"destructive": false,
"requires_approval": true,
"reason": "production requires approval for changes made by agents"
}
],
"cost": {
"current_monthly": {
"amount": "18.20",
"currency": "GBP",
"display": "£18.20"
},
"projected_monthly": {
"amount": "23.20",
"currency": "GBP",
"display": "£23.20"
},
"delta_monthly": {
"amount": "5.00",
"currency": "GBP",
"display": "£5.00"
},
"confidence": "medium"
},
"policy": {
"decision": "approval_required",
"reasons": [
{
"code": "environment_protected",
"message": "production requires approval for changes made by agents",
"policy": "guv.environment.protection"
}
],
"approver_roles": [
"owner",
"admin"
]
},
"requires_approval": true,
"expires_at": "2026-10-23T15:00:00Z"
},
"risk": "low",
"approver_roles": [
"owner"
],
"requested_by": {
"type": "agent",
"id": "tok_01jbx2m9k7q4r8t5v6w3y0z1tk",
"display": "Stewart Webb via agent claude-code-on-stewart-laptop",
"via_agent": {
"id": "tok_01jbx2m9k7q4r8t5v6w3y0z1tk",
"name": "claude-code-on-stewart-laptop"
},
"on_behalf_of": {
"id": "usr_01jbx2m9k7q4r8t5v6w3y0z1us",
"display": "Stewart Webb"
}
},
"decided_by": {
"type": "agent",
"id": "tok_01jbx2m9k7q4r8t5v6w3y0z1tk",
"display": "Stewart Webb via agent claude-code-on-stewart-laptop",
"via_agent": {
"id": "tok_01jbx2m9k7q4r8t5v6w3y0z1tk",
"name": "claude-code-on-stewart-laptop"
},
"on_behalf_of": {
"id": "usr_01jbx2m9k7q4r8t5v6w3y0z1us",
"display": "Stewart Webb"
}
},
"decided_at": "2026-10-22T13:05:00Z",
"decision_note": "string",
"operation_id": "string",
"result": {
"status": 1,
"body": {}
},
"url": "https://guv.dev/",
"expires_at": "2026-10-22T13:05:00Z",
"created_at": "2026-10-22T13:05:00Z"
}