---
title: "Send a WhatsApp message"
method: POST
path: "/v4/whatsapp/messages"
tags: ["WhatsApp V4"]
---

# Send a WhatsApp message

`POST /v4/whatsapp/messages`

## Request

- Base URL: `https://developer.meetergo.com` (the document declares no server; this is the origin it was published from)
- URL: `https://developer.meetergo.com/v4/whatsapp/messages`
- Auth: one of:
  - API key in header `x-meetergo-api-user-id`
  - HTTP bearer
  - HTTP bearer

Sends a text, template, or media message addressed by phone number. The conversation is created or reused automatically. Free-form text and media require an open 24-hour customer-service window (since the contact last messaged you); approved templates can be sent anytime. Outside the window, text/media return 403 — send a template to re-engage.

## Request body

- SendWhatsappMessageV4Dto
  - `to` string, required: Recipient address: a phone number (E.164 preferred, e.g. "+491234567890"; "00" prefixes and separators are normalized) or a WhatsApp business-scoped user id (BSUID, e.g. "US.13491208655302741918") for contacts who have adopted a WhatsApp username.
  - `type` 'text' | 'template' | 'media', required: Which kind of message to send.
  - `contactName` string: Contact name to set when a new conversation is created for this number.
  - `text` string: Message body. Required when `type` is `text`.
  - `template` WhatsappTemplatePayloadDto
    - `name` string, required: Approved template name as registered in WhatsApp Manager.
    - `language` string, required: Template language/locale code.
    - `params` string[]: Positional values substituted into the template body placeholders ({{1}}, {{2}}, ...).
    - `buttonUrlParams` object: Dynamic URL-button suffixes keyed by zero-based button index, for templates with dynamic URL buttons.
  - `media` WhatsappMediaPayloadDto
    - `url` string, uri, required: Public HTTPS URL of the media to send. Must be reachable by WhatsApp (e.g. a presigned URL). HTTP is rejected.
    - `mimeType` string, required: MIME type of the media. Determines how WhatsApp renders it.
    - `filename` string: Original filename, shown for documents.
    - `caption` string: Caption shown beneath images, videos and documents.

## Response `201`

Message accepted by WhatsApp.

- WhatsappMessageResource
  - `id` string, required: meetergo message id.
  - `conversationId` string, required: Conversation this message belongs to.
  - `waMessageId` string, required: WhatsApp's own message id (wamid).
  - `direction` 'inbound' | 'outbound', required
  - `type` string, required: Message kind (text, image, document, template, ...).
  - `status` 'pending' | 'sent' | 'delivered' | 'read' | 'failed', required: Delivery status. Inbound messages are always `delivered`.
  - `text` string: Text body, or the caption for a media message.
  - `mediaUrl` string: URL of the attached media, if any.
  - `mediaMimeType` string: MIME type of the attached media.
  - `mediaFilename` string: Filename of the attached document.
  - `templateName` string: Template name, for template messages.
  - `errorMessage` string: Failure reason from WhatsApp, set when `status` is `failed`.
  - `createdAt` string, date-time, required: When the message was created (ISO 8601).

## Other responses

- `400`: The request did not validate. `message` lists the constraints that failed.
- `401`: Missing, malformed, or expired credentials.
- `403`: WhatsApp add-on missing, or the 24h window is closed for a text/media send.
- `429`: Rate limited. Back off and retry.

---

[API](https://skmtc.dev/meetergo/apis/meetergo-platform-api.md) · [All operations](https://skmtc.dev/meetergo/apis/meetergo-platform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/meetergo/apis/meetergo-platform-api/revisions/b5d66cd8be67?raw)
