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

# List sends

> Lists the messages the instance sent through the API, newest first, 50 per page. Filter by `status` and/or `type`. When there are more pages, the response has `nextCursor`: pass it as `cursor` to fetch the next one.



## OpenAPI

````yaml /en/api-reference/openapi.json get /messages
openapi: 3.1.0
info:
  title: Zapfy API
  description: >-
    Multi-tenant WhatsApp API. Send messages and manage webhooks through a
    single surface.
  version: 1.0.0
servers:
  - url: https://api.zapfy.io/v1
security:
  - accountToken: []
paths:
  /messages:
    get:
      tags:
        - Messages
      summary: List sends
      description: >-
        Lists the messages the instance sent through the API, newest first, 50
        per page. Filter by `status` and/or `type`. When there are more pages,
        the response has `nextCursor`: pass it as `cursor` to fetch the next
        one.
      parameters:
        - name: status
          in: query
          required: false
          schema:
            type: string
            enum:
              - QUEUED
              - SENT
              - DELIVERED
              - READ
              - FAILED
          description: Only sends in this status.
        - name: type
          in: query
          required: false
          schema:
            type: string
            enum:
              - TEXT
              - IMAGE
              - VIDEO
              - AUDIO
              - DOCUMENT
              - STICKER
              - LOCATION
              - CONTACT
              - POLL
              - INTERACTIVE
          description: Only sends of this type.
        - name: cursor
          in: query
          required: false
          schema:
            type: string
          description: '`nextCursor` from the previous page.'
      responses:
        '200':
          $ref: '#/components/responses/SentMessageList'
        '400':
          $ref: '#/components/responses/Error'
        '401':
          $ref: '#/components/responses/Error'
        '403':
          $ref: '#/components/responses/Error'
      security:
        - instanceToken: []
components:
  responses:
    SentMessageList:
      description: A page of sends.
      content:
        application/json:
          schema:
            type: object
            properties:
              data:
                type: array
                items:
                  $ref: '#/components/schemas/SentMessage'
              nextCursor:
                type: string
                description: 'Present only when there is another page: pass it as `cursor`.'
    Error:
      description: Error.
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
                example: Instance not found
  schemas:
    SentMessage:
      type: object
      description: A message sent through the API.
      required:
        - messageId
        - to
        - type
        - status
        - createdAt
      properties:
        messageId:
          type: string
          description: WhatsApp message ID, the same as the send and the webhooks.
          example: 3EB0C767D26A1D8E4F2B
        to:
          type: string
          description: Recipient, as sent in `to`.
          example: '5511999998888'
        type:
          type: string
          enum:
            - TEXT
            - IMAGE
            - VIDEO
            - AUDIO
            - DOCUMENT
            - STICKER
            - LOCATION
            - CONTACT
            - POLL
            - INTERACTIVE
          description: >-
            What was sent. `send-link` is `TEXT`; `send-button`, `send-list` and
            `send-carousel` are `INTERACTIVE`.
          example: TEXT
        status:
          type: string
          enum:
            - QUEUED
            - SENT
            - DELIVERED
            - READ
            - FAILED
          description: >-
            `QUEUED` (accepted, in the instance's queue) · `SENT` (✓, WhatsApp
            accepted it) · `DELIVERED` (✓✓, reached the device) · `READ` (blue
            ✓✓) · `FAILED` (not sent; see `failureReason`). Only moves forward.
          example: DELIVERED
        failureReason:
          type: string
          enum:
            - NOT_ON_WHATSAPP
            - MEDIA_DOWNLOAD_FAILED
            - MEDIA_INVALID
            - MEDIA_UPLOAD_FAILED
            - INVALID_MESSAGE
            - INSTANCE_LOGGED_OUT
            - INSTANCE_DELETED
            - WHATSAPP_ERROR
          description: >-
            Reason code, stable to group by and branch on: `NOT_ON_WHATSAPP`
            (the number has no WhatsApp) · `MEDIA_DOWNLOAD_FAILED` (couldn't
            download the media from the URL) · `MEDIA_INVALID` (the file isn't
            valid for the message type) · `MEDIA_UPLOAD_FAILED` (WhatsApp
            rejected the media upload) · `INVALID_MESSAGE` (WhatsApp doesn't
            accept that content there) · `INSTANCE_LOGGED_OUT` (the instance was
            logged out with the message queued) · `INSTANCE_DELETED` (the
            instance was deleted with the message queued) · `WHATSAPP_ERROR`
            (WhatsApp refused the send after the retries). Present only with
            `status` FAILED.
        failureMessage:
          type: string
          description: >-
            What happened, in a sentence with the original error. To show or
            log; to decide, use `failureReason`. Present only with `status`
            FAILED.
          example: >-
            Could not download the media from the URL after 4 attempts: failed
            to download file: HTTP status 404
        createdAt:
          type: string
          format: date-time
          description: When the send was accepted (202).
          example: '2026-10-04T11:59:59.000Z'
        sentAt:
          type: string
          format: date-time
          description: When WhatsApp accepted the send. Absent while queued.
          example: '2026-10-04T12:00:00.000Z'
        deliveredAt:
          type: string
          format: date-time
          description: When it reached the device. Absent until then.
          example: '2026-10-04T12:00:03.000Z'
        readAt:
          type: string
          format: date-time
          description: When it was read. Absent until then (or if read receipts are off).
        failedAt:
          type: string
          format: date-time
          description: When the send was given up. Present only with `status` FAILED.
  securitySchemes:
    accountToken:
      type: http
      scheme: bearer
      description: Account token (`zpfy_acct_...`) — manages instances and webhooks.
    instanceToken:
      type: http
      scheme: bearer
      description: Instance token (`zpfy_inst_...`) — sends messages.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.