Instantly node reference - all 106 operations, the credential it needs, and a worked example.
Instantly API v2 (Email Marketing). 106 operations: leads (create, search, update, bulk add, move, merge, interest status, subsequences); campaigns (create, activate, pause, duplicate, share, export) and campaign analytics; subsequences; lead lists, lead labels and custom tags; unibox emails (search, reply, forward, mark read); sending accounts (pause, resume, warmup, vitals, analytics); block list; email verification; webhooks and delivered webhook events; background jobs.
Credential: Instantly API key - see Credentials.
Each operation below lists the scope it needs. Scopes are ticked on the API v2 key when you create it in Instantly, under Settings → Integrations → API. Instantly keys are workspace-level and genuinely scoped: the create-key call takes a scopes array of <resource>:<action> strings, and every value below also accepts its family wildcard (leads:all) and the globals (all:read / all:all). Three things catch people out. The resource names are not internally consistent — block_list_entries rather than block_lists, lead-labels with a hyphen while its neighbours use underscores, email_verifications plural, background-jobs hyphenated — so they are reproduced here exactly as Instantly's own enum spells them. A refusal arrives as 401, not 403: Instantly returns 403 on exactly one endpoint in its whole API, so an under-scoped key looks identical to a revoked one, and an API v1 key (deprecated 2026-01-19) looks the same again. And roughly a dozen operations — the analytics reads, the warmup toggles, tag assignment, interest-status writes, three of the webhook reads — have doc pages that publish NO scope at all; those rows say so plainly rather than guessing, and name the family scope to widen to. If a run fails with a permission error, the node names the missing scope in the error - grant it and re-run; you do not need to rebuild the workflow.
| Operation | What it does | Scope |
|---|
addLead | Add lead to campaign | leads:create |
listLeads | List / search leads | leads:read |
getLead | Get lead | leads:read |
updateLead | Update lead | leads:update |
deleteLead | Delete lead | leads:delete |
addLeadsBulk | Add leads in bulk | leads:create |
deleteLeadsBulk | Delete leads in bulk | leads:delete |
assignLeadsBulk | Assign leads to users in bulk | (no scope documented by Instantly for this endpoint; leads:update is the family scope to widen to, and all:all always works) |
moveLeads | Move leads to a campaign or list | leads:update |
mergeLeads | Merge two leads | leads:update |
updateLeadInterestStatus | Update lead interest status | (no scope documented by Instantly for this endpoint; leads:update is the family scope to widen to, and all:all always works) |
moveLeadToSubsequence | Move lead to a subsequence | leads:update |
removeLeadFromSubsequence | Remove lead from a subsequence | leads:update |
| Operation | What it does | Scope |
|---|
listCampaigns | List campaigns | campaigns:read |
createCampaign | Create campaign | campaigns:create |
getCampaign | Get campaign | campaigns:read |
updateCampaign | Update campaign | campaigns:update |
deleteCampaign | Delete campaign | campaigns:delete |
activateCampaign | Activate / resume campaign | campaigns:update |
pauseCampaign | Pause campaign | campaigns:update |
duplicateCampaign | Duplicate campaign | campaigns:create |
shareCampaign | Share campaign | (no scope documented by Instantly for this endpoint; campaigns:update is the family scope to widen to, and all:all always works) |
addCampaignVariables | Add campaign variables | campaigns:update |
getCampaignSendingStatus | Get campaign sending status | campaigns:read |
exportCampaign | Export campaign to JSON | campaigns:read |
createCampaignFromExport | Create campaign from a shared one | campaigns:create |
searchCampaignsByLead | Find campaigns a lead is in | campaigns:read |
countLaunchedCampaigns | Count launched campaigns | campaigns:read |
| Operation | What it does | Scope |
|---|
getCampaignAnalytics | Campaign analytics | (no scope documented by Instantly for this endpoint; campaigns:read is the family scope to widen to, and all:read always works) |
getCampaignAnalyticsOverview | Campaign analytics overview | (no scope documented by Instantly for this endpoint; campaigns:read is the family scope to widen to, and all:read always works) |
getCampaignDailyAnalytics | Campaign analytics by day | (no scope documented by Instantly for this endpoint; campaigns:read is the family scope to widen to, and all:read always works) |
getCampaignStepsAnalytics | Campaign analytics by sequence step | (no scope documented by Instantly for this endpoint; campaigns:read is the family scope to widen to, and all:read always works) |
| Operation | What it does | Scope |
|---|
createSubsequence | Create subsequence | subsequences:create |
listSubsequences | List subsequences | subsequences:read |
getSubsequence | Get subsequence | subsequences:read |
updateSubsequence | Update subsequence | subsequences:update |
deleteSubsequence | Delete subsequence | subsequences:delete |
duplicateSubsequence | Duplicate subsequence | subsequences:create |
pauseSubsequence | Pause subsequence | subsequences:update |
resumeSubsequence | Resume subsequence | subsequences:update |
getSubsequenceSendingStatus | Get subsequence sending status | subsequences:read |
| Operation | What it does | Scope |
|---|
createLeadList | Create lead list | lead_lists:create |
listLeadLists | List lead lists | lead_lists:read |
getLeadList | Get lead list | lead_lists:read |
updateLeadList | Update lead list | lead_lists:update |
deleteLeadList | Delete lead list | lead_lists:delete |
getLeadListVerificationStats | Get lead list verification stats | (no scope documented by Instantly for this endpoint; lead_lists:read is the family scope to widen to, and all:read always works) |
| Operation | What it does | Scope |
|---|
createLeadLabel | Create lead label | lead-labels:create |
listLeadLabels | List lead labels | lead-labels:read |
getLeadLabel | Get lead label | lead-labels:read |
updateLeadLabel | Update lead label | lead-labels:update |
deleteLeadLabel | Delete lead label | lead-labels:delete |
testAiReplyLabel | Test AI reply-label prediction | lead-labels:read |
| Operation | What it does | Scope |
|---|
createCustomTag | Create tag | custom_tags:create |
listCustomTags | List tags | custom_tags:read |
getCustomTag | Get tag | custom_tags:read |
updateCustomTag | Update tag | custom_tags:update |
deleteCustomTag | Delete tag | custom_tags:delete |
toggleCustomTagResource | Assign / unassign tags to resources | (no scope documented by Instantly for this endpoint; custom_tags:update is the family scope to widen to, and all:all always works) |
listCustomTagMappings | List tag assignments | custom_tag_mappings:read |
| Operation | What it does | Scope |
|---|
listEmails | List / search emails | emails:read |
getEmail | Get email | emails:read |
updateEmail | Update email (read flag, reminder) | emails:update |
deleteEmail | Delete email | emails:delete |
replyToEmail | Reply to email | emails:create |
forwardEmail | Forward email | emails:create |
sendTestEmail | Send test email | emails:create |
markThreadAsRead | Mark thread as read | emails:update |
getUnreadCount | Count unread emails | emails:read |
| Operation | What it does | Scope |
|---|
listAccounts | List sending accounts | accounts:read |
getAccount | Get sending account | accounts:read |
updateAccount | Update sending account | accounts:update |
pauseAccount | Pause sending account | accounts:update |
resumeAccount | Resume sending account | accounts:update |
pauseAccounts | Pause several sending accounts | accounts:update |
markAccountFixed | Mark account as fixed | accounts:update |
enableAccountWarmup | Enable warmup | (no scope documented by Instantly for this endpoint; accounts:update is the family scope to widen to, and all:all always works) |
disableAccountWarmup | Disable warmup | (no scope documented by Instantly for this endpoint; accounts:update is the family scope to widen to, and all:all always works) |
testAccountVitals | Test account vitals | accounts:read |
getAccountWarmupAnalytics | Warmup analytics | accounts:read |
getAccountDailyAnalytics | Account analytics by day | (no scope documented by Instantly for this endpoint; accounts:read is the family scope to widen to, and all:read always works) |
getCustomTrackingDomainStatus | Custom tracking domain status | accounts:read |
listAccountCampaigns | List campaigns a mailbox sends for | account_campaign_mappings:read |
| Operation | What it does | Scope |
|---|
createBlockListEntry | Add to block list | block_list_entries:create |
listBlockListEntries | List block list | block_list_entries:read |
getBlockListEntry | Get block list entry | block_list_entries:read |
updateBlockListEntry | Update block list entry | block_list_entries:update |
deleteBlockListEntry | Delete block list entry | block_list_entries:delete |
bulkCreateBlockListEntries | Add to block list in bulk | block_list_entries:create |
bulkDeleteBlockListEntries | Delete block list entries in bulk | block_list_entries:delete |
| Operation | What it does | Scope |
|---|
verifyEmail | Verify an email address | email_verifications:create |
getEmailVerification | Check verification status | email_verifications:read |
| Operation | What it does | Scope |
|---|
createWebhook | Create webhook | webhooks:create |
listWebhooks | List webhooks | (no scope documented by Instantly for this endpoint; webhooks:read is the family scope to widen to, and all:read always works) |
getWebhook | Get webhook | webhooks:read |
updateWebhook | Update webhook | webhooks:update |
deleteWebhook | Delete webhook | webhooks:delete |
testWebhook | Test webhook | (no scope documented by Instantly for this endpoint; webhooks:update is the family scope to widen to, and all:all always works) |
resumeWebhook | Resume webhook | webhooks:update |
listWebhookEventTypes | List webhook event types | (no scope documented by Instantly for this endpoint; webhooks:read is the family scope to widen to, and all:read always works) |
| Operation | What it does | Scope |
|---|
listWebhookEvents | List delivered webhook events | webhook_events:read |
getWebhookEvent | Get webhook event | webhook_events:read |
getWebhookEventsSummary | Webhook event summary | (no scope documented by Instantly for this endpoint; webhook_events:read is the family scope to widen to, and all:read always works) |
getWebhookEventsSummaryByDate | Webhook event summary by day | (no scope documented by Instantly for this endpoint; webhook_events:read is the family scope to widen to, and all:read always works) |
| Operation | What it does | Scope |
|---|
listBackgroundJobs | List background jobs | background-jobs:read |
getBackgroundJob | Get background job | background-jobs:read |
Mark a lead interested so the campaign stops emailing them
This is the operation a 2-operation node could not reach, and it is the whole point of connecting Instantly to anything: when a reply comes in and a human decides it is a real lead, the campaign must stop sending. Note the endpoint is a POST to a fixed path with the email in the body — not a PATCH on the lead — which is one of the roughly 35 paths an earlier inventory had wrong.
Set Operation to updateLeadInterestStatus, then fill in:
| Field | Value | Notes |
|---|
email | {{ myTrigger.email }} | Instantly identifies the lead by email on this endpoint, not by id |
interestStatus | 1 | Instantly's interest scale; 1 is Interested |
campaignId | {{ vars.instantlyCampaignId }} | Which campaign's copy of the lead to update |
Sets {{lead.status}}. A 401 here is ambiguous by design on Instantly's side — an under-scoped key, a wrong key, a revoked key and a v1 key all answer 401 — so the node names the scope the operation needs in the error.