All integrations

n8n

Gate any n8n workflow behind a human approval step. Use the HTTP Request node to submit and poll, or configure outbound webhooks for real-time decisions.

Submit an approval request from n8n (HTTP Request node)

n8n HTTP Request
Node: HTTP Request
Method: POST
URL: https://app.cheqpoint.io/api/webhooks/inbound
Authentication: Header Auth
  Name: x-api-key
  Value: {{ $env.CHEQPOINT_API_KEY }}

Body (JSON):
{
  "action": "{{ $json.action }}",
  "summary": "{{ $json.summary }}",
  "details": {{ $json.details | json }},
  "riskLevel": "high",
  "webhookUrl": "https://your-n8n-instance.com/webhook/cheqpoint-decision"
}

Output: { "id": "req_abc123", "status": "PENDING" }
Node: HTTP Request
Method: POST
URL: https://app.cheqpoint.io/api/webhooks/inbound
Authentication: Header Auth
  Name: x-api-key
  Value: {{ $env.CHEQPOINT_API_KEY }}

Body (JSON):
{
  "action": "{{ $json.action }}",
  "summary": "{{ $json.summary }}",
  "details": {{ $json.details | json }},
  "riskLevel": "high",
  "webhookUrl": "https://your-n8n-instance.com/webhook/cheqpoint-decision"
}

Output: { "id": "req_abc123", "status": "PENDING" }

Poll for the decision (Loop node + HTTP Request)

n8n Flow
1. Store requestId from previous node: {{ $json.id }}

2. Add a Wait node - 10 seconds

3. HTTP Request (poll):
   Method: GET
   URL: https://app.cheqpoint.io/api/approvals/{{ $json.id }}
   Header: x-api-key: {{ $env.CHEQPOINT_API_KEY }}

4. IF node:
   Condition: {{ $json.status }} is not equal to PENDING
   True  → Continue workflow (check status === APPROVED)
   False → Back to Wait node (loop)

5. IF node (approved?):
   Condition: {{ $json.status }} equals APPROVED
   True  → Execute the action
   False → Stop / send alert
1. Store requestId from previous node: {{ $json.id }}

2. Add a Wait node - 10 seconds

3. HTTP Request (poll):
   Method: GET
   URL: https://app.cheqpoint.io/api/approvals/{{ $json.id }}
   Header: x-api-key: {{ $env.CHEQPOINT_API_KEY }}

4. IF node:
   Condition: {{ $json.status }} is not equal to PENDING
   True  → Continue workflow (check status === APPROVED)
   False → Back to Wait node (loop)

5. IF node (approved?):
   Condition: {{ $json.status }} equals APPROVED
   True  → Execute the action
   False → Stop / send alert

Receive decisions via webhook (recommended)

n8n Webhook node
1. Add a Webhook node to your n8n workflow:
   Path: /cheqpoint-decision
   Method: POST

2. In Cheqpoint Settings → Integrations → n8n:
   Webhook URL: https://your-n8n.com/webhook/cheqpoint-decision
   Events: request.approved, request.rejected

3. Decision payload received by the webhook node:
{
  "event": "request.approved",
  "requestId": "req_abc123",
  "status": "APPROVED",
  "action": "transfer_funds",
  "summary": "Transfer £1,000 to IBAN GB29...",
  "decisionNote": "Approved under delegated authority",
  "decidedAt": "2025-03-18T14:32:00.000Z"
}

4. Route on status:
   IF {{ $json.status }} === "APPROVED" → execute transfer
   ELSE → send alert to Slack
1. Add a Webhook node to your n8n workflow:
   Path: /cheqpoint-decision
   Method: POST

2. In Cheqpoint Settings → Integrations → n8n:
   Webhook URL: https://your-n8n.com/webhook/cheqpoint-decision
   Events: request.approved, request.rejected

3. Decision payload received by the webhook node:
{
  "event": "request.approved",
  "requestId": "req_abc123",
  "status": "APPROVED",
  "action": "transfer_funds",
  "summary": "Transfer £1,000 to IBAN GB29...",
  "decisionNote": "Approved under delegated authority",
  "decidedAt": "2025-03-18T14:32:00.000Z"
}

4. Route on status:
   IF {{ $json.status }} === "APPROVED" → execute transfer
   ELSE → send alert to Slack

Full n8n workflow example (JavaScript Function node)

JavaScript
// Function node: Build Cheqpoint payload
const item = $input.first().json;

return [{
  json: {
    action: "process_refund",
    summary: `Refund £${item.amount} for order ${item.orderId}`,
    details: {
      orderId: item.orderId,
      amount: item.amount,
      currency: "GBP",
      reason: item.reason,
      customerEmail: item.email,
    },
    riskLevel: item.amount > 500 ? "high" : "medium",
  }
}];
// Function node: Build Cheqpoint payload
const item = $input.first().json;

return [{
  json: {
    action: "process_refund",
    summary: `Refund £${item.amount} for order ${item.orderId}`,
    details: {
      orderId: item.orderId,
      amount: item.amount,
      currency: "GBP",
      reason: item.reason,
      customerEmail: item.email,
    },
    riskLevel: item.amount > 500 ? "high" : "medium",
  }
}];