Integrations / Canonical use case
Invitation not accepted in 7 days
When a LinkedIn invitation isn't accepted within 7 days, fire a webhook that drops the contact into Instantly, Smartlead, or any cold-email tool. If they accept inside the 7-day window, the trigger is cancelled automatically.
Why this matters
Most LinkedIn outreach tools lock workflows inside their own UI. You can build a sequence that sends a follow-up message after acceptance, but you cannot easily say “if they ignore me on LinkedIn for a week, switch to email.” That multi-channel handoff is exactly where competitors leave you stranded.
Crispy treats this as a first-class primitive. The invitation.not_accepted_after event is scheduled the moment you send an invitation, fires automatically once the threshold elapses, and cancels itself if the contact accepts in the meantime.
The trigger
- Event name:
invitation.not_accepted_after - Fires: 7 days after
invitation.sent, if and only ifinvitation.acceptedhas not been recorded for the same contact. - Cancelled: automatically when
invitation.acceptedfires inside the window. The cron sweeper marks the scheduled rowcancelled_atwith reasoninvitation.accepted. - Tolerance: the firing cron runs every minute. Fire times are jittered ±10 minutes to spread bulk-import bursts across your downstream endpoint. Don't rely on second-precision.
Setup via Make.com
Make has the cleanest visual flow for this. Roughly 5 minutes end-to-end.
- In Make, create a new scenario and add a Webhooks → Custom webhook trigger. Copy the generated webhook URL.
- Subscribe Crispy to
invitation.not_accepted_afterwith that URL astarget_url:curl -X POST https://crispy.sh/api/v1/subscriptions \ -H "Authorization: Bearer crispy_your_api_key" \ -H "Content-Type: application/json" \ -d '{ "event": "invitation.not_accepted_after", "target_url": "https://hook.us2.make.com/your-make-webhook-id", "filter": { "is_first": true, "match": { "contact.custom_attrs.industry": "SaaS" } } }' - Send a test invitation from Crispy to fire a sample delivery. Make's scenario editor will auto-detect the payload shape so subsequent modules can map fields like
payload.data.contact.emailandpayload.data.contact.custom_attrs.industry. - Add an Instantly → Add lead to campaign module. Map the contact email and any custom attributes you imported into Crispy's
custom_attrsinto Instantly's lead fields. - Verify the signature. In a Make HTTP module, the Webhook-Signature header is exposed under
headers. Add a router branch that calls a Tools → Run JavaScript module with the code from the HMAC verification reference before any downstream side effects. - Activate the scenario. Make will receive deliveries on every fire and route to Instantly automatically.
A pre-built Make scenario template will be linked here once shared (placeholder).
Setup via n8n
n8n self-hosted or n8n.cloud. The flow mirrors Make.
- Create a new workflow with a Webhook trigger node. Set the HTTP method to
POSTand copy the test URL. - Subscribe Crispy with that URL (same
curlas Make above, just swap the target). - Add a Code node immediately after the Webhook trigger. Paste the Node verifier from the HMAC verification page. Throw on signature mismatch so the workflow short-circuits.
- Add an HTTP Request node configured to POST to Instantly's
/api/v2/leads/lists/{list_id}/leadsendpoint. Map{{ $json.data.contact.email }}into the Instantly lead body. - Activate the workflow and fire a real
invitation.not_accepted_afterfrom Crispy to confirm.
Setup via Zapier
Zapier's native trigger doesn't verify HMAC out of the box, so add a Code-by-Zapier step.
- Create a new Zap with a Webhooks by Zapier → Catch Hook trigger. Copy the catch URL.
- Subscribe Crispy to that URL using the same curl above.
- Add a Code by Zapier step (Run JavaScript). Paste the Node verifier from the HMAC verification page. Set
output = { valid: true }on success and throw on failure to short-circuit the Zap. - Add the Instantly → Add Lead action (or Smartlead, Lemlist, etc.). Map fields from the trigger payload.
- Publish the Zap and send a test invitation to verify end-to-end.
Sample payload
Every delivery has the v1 envelope shape below. Top-level keys are frozen; new fields are additive. The data.source_event field tells you which event led to the schedule (always invitation.sent for this trigger).
{
"payload_version": "1",
"id": "00000000-0000-0000-0000-000000000900",
"event": "invitation.not_accepted_after",
"timestamp": "2026-04-29T22:00:00.000Z",
"webhook_id": "00000000-0000-0000-0000-0000000009h1",
"account_id": "00000000-0000-0000-0000-0000000009a1",
"data": {
"contact": {
"id": "00000000-0000-0000-0000-0000000009c1",
"workspace_id": "00000000-0000-0000-0000-0000000009w1",
"account_id": "00000000-0000-0000-0000-0000000009a1",
"connection_status": "pending",
"current_campaign_id": "00000000-0000-0000-0000-0000000009p1",
"tags": ["q4-target"],
"custom_attrs": {
"industry": "SaaS",
"headcount": 120
},
"external_ids": {
"hubspot_contact_id": "hs-12345"
}
},
"company": {
"id": "00000000-0000-0000-0000-0000000009co",
"workspace_id": "00000000-0000-0000-0000-0000000009w1",
"name": "Acme Corp",
"linkedin_company_id": "li-acme-001",
"custom_attrs": {
"headcount_min": 50,
"headcount_max": 200
},
"external_ids": {
"attio_company_id": "attio-acme-001"
}
},
"source_event": "invitation.sent",
"triggered_at": "2026-04-29T22:00:00.000Z"
}
}Troubleshooting
- My webhook is auto-disabled and I'm not getting deliveries.
- Crispy disables a webhook after 100 consecutive failures and emails the workspace owner. Check
get_webhook_deliveriesfor the failure reason, fix your endpoint, then re-enable from the dashboard. - Signature verification fails inside Make / n8n / Zapier.
- Make sure you're using the raw request body (not the parsed JSON) when computing the HMAC. The body input to the HMAC is
v1.<timestamp>.<raw_body>, not the body alone. Most platforms expose the raw body as a separate variable; check the platform docs. - I'm receiving the same delivery twice.
- Retries are expected on 5xx responses. Use the
Webhook-Event-Idheader for idempotency. Store delivered IDs for 7 days and short-circuit duplicates. - The contact accepted on day 6 but I still got the day-7 fire.
- Cancellation is idempotent and fires on
invitation.acceptedfrom Crispy's side. If your webhook tooling didn't see the acceptance in time, the most common cause is your LinkedIn account being disconnected during the polling window. Reconnect from the dashboard and the next sync will pick up the missed accept.