Overview
The authorization endpoints enable agents to request human approval for high-stakes actions. Humans approve by scanning World ID, providing cryptographic proof of personhood. The proof is then embedded in the attestation. Flow:- Agent calls
POST /v1/authorize→ gets anapproval_url - Human opens the URL → sees what the agent wants to do → scans World ID
- Agent polls
GET /v1/authorize/{id}→ getshuman_authorizationwhen approved - Agent passes
human_authorizationtoPOST /v1/attest
POST /v1/authorize
Request human authorization for an action.Headers
| Header | Value |
|---|---|
| Authorization | Bearer YOUR_API_KEY (required) |
| Content-Type | application/json |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| agent_slug | string | Yes | Agent requesting authorization |
| action | string | Yes | Description of the action to authorize |
| context | object | No | Additional context shown to the human (e.g. amount, vendor) |
| expires_in_minutes | integer | No | Expiry time in minutes (default: 30, max: 1440) |
Example
Response (201)
approval_url to the human. The agent polls poll_url for status.
GET /v1/authorize/{request_id}
Check the status of an authorization request. No authentication required — anyone with the request ID can check status.Response (200)
human_authorization object is only present when status is "approved". Pass it directly to POST /v1/attest.
Status Values
| Status | Description |
|---|---|
pending | Waiting for human approval |
approved | Human approved via World ID |
denied | Human denied the request |
expired | Request expired before approval |
POST /v1/authorize/{request_id}/approve
Submit a World ID proof to approve a request. Called from the approval page after World ID verification. No API key required — the World ID proof itself is the authentication.Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| proof | string | Yes | World ID ZK proof |
| merkle_root | string | Yes | Merkle root of the identity set |
| nullifier_hash | string | Yes | Anonymous unique identifier |
| verification_level | string | No | "orb" (default) or "device" |
Response (200)
GET /v1/authorize/{request_id}/info
Get public information about a request. Used by the approval page to display what the agent is requesting. No authentication required.Response (200)
Full Example
Verification Levels
| Level | Method | Strength | Best For |
|---|---|---|---|
| Orb | Iris scan via World ID Orb | Strongest proof of personhood | High-value transactions, regulatory compliance |
| Device | Phone verification | Basic uniqueness signal | Low-risk approvals, internal workflows |