Skip to content

Send reaction to message

View .md
POST

Send an emoji reaction to an existing WhatsApp message. Reactions are only supported for WhatsApp messages.

Authorization

  • Authorizationheaderrequired

    Bearer YOUR_API_KEY. Create a key in the dashboard.

Path parameters

  • messageIdstringrequired

Headers

  • Zavu-Senderstring

    Optional sender profile ID. If omitted, the project's default sender will be used.

Body

application/json

  • emojistringrequired

    Single emoji character to react with.

Responses

202Reaction accepted for delivery.
  • messageobjectrequired
    20 properties
    • idstringrequired
    • tostringrequired
    • fromstring
    • senderIdstring
    • channelstringrequired

      Delivery channel. Use 'auto' for intelligent routing.

      One ofautosmssms_onewaywhatsapptelegramemailinstagrammessengervoice
    • directionstringrequired

      Who sent the message. Needed to render a thread: status cannot tell the two apart, because an inbound message is also stored as delivered.

      One ofinboundoutbound
    • messageTypestringrequired

      Type of message. Non-text types are supported by WhatsApp and Telegram (varies by type).

      location_request asks the recipient to share their location and is WhatsApp-only. It takes no content object โ€” the prompt goes in text (max 1024 characters) and the button label is fixed by WhatsApp. The recipient's answer arrives as an inbound location message whose content.replyToMessageId is the ID of the request.

      request_contact_info asks the recipient to share their phone number and is WhatsApp-only. Like location_request it takes no content object โ€” the prompt goes in text (max 1024 characters) and WhatsApp renders a fixed Share Contact Info button. The answer arrives as an inbound contact message. Use it to recover the phone number of a contact who adopted a WhatsApp username and is only known by their business-scoped user ID (BSUID); when they share it, Zavu automatically links the phone number to that contact.

      One oftextimagevideoaudiodocumentstickerlocationcontactbuttonslistcta_urlrequest_contact_infolocation_requestreactiontemplate
    • statusstringrequired
      One ofqueuedsendingsentdeliveredreadfailedreceivedpending_url_verification
    • textstring

      Text content or caption.

    • contentobject

      Content for non-text message types (WhatsApp and Telegram).

      32 properties
      • mediaUrlstring

        URL of the media file (for image, video, audio, document, sticker).

      • mediaIdstring

        WhatsApp media ID if already uploaded.

      • mimeTypestring

        MIME type of the media.

      • filenamestring

        Filename for documents.

      • latitudenumber

        Latitude for location messages.

      • longitudenumber

        Longitude for location messages.

      • locationNamestring

        Name of the location.

      • locationAddressstring

        Address of the location.

      • contactsobject[]

        Contact cards for contact messages.

        2 properties
        • namestring
        • phonesstring[]
      • buttonsobject[]

        Interactive buttons (max 3).

        Limitsmax items 3
        2 properties
        • idstringrequired
          Limitsmax length 256
        • titlestringrequired
          Limitsmax length 20
      • listButtonstring

        Button text for list messages.

        Limitsmax length 20
      • sectionsobject[]

        Sections for list messages.

        2 properties
        • titlestringrequired
        • rowsobject[]required
          Limitsmax items 10
          3 properties
          • idstringrequired
          • titlestringrequired
            Limitsmax length 24
          • descriptionstring
            Limitsmax length 72
      • ctaDisplayTextstring

        Button label for cta_url messages.

        Limitsmax length 20
      • ctaUrlstring<uri>

        Destination URL opened in the device's default browser when the button is tapped. Used with messageType=cta_url. WhatsApp requires HTTPS in production.

      • ctaHeaderTypestring

        Optional header type for cta_url messages.

        One oftextimagevideodocument
      • ctaHeaderTextstring

        Header text when ctaHeaderType is 'text'.

        Limitsmax length 60
      • ctaHeaderMediaUrlstring<uri>

        Public HTTPS URL of the header media when ctaHeaderType is 'image', 'video', or 'document'. WhatsApp fetches this URL โ€” it must be publicly reachable and return the declared content type.

      • footerTextstring

        Optional footer text for cta_url messages.

        Limitsmax length 60
      • emojistring

        Emoji for reaction messages.

      • reactToMessageIdstring

        Message ID to react to.

      • replyToMessageIdstring

        Zavu message ID of the quoted message this message replies to.

        When sending: set it to make the message a quoted reply to an earlier message in the same conversation, such as the data.messageId of a message.inbound webhook. Supported on WhatsApp (every message type except reaction) and Telegram. The quoted message must belong to this project (otherwise 404), must have gone out on the same channel as this send, must belong to the conversation to addresses, must have been sent or received by the sender this message goes out from (pass it in Zavu-Sender), and must have a providerMessageId. A failed message and a Telegram button tap cannot be quoted. Any other case returns 400 instead of sending the message unquoted. The stored message then carries the rest of the replyTo* fields.

        When receiving: present on inbound messages that quote an earlier message. Omitted when the quoted message is not found in Zavu (e.g. an old or unknown message) โ€” use replyToProviderMessageId in that case.

      • replyToProviderMessageIdstring

        Provider message ID (WhatsApp WAMID, or Telegram message ID) of the quoted message. Present whenever an inbound WhatsApp message is a reply, even if the quoted message is not stored in Zavu, and on outbound quoted replies. Read-only: to quote when sending, set replyToMessageId.

      • replyToFromstring

        Sender of the quoted message (phone number in E.164 format, or the Telegram chat ID). Read-only.

      • replyToTextstring

        Truncated snippet (up to 200 characters) of the quoted message's text, for display. Empty when the quoted message has no text (e.g. media). Read-only.

      • replyToMessageTypestring

        Type of the quoted message (text, image, video, etc.). Read-only.

      • templateIdstring

        Template ID for template messages.

      • templateVariablesobject

        Variables for body placeholders. Key them to match the template body: by position (1, 2, ...) for positional templates, or by name (e.g. customer_name) for named templates. Zavu detects the template's format and sends the correct payload to Meta. Named keys also resolve a named text-header variable. Do not mix positional and named keys in the same request. On WhatsApp, a value may not contain line breaks, tabs or more than 4 consecutive spaces: Meta refuses those at delivery, so the send is rejected with 400 invalid_request instead (details.field names the value).

        1 properties
        • {key}string
      • templateButtonVariablesobject

        Variables for dynamic button placeholders (URL buttons and OTP buttons). Keys are the button index (0, 1, 2) in the template's buttons array โ€” not the placeholder name. Values substitute the {{1}} placeholder inside that button's URL.

        WhatsApp constraints: - URL buttons only accept {{1}} โ€” positional, numeric, no whitespace, no name. Named placeholders like {{token}} are stored as literal URL text by Meta and cannot be substituted. - At most one placeholder per URL button. - A template may have at most three buttons. - Static URL buttons (no placeholder) and quick_reply buttons are not included here.

        1 properties
        • {key}string
      • templateHeaderVariablesobject

        Value for a text-header variable, keyed by 1 (WhatsApp text headers allow at most one variable). Optional override. If omitted, Zavu resolves the header from templateVariables using the header placeholder's name (e.g. novios). Static text headers need no value. The same WhatsApp rule as templateVariables applies: no line breaks, tabs or more than 4 consecutive spaces.

        1 properties
        • {key}string
      • templateHeaderMediaUrlstring<uri>

        HTTPS URL of the media for this send, for a WhatsApp template whose header is image, video or document. It replaces the file stored on the template for this message only; the template is not changed. WhatsApp fetches the URL when the message is sent, so it must be publicly reachable at that moment (a short-lived signed link works if it outlives the send). Without it, the template's stored header file is sent.

        A template whose header is text, or that has no header, is refused with 400 invalid_request and details.field set to content.templateHeaderMediaUrl, before anything is sent or charged. A URL that is not HTTPS is refused with 400 invalid_request and a details.errors entry whose path is ["content", "templateHeaderMediaUrl"]. Ignored on channels other than WhatsApp.

        Limitsmax length 2048
      • templateHeaderFilenamestring

        File name WhatsApp shows the recipient for a document header, e.g. invoice-1042.pdf. Works with templateHeaderMediaUrl, or on its own to name the template's stored file. Only valid when the template's header is document: any other header is refused with 400 invalid_request and details.field set to content.templateHeaderFilename, before anything is sent or charged. Ignored on channels other than WhatsApp.

        Limitsmin length 1 ยท max length 240
      • referralobject

        Click-to-WhatsApp (CTWA) ad attribution: where an inbound conversation came from.

        WhatsApp only. Present on the first inbound message of a conversation opened from a Meta ad or post, and on no message after it โ€” so store it when it arrives rather than expecting it again. Organic conversations never carry it.

        Field names are camelCased to match the rest of this API; Meta sends them as snake_case (ctwa_clid, source_id, ...). Fields that do not apply are omitted: a post source has no click id, and an image ad has no videoUrl.

        10 properties
        • sourceTypestring

          Where the click came from.

          One ofadpost
        • sourceIdstring

          Identifier of the ad or post that produced the click.

        • sourceUrlstring<uri>

          Meta permalink to the ad or post.

        • headlinestring

          Headline of the ad or post.

        • bodystring

          Body copy of the ad or post.

        • mediaTypestring

          Type of media on the ad, when it had any.

          One ofimagevideo
        • imageUrlstring<uri>

          Image of the ad. Present when mediaType is image.

        • videoUrlstring<uri>

          Video of the ad. Present when mediaType is video.

        • thumbnailUrlstring<uri>

          Thumbnail of the ad media.

        • ctwaClidstring

          Click-to-WhatsApp click identifier. This is the value Meta's Conversions API needs to credit a conversion back to the ad that produced the conversation. Present on ad sources; a post source has none.

    • conversationIdstring

      ID of the conversation (inbox thread) this message belongs to. Use it to build a direct dashboard link: https://dashboard.zavu.dev/{locale}/inbox?conv={conversationId}. Omitted only on legacy messages created before conversation threading.

    • providerMessageIdstring

      Message ID from the delivery provider.

    • errorCodestringnullable
    • errorMessagestringnullable
    • costnumbernullable

      Zavu platform charge in USD for this message. Messaging is billed against your plan's monthly limits plus usage-based overage.

    • costProvidernumbernullable

      Carrier and delivery cost in USD.

    • costTotalnumbernullable

      Total cost in USD (platform charge + delivery cost).

    • metadataobject
      1 properties
      • {key}string
    • createdAtstring<date-time>required
    • updatedAtstring<date-time>
400Invalid request or message is not from WhatsApp.
  • codestringrequired
  • messagestringrequired
  • detailsobject
401Unauthorized.
  • codestringrequired
  • messagestringrequired
  • detailsobject
404Message not found.
  • codestringrequired
  • messagestringrequired
  • detailsobject