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
An API shouldn’t be a side door around the limits.
When an automation can enrol leads or send faster than the app would, it’s the LinkedIn account that pays for it.
Here, every call goes through the same functions as the app, and every action spends the same sender budgets. The API adds nothing on top and skips nothing.
Webhooks
Every event that matters, sent 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.
- Signed: an HMAC-SHA256 of the raw body, keyed with your webhook’s secret.
- Retried: up to 5 times, with the wait doubling each time (about 2, 4, 8, then 16 minutes).
- Switched off when failing: after 50 failures in a row, and back on with one click.
- Replayable: the last 100 attempts are listed with status and error, and any delivery can be sent again.
The events
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
REST over the same functions the app uses.
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
Same limits as the app
Every call runs the same database function the app runs, and uses the same sender budgets. Daily caps, schedules, warm-up, health, reply-stop and blacklists apply. There is no flag to turn a cap off.
- 2
Updates never blank a field
Creating or updating a lead changes only the fields you send. A field you leave out keeps its value, and unknown fields are rejected.
- 3
Retries are safe
Send an Idempotency-Key header on any write. A retry returns the first answer and runs nothing twice.
- 4
Preview, then commit
Enrolling takes two calls. The preview shows who is eligible and why others aren’t. The commit checks every rule again.
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.
Steps that call out
Two sequence steps reach your own systems from inside a campaign.
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.
A failing endpoint never loses an event.
Deliveries are retried up to 5 times. After 50 failures in a row the webhook switches itself off instead of hammering your server, and any delivery in the log can be replayed 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 without a workaround that can outrun a sender’s limits.
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 Agency Plus. See pricing
API and webhook questions
Which plan includes the API and webhooks?
Agency Plus, 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.