Instantly
Automate cold-email campaigns, leads, and inbox warmup via the Instantly.ai API v2.
API base: https://api.instantly.ai/api/v2
Auth: single static Bearer token — no OAuth flow, no third-party packages.
What it does
Read and write your Instantly cold-email setup from an InTouch job: list campaigns, inspect sending accounts and their warmup status, add leads, browse recent emails, and flip warmup on or off per account.
Operations
| Operation | Method + Endpoint | Purpose |
|---|---|---|
list_campaigns |
GET /api/v2/campaigns |
List cold-email campaigns. Filter with search. |
list_accounts |
GET /api/v2/accounts |
List sending accounts. Response includes warmup_enabled. |
add_lead |
POST /api/v2/leads/add |
Add a lead to a campaign. Requires campaignId + leadEmail. |
list_emails |
GET /api/v2/emails |
List recent sent/received emails. Filter by campaignId. |
enable_warmup |
POST /api/v2/accounts/warmup/enable |
Enable inbox warmup on a sending account. Requires accountId. |
disable_warmup |
POST /api/v2/accounts/warmup/disable |
Disable inbox warmup on a sending account. Requires accountId. |
List operations accept limit (1-100, default 20) and startingAfter
(pagination cursor: the id of the last item from the previous page).
API key setup
- In Instantly, go to Settings → Integrations → API Keys.
- Click Create API Key and choose the v2 key type. (v1 keys use a different auth scheme and won't work with these endpoints.)
- Grant at minimum the scopes your job needs:
-
campaigns:readforlist_campaigns-accounts:readforlist_accounts,accounts:allfor warmup toggle -leads:createforadd_lead-emails:readforlist_emails - Pass the key as the
apiKeyinput. It is sent asAuthorization: Bearer <apiKey>on every request.
Inputs
| Input | Required for | Notes |
|---|---|---|
apiKey |
all | Instantly v2 API key. |
operation |
all | One of the six operations above. |
campaignId |
add_lead |
Also an optional filter for list_emails. |
leadEmail |
add_lead |
Lead email address. |
leadFirstName |
— | Optional lead field for add_lead. |
leadLastName |
— | Optional lead field for add_lead. |
leadCompany |
— | Optional lead field for add_lead. |
accountId |
enable_warmup, disable_warmup |
Sending account email or UUID. |
search |
— | Text filter for list_campaigns / list_accounts. |
limit |
— | 1-100, default 20. |
startingAfter |
— | Pagination cursor for list operations. |
Output
{ "status": "200", "result": "<Instantly response body as a JSON string>" }
status— HTTP status code string ("200","401","422", …).result— raw Instantly response body; parse it downstream foritems,id, etc.
On bad input or a transport failure the tool prints {"error": "<message>"} and
exits non-zero so the job step fails cleanly.
Examples
List campaigns with "Q3" in the name:
{ "apiKey": "YOUR_KEY", "operation": "list_campaigns", "search": "Q3", "limit": "50" }
List all sending accounts and their warmup status:
{ "apiKey": "YOUR_KEY", "operation": "list_accounts" }
Add a lead to a campaign:
{
"apiKey": "YOUR_KEY",
"operation": "add_lead",
"campaignId": "019ec0d2-f5ef-70e1-82e5-62f015c6fd86",
"leadEmail": "[email protected]",
"leadFirstName": "Jane",
"leadLastName": "Smith",
"leadCompany": "Acme Corp"
}
Enable inbox warmup on a sending account:
{
"apiKey": "YOUR_KEY",
"operation": "enable_warmup",
"accountId": "[email protected]"
}
List the last 20 emails for a campaign:
{
"apiKey": "YOUR_KEY",
"operation": "list_emails",
"campaignId": "019ec0d2-f5ef-70e1-82e5-62f015c6fd86"
}