HUMANin theLOOP

n8n

Pause on a Wait webhook, review in Hitly, POST the resume URL.

Status: coming soon for a custom n8n node. The HTTP adapter is available today — create an HTTP project and hand-roll a Wait node.

n8n pauses with a Wait node. Resume happens only via $execution.resumeUrl (or form URL).

How it works with Hitly

  1. Notion Trigger (or HTTP Request) POSTs context + $execution.resumeUrl to Hitly ingest with plugin: "http".
  2. Wait node On Webhook Call on the same chain (not a second Webhook trigger).
  3. Reviewer decides in Hitly.
  4. Hitly POSTs { decision, id, metadata } to $execution.resumeUrl and the Wait node continues.

A disconnected Webhook node on the same canvas is a separate workflow. Its /webhook-test/... URL 404s unless you click Listen; production /webhook/... only works when that Webhook is the trigger of an active workflow.

n8n canvas: Notion Trigger, Filter, HITLy Request, HITLy Wait, If, then Approved or Rejected Notion nodes
One chain — Wait on the same execution, not a second Webhook trigger
Notion Content database with Software licences In review
Notion Status In review creates the Hitly item
Hitly work item for notion-approval with Software licences context and Accept or Reject
Reviewer decides in Hitly; Wait then PATCHes Notion

Setup (hand-roll today)

Create a Hitly project with plugin HTTP. Point an HTTP Request node at POST /api/v1/approvals with a project API key, plugin: "http", projectId, resumeUrl ($execution.resumeUrl), and any metadata you need echoed on decide.

Set WEBHOOK_URL on self-hosted n8n so resume URLs are not localhost.

Step-by-step recipe: examples/n8n. Notion Status mapping: examples/notion.

Decision mapping

Hitlyn8n
acceptPOST { "decision": "accept", "id", "metadata" }
rejectPOST { "decision": "reject", "id", "metadata" } (branch in the workflow)

On this page