API Completeness for Full Automation — 6 Endpoints Needed
Hey SendPilot team — love the product and the direction. I'm building a fully automated outreach pipeline on top of SendPilot and hit some gaps in the API. Sharing them here because I think other agencies and power users will need these too. What currently works via API: GET /v1/campaigns ✅ GET /v1/leads ✅ POST /v1/leads (add leads to campaign) ✅ What's missing: Send Message (most critical) POST /v1/leads/{leadId}/message Need to send replies programmatically. Right now our AI drafts the reply automatically but we have to manually paste it into the inbox. This kills the automation loop. Update Lead Status PATCH /v1/leads/{leadId} → { "status": "paused" | "not_interested" | "completed" } Need to pause or stop a lead's sequence automatically when they reply positively or say not interested. Without this we can't enforce "stop all touches on positive reply" rules. Pause/Resume Campaign POST /v1/campaigns/{id}/pause and /resume Basic campaign control via API for orchestration workflows. Lead Database Search GET /v1/database/search?title=owner&industry=hvac&location=Cleveland+OH The lead database is great but UI-only. Exposing it as an API endpoint would let us automate owner discovery instead of manually searching per lead. Extract Leads POST /v1/extract with a LinkedIn search URL Same as above — the extract feature is powerful but needs an API to fit into automated pipelines. Get Lead by LinkedIn URL GET /v1/leads?linkedinUrl=https://linkedin.com/in/... When message.received webhook fires we get a lead ID, but we need to be able to look up leads by LinkedIn URL to match them back to our system reliably. Also — richer webhook payloads When message.received fires please include: leadId, linkedinUrl, messageText, senderLinkedinAccount, campaignId. Right now it's hard to act on webhooks without these fields. The Send Message endpoint is the single most impactful one — it closes the AI reply loop completely. Everything else is incremental. Would love to see this on the roadmap! Thanks

An Anonymous User 2 days ago
API Completeness for Full Automation — 6 Endpoints Needed
Hey SendPilot team — love the product and the direction. I'm building a fully automated outreach pipeline on top of SendPilot and hit some gaps in the API. Sharing them here because I think other agencies and power users will need these too. What currently works via API: GET /v1/campaigns ✅ GET /v1/leads ✅ POST /v1/leads (add leads to campaign) ✅ What's missing: Send Message (most critical) POST /v1/leads/{leadId}/message Need to send replies programmatically. Right now our AI drafts the reply automatically but we have to manually paste it into the inbox. This kills the automation loop. Update Lead Status PATCH /v1/leads/{leadId} → { "status": "paused" | "not_interested" | "completed" } Need to pause or stop a lead's sequence automatically when they reply positively or say not interested. Without this we can't enforce "stop all touches on positive reply" rules. Pause/Resume Campaign POST /v1/campaigns/{id}/pause and /resume Basic campaign control via API for orchestration workflows. Lead Database Search GET /v1/database/search?title=owner&industry=hvac&location=Cleveland+OH The lead database is great but UI-only. Exposing it as an API endpoint would let us automate owner discovery instead of manually searching per lead. Extract Leads POST /v1/extract with a LinkedIn search URL Same as above — the extract feature is powerful but needs an API to fit into automated pipelines. Get Lead by LinkedIn URL GET /v1/leads?linkedinUrl=https://linkedin.com/in/... When message.received webhook fires we get a lead ID, but we need to be able to look up leads by LinkedIn URL to match them back to our system reliably. Also — richer webhook payloads When message.received fires please include: leadId, linkedinUrl, messageText, senderLinkedinAccount, campaignId. Right now it's hard to act on webhooks without these fields. The Send Message endpoint is the single most impactful one — it closes the AI reply loop completely. Everything else is incremental. Would love to see this on the roadmap! Thanks

An Anonymous User 2 days ago
Posting activity in the ICP Score
Currently, it’s not possible to create an ICP Score that gets info from the user's posting activity.

An Anonymous User 6 days ago
Posting activity in the ICP Score
Currently, it’s not possible to create an ICP Score that gets info from the user's posting activity.

An Anonymous User 6 days ago
"pending" status on workspace invitation
after a team member has been invited, there is no "pending" anything so its not clear if the invite was sent

Oskar Moen 6 days ago
"pending" status on workspace invitation
after a team member has been invited, there is no "pending" anything so its not clear if the invite was sent

Oskar Moen 6 days ago
Add additional urls to campaigns
Once a url list of linkedin posts is added for a scraping campaign, it should be made possible to add urls afterwards to extend the list.

Bernd Kuhnle 6 days ago
Add additional urls to campaigns
Once a url list of linkedin posts is added for a scraping campaign, it should be made possible to add urls afterwards to extend the list.

Bernd Kuhnle 6 days ago
Planned
Remove duplicated leads
Sendpilot automatically checks all campaigns in your workspace for duplicated leads and auto-removes duplicated leads

Oskar Moen 6 days ago
Planned
Remove duplicated leads
Sendpilot automatically checks all campaigns in your workspace for duplicated leads and auto-removes duplicated leads

Oskar Moen 6 days ago
Planned
Global blocklist (do-not-contact list)
Upload a list of leads you don’t want to contact. Sendpilot will automatically remove these leads from campaigns so you don’t contact them.

Oskar Moen 6 days ago
Planned
Global blocklist (do-not-contact list)
Upload a list of leads you don’t want to contact. Sendpilot will automatically remove these leads from campaigns so you don’t contact them.

Oskar Moen 6 days ago
Planned
Fallback Variable
Set a default placeholder value when a variable is missing or undefined. This ensures messages remain complete and readable, even if a personalization variable doesn’t exist. {{companyName | your company}} In this case, if a lead does not have the {{companyName}} variable, it will default to the fallback placeholder “your company”

Oskar Moen 6 days ago
Planned
Fallback Variable
Set a default placeholder value when a variable is missing or undefined. This ensures messages remain complete and readable, even if a personalization variable doesn’t exist. {{companyName | your company}} In this case, if a lead does not have the {{companyName}} variable, it will default to the fallback placeholder “your company”

Oskar Moen 6 days ago
In Progress
Withdraw connection request
Allow users to automatically withdraw connection requests if they haven’t been accepted within a specified number of days. This helps users keep their pending invites under control, freeing up space for new connection requests and maintaining a healthier balance between sent and incoming requests.

Oskar Moen 6 days ago
High Priority
In Progress
Withdraw connection request
Allow users to automatically withdraw connection requests if they haven’t been accepted within a specified number of days. This helps users keep their pending invites under control, freeing up space for new connection requests and maintaining a healthier balance between sent and incoming requests.

Oskar Moen 6 days ago
High Priority
Planned
Fix {First Name} Variable
Since LinkedIn pulls titles like Dr. or Prof. into the first name attribute, automated messages to such persons are instantly detectable because it will say: “Hey Dr. Bob, …” instead of “Hey Bob, just ..”

An Anonymous User 6 days ago
Planned
Fix {First Name} Variable
Since LinkedIn pulls titles like Dr. or Prof. into the first name attribute, automated messages to such persons are instantly detectable because it will say: “Hey Dr. Bob, …” instead of “Hey Bob, just ..”

An Anonymous User 6 days ago