Add a human approval step to any workflow
NodGo is a plain HTTP API — it doesn't care what sent the request. Send it a title, some content, and where to reach the reviewer; it emails them, waits for a decision, then calls you back. Works from n8n, Make, Zapier-style tools, a cron job, or a single curl command — no SDK to install.
How it works, in plain English
Your workflow calls NodGo
Your reviewer gets an email
NodGo calls you back
If they forget, NodGo nudges them
That's the whole idea. The rest of this page is the technical reference — exact fields, exact responses — for when you're ready to wire it up.
1. Authentication
Create an account, then generate an API key from your dashboard. Send it on every request as the X-API-Key header — no OAuth, no token refresh.
X-API-Key: sk_live_xxxxxxxxxxxxxxxxxxxxThe full key is shown once, at creation. Keep it out of client-side code — treat it like a password. Limit: 20 keys per account.
2. Create an approval
POST /webhook — all four fields are required.
{
"title": "Postare LinkedIn",
"content": "Check out our new AI tool!",
"client_email": "client@acme.com",
"callback_url": "https://your-n8n.app/webhook/resume"
}{
"status": "success",
"token": "b3f1c9a2-...-8e2d",
"approval_url": "https://signoff-api-production.up.railway.app/approve/b3f1c9a2-...-8e2d",
"message": "Approval created successfully"
}- title / content — shown to the reviewer in the email and on the approval page.
- client_email — where the approval request is sent.
- callback_url — where NodGo posts the decision back to you (step 4).
Approvals expire automatically after 48 hours — this isn't configurable per-request yet.
3. What the reviewer sees
The reviewer gets an email with your title and content, and a single "Review & Decide" button. That takes them to a hosted approval page (no account needed) with Approve / Reject and an optional comment.
4. Getting the decision back
The moment the reviewer decides, NodGo sends a POST to the callback_url you provided — this is what resumes your workflow.
{
"Token": "b3f1c9a2-...-8e2d",
"Decision": "approved",
"Comment": ""
}Decision is "approved", "rejected", or "expired" (sent automatically if nobody decided within 48h). Note the capitalized field names — that's the current API, match it exactly on your end (an n8n Switch node on {{$json.Decision}} works fine).
If your endpoint doesn't respond with a 2xx status, the callback isn't retried automatically — but you'll get an email with the token and the error, so you can resume the workflow manually. Make sure your callback URL is reachable and returns quickly.
5. Rate limits & plan limits
50 requests per 15 minutes per account. If you hit it, you'll get a 429 response — back off and retry after a bit.
The free plan covers 50 approvals a month. Past that, /webhook returns a 402 until the next cycle or an upgrade.
Sending the exact same request (same title, content, reviewer, and callback URL) again on the same day returns the original approval instead of creating a duplicate — safe for retries from flaky connections.
6. n8n template (optional — if that's what you use)
Tested end to end: trigger → call NodGo → pause with n8n's native Wait-for-webhook → branch on the decision → continue the workflow.
In n8n: Workflow menu → Import from File, then swap in your own API key (Header Auth credential), reviewer email, and the node after "Check Decision" for whatever your workflow should actually do.