View as Markdown

Sending messages

POST /whatsapp/messages

The type field selects the format; the matching content object is required.

Text

{
  "to": "+2250700000000",
  "type": "text",
  "text": { "body": "Your quote is ready" }
}

Approved template

The only format delivered outside the 24-hour window.

{
  "to": "+2250700000000",
  "type": "template",
  "templateName": "payment_receipt",
  "templateLanguage": "en",
  "variables": {
    "body": { "1": "Ibrahima", "2": "45,000 XOF" }
  },
  "client_ref": "invoice-2026-0912"
}

Variables are grouped by component: header, body, footer, buttons. Keys are the placeholder numbers from the template.

The 24-hour window

WhatsApp only allows a free-form message within 24 hours of the customer's last message. After that, only an approved template gets through. This is a WhatsApp rule, not a Fiitsa one, and no API can work around it.

In practice: for a quote or receipt sent on your application's initiative, you need a template.

client_ref

Free-form field, up to 128 characters, returned untouched in the status webhook. It lets you match a delivery to your invoice without keeping a mapping table of WhatsApp identifiers.

Available types

text, template, image, video, audio, document, sticker, location, location_request, address, contacts, reaction, list, reply_buttons, cta_url, flow, carousel, product, product_list, catalog_message.

Mark as read

POST /whatsapp/messages/read
{ "messageId": "wamid.HBgMMjI1MDcwMDAwMDAw" }