Skip to main content

Why it matters

For high-impact actions (payments, account changes, deletions), requires_approval prevents automatic execution until a human approves.

Create a gated job

curl -X POST http://localhost:3000/v1/jobs \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://api.example.com/refunds",
    "payload": { "refund_id": "rf_123", "amount": 2500 },
    "requires_approval": true
  }'
Initial status is awaiting_approval.

Three approval paths

Agent calls approve_job tool after explicit human confirmation.
Your app receives job events via callback_url, prompts a reviewer, then calls approve/cancel via API.
Backend or operator console calls POST /v1/jobs/{id}/approve.

Rejecting a job

Reject by cancelling while in awaiting_approval:
curl -X POST http://localhost:3000/v1/jobs/<job_id>/cancel \
  -H "Authorization: Bearer <API_KEY>"

End-to-end conversation example

User: Send a $5,000 vendor payout to ACME.
Agent: This action requires approval. Should I queue it for review?
User: Yes.
Agent: Job created: job_abc123 (awaiting_approval).
Reviewer: Approved.
Agent (MCP -> approve_job): Job job_abc123 approved and now pending delivery.
Agent: Payout dispatch has started. I'll report completion status.