- Real email.
campaigns.activatestarts sending to the campaign’s leads andemails.replysends a reply straight away. Neither is ever retried automatically; only read operations are. - Lifetime contact limit. Every lead uploaded counts toward the plan’s lifetime contact limit (1,000 on Growth), including re-uploads and the same person in a second campaign.
leads.createandleads.addBulkdefaultskip_if_in_workspacetotruefor that reason. Re-adding or moving a lead who already replied restarts their sequence at step 1. - Stopping a lead. A lead’s
statusis read-only. To stop follow-ups (for example after they answered on LinkedIn), callleads.updateInterestStatus, which completes the lead in its campaign. - Replies without webhooks. Webhooks need the Hypergrowth plan or higher. On a plan without them, poll
emails.listwithemail_type: 'received'for replies; it allows 20 requests a minute. - Credits.
emailVerification.verifyspends Instantly email-verification credits and is never retried.leadLabels.testAiReplyLabelis limited to 500 calls per 30 days per workspace. - Secrets.
apiKeys.createreturns the new key once;apiKeys.listandapiKeys.deleteredact it, as webhook results redact header values. - Not covered yet: Instantly’s AI agents (sales, inbox manager, lead finder, deliverability), SuperSearch enrichment, company lists, done-for-you account orders and the Google/Microsoft OAuth account connection.
- Time zones. Campaign schedules take Instantly’s own time zone list plus 63 common IANA zones it lacks (
America/New_York,Europe/London,UTCand more), each sent as the listed zone with the same offsets and DST rules:America/New_Yorkgoes out asAmerica/Detroit. The plugin re-checks each pair against the runtime’s time zone data and refuses an alias that no longer matches. Zones with no exact match are rejected, including Pacific time (Instantly’sAmerica/Dawsonstays at UTC-7 all year) and Canadian zones, several of which moved to permanent time in 2026.
corsair.instantly.keys.set_webhook_signature(secret) (or pass webhookSecret); webhooks.create then sends it as the x-corsair-webhook-secret header and the plugin rejects any delivery without it. For a webhook made in the Instantly UI, add that header by hand. Deliveries route to a tenant by their workspace ID: store it with keys.set_tenant_external_id(workspaceId) (the ID workspace.get returns).
What you get:
- 165 typed API operations
- 4 synced entities (
accounts,campaigns,emails,leads) for fast.search()/.list() - 19 incoming webhook event types
Setup
1
Install
2
Add the plugin
corsair.ts
corsair.withTenant(id). See Quick start for KEK + Hub keys, and Multi-tenancy for account isolation.3
Choose authentication
- API Key (Recommended)
No setup required yet. When you make your first request as a tenant, Corsair prompts for the API key.More: API Key
4
Connect a tenant
Mint a connect link and send the tenant to it. Hub hosts the page and delivers the result to your app — see Connect / OAuth.
Example API calls
Read unread Unibox emailsQuery synced data
Leads seen through leads.list and leads.get are kept locally.accounts, campaigns, emails, leads. See Database for filters and operators.
Webhooks
Stop the lead’s other outreach the moment they reply.What’s next
API reference
Every
instantly.api.* operation with input and output types.Database
Synced entities, search filters, and operators.
Webhooks
Event paths, payloads, and
webhookHooks examples.Connect / OAuth
createLink, Hub delivery, and tenant connect flows.
Use with agents
Expose this plugin’s operations as MCP tools.