n8n

Add an HTTP Request node to the workflow that already handles this, at the start, and again at the finish.

Adding the start ping

1

Decide where this node goes: right after the very first step of the scenario, before any of the real work happens.

2

Open the n8n workflow you want to monitor and add an HTTP Request node at that point.

3

Authentication: set to None. FlowProofs authenticates via the header you add below, not n8n's built-in credential system.

4

Request Method: set to POST.

5

URL: paste this in.

URL
https://flowproof-ok3mquge8-hitenbs-projects.vercel.app/api/v1/events
6

Send Query Parameters: leave off.

7

Send Headers: turn on. Add a header named Authorization with value:

Header value
Bearer fp_live_YOUR_API_KEY
8

Send Body: turn on. Set Body Content Type to JSON, and Specify Body Using to JSON.

9

JSON body: paste the template below, then map your own fields into external_id and match (see the table underneath).

JSON body
{
  "flow": "your-flow-slug",
  "endpoint": "source",
  "external_id": "USE-YOUR-OWN-REFERENCE",
  "match": {
    "phone": "+15551234567"
  }
}
KeyWhat it isWhat to replace with
flowYour flow's identifierLeave as shown
endpointWhich side of the run this is"source" for the start ping, "destination" for the finish ping
external_idUnique reference for this specific runA row ID, order ID, or unique field from the incoming data. Use the tool's variable syntax.
matchFields used to pair start and finish pingsInclude whichever unique identifier is available (email, phone, order_id). Use the tool's variable syntax.

n8n references a previous node's output with {{ $json.fieldname }}. For example:

Example: matching on email
"external_id": "{{ $json.row_id }}",
"match": { "email": "{{ $json.email }}" }
Example: matching on phone
"external_id": "{{ $json.order_id }}",
"match": { "phone": "{{ $json.phone }}" }
10

Under Options, add Response: set Response Format to JSON, and leave Never Error off, so a real failure still surfaces in the workflow.

11

Save the workflow, then Activate it.

You'll add TWO of these nodes total: one BEFORE the work step with endpoint: source, and one AFTER the work step with endpoint: destination. They share the same external_id so FlowProofs can pair them.

START OF YOUR FLOW
   |
   +--> FlowProofs HTTP Request node (endpoint: source)      <- add this first
   |
   v
  ...your existing steps, untouched...
   |
   +--> FlowProofs HTTP Request node (endpoint: destination) <- add this last
   v
END OF YOUR FLOW

Execute the workflow once (or trigger it for real). Return to FlowProofs. The pending indicator turns green when your first ping arrives.

Screenshot placeholder

n8n HTTP Request node configuration panel

drop a PNG at /public/docs/n8n-http-request-node.png

Adding the finish ping

1

Decide where this node goes: right after the very last step, once the record has actually landed where it should.

2

Open the n8n workflow you want to monitor and add an HTTP Request node at that point.

3

Authentication: set to None. FlowProofs authenticates via the header you add below, not n8n's built-in credential system.

4

Request Method: set to POST.

5

URL: paste this in.

URL
https://flowproof-ok3mquge8-hitenbs-projects.vercel.app/api/v1/events
6

Send Query Parameters: leave off.

7

Send Headers: turn on. Add a header named Authorization with value:

Header value
Bearer fp_live_YOUR_API_KEY
8

Send Body: turn on. Set Body Content Type to JSON, and Specify Body Using to JSON.

9

JSON body: paste the template below, then map your own fields into external_id and match (see the table underneath).

JSON body
{
  "flow": "your-flow-slug",
  "endpoint": "destination",
  "external_id": "USE-YOUR-OWN-REFERENCE",
  "match": {
    "phone": "+15551234567"
  }
}
KeyWhat it isWhat to replace with
flowYour flow's identifierLeave as shown
endpointWhich side of the run this is"source" for the start ping, "destination" for the finish ping
external_idUnique reference for this specific runA row ID, order ID, or unique field from the incoming data. Use the tool's variable syntax.
matchFields used to pair start and finish pingsInclude whichever unique identifier is available (email, phone, order_id). Use the tool's variable syntax.

n8n references a previous node's output with {{ $json.fieldname }}. For example:

Example: matching on email
"external_id": "{{ $json.row_id }}",
"match": { "email": "{{ $json.email }}" }
Example: matching on phone
"external_id": "{{ $json.order_id }}",
"match": { "phone": "{{ $json.phone }}" }
10

Under Options, add Response: set Response Format to JSON, and leave Never Error off, so a real failure still surfaces in the workflow.

11

Save the workflow, then Activate it.

You'll add TWO of these nodes total: one BEFORE the work step with endpoint: source, and one AFTER the work step with endpoint: destination. They share the same external_id so FlowProofs can pair them.

START OF YOUR FLOW
   |
   +--> FlowProofs HTTP Request node (endpoint: source)      <- add this first
   |
   v
  ...your existing steps, untouched...
   |
   +--> FlowProofs HTTP Request node (endpoint: destination) <- add this last
   v
END OF YOUR FLOW

Execute the workflow once (or trigger it for real). Return to FlowProofs. The pending indicator turns green when your first ping arrives.

Screenshot placeholder

n8n node placed right after the destination step, workflow activated

drop a PNG at /public/docs/n8n-workflow-activated.png