Skip to main content
POST
/
send-whatsapp
Send Audio
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": "audio",
  "media_url": "https://example.com/message.mp3",
  "context_message_id": "wamid.HBgLMjc4MTIzNDU2NzgVAgASGBQzRUI..."
}
'
{
  "success": true,
  "message": "Message sent successfully",
  "data": {
    "message_id": "wamid.HBgLMjc4MTIzNDU2NzgVAgASGBQzRUI...",
    "recipient": "27123456789",
    "message_type": "<string>"
  }
}

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

Must be "audio"

Available options:
audio
Example:

"audio"

media_url
string
required

Publicly accessible URL to the audio file

Example:

"https://example.com/message.mp3"

context_message_id
string

WhatsApp message ID to reply to

Example:

"wamid.HBgLMjc4MTIzNDU2NzgVAgASGBQzRUI..."

Response

Message sent successfully

success
boolean
Example:

true

message
string
Example:

"Message sent successfully"

data
object