All integrations

Curviate x Clay

Send enriched Clay rows straight into a Motion. Connect the two with Curviate’s webhooks and API, then build the flow you need.

No card required

What is Clay?

Clay is a data enrichment and outbound workflow platform. It combines many data providers and AI research in a spreadsheet-like interface that go-to-market teams use to build lead lists and personalize outreach.

Visit clay.com

How Clay works with Curviate

Clay builds and enriches the list, Curviate does the LinkedIn part. An HTTP API enrichment column sends each row to Curviate as a Contact, a second column adds the Contact to a Motion, and replies come back to a Clay webhook table or to Slack. No Curviate app inside Clay is needed: the HTTP API column calls any REST endpoint.

Replies outmessage.receivedenrollment.finished
People inadd contactsstart a Motion

What you can build

Three flows teams set up first. Each one takes a few minutes.

Enriched rows become Contacts

An HTTP API column posts each row’s LinkedIn URL, name and company, with Clay findings such as a funding round in extra fields your messages can use.

POST /v1/contacts

Only qualified rows join a Motion

A run condition, such as a score above your cutoff, keeps the second column to the rows you want; it posts the Contact id from the first column.

POST /v1/motions/…/contacts

Replies back in a Clay table

A Curviate webhook posts each reply to a Clay webhook table, where you can enrich it again or route it to the owner.

message.received

Set up Clay with Curviate

Everything runs on two things Curviate gives every account: signed webhooks out and a REST API in.

  1. 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. 2

    Send people from Clay to Curviate

    Use Clay’s HTTP request or webhook action, or an automation tool, to call Curviate with each person’s LinkedIn URL. Extra fields travel along for your messages.

    POST https://api.curviate.com/v1/contacts
    { "linkedin_url": "linkedin.com/in/lenaweber",
      "list_name": "Clay signals",
      "extra": { "signal": "visited pricing" } }
  3. 3

    Start the Motion

    Add the new contacts to a Motion. They start within its schedule and each account’s limits.

    # start your Motion for them
    POST https://api.curviate.com/v1/motions/mot_…/contacts
    { "contact_ids": ["con_…"] }
  4. 4

    Get replies back

    Point a Curviate webhook at Clay, your automation tool or Slack to hear about replies. Each webhook covers one source: messaging for replies, user for accepted invitations, motion for Motion outcomes, account_status for 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-endpoint.example.com/curviate"
      }'
  5. 5

    Check the signature

    Every delivery carries a Curviate-Signature header: 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)

Clay details that matter

What Clay University says about the HTTP API column, applied to Curviate’s API.

  1. 1

    Save the key once

    Store Authorization: Bearer plus your Curviate key as an HTTP API (Headers) account. Clay keeps it at the workspace level, and editing it updates every column that uses it. A header typed into a column is visible to anyone who can see the column.

  2. 2

    Return the Contact id

    Set Field paths to return to id, so the next column can add that Contact to a Motion without a lookup.

    # Curviate’s answer, 201 when created
    { "id": "con_…", "outcome": "created", … }
  3. 3

    Re-runs are safe

    Curviate keys a Contact on the LinkedIn profile, so running the column again updates the same Contact, and an empty cell never erases a stored value. Adding someone to a Motion twice answers already_enrolled.

  4. 4

    Pace the column, mind the rows

    Set Request limit and Duration (ms) on the column; Curviate reports what is left in the RateLimit header of every answer. A Clay table, a webhook table included, stops importing at 50,000 rows without an error, so start a new reply table before then.

Events you can use

message.receivedA LinkedIn message or InMail arrived
connection.acceptedSomeone accepted an invitation you sent through Curviate
enrollment.finishedA contact finished a Motion, with the reason
enrollment.repliedA contact replied to a Motion, with the reply text
motion.custom_eventA Motion ran a step you marked to notify you
post.publishedA scheduled post went live
account.reconnect_neededAn account needs to sign in again
All webhook events

Actions you can call

POST /v1/contactsAdd or update a contact
POST /v1/motions/{id}/contactsStart a Motion for contacts
POST /v1/{account_id}/chats/{chat_id}/messagesSend a message
POST /v1/enrollments/{id}/eventsTell a waiting Motion to continue
GET /v1/{account_id}/companies/{identifier}Read a company page
API reference

Questions about Curviate x Clay

What does Curviate need from Clay?

A LinkedIn profile URL per person. Names, company and any extra fields are optional and can be used in your messages.

Will someone be contacted twice?

No. Curviate recognises a person by their LinkedIn profile, so sending them again updates the contact, and Motions can skip people who are already in another Motion.

How fast does a new person start?

Right away, within the Motion’s schedule and each account’s limits.

Can Clay use the Contact’s custom fields in a message?

Yes. Whatever you send in extra is stored on the Contact and fills {{contact.extra.field}} in your Sequence’s messages, with a fallback text for rows that lack it.

More data and enrichment

Connect Clay today.Free for 7 days.

Create your API key, point a webhook at Clay and run your first flow.

No card required