Webhooks

Coldreach can send real-time HTTP POST notifications to your server when key events occur. Configure webhook URLs in your Coldreach settings to start receiving events.

Overview

Webhooks let you react to events in Coldreach without polling the API. When an event fires, Coldreach sends a JSON payload to your configured URL via HTTP POST with a Content-Type: application/json header.

WebhookTrigger
First TouchThe first email in a sequence is sent to a contact
Positive ReplyA positive reply is received from a contact
Outreach FinishedOutreach to a contact is completed for any reason

Setting Up Webhooks

  1. Go to Settings > Developer (for Outreach Finished) or Settings > Notifications (for First Touch and Positive Reply) in the Coldreach app
  2. Find the webhook you want to enable
  3. Click Setup and enter your endpoint URL
  4. Coldreach will send a POST request to your URL whenever the event occurs

Your endpoint must return a 2xx status code. Non-2xx responses are treated as failures.

First Touch Webhook

Triggered when the first email in a sequence is sent to a contact. Useful for syncing outreach activity to your CRM or triggering downstream workflows.

Payload

{
  "fullName": "Jane Smith",
  "firstName": "Jane",
  "lastName": "Smith",
  "jobTitle": "VP of Sales",
  "email": "[email protected]",
  "linkedInURL": "https://linkedin.com/in/janesmith",
  "companyName": "Acme Corp",
  "companyWebsiteURL": "https://acme.com",
  "companyDescription": "Enterprise SaaS platform for...",
  "companyLocation": "San Francisco, CA",
  "campaignId": 123,
  "campaignName": "Series B SaaS Companies",
  "subject": "Quick question about Acme",
  "body": "Hi Jane, I noticed that..."
}

Fields

FieldTypeDescription
fullNamestringContact's full name
firstNamestringContact's first name
lastNamestringContact's last name
jobTitlestringContact's job title
emailstringContact's email address
linkedInURLstringContact's LinkedIn profile URL
companyNamestringCompany name
companyWebsiteURLstringCompany website URL
companyDescriptionstringCompany description from LinkedIn or website
companyLocationstringCompany headquarters location
campaignIdnumberID of the campaign that triggered outreach
campaignNamestringName of the campaign
subjectstringEmail subject line
bodystringEmail body content

Positive Reply Webhook

Triggered when a contact sends a reply that is classified as positive. This fires for both email and LinkedIn channels.

Payload

{
  "assignmentId": 456,
  "channel": "email",
  "contactEmail": "[email protected]",
  "contactName": "Jane Smith",
  "contactLinkedInUrl": "https://linkedin.com/in/janesmith",
  "companyName": "Acme Corp",
  "companyUrl": "https://acme.com",
  "companyDomain": "acme.com",
  "replyMessage": "Thanks for reaching out! I'd love to learn more...",
  "senderEmail": "[email protected]",
  "campaignId": 123,
  "campaignName": "Series B SaaS Companies"
}

Fields

FieldTypeDescription
assignmentIdnumberInternal assignment ID
channelstring"email" or "linkedin"
contactEmailstringContact's email address
contactNamestringContact's full name
contactLinkedInUrlstringContact's LinkedIn profile URL
companyNamestringCompany name
companyUrlstringCompany website URL
companyDomainstringCompany domain (e.g. acme.com)
replyMessagestringThe reply message body
senderEmailstringEmail address that sent the original outreach
campaignIdnumber | nullID of the associated campaign
campaignNamestringName of the associated campaign

Outreach Finished Webhook

Triggered when outreach to a contact is completed for any reason. This fires when a contact reaches the end of a sequence, replies, bounces, unsubscribes, or is otherwise removed from active outreach. Covers both email and LinkedIn channels.

Payload

{
  "assignmentId": 789,
  "reason": "last_step_sent",
  "channel": "email",
  "contactEmail": "[email protected]",
  "contactName": "Jane Smith",
  "contactLinkedInUrl": "https://linkedin.com/in/janesmith",
  "companyName": "Acme Corp",
  "companyUrl": "https://acme.com",
  "companyDomain": "acme.com",
  "campaignId": 123,
  "campaignName": "Series B SaaS Companies"
}

Fields

FieldTypeDescription
assignmentIdnumberInternal assignment ID
reasonstringWhy outreach ended (see Reasons below)
channelstring"email" or "linkedin"
contactEmailstringContact's email address
contactNamestringContact's full name
contactLinkedInUrlstringContact's LinkedIn profile URL
companyNamestringCompany name
companyUrlstringCompany website URL
companyDomainstringCompany domain (e.g. acme.com)
campaignIdnumber | nullID of the associated campaign
campaignNamestringName of the associated campaign

Reasons

ReasonDescription
last_step_sentAll steps in the sequence have been sent
repliedContact replied to an outreach message
bouncedEmail bounced
unsubscribedContact unsubscribed
messaging_blockedLinkedIn messaging was blocked
existing_conversationAn existing LinkedIn conversation was detected
invitation_withdrawnLinkedIn invitation was withdrawn (final step)

Best Practices

  • Use HTTPS — Always use an HTTPS endpoint for security.
  • Respond quickly — Return a 2xx response within a few seconds. Process the payload asynchronously if needed.
  • Handle duplicates — In rare cases, the same event may be delivered more than once. Use assignmentId or campaignId + email as an idempotency key.
  • Validate payloads — Check that incoming requests contain the expected fields before processing.