Create a campaign with one request
Send targets and a message template to POST /campaigns.
We provision the phones, warm the senders, throttle the sends, and skip
anyone already in your suppression list.
- Authenticate with a per-client API key
- Personalize with {{variables}} per target
curl -X POST https://api.heyrelio.com/campaigns \
-H "x-api-key: $HEYRELIO_API_KEY" \
-H "content-type: application/json" \
-d '{
"campaign": "q3-founders",
"message": "Hey {{first_name}}, loved your post. Worth a look?",
"targets": ["acme.co", "founderjane", "growthbot"],
"webhookUrl": "https://api.yoursaas.com/webhooks/heyrelio"
}' 200 OK
{
"campaignId": "cmp_8f2a91",
"status": "queued",
"phonesProvisioned": 3
} Webhooks for every state change
Every transition fires a signed event at your endpoint, so your product reflects what is happening on Instagram without polling.
sent
A DM was delivered to a target from one of your sender accounts.
replied
A target wrote back. The reply text and account arrive with the event.
failed
A send could not complete, with a reason you can act on or retry.
Delivered the moment it happens
Each event is signed with an HMAC secret and retried with backoff until your endpoint acknowledges it. No queues to drain, no polling loops to run.
POST /webhooks/heyrelio
{
"event": "replied",
"campaignId": "cmp_8f2a91",
"target": "founderjane",
"account": "yourbrand",
"text": "Sounds interesting, send me the details",
"occurredAt": "2026-06-01T18:24:11Z"
} A small, predictable surface
Seven REST endpoints and a full OpenAPI spec. The campaign contract is frozen, so what you build today keeps working.
/campaigns Create a campaign and fan out one job per target /campaigns/:id Campaign status, counts, and progress /campaigns/:id/results Per-target delivery and reply results /accounts/connect Connect an Instagram sender account /accounts List connected accounts and their health /webhooks/test Fire a sample event at your endpoint Signed webhooks
Every payload carries an HMAC signature so you can verify it came from HeyRelio.
Retries with backoff
Failed deliveries retry automatically until your endpoint returns 2xx.
Frozen contract
Field names on POST /campaigns never change, so integrations stay stable.
OpenAPI spec
Generate a typed client in your language from the published schema.