Skip to main content
POST
/
send-whatsapp
curl --request POST \
  --url https://api.flowiq.live/send-whatsapp \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "phone_number": "+27123456789",
  "message_type": "text",
  "text": "Hello! This is a test message from FlowIQ API."
}
'
{
  "success": true,
  "message": "Message sent successfully",
  "data": {
    "message_id": "wamid.HBgLMjc4MTIzNDU2NzgVAgASGBQzRUI...",
    "recipient": "27123456789",
    "message_type": "text"
  }
}

Basic Usage

curl -X POST "https://api.flowiq.live/send-whatsapp" \
  -H "Authorization: Bearer fiq_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phone_number": "+27123456789",
    "message_type": "interactive",
    "interactive": {
      "type": "list",
      "header": "Our Menu",
      "body": "Please select from our available options:",
      "footer": "Tap the button below to view options",
      "button": "View Menu",
      "sections": [
        {
          "title": "Main Dishes",
          "rows": [
            { "id": "burger", "title": "Burger", "description": "Beef patty with cheese" },
            { "id": "pizza", "title": "Pizza", "description": "Margherita or Pepperoni" }
          ]
        },
        {
          "title": "Drinks",
          "rows": [
            { "id": "cola", "title": "Cola", "description": "500ml bottle" },
            { "id": "water", "title": "Water", "description": "Still or sparkling" }
          ]
        }
      ]
    }
  }'

Request Body

FieldTypeRequiredDescription
phone_numberstringYesRecipient phone number with country code
message_typestringYesMust be "interactive"
interactive.typestringYesMust be "list"
interactive.bodystringYesMain message text (max 1024 chars)
interactive.buttonstringYesMenu button label (max 20 chars)
interactive.headerstringNoHeader text (max 60 chars)
interactive.footerstringNoFooter text (max 60 chars)
interactive.sectionsarrayYesArray of sections — max 10
interactive.sections[].titlestringNoSection heading (max 24 chars)
interactive.sections[].rowsarrayYesRows within the section
interactive.sections[].rows[].idstringYesUnique row ID returned on selection
interactive.sections[].rows[].titlestringYesRow label (max 24 chars)
interactive.sections[].rows[].descriptionstringNoRow description (max 72 chars)
context_message_idstringNoWhatsApp message ID to reply to
Supports up to 10 sections with up to 10 rows each. Use lists when you have more than 3 options — buttons max out at 3.
{
  "phone_number": "+27123456789",
  "message_type": "interactive",
  "interactive": {
    "type": "list",
    "body": "Please select a support category:",
    "button": "View Options",
    "sections": [
      {
        "title": "Support",
        "rows": [
          { "id": "billing", "title": "Billing", "description": "Payment and invoice queries" },
          { "id": "technical", "title": "Technical", "description": "App or integration issues" }
        ]
      }
    ]
  }
}

Response

Success (200)

{
  "success": true,
  "message": "Message sent successfully",
  "data": {
    "message_id": "wamid.HBgLMjc4MTIzNDU2NzgVAgASGBQzRUI...",
    "recipient": "27123456789",
    "message_type": "interactive"
  }
}

Error: Missing Required Field (400)

{
  "error": "Missing required field",
  "message": "interactive.body, interactive.button, and interactive.sections are required for list messages"
}

Integration Example

async function sendInteractiveList(apiKey, phoneNumber, interactive) {
  const response = await fetch(
    `https://api.flowiq.live/send-whatsapp`,
    {
      method: "POST",
      headers: {
        Authorization: `Bearer ${apiKey}`,
        "Content-Type": "application/json",
      },
      body: JSON.stringify({ phone_number: phoneNumber, message_type: "interactive", interactive }),
    }
  );
  const data = await response.json();
  if (!response.ok) throw new Error(data.message);
  return data;
}

Authorizations

Authorization
string
header
required

Bearer token for authentication. Format: Bearer YOUR_BEARER_TOKEN

Query Parameters

tenantId
string
required

Organization tenant identifier (slug)

Body

application/json
phone_number
string
required

Recipient phone number with country code

Example:

"+27123456789"

message_type
enum<string>
required

Type of message to send

Available options:
text,
image,
video,
audio,
document,
location,
contacts,
interactive,
reaction
Example:

"text"

text
string

Text content (required for text messages)

Example:

"Hello, World!"

media_url
string

URL to media file (required for image/video/audio/document)

Example:

"https://example.com/image.jpg"

caption
string

Caption for media messages

Example:

"Check this out!"

filename
string

Filename for document messages

Example:

"document.pdf"

location
object
contacts
object[]

Array of contact cards to share

interactive
object

Interactive message configuration

reaction
object

Reaction configuration

context_message_id
string

WhatsApp message ID to reply to

Example:

"wamid.HBgLMjc4MTIzNDU2NzgVAgASGBQzRUI..."

Response

Message sent successfully

success
boolean
required

Whether the message was sent successfully

Example:

true

message
string
required

Success message

Example:

"Message sent successfully"

data
object
required