Send message
Authentication
Account authentication key. The App-Key must have the RCS channel enabled.
Request
Destination number: exactly 10 digits, WITHOUT the country code (the system automatically prepends 52).
Agent identifier. It must be enabled (status: true). In template mode it must be of the SAME type as the template; in free-form mode the content is validated against the agent’s type (a BASIC agent only supports TEXT without suggestions) and the billing channel (RCS_BASIC / RCS_SINGLE / RCS_CONVERSATIONAL) is derived from it.
Sending mode. TEMPLATE (the default when omitted) sends by template; the other four are free-form sends with the content directly in the body: TEXT (text), FILE (contentInfo), RICH_CARD (richCard.standaloneCard), CAROUSEL (richCard.carouselCard).
Template identifier. Required with type: TEMPLATE (it must exist, be active, and belong to the account of the App-Key); forbidden (400) with any free-form type.
Free-form TEXT content. Required with type: TEXT, forbidden with any other type. Supports {{placeholders}} substituted with variables.
Free-form FILE content. Required with type: FILE, forbidden with any other type.
Free-form card content. With type: RICH_CARD it must carry standaloneCard (and carouselCard is forbidden); with type: CAROUSEL it must carry carouselCard (2 to 10 cards, and standaloneCard is forbidden). Forbidden with any other type.
Message-level chips, only for the four free-form types (forbidden with type: TEMPLATE; also rejected with a BASIC agent — errorCode 377). Maximum 11. Independent from the suggestions embedded inside a card: they can be combined. Never send postbackData: the backend generates it.
Map { variable_name: value }. In template mode, ALL the variables declared by the template must be sent; in free-form mode it substitutes the {{placeholders}} written in the body content, with the same type rules (URL in fileUrl/thumbnailUrl/iconUrl/url, free text elsewhere) and the same HEAD media validation. If any is missing, the request is rejected with RCS_MISSING_VARIABLES (errorCode 344). UUID_MESSAGE is a reserved name, rejected with 400 in every mode.
Optional, in minutes. Time during which delivery of the message is attempted before it expires. Default: provider default (~24 h). Maximum: 1440 (24 h).
Optional, in minutes. Window during which user interactions (clicks/replies) on this message are accepted. Default: 1440 (24 h). Maximum: 4320 (72 h). After the window, inbound events are discarded and NOT notified through webhooks.
Optional SMS fallback for this send: if the RCS message is not delivered (its delivery status webhook reports FAILED or EXPIRED), the API automatically retries the same recipient over SMS with this content. A late FAILED/EXPIRED that the RCS status priority logic already discards (a suppressed downgrade, an out-of-order event) does NOT fire the fallback — only a failure that actually advances the message status does. It fires only once per message and it is a single hop (RCS → SMS, no further cascade). Requires the multichannel fallback to be enabled for the account (errorCode 380/381 otherwise). Applies the same in both sending modes.
Response
Message accepted for delivery. Store message_id: it is the key to correlate every webhook of this send.
Send identifier. Store it: it is the key to correlate every webhook of this send.

