POSTs a JSON body to your configured url. This page lists the shape for every event type. It’s a reference you can read without signing up — the samples mirror what a live delivery looks like.
Envelope
Every delivery carries a commonevent envelope at the top level:
| Field | Type | Notes |
|---|---|---|
event.date | ISO-8601 UTC | When the event occurred in Reply. |
event.id | UUID | Unique id for this delivery. Use for idempotency if you persist events. |
event.type | string | Event name — matches the eventType on the subscription (see below). |
event.user_id | int | Reply user id that owns the subscription. |
event.team_id | int | Team id the event belongs to. |
event.subscription_id | int | Subscription id that fired. |
Shared conventions
- Keys are snake_case.
event_type,sequence_fields,reply_blob_url. - Enum values are PascalCase strings.
"Personal","EmailDetected","Hard". - Timestamps are ISO-8601 UTC with millisecond precision.
- Contact reference — events tied to a prospect include a nested
contact_fieldsobject. Usecontact_fields.idas the stable reference. Subscriptions created withincludeProspectCustomFields: truealso getcontact_custom_fieldsalongside it. - Sequence reference — events tied to a sequence include a
sequence_fieldsobject. IfSequenceIdis 0 (manual action outside a sequence), the object is empty or omitted. - Email body toggles — events covering an email respect the subscription’s
includeEmailUrl/includeEmailTextflags. Whenfalse, the corresponding field is absent.
Reusable blocks
These appear in several events. Shown once here, referenced by name below.contact_fields
contact_custom_fields
Only present when the subscription was created with payloadConfig.includeProspectCustomFields: true. Keys are the custom field titles configured on the contact.
sequence_fields
Event reference
email_replied
When: a prospect replies to a sequence email, or a Reply user manually marks the prospect as replied.
reply_reason—"EmailDetected"when Reply detected the inbound message,"StatusSetManually"when a user flipped the status.reply_blob_url— present whenincludeEmailUrl: true.reply_content— present whenincludeEmailText: true.
reply_categorized
When: Reply auto-categorizes a received reply (e.g. Interested, Not Interested, Meeting Request).
email_sent
When: Reply successfully dispatches an email from a sequence step.
email_opened
When: a tracked email is opened.
email_link_clicked
When: a recipient clicks a tracked link inside an email.
email_bounced
When: a sent email bounces (hard or soft).
bounce_type—"Hard","Soft","Block", or"Unknown".
email_auto_reply
When: Reply detects an auto-reply (out-of-office, vacation responder) coming from the prospect.
email_account_connection_lost
When: a connected mailbox stops authenticating (OAuth revoked, password changed, etc.). No prospect context — this is an account-level event.
email_account_error
When: a connected mailbox raises a warning (reputation issue, sending pause, limit hit).
contact_finished
When: a prospect completes all steps of a sequence (or is finished early for some reason — see finish_reason).
finish_reason—"Replied","OptedOut","Bounced","Failed","FinishedNaturally","FailedToFinish","RemovedFromCampaign".
contact_opted_out
When: a prospect opts out (unsubscribes).
contact_called
When: a phone call with this prospect is completed (connected, missed, voicemail, etc.).
status—"Completed","Busy","NoAnswer","Failed","Canceled","InProgress".resolution—"Positive","Negative","FollowUp","Voicemail","WrongNumber","NotInterested", etc.
linkedin_connection_request_sent
When: Reply sends a LinkedIn connection request on behalf of the user.
linkedin_connection_request_accepted
When: a previously-sent LinkedIn connection request is accepted.
linkedin_message_sent
When: Reply sends a LinkedIn message (including InMail and voice messages).
linkedin_message_replied
When: a prospect replies to a LinkedIn message.
linkedin_reply_categorized
When: Reply auto-categorizes a LinkedIn reply.
autopilot_stopped
When: a sequence’s autopilot mode stops firing (e.g. account quota, reputation threshold, manual pause).
Verifying in your own account
Once you have a subscription, fire a synthetic delivery to your URL withPOST /v3/webhooks/{id}/test — the body matches the shapes above exactly, with deterministic placeholder data.