Developers

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.
Check your key
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.

POST /companies/{companyId}/whatsapp/campaigns
{
  "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.

POST /companies/{companyId}/whatsapp/campaigns/{id}/blasts
{
  "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.

POST /companies/{companyId}/whatsapp/campaigns/{id}/blasts/{blastId}/queue
{
  "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:

GET …/blasts/{blastId}/progress
{
  "blastStatus": "SENDING",
  "queued": true,
  "total": 2,
  "pending": 0,
  "processing": 1,
  "sent": 1,
  "failed": 0,
  "cancelled": 0,
  "done": false
}

Endpoints

EndpointWhat it does
GET/companies/{companyId}/whatsapp/templatesTemplates this key may use
POST/companies/{companyId}/whatsapp/campaignsCreate a campaign
GET/companies/{companyId}/whatsapp/campaignsList campaigns
GET/companies/{companyId}/whatsapp/campaigns/{id}Campaign with its blasts and stats
POST/companies/{companyId}/whatsapp/campaigns/{id}/blastsStart a blast and resolve its recipients
POST/companies/{companyId}/whatsapp/campaigns/{id}/blasts/{blastId}/queueQueue the messages for server-side sending
GET/companies/{companyId}/whatsapp/campaigns/{id}/blasts/{blastId}/progressLive sending progress
POST/companies/{companyId}/whatsapp/campaigns/{id}/blasts/{blastId}/cancelStop a queued blast
POST/companies/{companyId}/whatsapp/send-templateSend one template message inside a blast
GET/companies/{companyId}/whatsapp/messagesMessage log with filters
GET/companies/{companyId}/whatsapp/analyticsDelivery, 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; message lists 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.