Docs
Get API key

Webhook event

First Message Reply Received

POSTmessage.first_reply

A lead a campaign reached replied to a LinkedIn message for the first time.

Salesteam sends it as a POST to your webhook’s address. Answer with any 2xx status within 10 seconds; check the signature first (how).

Headers

  • X-Salesteam-Eventstring
  • X-Salesteam-Deliverystring

    The event ID, the same on every retry.

  • X-Salesteam-Timestampstring

    Unix seconds when this try was signed.

  • X-Salesteam-Signaturestring

    v1= and the hex HMAC-SHA256 of ${timestamp}.${rawBody} with the webhook’s signing secret.

Body

  • idstringRequired

    Event ID, the same on every retry. Use it to skip repeats.

  • typeone ofRequired
    Inside it

    One of these shapes:

    Option 1: An event type

    Option 2

  • occurredAtstring · date-timeRequired
  • workspaceone ofRequired
    Inside it

    One of these shapes:

    Option 1

    • idstringRequired

      The workspace ID. Events carry the same one.

    • namestringRequired

      The workspace’s name.

    Option 2

  • leadone ofRequired
    Inside it

    One of these shapes:

    Option 1

    • idstringRequired
    • firstNamestringRequired
    • lastNamestringRequired
    • fullNamestringRequired
    • titlestringRequired
    • companystringRequired
    • locationstringRequired
    • linkedinUrlstringRequired
    • emailstring or nullRequired
    • emailStatusstring or nullRequired

      One of deliverable, catch_all, unknown.

    • tagsarray of stringRequired
    • customFieldsobjectRequired

      The lead's custom field values by field key: text, numbers, dates as YYYY-MM-DD, web addresses, and lists for Multi-select fields.

    Option 2

  • campaignobject or nullRequired
    Inside it
    • idstring
    • namestring
  • senderobject or nullRequired
    Inside it
    • idstring
    • namestring
  • messageone ofRequired
    Inside it

    One of these shapes:

    Option 1

    • idstringRequired
    • directionstringRequired

      One of inbound, outbound.

    • textstringRequired
    • subjectstring

      InMail only.

    • sentAtstring · date-timeRequired

    Option 2

  • conversationobject or nullRequired
    Inside it
    • idstring
    • channelstring

      One of linkedin, inmail.

    • linkstring
  • linkstringRequired

    Where to open this in Salesteam.

  • tagobject
    Inside it
    • idstringRequired
    • namestringRequired
  • meetingobject
    Inside it
    • atstring · date-time
  • finishobject
    Inside it
    • reasonstringRequired

      One of completed, replied, stopped, not_accepted, moved, suppressed.

  • postobject

    post.liked: the post that was liked. url is null when LinkedIn didn’t name it.

    Inside it
    • urlstring or nullRequired
  • outcomeobject

    lead.outcome_changed, and lead.not_interested from a Lost outcome: the new outcome and the one before it.

    Inside it
    • statusstringRequired

      One of interested, qualified, booked, attended, no_show, won, lost.

    • labelstringRequired

      How the app names it, like "Meeting booked".

    • previousone ofRequired
      Inside it

      One of these shapes:

      Option 1

      Option 2

  • resultsobject

    campaign.completed: the campaign’s numbers.

    Inside it
    • leadsintegerRequired

      People in the campaign.

    • contactedintegerRequired
    • acceptedintegerRequired

      Connection requests accepted.

    • repliedintegerRequired
  • acceptanceobject

    campaign.requests_paused: of the requests old enough to answer, how many were accepted, against the workspace’s safety line.

    Inside it
    • sentintegerRequired
    • acceptedintegerRequired
    • percentnumberRequired
    • thresholdintegerRequired

      The safety line, in percent.

  • accountobject

    account.disconnected: the account is sender. campaigns is how many active or paused campaigns wait for it.

    Inside it
    • statusstringRequired

      One of disconnected.

    • campaignsintegerRequired
  • sentimentstring

    Lead Auto Tagged events: how Salesteam read the first reply, which is in message. tag is the tag it added: Interested for positive, Not interested for negative, none for generic. One of positive, negative, generic.

Example body
{
  "id": "evt_sample_message_first_reply",
  "type": "message.first_reply",
  "occurredAt": "2026-10-29T14:05:00.000Z",
  "workspace": {
    "id": "ws_5f2a9c0e7b14d3a6c8e1f027",
    "name": "Acme outbound"
  },
  "lead": {
    "id": "lead_sample",
    "firstName": "Jamie",
    "lastName": "Lee",
    "fullName": "Jamie Lee",
    "title": "Head of Sales",
    "company": "Example Co",
    "location": "London, United Kingdom",
    "linkedinUrl": "https://www.linkedin.com/in/jamie-lee-example",
    "email": "jamie@example.co",
    "emailStatus": "deliverable",
    "tags": [],
    "customFields": {
      "source": "Webinar"
    }
  },
  "campaign": {
    "id": "camp_sample",
    "name": "EU founders"
  },
  "sender": {
    "id": "sender_sample",
    "name": "Alex Morgan"
  },
  "message": {
    "id": "msg_sample",
    "text": "Thanks for reaching out. Can you send times for a quick call next week?",
    "direction": "inbound",
    "sentAt": "2026-10-29T14:05:00.000Z"
  },
  "conversation": {
    "id": "conv_sample",
    "channel": "linkedin",
    "link": "https://app.salesteam.dev/inbox?conversation=conv_sample"
  },
  "link": "https://app.salesteam.dev/inbox?conversation=conv_sample"
}