Give this entire page's URL to your coding agent (or paste this section into its system prompt / tool instructions) and it has everything it needs to wire Nod in on its own.
Sign up at /signup — you get a key immediately, no approval wait. Keys look
like nod_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Treat it like a password: put it in
an env var, never commit it.
POST https://human-review-pdcoj.ondigitalocean.app/v1/review, header Authorization: Bearer YOUR_API_KEY
curl -X POST https://human-review-pdcoj.ondigitalocean.app/v1/review \
-H "Authorization: Bearer $NOD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"action_type": "send_email",
"user_id": "user_123",
"user_intent": "Reply to this lead and schedule a call",
"agent_reasoning": "Drafted a reply offering 3 time slots next week",
"risk_level": "medium",
"action_details": {
"to": "[email protected]",
"subject": "Re: intro call",
"body": "..."
},
"webhook_url": "https://yourapp.com/nod-webhook"
}'
Fields:
| field | required | notes |
|---|---|---|
| action_type | yes | short machine-readable label, e.g. send_email, spend_money, delete_file, post_publicly |
| user_intent | no | what the end user actually asked for — gives the reviewer context |
| agent_reasoning | no | why the agent thinks this action satisfies that intent |
| risk_level | no | low / medium (default) / high — shown as a badge to the reviewer, doesn't change behavior |
| action_details | no | any JSON object — the full payload of the action, shown verbatim to the reviewer |
| webhook_url | no | Nod POSTs the decision here the moment a human decides, instead of (or in addition to) polling |
| expires_at | no | ISO timestamp — informational only today, not yet auto-enforced |
Response (201): the created request, with status: "pending" and a review_url your reviewer can open for full detail.
Option A — poll (simplest):
GET https://human-review-pdcoj.ondigitalocean.app/v1/review/<id> Authorization: Bearer YOUR_API_KEY # poll every few seconds until status != "pending" # status will be one of: pending, approved, rejected, needs_clarification, expired
Option B — webhook (recommended for long-running agents): pass webhook_url
when you create the review. The moment a human decides, Nod POSTs:
{
"id": "<public_id>",
"status": "approved",
"decision_note": "optional note the reviewer left",
"decided_at": "2026-11-05T20:04:11Z"
}
Only proceed with the action when status == "approved". If
rejected, stop and tell the user why (use decision_note if present). If
needs_clarification, that means a human asked a question — read
decision_note, get an answer, and either call /v1/review again with the
clarified details or have the agent reply inline, depending on your flow.
GET https://human-review-pdcoj.ondigitalocean.app/v1/reviews?status=pending Authorization: Bearer YOUR_API_KEY
Returns up to the last 100 requests created by that API key, optionally filtered by
status.
Everyone on your Nod account (the owner who signed up, plus anyone they invite from their dashboard) gets the approve/reject email and can see the queue. There's no separate "Nod staff" reviewing your agents' actions — you and your team are the humans in the loop for your own account. Add teammates from your dashboard's "Team" panel.