Message

Send a message to a contact or a WhatsApp group

Send a message to a contact via WhatsApp, Instagram, or Facebook, or to a WhatsApp group.

Important Notes

Sending to a WhatsApp group

Set to to group:<id> using the group id from GET /v2/groups, for example group:123.

{ "to": "group:123", "channel": "whatsapp", "content": { "type": "text", "text": { "body": "Call summary attached" } } }
  • Groups accept text, image, video, audio, document and template content.
  • Media must be a public https URL in link. Groups cannot resolve an uploaded media id.
  • Templates are billed by Meta as one conversation per delivered participant.
  • Meta does not accept QUICK_REPLY, LIST, PRODUCT_LIST, CATALOG or FLOW components in groups. URL, phone number and copy code buttons are fine.
  • Groups are WhatsApp only, and a group is always messaged from the channel that owns it, so omit options.from.
  • A group send never changes who the conversation is assigned to. DeliveryBoost does not apply, since it retries a single recipient.
  • The per-contact marketing opt-out is not applied to groups, because a group has many participants and no single opt-out state. Check your own audience before sending marketing templates to a group.

Channel Selection (options.from)

⚠️ If you have multiple WhatsApp channels connected, you MUST specify options.from with the phone number of the channel you want to send from. Otherwise, messages may be routed through the wrong channel.

Template Messages

  • Template name must be EXACT: The template name must exactly match what's approved in your WhatsApp Business Manager. Typos will cause "template not found" errors.
  • All template variables are MANDATORY: Every placeholder in your template must have a corresponding parameter. Empty or null values will cause the message to fail. Use fallback values like "User" or "Customer" if you don't have the actual data.
  • Template must be approved: The template must be approved in the specific WhatsApp Business Account you're sending from.

Content Format

For WhatsApp, the content follows the WhatsApp Cloud API format. You can omit to and messaging_product fields as they are populated automatically.

DeliveryBoost (Marketing Sends)

Marketing template messages are automatically retried when they fail due to WhatsApp's per-user marketing limit (Meta error 131049). The first retry fires 10 hours after the failure, then every 5 hours, for up to 12 attempts across a 72-hour window.

DeliveryBoost is ON by default for marketing sends. When enabled and the message is a marketing template, the response includes a deliveryBoost object confirming retries are scheduled.

To disable retries, pass "deliveryBoost": false in the request body. See the "Marketing send with DeliveryBoost disabled" example below. This is useful for time-sensitive campaigns where a delayed delivery would be worse than no delivery.

post/send-message

Request

  • Base URL
    https://api.spurnow.com
  • Auth
    HTTP bearer

Request body

tostring required

For WhatsApp: phone number with country code, no spaces (e.g., "919876543210"), or a BSUID (e.g., "IN.abc123"), or a WhatsApp group as "group:<id>" (e.g., "group:123") using the group id from GET /v2/groups. For Instagram & Facebook: the Spur contact ID.

channel'whatsapp' | 'instagram' | 'facebook' required

The messaging channel to use

contentobject required

Message content following WhatsApp Cloud API format. See https://developers.facebook.com/docs/whatsapp/cloud-api/reference/messages for full specification.

deliveryBoostboolean

Enable DeliveryBoost for marketing messages. When true (default), if a marketing message fails due to WhatsApp per-user limits (error 131049), it will be retried up to 12 times over the next 72 hours. Set to false to opt out.

Example request

{
  "to": "919876543210",
  "channel": "whatsapp",
  "options": {
    "from": "919876543210"
  },
  "deliveryBoost": true
}

Response

Message accepted and persisted.

idnumber required

Internal Spur message ID.

metaMessageIdstring

Provider message id (Meta/Infobip) when available.

sentDateTimestring date-time

Time when message was sent from Spur.

contentobject

Channel/content payload saved with the message.

deliveryPath'plain' | 'direct_send' | 'magic_message' | 'template'

How the message actually went out: plain (a normal message), direct_send (a Meta Direct Send utility message), magic_message (outside the 24-hour window, the text was sent as a Magic Message template) or template.

warningstring

Additional delivery warning for specific template categories.

Example response

{
  "id": 981273,
  "metaMessageId": "wamid.HBgMOTE5ODc2NTQzMjEwFQIAERgSNkQ5MjhEMUE5QkQ0NTM0RkI1AA==",
  "sentDateTime": "2026-02-14T10:20:30.000Z",
  "deliveryPath": "plain",
  "warning": "Marketing messages are not guaranteed delivery due to WhatsApp per-user marketing limits."
}

Changes

No recorded changes to this operation across all 1 revision of this API.