Instantly
These two endpoints write to the Instantly account your workspace has connected. One adds a person to a campaign as a lead, so that they enter the campaign’s sending sequence. The other sets a lead’s interest status, for example after a reply tells you whether they are interested.
Both take an email address, not a Pathbound contact id. The person does not have to be a contact in your workspace, and neither request creates or changes a Pathbound contact.
Before the first call, connect Instantly under Integrations → Instantly in the dashboard, create an API key with the actions:write scope, and have a workspace admin switch the action on: see Before you call. The MCP tools instantly_add_lead and instantly_update_lead_interest call the same endpoints: see MCP tools.
| Endpoint | Scope | What it does |
|---|---|---|
POST /v1/integrations/instantly/leads | actions:write | Adds a lead to an Instantly campaign. |
POST /v1/integrations/instantly/leads/interest | actions:write | Sets the interest status of a lead. |
Before you call
Section titled “Before you call”The scope. actions:write is opt-in: a key holds it only when it was selected for that key. See Scopes.
Instantly is connected. The requests are made with your workspace’s Instantly API key.
The admin switches. Each endpoint has a switch of its own, under MCP Tools → Instantly in the dashboard. Both are off until a workspace admin turns them on. The page is named for AI agents, but the API checks the switch on every request: an API key is held to it exactly as an agent is. With the switch off, the endpoint answers 412 with the code tool_disabled.
| Switch | Name in error messages | Endpoint it governs |
|---|---|---|
| Add leads to campaigns | instantly_add_leads | Add a lead to a campaign. |
| Update lead interest | instantly_update_interest | Update a lead’s interest. |
GET /v1/tenant/capabilities reports which switches are on, under tool_settings.
Add a Lead to a Campaign
Section titled “Add a Lead to a Campaign”POST /v1/integrations/instantly/leadsRequired scope: actions:write · Switch: Add leads to campaigns
Adds one person to an Instantly campaign.
Headers
Section titled “Headers”| Header | Required | Description |
|---|---|---|
Idempotency-Key | yes | A key of your choosing for this one lead. See Idempotency. |
Request Body
Section titled “Request Body”| Field | Type | Required | Description |
|---|---|---|---|
campaign_id | string | yes | Instantly’s id for the campaign. No endpoint of this API lists campaigns. |
email | string | yes | The lead’s email address. It is sent to Instantly in lowercase. |
first_name | string | no | At most 255 characters. |
last_name | string | no | At most 255 characters. |
company_name | string | no | At most 255 characters. |
phone | string | no | At most 64 characters. |
personalization | string | no | A personalization text for the campaign’s emails. At most 5,000 characters. |
custom_variables | object | no | Custom variables for the lead, passed to Instantly as given. Use string, number or boolean values. |
curl -X POST https://api.pathbound.ai/v1/integrations/instantly/leads \ -H "Authorization: Bearer $PATHBOUND_API_KEY" \ -H "Idempotency-Key: 3f8c2d17-6a4b-4e59-9c0d-1b7e5a2f8d63" \ -H "Content-Type: application/json" \ -d '{ "campaign_id": "0198f4d1-3c2a-7b6e-8d15-9e7a4c2b1f03", "email": "[email protected]", "first_name": "Ada", "company_name": "Analytical Engines", "custom_variables": { "plan": "growth", "seats": 12 } }'Response — 200 OK
Section titled “Response — 200 OK”{ "status": "success", "action_id": "670bdd31a1b2c3d4e5f607a2", "lead_id": "0199c7a2-5b1e-7d3f-9a44-2f6c8e1b7d90", "campaign_id": "0198f4d1-3c2a-7b6e-8d15-9e7a4c2b1f03"}lead_id is Instantly’s id for the new lead.
A request with an Idempotency-Key that succeeded in the last 24 hours returns status, action_id, lead_id and replayed: true, and adds nothing.
After a 500, the lead may or may not have been added. Check the campaign in Instantly before you send the request again.
Update a Lead’s Interest
Section titled “Update a Lead’s Interest”POST /v1/integrations/instantly/leads/interestRequired scope: actions:write · Switch: Update lead interest
Sets the interest status of a lead in Instantly. The lead is named by its email address.
This endpoint takes no Idempotency-Key: setting the same value twice changes nothing.
Request Body
Section titled “Request Body”| Field | Type | Required | Description |
|---|---|---|---|
lead_email | string | yes | The lead’s email address. It is sent to Instantly in lowercase. |
interest_value | integer or null | yes | Instantly’s code for the interest status. null puts the lead back to the neutral “Lead” status. |
campaign_id | string | no | Limits the change to one campaign. |
interest_value is passed to Instantly unchanged, and Pathbound does not check it against a list. These are the codes Instantly uses:
interest_value | Status |
|---|---|
1 | Interested |
2 | Meeting booked |
3 | Meeting completed |
4 | Closed |
-1 | Out of office |
-2 | Wrong person |
-3 | Not interested |
null | Lead (neutral) |
curl -X POST https://api.pathbound.ai/v1/integrations/instantly/leads/interest \ -H "Authorization: Bearer $PATHBOUND_API_KEY" \ -H "Content-Type: application/json" \Response — 200 OK
Section titled “Response — 200 OK”{ "status": "success", "action_id": "670bde04a1b2c3d4e5f607b0", "interest_value": 1}Error Codes
Section titled “Error Codes”Both endpoints answer with these.
| Status | code | Meaning | What to do |
|---|---|---|---|
400 | IDEMPOTENCY_KEY_REQUIRED | Add a lead: the Idempotency-Key header is missing. | |
400 | none | A field is missing or not valid. details names it. | |
403 | none | The key lacks actions:write. required_scopes names it. | |
409 | ACTION_IN_PROGRESS | Add a lead: a request with this Idempotency-Key is still being processed. | Ask again with the same key. |
412 | integration_missing | Instantly is not connected. | Connect Instantly. |
412 | invalid_credentials | The stored Instantly API key no longer works. | Connect Instantly again with a working key. |
412 | tool_disabled | A workspace admin has not switched this action on. | Switch it on under MCP Tools → Instantly. |
429 | RATE_LIMITED | Instantly’s rate limit was reached. | Retry after retry_after_seconds. |
500 | none | The request failed. A request that Instantly refuses for any reason other than the key or its rate limit is also answered this way, without Instantly’s reason. | Check campaign_id and the lead in Instantly. |
When Instantly answers a request with 401 or 403, Pathbound treats the key as dead: that request and every later one is answered with 412 invalid_credentials until Instantly is connected again.
Reading what Instantly sent
Section titled “Reading what Instantly sent”These endpoints write only. The emails a campaign exchanged with a person who is a Pathbound contact are read with Get Contact Conversations, in its instantly block.