SendCore API
Create WhatsApp campaigns, queue thousands of personalised messages and read delivery results from your own CRM or backend.
Authentication
Every request carries an API key in the x-api-key header. Keys are issued by the SendCore team for one company and are shown only once — store them on your server, never in a browser or app.
- A key only works for the company it was issued to (your companyId is sent with the key).
- A key can only see and send the WhatsApp templates granted to it.
- What a key may do — view, create, run — follows the permissions of its integration account.
- Base URL:
https://api.sendcore.in. All bodies are JSON.
curl https://api.sendcore.in/companies/{companyId}/whatsapp/templates \
-H "x-api-key: YOUR_API_KEY"Send a campaign in three calls
1. Create a campaign with an approved template from the list above.
{
"name": "October payment reminders",
"description": "Optional, up to 500 characters",
"templateId": 42
}2. Start a blast. audienceType is MANUAL (numbers you pass), GROUP (a SendCore contact group) or BOTH. The response lists the resolved recipients.
{
"audienceType": "MANUAL",
"manualNumbers": ["919876543210", "919812345678"]
}
// → { "blast": { "id": 118, ... }, "recipients": ["919876543210", "919812345678"] }3. Queue the messages. SendCore sends them from the server at a safe rate. Give each recipient its own template variables; empty values fall back to defaultVariables. Up to 50,000 recipients per call.
{
"recipients": [
{ "to": "919876543210", "variables": ["Asha", "₹12,500", "15 Oct"] },
{ "to": "919812345678", "variables": ["Ravi", "₹8,000", "18 Oct"] }
],
"defaultVariables": ["Customer", "", ""],
"headerImageUrl": "https://example.com/banner.jpg"
}
// → { "queued": 2 }Then poll progress until done is true:
{
"blastStatus": "SENDING",
"queued": true,
"total": 2,
"pending": 0,
"processing": 1,
"sent": 1,
"failed": 0,
"cancelled": 0,
"done": false
}Endpoints
| Endpoint | What it does |
|---|---|
GET/companies/{companyId}/whatsapp/templates | Templates this key may use |
POST/companies/{companyId}/whatsapp/campaigns | Create a campaign |
GET/companies/{companyId}/whatsapp/campaigns | List campaigns |
GET/companies/{companyId}/whatsapp/campaigns/{id} | Campaign with its blasts and stats |
POST/companies/{companyId}/whatsapp/campaigns/{id}/blasts | Start a blast and resolve its recipients |
POST/companies/{companyId}/whatsapp/campaigns/{id}/blasts/{blastId}/queue | Queue the messages for server-side sending |
GET/companies/{companyId}/whatsapp/campaigns/{id}/blasts/{blastId}/progress | Live sending progress |
POST/companies/{companyId}/whatsapp/campaigns/{id}/blasts/{blastId}/cancel | Stop a queued blast |
POST/companies/{companyId}/whatsapp/send-template | Send one template message inside a blast |
GET/companies/{companyId}/whatsapp/messages | Message log with filters |
GET/companies/{companyId}/whatsapp/analytics | Delivery, read and reply totals |
Sending a single message with send-template needs to, templateName, language, optional variables and headerImageUrl, and the campaignBlastId it belongs to — every message is part of a campaign so it shows up in your reports.
Reading results
GET /companies/{companyId}/whatsapp/messages accepts page, limit, status, phone, templateName, direction, campaignId, campaignBlastId, dateFrom and dateTo. Statuses move through SENT → DELIVERED → READ, or FAILED with the provider's reason.
Errors
- 400 — the body failed validation;
messagelists each problem. - 401 — missing, invalid or revoked API key.
- 403 — the key's account lacks the permission, or the template isn't granted to the key.
- 404 — the campaign, blast or template doesn't exist in your company.
Need a key or more templates on an existing one? Contact us.
