1. Call to action url

Interactive message (cta_url) with a single tappable button that opens an external URL.

Method: POST

Endpoint: https://apis.rmlconnect.net/wba/v1/tsp/messages

Sample request body:

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "{{phone_no}}",
  "type": "interactive",
  "interactive": {
    "type": "cta_url",
    "header": {
      "type": "text",
      "text": "Available Dates"
    },
    "body": {
      "text": "Tap the button below to see available dates."
    },
    "footer": {
      "text": "Dates subject to change."
    },
    "action": {
      "name": "cta_url",
      "parameters": {
        "display_text": "See Dates",
        "url": "https://www.luckyshrub.com?clickID=kqDGWd24Q5TRwoEQTICY7W1JKoXvaZOXWAS7h1P76s0R7Paec4"
      }
    }
  }
}

Notes:

Header type text is used here; image/video/document headers are also supported per WhatsApp interactive spec.

2. Interactive list

Interactive list message: a button that opens a picker of sectioned, selectable rows.

Method: POST

Endpoint: https://apis.rmlconnect.net/wba/v1/tsp/messages

Sample request body:

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "{{phone_no}}",
  "type": "interactive",
  "interactive": {
    "type": "list",
    "header": {
      "type": "text",
      "text": "Choose Shipping Option"
    },
    "body": {
      "text": "Which shipping option do you prefer?"
    },
    "footer": {
      "text": "Lucky Shrub: Your gateway to succulents™"
    },
    "action": {
      "button": "Shipping Options",
      "sections": [
        {
          "title": "I want it ASAP!",
          "rows": [
            {
              "id": "priority_express",
              "title": "Priority Mail Express",
              "description": "Next Day to 2 Days"
            },
            {
              "id": "priority_mail",
              "title": "Priority Mail",
              "description": "1–3 Days"
            }
          ]
        },
        {
          "title": "I can wait a bit",
          "rows": [
            {
              "id": "usps_ground_advantage",
              "title": "USPS Ground Advantage",
              "description": "2–5 Days"
            },
            {
              "id": "media_mail",
              "title": "Media Mail",
              "description": "2–8 Days"
            }
          ]
        }
      ]
    }
  }
}

Notes:

Max 10 rows total across all sections (WhatsApp platform limit — not enforced by this sample).

3. Interactive reply

Interactive reply-button message: up to 3 quick-reply buttons under a body/header/footer.

Method: POST

Endpoint: https://apis.rmlconnect.net/wba/v1/tsp/messages

Sample request body:

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "{{phone_no}}",
  "type": "interactive",
  "interactive": {
    "type": "button",
    "header": {
      "type": "image",
      "image": {
        "link": "https://www.gstatic.com/webp/gallery/1.jpg"
      }
    },
    "body": {
      "text": "Hi Pablo! Your gardening workshop is scheduled for 9am tomorrow. Use the buttons if you need to reschedule. Thank you!"
    },
    "footer": {
      "text": "Lucky Shrub: Your gateway to succulents!™"
    },
    "action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "change-button",
            "title": "Change"
          }
        },
        {
          "type": "reply",
          "reply": {
            "id": "cancel-button",
            "title": "Cancel"
          }
        }
      ]
    }
  }
}

Notes:

Max 3 buttons (WhatsApp platform limit).

4. Interactive location request message

Interactive message that prompts the recipient to share their live location.

Method: POST

Endpoint: https://apis.rmlconnect.net/wba/v1/tsp/messages

Sample request body:

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "type": "interactive",
  "to": "{{phone_no}}",
  "interactive": {
    "type": "location_request_message",
    "body": {
      "text": "hellooooooo"
    },
    "action": {
      "name": "send_location"
    }
  }
}

Notes:

The action.name must be set to send_location, as this type does not support headers or footers.


Did this page help you?