HTTP
Pause on a callback URL, review in Hitly, POST the decision JSON.
Generic HTTP callback. Create a Hitly project with plugin HTTP. Any origin that can POST ingest and expose a resumeUrl uses this adapter — n8n Wait, Make, Zapier, Notion automations, or a tiny webhook handler.
How it works with Hitly
- The origin POSTs context +
resumeUrltoPOST /api/v1/approvals(plugin: "http"). - Whatever owns
resumeUrlwaits (Wait node, scenario, Worker). - Reviewer decides in Hitly.
- Hitly POSTs JSON to
resumeUrl. Ingestmetadatais echoed unchanged on accept and reject.idis the Hitly approval id (unknown at ingest):
{
"decision": "accept",
"id": "apr_...",
"metadata": { "pageId": "…", "title": "…" }
}Put any correlation keys the callback needs in metadata. Hitly does not interpret them.
Setup
Create an HTTP project and copy the API key. Point the origin at ingest:
{
"plugin": "http",
"projectId": "prj_...",
"runId": "execution-or-page-id",
"actionName": "http-callback",
"contextMarkdown": "Refund $40 to order 1842.",
"metadata": { "pageId": "…", "orderId": "1842" },
"resumeUrl": "https://your-callback.example/hitly-resume"
}Authorization: Bearer hitly_.... Send Idempotency-Key when the origin may retry.
n8n-shaped fields (executionId, workflowId, workflowName) are optional details. runId falls back to executionId.
The resume URL must be reachable from Hitly. localhost only works when Hitly and the callback run on the same machine.
Decision mapping
| Hitly | Callback |
|---|---|
accept | POST { "decision": "accept", "id", "metadata" } |
reject | POST { "decision": "reject", "id", "metadata" } (branch in the origin) |
Recipes
- n8n Wait node —
$execution.resumeUrl - Repo:
examples/n8n,examples/notion
