curl "https://win.oneshotagent.com/v1/approvals/appr_01J..." \
-H "X-Agent-ID: 0xYourWalletAddress" \
-H "x-agent-proof: <base64 signed proof, scope=read>"
{
"success": true,
"data": {
"approval_id": "appr_01J...",
"source": "api",
"tool": null,
"status": "pending",
"action_summary": "Send the signed LOI to Acme",
"preview": {
"contact": "[email protected]"
},
"policy_rule": null,
"approver": {
"channel": "email",
"address": "o***@acme.com"
},
"expires_at": "2026-10-19T13:00:00.000Z",
"use_by": null,
"decided_at": null,
"decided_via": null,
"decision_note": null,
"decision_receipt_id": null,
"consumed_at": null,
"notified": true,
"notify_error": null,
"compute": null,
"created_at": "2026-10-19T12:00:00.000Z"
}
}
Approvals
Get approval
Read an approval and poll for its decision
GET
/
v1
/
approvals
/
{id}
curl "https://win.oneshotagent.com/v1/approvals/appr_01J..." \
-H "X-Agent-ID: 0xYourWalletAddress" \
-H "x-agent-proof: <base64 signed proof, scope=read>"
{
"success": true,
"data": {
"approval_id": "appr_01J...",
"source": "api",
"tool": null,
"status": "pending",
"action_summary": "Send the signed LOI to Acme",
"preview": {
"contact": "[email protected]"
},
"policy_rule": null,
"approver": {
"channel": "email",
"address": "o***@acme.com"
},
"expires_at": "2026-10-19T13:00:00.000Z",
"use_by": null,
"decided_at": null,
"decided_via": null,
"decision_note": null,
"decision_receipt_id": null,
"consumed_at": null,
"notified": true,
"notify_error": null,
"compute": null,
"created_at": "2026-10-19T12:00:00.000Z"
}
}
Authentication
X-Agent-ID plus a signed x-agent-proof with scope: "read". See proof authentication.
curl "https://win.oneshotagent.com/v1/approvals/appr_01J..." \
-H "X-Agent-ID: 0xYourWalletAddress" \
-H "x-agent-proof: <base64 signed proof, scope=read>"
Parameters
string
required
Approval ID belonging to this agent.
Response
200 returns the approval. Poll until status leaves pending. 404 approval_not_found means it does not exist or belongs to another agent.
{
"success": true,
"data": {
"approval_id": "appr_01J...",
"source": "api",
"tool": null,
"status": "pending",
"action_summary": "Send the signed LOI to Acme",
"preview": {
"contact": "[email protected]"
},
"policy_rule": null,
"approver": {
"channel": "email",
"address": "o***@acme.com"
},
"expires_at": "2026-10-19T13:00:00.000Z",
"use_by": null,
"decided_at": null,
"decided_via": null,
"decision_note": null,
"decision_receipt_id": null,
"consumed_at": null,
"notified": true,
"notify_error": null,
"compute": null,
"created_at": "2026-10-19T12:00:00.000Z"
}
}
string
Use this ID to poll or cancel.
string
pending, approved, denied, expired, cancelled or consumed.string
api, policy or compute. tool and policy_rule are nullable; action_summary and nullable preview describe the action.object
channel is email or sms; address is masked.string
ISO deadline.
created_at is the creation time; nullable use_by, decided_at and consumed_at record later stages.string | null
Optional note.
decided_via and decision_receipt_id are also nullable.boolean
Whether the approver was notified.
notify_error is null or approver notification failed.object | null
goal_id and task_id for a compute approval.X-Approval-Id once approved.