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

# Consultar confirmaciones de WhatsApp

> Requiere whatsapp_events:read. La empresa se resuelve desde la llave Bearer. Incluye todos los orígenes confirmados de la empresa. Cuenta eventos almacenados, no mensajes únicos. No admite companyId ni attribution. No requiere HMAC ni idempotencia.



## OpenAPI

````yaml /openapi/whatsapp-v1.json get /v1/whatsapp/events
openapi: 3.0.3
info:
  title: Cobrix WhatsApp API
  version: 1.0.0
  description: Consulta de confirmaciones de Meta atribuidas de forma exacta a tu empresa.
  license:
    name: Propietaria
    url: https://cobrix.co/terms
servers:
  - url: https://api.cobrix.co/api
    description: Producción
  - url: https://sandbox-api.cobrix.co/api
    description: Sandbox
security: []
tags:
  - name: WhatsApp
    description: Confirmaciones y totales de la empresa autorizada.
paths:
  /v1/whatsapp/events:
    get:
      tags:
        - WhatsApp
      summary: Consultar confirmaciones de WhatsApp
      description: >-
        Requiere whatsapp_events:read. La empresa se resuelve desde la llave
        Bearer. Incluye todos los orígenes confirmados de la empresa. Cuenta
        eventos almacenados, no mensajes únicos. No admite companyId ni
        attribution. No requiere HMAC ni idempotencia.
      operationId: listWhatsappEvents
      parameters:
        - in: query
          name: dateFrom
          required: false
          description: >-
            Inicio inclusivo sobre receivedAt. ISO 8601 con segundos y zona
            horaria; omitir para no limitar el inicio.
          schema:
            type: string
            format: date-time
        - in: query
          name: dateTo
          required: false
          description: >-
            Fin inclusivo sobre receivedAt. Debe ser igual o posterior a
            dateFrom.
          schema:
            type: string
            format: date-time
        - in: query
          name: phone
          required: false
          description: >-
            Coincidencia parcial del teléfono del destinatario, como en el
            panel.
          schema:
            type: string
            maxLength: 64
        - in: query
          name: status
          required: false
          description: Filtra tanto los eventos como todos los totales.
          schema:
            type: string
            enum:
              - sent
              - delivered
              - read
              - failed
        - in: query
          name: page
          required: false
          description: Página solicitada, incluso si queda fuera del resultado.
          schema:
            type: integer
            minimum: 1
            maximum: 90071992547409
            default: 1
        - in: query
          name: limit
          required: false
          description: Cantidad máxima de eventos por página.
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 20
      responses:
        '200':
          description: >-
            Eventos confirmados y totales del filtro completo. Una página vacía
            conserva los totales.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/RateLimitLimit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/RateLimitReset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WhatsappEventReport'
              example:
                events:
                  - id: 00000000-0000-4000-8000-000000000001
                    messageId: wamid.example
                    status: delivered
                    recipientPhone: '584121234567'
                    receivedAt: '2026-09-08T14:30:00.000Z'
                    errorCode: null
                    errorTitle: null
                summary:
                  total: 1
                  sent: 0
                  delivered: 1
                  read: 0
                  failed: 0
                page: 1
                limit: 20
                totalPages: 1
        '401':
          description: Llave inválida, revocada, vencida o partner inactivo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicError'
        '403':
          description: Permiso insuficiente o empresa inactiva.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicError'
        '422':
          description: Parámetros inválidos, desconocidos o rango invertido.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicError'
        '429':
          description: Se excedieron 60 solicitudes por minuto por llave.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicError'
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/RateLimitLimit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/RateLimitRemaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/RateLimitReset'
            Retry-After:
              $ref: '#/components/headers/RetryAfter'
        '500':
          description: Error interno sin detalles sensibles.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicError'
        '503':
          description: El limitador distribuido no está disponible; reintentar más tarde.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicError'
      security:
        - bearerAuth: []
components:
  headers:
    RateLimitLimit:
      description: Máximo de requests por ventana.
      schema:
        type: integer
        default: 300
    RateLimitRemaining:
      description: Requests disponibles en la ventana.
      schema:
        type: integer
    RateLimitReset:
      description: Timestamp Unix de reinicio.
      schema:
        type: integer
    RetryAfter:
      description: Segundos antes de reintentar.
      schema:
        type: integer
  schemas:
    WhatsappEventReport:
      type: object
      additionalProperties: false
      required:
        - events
        - summary
        - page
        - limit
        - totalPages
      properties:
        events:
          type: array
          items:
            $ref: '#/components/schemas/WhatsappEvent'
        summary:
          type: object
          additionalProperties: false
          required:
            - total
            - sent
            - delivered
            - read
            - failed
          properties:
            total:
              type: integer
              minimum: 0
            sent:
              type: integer
              minimum: 0
            delivered:
              type: integer
              minimum: 0
            read:
              type: integer
              minimum: 0
            failed:
              type: integer
              minimum: 0
        page:
          type: integer
          minimum: 1
        limit:
          type: integer
          minimum: 1
          maximum: 100
        totalPages:
          type: integer
          minimum: 0
    PublicError:
      type: object
      required:
        - message
      properties:
        message:
          type: string
        code:
          type: integer
        code_name:
          type: string
        errors:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
    WhatsappEvent:
      type: object
      additionalProperties: false
      required:
        - id
        - messageId
        - status
        - recipientPhone
        - receivedAt
        - errorCode
        - errorTitle
      properties:
        id:
          type: string
          format: uuid
        messageId:
          type: string
        status:
          type: string
          enum:
            - sent
            - delivered
            - read
            - failed
        recipientPhone:
          type: string
        receivedAt:
          type: string
          format: date-time
        errorCode:
          type: string
          nullable: true
        errorTitle:
          type: string
          nullable: true
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: Cobrix API key
      description: Llave existente con permiso whatsapp_events:read.

````