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": "button",
      "header": "Order Confirmation",
      "body": "Would you like to confirm your order #12345?",
      "footer": "Reply within 24 hours",
      "buttons": [
        { "id": "confirm", "title": "Confirm" },
        { "id": "cancel", "title": "Cancel" },
        { "id": "modify", "title": "Modify Order" }
      ]
    }
  }'

With Image Header

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": "button",
      "body": "Check out our new product!",
      "header_media": { "type": "image", "url": "https://example.com/product.jpg" },
      "buttons": [
        { "id": "buy", "title": "Buy Now" },
        { "id": "info", "title": "More Info" }
      ]
    }
  }'

Request Body

FieldTypeRequiredDescription
phone_numberstringYesRecipient phone number with country code
message_typestringYesMust be "interactive"
interactive.typestringYesMust be "button"
interactive.bodystringYesMain message text (max 1024 chars)
interactive.headerstringNoHeader text (max 60 chars)
interactive.footerstringNoFooter text (max 60 chars)
interactive.buttonsarrayYesArray of button objects — max 3
interactive.buttons[].idstringNoUnique button ID returned on tap (auto-generated if omitted)
interactive.buttons[].titlestringYesButton label (max 20 chars)
interactive.header_mediaobjectNoMedia header — type, url, and optional filename for documents
context_message_idstringNoWhatsApp message ID to reply to
Button titles are limited to 20 characters. Maximum 3 buttons per message.
{
  "phone_number": "+27123456789",
  "message_type": "interactive",
  "interactive": {
    "type": "button",
    "body": "Would you like to confirm your order?",
    "buttons": [
      { "id": "confirm", "title": "Confirm" },
      { "id": "cancel", "title": "Cancel" }
    ]
  }
}

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 and interactive.buttons are required for button messages"
}

Integration Example

async function sendInteractiveButtons(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