REST endpoints over the same functions the app uses, keys scoped by role and client, and signed webhooks for every event that matters.
- Signed webhooks: live
- Public API Early access
- OpenAPI reference
Webhooks
Get every event that matters sent straight to your URL.
Pick all events or only the ones you need. Each delivery is a signed JSON POST, so you can check it came from us before you act on it.
- Every delivery is signed with an HMAC-SHA256 of the raw body, keyed with your webhook’s secret.
- Failed deliveries are retried up to 5 times, with the wait doubling each time (about 2, 4, 8, then 16 minutes).
- Any delivery can be sent again, and the last 100 attempts are listed with their status and error.
- A failing webhook switches itself off after 50 failures in a row, and comes back on with one click.
Get told the moment a lead replies interested or books a meeting.
Payloads carry ids, not full records. The ones most people start with are highlighted: a new interested reply, a meeting booked, a stalled campaign and an account running dry or disconnected.
Leads
- lead.created
- lead.updated
- lead.unsubscribed
Invites
- invite.sent
- invite.accepted
- invite.withdrawn
Messages
- message.sent
- message.received
- message.classified
- email.sent
- email.opened
- email.clicked
- email.bounced
Enrollments
- enrollment.started
- enrollment.exited
- enrollment.completed
- enrollment.held
- enrollment.resumed
- enrollment.recovered
Tasks and meetings
- task.created
- task.completed
- meeting.booked
Sequences
- sequence.activated
- sequence.paused
- sequence.published
- sequence.throttled
- sequence.stalled
- sequence.recovered
- sequence.webhook
Senders
- sender.connected
- sender.disconnected
- sender.reconnected
- sender.paused
- sender.level_changed
- sender.running_dry
Workspace
- workspace.billing_recovered
Public API
Create leads, enrol them and pull reports from your own code.
Base path /v1, JSON in and out. Keys carry a role and an optional client scope, every write takes an idempotency key, and the full reference is an OpenAPI file you can import into Postman, Insomnia or Swagger UI.
- 1
Send only the fields you want to change
Creating or updating a lead changes only the fields you send. A field you leave out keeps its value, and unknown fields are rejected.
- 2
Retries are safe
Send an Idempotency-Key header on any write. A retry returns the first answer and runs nothing twice.
- 3
Preview, then commit
Enrolling takes two calls. The preview shows who is eligible and why others aren’t. The commit checks every rule again.
- 4
Behaves exactly like the app
Every call runs the same database function the app runs, and uses the same sender budgets. Schedules, warm-up, health, the reply stop and blacklists all apply.
What you can call
Leads
Search, create or update, tag, set stage and list, suppress, read the timeline, queue enrichment.
Enrollments
Preview, commit, list, pause, resume, exit, and recover failed leads.
Sequences
List, read steps and stats, activate, pause, and ask why a sequence isn’t sending.
Inbox
List threads, read a thread with the step and sender behind each message, set the intent, assign a teammate.
Senders
Status, health breakdown, today’s budgets and the caps that apply right now.
Reports
Overview, funnel, sequences, senders, clients, reply intents and cost.
Webhooks
Create, list and delete webhooks, see recent deliveries, and replay any delivery.
Keys
Each key has a role and can be limited to some clients. It acts as the teammate who created it.
Building and publishing sequences, connecting senders and changing caps stay in the app, or go through Claude.
Call your own systems from any step in a campaign.
Add either of these two steps anywhere in a sequence.
Call webhook
Sends a signed sequence.webhook event when a lead reaches the step, for example to create a CRM task after the second follow-up.
Call API
Makes an HTTP request to any endpoint you choose, filled in with the lead’s variables.
Recipes
Copy-paste recipes for the tools you already use.
Each file has four recipes with the exact HTTP settings: interested reply to Slack or a CRM, new row to lead to enrolment, found email to lead, booked meeting to CRM deal. They run over the public API.
Missed an event while your server was down? Replay it from the log.
Failed deliveries are retried on their own, and recent ones stay in the log with their status and last error. Replay any of them once you’re back up, signed like the original and marked as a replay.
Who uses it
GTM engineers and RevOps
Wire outreach into Clay, n8n and your CRM, and get every interested reply where your team already works.
Learn moreAgencies
Client-scoped keys, per-client reports and alerts for stalled campaigns, straight into your own tools.
Learn moreWebhooks, the public API and CRM sync are on Enterprise. See pricing
API and webhook questions, answered.
Which plan includes the API and webhooks?
Enterprise, which covers outbound webhooks, the public API and CRM sync. The Claude connector is on every plan.
What are the rate limits?
Per key and per hour: 600 reads, 300 writes, and 60 calls that start spending a sender’s budget, such as committing an enrolment. These protect the API; how much a sender does each day is still set by its own limits.
Is there a sandbox?
Not a separate one. Read calls and the enrolment preview change nothing, and a key can be limited to a single client, so you can try calls against a test client first.
How do I get a key?
A manager creates keys in Settings, under API & webhooks. The key is shown once, so store it safely. A workspace can have 25 active keys, and any key can be revoked.
Can a webhook delivery be sent again?
Yes. Recent deliveries are listed with their status and last error, and any of them can be replayed. The replay carries the same payload, marked as a replay, and is signed like every other delivery.
Can I send inbox replies through the API?
Not yet. The route is in the reference and answers “not implemented” for now. Replies go out from the inbox or the Claude connector.
Can I build sequences through the API?
No. Building and publishing sequences, connecting senders and changing caps stay in the app or go through Claude.