Add a Webhooks by Zapier step to the Zap that already handles this, at the start, and again at the finish.
Decide where this step goes: right after the very first step of the scenario, before any of the real work happens.
In your Zap, add an Action step. Search for and choose "Webhooks by Zapier," then the event "POST."
URL: paste this in.
https://flowproof-ok3mquge8-hitenbs-projects.vercel.app/api/v1/events
Payload Type: set to json.
Data: add the template's keys as key/value pairs (flow, endpoint, external_id, match) — or, if your Zapier account shows a raw-JSON option instead, paste the whole template there. Either way, fill each value using the step-output picker (see the table underneath).
{
"flow": "your-flow-slug",
"endpoint": "source",
"external_id": "USE-YOUR-OWN-REFERENCE",
"match": {
"phone": "+15551234567"
}
}| Key | What it is | What to replace with |
|---|---|---|
| flow | Your flow's identifier | Leave as shown |
| endpoint | Which side of the run this is | "source" for the start ping, "destination" for the finish ping |
| external_id | Unique reference for this specific run | A row ID, order ID, or unique field from the incoming data. Use the tool's variable syntax. |
| match | Fields used to pair start and finish pings | Include whichever unique identifier is available (email, phone, order_id). Use the tool's variable syntax. |
Zapier doesn't use typed template syntax: click into a field and choose the value from the insert-data dropdown of an earlier step. The inserted token displays inline, roughly like this:
"external_id": "{{Row ID}}",
"match": { "email": "{{Email}}" }"external_id": "{{Order ID}}",
"match": { "phone": "{{Phone}}" }Wrap Request In Array: set to No.
File: leave empty. This request has no file attachment.
Unflatten: set to No.
Basic Auth: leave empty. FlowProofs authenticates via the header below, not Zapier's Basic Auth fields.
Headers: add a header named Authorization with value:
Bearer fp_live_YOUR_API_KEY
Continue, test the step to confirm a real send, then publish the Zap.
You'll add TWO of these steps 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 Webhooks by Zapier step (endpoint: source) <- add this first | v ...your existing steps, untouched... | +--> FlowProofs Webhooks by Zapier step (endpoint: destination) <- add this last v END OF YOUR FLOW
Test the step, then turn the Zap on. Return to FlowProofs. The pending indicator turns green when your first ping arrives.
Screenshot placeholder
Zapier action step: Webhooks by Zapier, POST
drop a PNG at /public/docs/zapier-webhook-action.png
Decide where this step goes: right after the very last step, once the record has actually landed where it should.
In your Zap, add an Action step. Search for and choose "Webhooks by Zapier," then the event "POST."
URL: paste this in.
https://flowproof-ok3mquge8-hitenbs-projects.vercel.app/api/v1/events
Payload Type: set to json.
Data: add the template's keys as key/value pairs (flow, endpoint, external_id, match) — or, if your Zapier account shows a raw-JSON option instead, paste the whole template there. Either way, fill each value using the step-output picker (see the table underneath).
{
"flow": "your-flow-slug",
"endpoint": "destination",
"external_id": "USE-YOUR-OWN-REFERENCE",
"match": {
"phone": "+15551234567"
}
}| Key | What it is | What to replace with |
|---|---|---|
| flow | Your flow's identifier | Leave as shown |
| endpoint | Which side of the run this is | "source" for the start ping, "destination" for the finish ping |
| external_id | Unique reference for this specific run | A row ID, order ID, or unique field from the incoming data. Use the tool's variable syntax. |
| match | Fields used to pair start and finish pings | Include whichever unique identifier is available (email, phone, order_id). Use the tool's variable syntax. |
Zapier doesn't use typed template syntax: click into a field and choose the value from the insert-data dropdown of an earlier step. The inserted token displays inline, roughly like this:
"external_id": "{{Row ID}}",
"match": { "email": "{{Email}}" }"external_id": "{{Order ID}}",
"match": { "phone": "{{Phone}}" }Wrap Request In Array: set to No.
File: leave empty. This request has no file attachment.
Unflatten: set to No.
Basic Auth: leave empty. FlowProofs authenticates via the header below, not Zapier's Basic Auth fields.
Headers: add a header named Authorization with value:
Bearer fp_live_YOUR_API_KEY
Continue, test the step to confirm a real send, then publish the Zap.
You'll add TWO of these steps 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 Webhooks by Zapier step (endpoint: source) <- add this first | v ...your existing steps, untouched... | +--> FlowProofs Webhooks by Zapier step (endpoint: destination) <- add this last v END OF YOUR FLOW
Test the step, then turn the Zap on. Return to FlowProofs. The pending indicator turns green when your first ping arrives.
Screenshot placeholder
Zapier payload fields mapped to the body template
drop a PNG at /public/docs/zapier-payload-fields.png