curl "https://win.oneshotagent.com/v1/approvals?status=pending&limit=25" \
-H "X-Agent-ID: 0xYourWalletAddress" \
-H "x-agent-proof: <base64 signed proof, scope=read>"
{
"success": true,
"data": {
"approvals": [
{
"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
List approvals
List the agent’s approvals, newest first
GET
/
v1
/
approvals
curl "https://win.oneshotagent.com/v1/approvals?status=pending&limit=25" \
-H "X-Agent-ID: 0xYourWalletAddress" \
-H "x-agent-proof: <base64 signed proof, scope=read>"
{
"success": true,
"data": {
"approvals": [
{
"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?status=pending&limit=25" \
-H "X-Agent-ID: 0xYourWalletAddress" \
-H "x-agent-proof: <base64 signed proof, scope=read>"
Parameters
string
Filter by
pending, approved, denied, expired, cancelled or consumed. Omit for all statuses.integer
default:"50"
Maximum results, 1-200.
Response
200 returns data.approvals, an array of approval objects, newest first. No matches returns an empty array.
{
"success": true,
"data": {
"approvals": [
{
"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"
}
]
}
}
400 invalid_status or 400 invalid_limit means the filter is invalid.