Sequencer contract

ReadyBuyerFinder follows the Surge multichannel contract, which OutreachSender and ReachDak also use:

  • Authentication: Authorization: Bearer <key>, using a key created in the sequencer with scope multichannel.
  • Retries: every POST has an Idempotency-Key, so retrying is safe.
  • Identifying people: by person_key, which is email:<lowercased email> or li:<linkedin public id>.
  • Webhook signatures: X-Surge-Signature: t=<unix>,v1=<hex HMAC-SHA256(secret, t + "." + body)>.

ReadyBuyerFinder → sequencer

POST {sequencer}/api/v1/multichannel/enroll

{
  "external_id": "signaldak:<lead_id>:<push_id>",
  "source": "signaldak",
  "person": { "person_key": "email:[email protected]", "email": "[email protected]", "email_status": "valid",
              "first_name": "Ana", "last_name": "Roy", "title": "CTO", "company": "Acme", "company_domain": "acme.com",
              "linkedin_url": null, "country": "IN", "timezone": "Asia/Kolkata",
              "custom": { "signal": "...", "signal_url": "...", "why_now": "...", "score": 82, "icebreaker": "..." } },
  "sequence_id": "optional",
  "campaign_id": "ReachDak only",
  "message": { "subject": "...", "body_text": "...", "body_html": "..." },
  "send_after": "2026-10-27T04:30:00.000Z"
}

send_after is filled for leads in India: the next time inside your IST send window (weekdays 10:00–13:00 by default, see Languages). For other leads it is null and the sequencer uses its own schedule.

ResponseWhat ReadyBuyerFinder does
201 {enrollment_id}Marks the lead as pushed
409 (person unsubscribed or blacklisted)Suppresses the person
429 or 5xxRetries the push

Sequencer → ReadyBuyerFinder

POST https://readybuyerfinder.com/api/v1/hooks/sequencer/<integration_id>, with the envelope { id, type, created_at, workspace_id, person_key, external_id, data }.

EventEffect in ReadyBuyerFinder
email.replied, linkedin.repliedWith data.snippet: a reply is created in the Replies inbox, labelled by rules and then the AI, and the lead's status follows the label. Without a snippet: lead marked as replied, or as meeting when data.sentiment is meeting or interested
meeting.bookedLead marked as meeting
email.bouncedEmail marked invalid
email.unsubscribed, linkedin.unsubscribedPerson suppressed in all agents
enrollment.finishedOutcome set to "no reply" if nothing else happened

Replies also feed the learning loop, send alerts to the agent's Slack, Telegram or WhatsApp, and fire reply.received REST hooks.

Version 0.2 additions

All additive; nothing breaks for a sequencer built on 0.1.

  • send_after is now filled for leads in India.
  • Lead payloads sent to webhooks and REST hooks carry a language field (the draft's language, e.g. Hinglish).
  • Replies with data.snippet become labelled replies, and reply.received events go out to downstream REST hooks.