Curviate x Zapier
Send LinkedIn events to thousands of apps. Connect the two with Curviate’s webhooks and API, then build the flow you need.
What is Zapier?
Zapier is a no-code automation platform that connects thousands of apps through automated workflows called Zaps. Teams across business functions use it to move data and trigger actions between tools.
Visit zapier.comHow Zapier works with Curviate
A Zap starts with Webhooks by Zapier’s Catch Hook trigger, on a URL Curviate posts LinkedIn events to, and calls Curviate back with the Custom Request action. Those two Webhooks by Zapier steps are the whole connection, so every app in Zapier can sit between them: a filter, a Slack post, a row in a sheet.
message.receivedconnection.acceptedenrollment.finishedadd contactsstart a Motionsend a messageWhat you can build
Three flows teams set up first. Each one takes a few minutes.
Motion replies to Slack, filtered
A Filter by Zapier step lets through only replies from Contacts in a Motion, and the Slack step posts the sender and the Account it came in on.
message.receivedA form lead into a Motion
Two Custom Request steps: the first creates or updates the Contact, the second adds its id to the Motion.
POST /v1/motions/…/contactsEvery outcome as a sheet row
Each finished Enrollment adds a Google Sheets row with the Contact, the Motion and the finish reason.
enrollment.finishedSet up Zapier with Curviate
Everything runs on two things Curviate gives every account: signed webhooks out and a REST API in.
- 1
Copy your Curviate API key
In the Curviate dashboard, open Settings, then API & Webhooks, and copy your key.
# keep it in your tool's credentials, never in plain text
CURVIATE_API_KEY=cvt_live_••••3f9a - 2
Start with the Webhooks by Zapier › Catch Hook trigger
Create a new flow in Zapier, start it with the Webhooks by Zapier › Catch Hook trigger and copy the URL it gives you.
# the URL your Webhooks by Zapier › Catch Hook trigger gives you
https://your-zapier-webhook-url - 3
Send Curviate events to it
Create a webhook in Curviate for the events you need, then send a test event so Zapier can read the fields. You can do the same in the dashboard under Settings, then API & Webhooks. Each webhook covers one source:
messagingfor replies,userfor accepted invitations,motionfor Motion outcomes,account_statusfor account alerts.curl https://api.curviate.com/v1/webhooks \
-H "Authorization: Bearer $CURVIATE_API_KEY" \
-d '{
"source": "messaging",
"events": ["message.received"],
"account_ids": ["acc_…"],
"request_url": "https://your-zapier-webhook-url"
}' - 4
Call Curviate from Zapier
Add the Webhooks by Zapier › Custom Request action with the headers
Authorization: Bearerplus your key andContent-Type: application/json, and call any Curviate action. This one adds a person and starts a Motion.# add the person as a contact
POST https://api.curviate.com/v1/contacts
{ "linkedin_url": "linkedin.com/in/lenaweber", "first_name": "Lena" }
# start your Motion for them
POST https://api.curviate.com/v1/motions/mot_…/contacts
{ "contact_ids": ["con_…"] } - 5
Check the signature
Every delivery carries a
Curviate-Signatureheader: an HMAC-SHA256 of the timestamp and the raw body, made with your webhook’s secret. Compare it before you act, and drop anything older than five minutes.Curviate-Signature: t=1792230000,v1=5f2c9a…e81b
# expected = HMAC_SHA256(secret, t + "." + raw_body)
Zapier details that matter
What Zapier’s help center and Curviate’s webhook docs say about this setup.
- 1
Webhooks by Zapier needs a paid plan
The webhook triggers run on Zapier’s Professional, Team and Enterprise plans; the Free plan doesn’t include them. There is no Curviate app in Zapier’s directory, so these steps are how the two connect.
- 2
Catch Hook or Catch Raw Hook
Catch Hook parses the JSON into fields you map in later steps, up to 10 MB. Catch Raw Hook keeps the body unparsed and adds the request headers, up to 2 MB: that is the one to use if a later step checks the
Curviate-Signatureheader itself. - 3
Shape the payload for the editor
A body template sends only the fields you name, as flat keys, so the Zap editor shows
nameandmotioninstead of nested data.{ "name": "{{contact.full_name}}",
"linkedin": "{{linkedin_url}}",
"motion": "{{motion.name}}" } - 4
Test without a real person
Click Test trigger after
curviate webhook test. The test delivery carriesCurviate-Test: trueand a made-up Contact at example.com, so you map fields without touching anyone’s data.
Events you can use
message.receivedA LinkedIn message or InMail arrivedconnection.acceptedSomeone accepted an invitation you sent through Curviateenrollment.finishedA contact finished a Motion, with the reasonenrollment.repliedA contact replied to a Motion, with the reply textmotion.custom_eventA Motion ran a step you marked to notify youpost.publishedA scheduled post went liveaccount.reconnect_neededAn account needs to sign in againActions you can call
POST /v1/contactsAdd or update a contactPOST /v1/motions/{id}/contactsStart a Motion for contactsPOST /v1/{account_id}/chats/{chat_id}/messagesSend a messagePOST /v1/enrollments/{id}/eventsTell a waiting Motion to continueGET /v1/{account_id}/companies/{identifier}Read a company pageQuestions about Curviate x Zapier
Which LinkedIn events can start a Zapier flow?
Messages, accepted invitations, published posts, account status changes and every step of a Motion, from a contact starting it to a reply that ends it.
Can Zapier act on LinkedIn too?
Yes. Every Curviate action is a plain HTTPS call, so Zapier can search, message, invite or start a Motion, inside the limits you set for each account.
Do I need to write code?
No. A webhook trigger and an HTTP request are all it takes, and Zapier maps the fields for you.
How do I start a Motion from a Zap?
Add a Custom Request step that posts the person’s LinkedIn URL to /v1/contacts, then a second one that posts the returned id to /v1/motions/{id}/contacts. A repeat answers already_enrolled, so a Zap that runs twice does no harm.
More automation
Connect Zapier today.Free for 7 days.
Create your API key, point a webhook at Zapier and run your first flow.


