CTA (Call-to-Action) URL messages render a tappable button that opens a specified URL. Supported optional fields: header (text only, max 60 chars) and footer_text (max 60 chars). Six scenarios from the Postman collection are documented below.

Folder: Interactive CTA message

POST https://apis.rmlconnect.net/wba/v1/messages

With header + footer

Full CTA message with optional text header and footer. Validates the standard happy-path payload structure.

📘

Note

Note: The body in the collection for this test case is a long text string. The media object with interactive_cta is the intended payload structure. Refer to section 4.2 for the correct CTA with header+footer example.

POST https://apis.rmlconnect.net/wba/v1/messages

Full interactive CTA with header text and footer text.

{
  "phone": "{phone}",
  "type": "send-direct",
  "text": "<long body text \u2014 1024 character boundary test string>"
}

Footer over 60 characters

Negative test — footer_text is 65 characters, exceeding the 60-character limit. Should return a validation error.

POST https://apis.rmlconnect.net/wba/v1/messages

Negative test — footer_text exceeds 60 characters.

{
  "phone": "{phone}",
  "type": "send-direct",
  "ttl_seconds": 121,
  "enable_acculync": false,
  "media": {
    "type": "interactive_cta",
    "header": {
      "text": "Order Update"
    },
    "footer_text": "{sample_text_65_chars}",
    "body": "Track your order below",
    "action": {
      "parameters": {
        "display_text": "Track Order",
        "url": "https://track.example.com"
      }
    }
  }
}
📘

Note

Expected: 400 Bad Request. footer_text must not exceed 60 characters.

Header over 60 characters

Negative test — header.text is 65 characters, exceeding the 60-character limit. Should return a validation error.

POST https://apis.rmlconnect.net/wba/v1/messages

Negative test — header.text exceeds 60 characters.

{
  "phone": "{phone}",
  "type": "send-direct",
  "ttl_seconds": 121,
  "enable_acculync": false,
  "media": {
    "type": "interactive_cta",
    "header": {
      "text": "{sample_text_65_chars}"
    },
    "footer_text": "RML Connect",
    "body": "Track your order below",
    "action": {
      "parameters": {
        "display_text": "Track Order",
        "url": "https://track.example.com"
      }
    }
  }
}
📘

Note

Expected: 400 Bad Request. header.text must not exceed 60 characters.

Header exactly 60 characters

Positive boundary test — header.text is exactly 60 characters. Should be accepted.

POST https://apis.rmlconnect.net/wba/v1/messages

Positive boundary test — header.text is exactly 60 characters.

{
  "phone": "{phone}",
  "type": "send-direct",
  "ttl_seconds": 121,
  "enable_acculync": false,
  "media": {
    "type": "interactive_cta",
    "header": {
      "text": "This sentence is exactly sixty characters long for testing.."
    },
    "footer_text": "RML Connect",
    "body": "Track your order below",
    "action": {
      "parameters": {
        "display_text": "Track Order",
        "url": "https://track.example.com"
      }
    }
  }
}
📘

Info

Expected: 201 or 202. header.text of exactly 60 characters is within the allowed limit.

Without header or footer

Minimal CTA message with only body and action. Header and footer are optional and omitted here.

POST https://apis.rmlconnect.net/wba/v1/messages

{
  "phone": "{phone}",
  "type": "send-direct",
  "enable_acculync": false,
  "media": {
    "type": "interactive_cta",
    "body": "Click to view invoice",
    "action": {
      "parameters": {
        "display_text": "View Invoice",
        "url": "https://inv.example.com"
      }
    }
  }
}
📘

Info

Expected: 201 or 202. Header and footer are optional.

Missing required field: body

Negative test — the body field is absent from the media object. Should return a validation error.

POST https://apis.rmlconnect.net/wba/v1/messages

Negative test — media.body is absent.

{
  "phone": "{phone}",
  "type": "send-direct",
  "media": {
    "type": "interactive_cta",
    "action": {
      "parameters": {
        "display_text": "Click",
        "url": "https://example.com"
      }
    }
  }
}
📘

Note

Expected: 400 Bad Request. media.body is required for interactive_cta.

Field reference

FieldTypeRequiredDescription
media.typestringYes"interactive_cta"
media.bodystringYesMain message body text. Displayed above the action button.
media.headerobjectNoOptional header object. Only text type supported.
media.header.textstringNoHeader text. Max 60 characters.
media.footer_textstringNoFooter text. Max 60 characters.
media.actionobjectYesAction definition.
media.action.parameters.display_textstringYesButton label shown to user.
media.action.parameters.urlstringYesURL opened when button is tapped. Must be HTTPS.


Did this page help you?