Nod

Integration guide

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.

1. Get an API key

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.

2. Before your agent does something risky, ask Nod

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:

fieldrequirednotes
action_typeyesshort machine-readable label, e.g. send_email, spend_money, delete_file, post_publicly
user_intentnowhat the end user actually asked for — gives the reviewer context
agent_reasoningnowhy the agent thinks this action satisfies that intent
risk_levelnolow / medium (default) / high — shown as a badge to the reviewer, doesn't change behavior
action_detailsnoany JSON object — the full payload of the action, shown verbatim to the reviewer
webhook_urlnoNod POSTs the decision here the moment a human decides, instead of (or in addition to) polling
expires_atnoISO 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.

3. Wait for a human, then act on the decision

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.

Checking status / listing your agent's requests

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.

Who reviews these?

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.