> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sendler.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Make.com integration

> Map SendPilot events and REST actions into Make scenarios.

Use **Webhooks → Custom Webhook** for triggers and **HTTP → Make a Request** for public API actions. Store the workspace API key securely in the platform's supported credential configuration.

## Connect an event source

Create a public HTTPS webhook destination, register it in **SendPilot → Integrations → Webhooks**, and select the event types. Verify [Svix delivery signatures](https://docs.sendler.ai/webhooks/setup.md) before acting on a payload; use a verifying receiver if your scenario cannot preserve and verify raw bodies and headers.

Deduplicate `eventId`. Then route the verified body:

| Event | Useful data |
| - | - |
| `reply.received` | `data.reply`, `data.linkedinUrl`; lead/campaign IDs can be null |
| `connection_request.accepted` | Lead, campaign, sender and accepted-at fields |
| `lead.updated` | `data.previousStatus`, `data.newStatus` |
| `campaign.paused` | Campaign ID and name |

Select fields from Make's actual trigger output; do not assume fields are flattened out of the `data` object.

## Add leads from a spreadsheet

```text theme={null}
Schedule
  → read unprocessed rows
  → build a batch of lead objects
  → POST /v1/leads
  → inspect added/duplicate/invalid results
  → mark successfully handled source records
```

HTTP module settings:

* URL: `https://api.sendpilot.ai/v1/leads`
* Method: `POST`
* Headers: `X-API-Key`, `Content-Type: application/json`, and a stable `Idempotency-Key` for the batch.
* Body:

```json theme={null}
{
  "campaignId": "CAMPAIGN_ID",
  "leads": [{
    "linkedinUrl": "https://www.linkedin.com/in/PROFILE_ID",
    "firstName": "Alex",
    "source": "Spreadsheet"
  }]
}
```

Map the placeholders to scenario values. REST accepts flat custom fields and 1–1,000 leads per request.

## Update outcomes and pause campaigns

For a lead outcome, PATCH `/v1/leads/LEAD_ID/status` with, for example, `{"customLeadStatus":"INTERESTED"}` or `{"status":"MEETING_BOOKED"}`. Do not set sequence-managed statuses such as `REPLY_RECEIVED`. Omit `note` to preserve existing notes.

To pause, PATCH `/v1/campaigns/CAMPAIGN_ID` with `{"action":"pause"}`. Resume uses `{"action":"resume"}` and requires the relevant workspace permission. See the [endpoint reference](https://docs.sendler.ai/api-reference/introduction.md).

## Retry and delivery handling

Retries must reuse the same idempotency key, method, path and body. Honor 429 limits, handle 409/422 outcomes, and inspect conversations after uncertain delivery rather than sending again with a new key. [REST writes](https://docs.sendler.ai/api-reference/behavior.md) execute directly; MCP preview/confirmation arguments are not REST fields.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.