> ## Documentation Index
> Fetch the complete documentation index at: https://help.eazybe.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Send any supported message type

> Sends a raw WhatsApp Cloud API message object. Use this route for image,
document, video, audio, sticker, location, and interactive messages.
Eazybe adds `messaging_product: whatsapp` automatically.


<Note>Free-form message types are available only inside the 24-hour customer-service window. Use an approved template outside that window.</Note>


## OpenAPI

````yaml /api-reference/meta/openapi.yaml post /meta/phone-numbers/{phoneNumberId}/messages
openapi: 3.1.0
info:
  title: Eazybe Meta API Documentation
  version: 1.0.0
  description: |
    A single authenticated Eazybe REST surface over WhatsApp Business Cloud API.
    The wrapper uses the Meta credentials captured when a WABA is connected to
    Eazybe, so callers never send Meta access tokens directly.
servers:
  - url: https://cerberus.eazybe.com/staging/api/v2
    description: Eazybe staging API v2.
security:
  - bearerAuth: []
tags:
  - name: Phone numbers
    description: Discover connected WABAs and phone-number IDs.
  - name: Messaging
    description: Send WhatsApp messages and update message state.
  - name: Templates
    description: Manage WhatsApp message templates.
  - name: Media
    description: Upload, inspect, and delete WhatsApp media.
  - name: Webhooks
    description: Manage WABA webhook subscriptions.
  - name: Analytics
    description: Read messaging, conversation, pricing, and template analytics.
  - name: Profiles and settings
    description: Manage business profiles and phone-number settings.
  - name: Automation
    description: Configure welcome messages, ice-breakers, and commands.
  - name: QR codes
    description: Manage click-to-chat QR codes.
  - name: Flows
    description: Manage the WhatsApp Flows lifecycle.
  - name: Number administration
    description: Register numbers, manage PINs, and synchronize coexistence data.
  - name: Block list
    description: List, block, and unblock WhatsApp users.
paths:
  /meta/phone-numbers/{phoneNumberId}/messages:
    post:
      tags:
        - Messaging
      summary: Send any supported message type
      description: |
        Sends a raw WhatsApp Cloud API message object. Use this route for image,
        document, video, audio, sticker, location, and interactive messages.
        Eazybe adds `messaging_product: whatsapp` automatically.
      operationId: sendMessage
      parameters:
        - $ref: '#/components/parameters/PhoneNumberId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - to
                - type
                - image
              properties:
                to:
                  type: string
                type:
                  type: string
                image:
                  type: object
                  required:
                    - id
                    - caption
                  properties:
                    id:
                      type: string
                    caption:
                      type: string
              description: |-
                ```json
                {
                  "to": "919900000001",
                  "type": "image",
                  "image": {
                    "id": "1234567890123456",
                    "caption": "Your invoice"
                  }
                }
                ```
            example:
              to: '919900000001'
              type: image
              image:
                id: '1234567890123456'
                caption: Your invoice
      responses:
        '200':
          description: >-
            Message accepted for delivery


            **Failure responses**


            | **Status** | **Meaning** | **Action** |

            | --- | --- | --- |

            | `401` | Missing, invalid, or expired bearer token |
            Re-authenticate |

            | `404` | `phoneNumberId` not linked to your organization | Verify
            the id |

            | `500` | Gateway rejected the send — malformed message object,
            unopted-in recipient, closed 24-hour window, or rate limit | Read
            `message`; check server logs for the upstream body |
          content:
            application/json:
              schema:
                type: object
                required:
                  - messaging_product
                  - contacts
                  - messages
                properties:
                  messaging_product:
                    type: string
                  contacts:
                    type: array
                    items:
                      type: object
                      required:
                        - input
                        - wa_id
                      properties:
                        input:
                          type: string
                        wa_id:
                          type: string
                  messages:
                    type: array
                    items:
                      type: object
                      required:
                        - id
                        - message_status
                      properties:
                        id:
                          type: string
                        message_status:
                          type: string
              example:
                messaging_product: whatsapp
                contacts:
                  - input: '919900000001'
                    wa_id: '919900000001'
                messages:
                  - id: wamid.HBgMOTE5OTAwMDAwMDAxFQIAERgSN0EyRjc4...
                    message_status: accepted
components:
  parameters:
    PhoneNumberId:
      name: phoneNumberId
      in: path
      required: true
      description: Meta phone-number ID returned by `GET /meta/phone-numbers`.
      schema:
        type: string
      example: '5647382910'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: Eazybe token
      description: |
        Eazybe bearer token. The token resolves the caller's organization and
        must be kept on the server.

````