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

# Enviar estado (stories)

> Envía un estado de WhatsApp con soporte para texto, imagen, video y audio.

Este endpoint tiene 4 modos de uso:

- envío normal: omita `recipients`, `max_recipients` y `group`
- envío explícito: indique `recipients` para enviar solo a números específicos; la API aprovecha los válidos y descarta los inválidos con el motivo en `debug`
- envío parcial: indique `max_recipients` para limitar la audiencia o aplicar un límite de seguridad sobre `recipients`
- estado de grupo: indique `group` con el JID del grupo (`@g.us`)

## Observación importante sobre `recipients`
Cuando se indica `recipients`, la API:

- acepta números en formato WhatsApp, JIDs `@s.whatsapp.net` y JIDs `@lid`
- cuando recibe `@lid`, intenta resolver ese identificador al PN (`@s.whatsapp.net`) usando los vínculos conocidos por la instancia
- si el `@lid` no puede resolverse a un PN, ese elemento se descarta con el motivo `lid_unresolved`
- valida si el destinatario existe en WhatsApp usando el mismo flujo de verificación del envío normal, en lotes para evitar una llamada remota por destinatario
- cruza los destinatarios verificados con la audiencia permitida por la privacidad del estado, aceptando equivalencia PN/LID cuando ese vínculo es conocido
- los destinatarios descartados aparecen en `debug.discarded_recipients`, con motivos como `invalid_format`, `lid_unresolved`, `not_on_whatsapp`, `outside_status_audience` y `duplicate`
- la solicitud solo devuelve `400` cuando no queda ningún destinatario válido para el envío

## Observación importante sobre `max_recipients`
El campo `max_recipients` se agregó como mitigación operativa.
Ya hemos observado casos en los que WhatsApp bloquea inmediatamente el envío de estados cuando la audiencia es muy grande
(por ejemplo, agendas con miles de contactos, como ~3.000).
La causa exacta aún no está totalmente clara, por lo que se recomienda comenzar con límites menores y aumentarlos gradualmente.

## Estado de grupo
Con `group`, el estado se publica en el grupo y aparece para los miembros en la pestaña Estados, en lugar del estado de la cuenta. La cuenta debe participar en el grupo. Aplica a texto, imagen y video: el audio (`audio`, `ptt` y `myaudio`) no funciona en el estado de grupo y devuelve `400`.

- no se combina con `recipients` ni con `max_recipients` (devuelve `400`)
- la respuesta incluye `Id`, `content`, `messageTimestamp` y `status`, sin `debug`

## Tipos soportados
- `text`: texto con color de fondo y fuente
- `image`: imagen con leyenda opcional
- `video`: video con leyenda opcional
- `audio`: audio normal
- `myaudio`: audio enviado como voz
- `ptt`: audio enviado como voz

## Colores de fondo
Indique un valor de `1` a `19`. La API convierte este índice al color usado por WhatsApp.

- `1`: amarillo verdoso suave
- `2`: amarillo pálido
- `3`: amarillo anaranjado vibrante
- `4`: verde vibrante
- `5`: verde musgo
- `6`: verde claro
- `7`: azul piscina
- `8`: azul intenso
- `9`: azul claro grisáceo
- `10`: lila claro
- `11`: lila cálido
- `12`: púrpura azulado
- `13`: magenta profundo
- `14`: rosa suave
- `15`: salmón rosado
- `16`: marrón claro
- `17`: gris claro azulado
- `18`: gris medio
- `19`: gris profundo predeterminado

Ejemplo rápido:
- `7`: azul piscina
- `13`: magenta profundo
- `19`: gris profundo (predeterminado)

## Fuentes válidas para `type=text`
Valores aceptados actualmente: `0`, `1`, `2`, `6`, `7`, `8`, `9`, `10`.

## Límites
- `text`: máximo de 656 caracteres
- `max_recipients`: no puede ser negativo
- `recipients`: acepta números, JIDs `@s.whatsapp.net` y JIDs `@lid`
- `@lid` solo se incluye en el envío cuando puede resolverse localmente a un PN válido; de lo contrario, se descarta
- para tipos de medios, `file` es obligatorio
- `group`: JID del grupo (`@g.us`)

Ejemplo de envío explícito:
```json
{
  "type": "text",
  "text": "Novidades chegando!",
  "recipients": [
    "5511999999999",
    "5511888888888@s.whatsapp.net"
  ]
}
```

Ejemplo de envío parcial:
```json
{
  "type": "text",
  "text": "Novidades chegando!",
  "background_color": 7,
  "font": 1,
  "max_recipients": 100
}
```

Ejemplo de estado de grupo:
```json
{
  "type": "image",
  "file": "https://exemplo.com/status.jpg",
  "text": "Aviso para o grupo",
  "group": "120363123456789012@g.us"
}
```




## OpenAPI

````yaml /openapi-es.json post /send/status
openapi: 3.1.0
info:
  title: WppFy -  WhatsApp API
  version: 1.0.0
  description: >
    API para la gestión de instancias de WhatsApp y comunicaciones.


    ## Recomendación Importante: WhatsApp Business

    **Se RECOMIENDA ENCARECIDAMENTE usar cuentas de WhatsApp Business** en lugar
    de WhatsApp normal para la integración; WhatsApp normal puede presentar
    inconsistencias, desconexiones, limitaciones e inestabilidad durante el uso
    con nuestra API.


    ## Autenticación

    - Los endpoints regulares requieren un header 'token' con el token de la
    instancia


    ## Estados de la Instancia

    Las instancias pueden estar en los siguientes estados:

    - `disconnected`: Desconectado de WhatsApp

    - `connecting`: En proceso de conexión

    - `connected`: Conectado y autenticado con éxito
servers:
  - url: https://api.wppfy.com
security:
  - token: []
tags:
  - name: Instancia
    description: >
      Operaciones relacionadas con el ciclo de vida de una instancia, como
      conectar,

      desconectar y verificar el estado.
  - name: Proxy
    description: >
      WppFy opera con un proxy interno por defecto.

      Puede mantener este valor predeterminado, configurar un proxy propio
      mediante `proxy_url` o usar su celular Android como proxy instalando la
      app en https://github.com/WppFy/silver_proxy_apk (APK directo:
      https://github.com/WppFy/silver_proxy_apk/raw/refs/heads/main/silver_proxy.apk).

      Si no se envía nada, se sigue usando el proxy interno. Las IPs son
      brasileñas; para clientes internacionales, considere un proxy de la región
      del cliente.
  - name: Perfil
    description: >
      Operaciones relacionadas con el perfil de la instancia de WhatsApp, como
      cambiar

      el nombre y la imagen de perfil.
  - name: Business
    description: >
      ⚠️ **EXPERIMENTAL** - Endpoints aún no probados por completo.


      Operaciones relacionadas con el perfil comercial de WhatsApp Business.

      Permite consultar y actualizar datos del perfil comercial como
      descripción,

      dirección, email, categorías y gestionar el catálogo de productos.


      **Requisitos:**

      - La cuenta conectada actualmente debe ser una cuenta **WhatsApp
      Business**

      - Las cuentas personales de WhatsApp no tienen perfil comercial


      **Nota:** Estos endpoints pueden no funcionar como se espera.

      Reporte los problemas encontrados.
  - name: Llamadas
    description: |
      Operaciones relacionadas con llamadas por WhatsApp.
      Permite realizar y rechazar llamadas de forma programática.
  - name: Enviar Mensaje
    description: >
      Endpoints para el envío de mensajes de WhatsApp con diferentes tipos de
      contenido.


      ## Campos Opcionales Comunes


      Todos los endpoints de envío de mensajes soportan los siguientes campos
      opcionales:


      - **`delay`** *(integer)*: Retraso en milisegundos antes del envío
        - Durante el retraso aparecerá "Escribiendo..." o "Grabando audio..." según el tipo
        - Ejemplo: `5000` (5 segundos)

      - **`readchat`** *(boolean)*: Marcar el chat como leído después del envío
        - Quita el contador de mensajes no leídos del chat
        - Ejemplo: `true`

      - **`readmessages`** *(boolean)*: Marcar los últimos mensajes recibidos
      como leídos
        - Marca los últimos 10 mensajes **recibidos** (no enviados por usted) como leídos
        - Útil para confirmar la lectura de mensajes pendientes antes de responder
        - A diferencia de `readchat`, que solo quita el contador de no leídos
        - Ejemplo: `true`

      - **`replyid`** *(string)*: ID del mensaje a responder
        - Crea una respuesta vinculada al mensaje original
        - El soporte varía según el tipo de mensaje
        - Ejemplo: `"3A12345678901234567890123456789012"`

      - **`mentions`** *(string)*: Números a mencionar (solo para envíos en
      grupos)
        - Números específicos: `"5511999999999,5511888888888"`
        - Mencionar a todos: `"all"`

      - **`forward`** *(boolean)*: Marca el mensaje como reenviado en WhatsApp
        - Agrega el indicador "Reenviado" al mensaje
        - Ejemplo: `true`

      - **`track_source`** *(string)*: Origen del rastreo del mensaje
        - Identifica el sistema o la fuente que está enviando el mensaje
        - Útil para integraciones (ej.: "chatwoot", "crm", "chatbot")
        - Ejemplo: `"chatwoot"`

      - **`track_id`** *(string)*: ID para el rastreo del mensaje
        - Identificador libre para dar seguimiento al mensaje en sistemas externos
        - Permite correlacionar mensajes entre diferentes plataformas
        - **Nota**: El sistema acepta valores duplicados; no hay validación de unicidad
        - Use el mismo ID en varios mensajes si tiene sentido para su integración
        - Ejemplo: `"msg_123456789"`

      ### Envío a Grupos

      - **`number`** *(string)*: Para enviar un mensaje a un grupo, use el ID
      del grupo que termina en `@g.us`
        - Ejemplo: `"120363012345678901@g.us"`
        - **Cómo obtener el ID del grupo:**
          - Use el `chatid` del webhook recibido cuando alguien envía un mensaje en el grupo
          - Use el endpoint `GET /group/list` para listar todos los grupos y sus IDs

      ## Placeholders Disponibles


      Todos los endpoints de envío de mensajes soportan placeholders dinámicos
      para personalización automática:


      ### Campos de Nombre

      - **`{{name}}`**: Nombre consolidado del chat, usando la primera opción
      disponible:
        1. Nombre del lead (`lead_name`)
        2. Nombre completo del lead (`lead_fullName`)
        3. Nombre del contacto en WhatsApp (`wa_contactName`)
        4. Nombre del perfil de WhatsApp (`wa_name`)

      - **`{{first_name}}`**: Primera palabra válida del nombre consolidado
      (mínimo 2 caracteres)


      ### Campos de WhatsApp

      - **`{{wa_name}}`**: Nombre del perfil de WhatsApp

      - **`{{wa_contactName}}`**: Nombre del contacto tal como está guardado en
      WhatsApp


      ### Campos del Lead

      - **`{{lead_name}}`**: Nombre del lead

      - **`{{lead_fullName}}`**: Nombre completo del lead

      - **`{{lead_personalid}}`**: ID personal (CPF, CNPJ, etc)

      - **`{{lead_email}}`**: Email del lead

      - **`{{lead_status}}`**: Estado actual del lead

      - **`{{lead_notes}}`**: Anotaciones del lead

      - **`{{lead_assignedAttendant_id}}`**: ID del agente asignado


      ### Campos Personalizados

      Los campos agregados mediante custom fields son accesibles usando
      `{{lead_field01}}` a `{{lead_field20}}` o usando `{{nomedocampo}}`
      definido en `/instance/updateFieldsMap`.


      ### Ejemplo de Uso

      ```

      ¡Hola {{name}}! Vi que usted trabaja en {{company}}.

      ¿Su email {{lead_email}} es correcto?

      ```


      **💡 Consejo**: Use `/chat/find` para buscar los datos del chat y ver los
      campos disponibles antes de enviar mensajes con placeholders.
  - name: Mensaje Async
    description: >
      Controles operativos de la cola interna de envío asíncrono usada cuando un
      endpoint de envío recibe `async=true`.


      Esta sección sirve para:

      - consultar el estado actual de la cola async

      - configurar el delay entre mensajes enviados con `async=true`

      - limpiar el backlog pendiente y cancelar mensajes aún no concluidos


      Alcance:

      - cubre solo la cola interna de mensajes directos async

      - no modifica mensajes ya enviados correctamente
  - name: Acciones en el mensaje y Búsqueda
  - name: Chats
  - name: Contactos
  - name: Bloqueos
  - name: Etiquetas
  - name: Grupos y Comunidades
  - name: Newsletters y Canales
    description: >
      Operaciones para la lectura y el seguimiento de canales de WhatsApp
      (newsletters).


      Casos de uso principales:

      - listar posts ya publicados en un canal

      - editar posts recientes de un canal

      - eliminar posts recientes de un canal

      - consultar views y reacciones de los posts

      - integrar canales sin necesidad de persistir los mensajes localmente


      Observaciones:

      - `/newsletter/messages` devuelve el contenido de los posts

      - `/newsletter/messages/edit` edita el contenido de posts recientes

      - `/newsletter/messages/delete` elimina posts recientes

      - las views (`viewsCount`) y reactions (`reactionCounts`) vienen en cada
      post de `/newsletter/messages`, no por evento de webhook

      - `/newsletter/updates` está obsoleta: WhatsApp no responde y la API
      devuelve 504

      - los newsletters usan rutas propias y no deben usar `/message/edit` ni
      `/message/delete`
  - name: Respuestas Rápidas
    description: >
      Gestión de respuestas rápidas para agilizar la atención.


      **⚠️ Importante**: Este recurso solo es útil si utiliza un sistema
      frontend/interfaz

      personalizada para registrar y utilizar las respuestas. La API solo
      almacena las respuestas, 

      pero no las aplica automáticamente.


      ### Cómo funciona:

      - **Crear**: Registre respuestas predefinidas con títulos y contenido

      - **Listar**: Recupere todas las respuestas registradas para mostrarlas en
      su interfaz

      - **Usar**: Su sistema frontend puede usar estas respuestas para agilizar
      la escritura


      ### Casos de uso:

      - Interfaces web personalizadas de atención

      - Apps móviles con sugerencias de respuesta

      - Sistemas CRM con plantillas de mensaje

      - Herramientas de productividad para agentes


      **No es un chatbot**: Para respuestas automáticas, use los recursos de
      Chatbot.
  - name: CRM
    description: >
      Sistema completo de gestión de relaciones con clientes integrado a la API.


      **💾 Almacenamiento interno**: Todos los datos de los leads se guardan
      directamente en la API,

      eliminando la necesidad de bases de datos externas. Su aplicación puede
      enfocarse solo

      en la interfaz y la lógica de negocio.


      ### Recursos disponibles:

      - **📋 20+ campos personalizables**: Nombre, teléfono, email, empresa,
      observaciones, etc.

      - **🏷️ Sistema de etiquetas**: Organice y categorice sus contactos

      - **🔍 Búsqueda avanzada**: Filtre por cualquier campo o etiqueta

      - **📊 Historial completo**: Todas las interacciones se registran
      automáticamente


      ### 🎯 Placeholders en mensajes:

      Use variables dinámicas en los mensajes para la personalización
      automática:


      ```

      ¡Hola {{nombre}}! Vi que trabaja en {{empresa}}.

      ¿Su email {{email}} es correcto?

      Observaciones: {{observaciones}}

      ```


      ### Flujo típico:

      1. **Captura**: Los leads llegan vía WhatsApp o formularios

      2. **Enriquecimiento**: Agregue datos usando `/chat/editLead`

      3. **Segmentación**: Organice con etiquetas

      4. **Comunicación**: Envíe mensajes personalizados con placeholders

      5. **Seguimiento**: El historial se guarda automáticamente


      **Ideal para**: Ventas, marketing, atención, calificación de leads
  - name: Integración con Chatwoot
    description: >
      **🚧 INTEGRACIÓN BETA - Sistema de integración con Chatwoot para atención
      unificada**


      **⚠️ AVISO**: Esta integración está en fase BETA. Úsela bajo su propio
      riesgo. Recomendamos realizar pruebas en un entorno no productivo antes de
      usarla en producción.


      Esta categoría contiene recursos para configurar y gestionar la
      integración con Chatwoot, una plataforma de atención al cliente
      open-source. La integración permite centralizar las conversaciones de
      WhatsApp en Chatwoot.


      ### Recursos disponibles:

      - 🔧 **Configuración Completa**: Configure URL, tokens y credenciales de
      Chatwoot

      - 📬 **Sincronización Bidireccional**: Los mensajes nuevos entre WhatsApp
      y Chatwoot se sincronizan automáticamente

      - 📱 **Gestión de Contactos**: Sincronización automática de nombres y
      teléfonos

      - 🔄 **Actualización LID→PN**: Migración automática de Local ID a Phone
      Number

      - 🏷️ **Nombres Inteligentes**: Sistema de nombres con tilde (~) para
      actualización automática

      - 🚫 **Separación de Grupos**: Opción para ignorar grupos en la
      sincronización

      - 👤 **Firma de Mensajes**: Identificación del agente en los mensajes
      enviados

      - 🔗 **Webhook Automático**: URL generada automáticamente para configurar
      en Chatwoot


      ### 🏷️ Sistema de Nombres Inteligentes:

      - **Nombres con tilde (~)**: Se actualizan automáticamente cuando el
      contacto modifica su nombre en WhatsApp

      - **Nombres específicos**: Para un nombre fijo, quite la tilde (~) del
      nombre en Chatwoot

      - **Ejemplo**: "~Juan Pérez" = automático, "Juan Pérez" = fijo

      - **Migración LID→PN**: Sin duplicación de conversaciones durante la
      transición

      - **Respuestas nativas**: Aparecen directamente en Chatwoot sin marcas
      externas


      ### ⚠️ Limitaciones conocidas:

      - **Sincronización del historial**: No implementada - solo se sincronizan
      los mensajes nuevos


      ### Casos de uso:

      - Atención centralizada en Chatwoot

      - Equipos de soporte con múltiples agentes

      - Integración con CRM mediante Chatwoot

      - Centralización de canales de comunicación

      - Gestión automática de contactos y nombres


      **Ideal para**: Empresas con equipos de atención, call centers, soporte
      técnico (en entorno de pruebas)


      **Requiere**: Instancia de Chatwoot configurada, tokens de API y entorno
      de pruebas


      **🚧 Recuerde**: Integración en BETA - las funcionalidades pueden cambiar
      sin previo aviso
  - name: Server-Sent Events (SSE)
paths:
  /send/status:
    post:
      tags:
        - Enviar Mensaje
      summary: Enviar estado (stories)
      description: >
        Envía un estado de WhatsApp con soporte para texto, imagen, video y
        audio.


        Este endpoint tiene 4 modos de uso:


        - envío normal: omita `recipients`, `max_recipients` y `group`

        - envío explícito: indique `recipients` para enviar solo a números
        específicos; la API aprovecha los válidos y descarta los inválidos con
        el motivo en `debug`

        - envío parcial: indique `max_recipients` para limitar la audiencia o
        aplicar un límite de seguridad sobre `recipients`

        - estado de grupo: indique `group` con el JID del grupo (`@g.us`)


        ## Observación importante sobre `recipients`

        Cuando se indica `recipients`, la API:


        - acepta números en formato WhatsApp, JIDs `@s.whatsapp.net` y JIDs
        `@lid`

        - cuando recibe `@lid`, intenta resolver ese identificador al PN
        (`@s.whatsapp.net`) usando los vínculos conocidos por la instancia

        - si el `@lid` no puede resolverse a un PN, ese elemento se descarta con
        el motivo `lid_unresolved`

        - valida si el destinatario existe en WhatsApp usando el mismo flujo de
        verificación del envío normal, en lotes para evitar una llamada remota
        por destinatario

        - cruza los destinatarios verificados con la audiencia permitida por la
        privacidad del estado, aceptando equivalencia PN/LID cuando ese vínculo
        es conocido

        - los destinatarios descartados aparecen en
        `debug.discarded_recipients`, con motivos como `invalid_format`,
        `lid_unresolved`, `not_on_whatsapp`, `outside_status_audience` y
        `duplicate`

        - la solicitud solo devuelve `400` cuando no queda ningún destinatario
        válido para el envío


        ## Observación importante sobre `max_recipients`

        El campo `max_recipients` se agregó como mitigación operativa.

        Ya hemos observado casos en los que WhatsApp bloquea inmediatamente el
        envío de estados cuando la audiencia es muy grande

        (por ejemplo, agendas con miles de contactos, como ~3.000).

        La causa exacta aún no está totalmente clara, por lo que se recomienda
        comenzar con límites menores y aumentarlos gradualmente.


        ## Estado de grupo

        Con `group`, el estado se publica en el grupo y aparece para los
        miembros en la pestaña Estados, en lugar del estado de la cuenta. La
        cuenta debe participar en el grupo. Aplica a texto, imagen y video: el
        audio (`audio`, `ptt` y `myaudio`) no funciona en el estado de grupo y
        devuelve `400`.


        - no se combina con `recipients` ni con `max_recipients` (devuelve
        `400`)

        - la respuesta incluye `Id`, `content`, `messageTimestamp` y `status`,
        sin `debug`


        ## Tipos soportados

        - `text`: texto con color de fondo y fuente

        - `image`: imagen con leyenda opcional

        - `video`: video con leyenda opcional

        - `audio`: audio normal

        - `myaudio`: audio enviado como voz

        - `ptt`: audio enviado como voz


        ## Colores de fondo

        Indique un valor de `1` a `19`. La API convierte este índice al color
        usado por WhatsApp.


        - `1`: amarillo verdoso suave

        - `2`: amarillo pálido

        - `3`: amarillo anaranjado vibrante

        - `4`: verde vibrante

        - `5`: verde musgo

        - `6`: verde claro

        - `7`: azul piscina

        - `8`: azul intenso

        - `9`: azul claro grisáceo

        - `10`: lila claro

        - `11`: lila cálido

        - `12`: púrpura azulado

        - `13`: magenta profundo

        - `14`: rosa suave

        - `15`: salmón rosado

        - `16`: marrón claro

        - `17`: gris claro azulado

        - `18`: gris medio

        - `19`: gris profundo predeterminado


        Ejemplo rápido:

        - `7`: azul piscina

        - `13`: magenta profundo

        - `19`: gris profundo (predeterminado)


        ## Fuentes válidas para `type=text`

        Valores aceptados actualmente: `0`, `1`, `2`, `6`, `7`, `8`, `9`, `10`.


        ## Límites

        - `text`: máximo de 656 caracteres

        - `max_recipients`: no puede ser negativo

        - `recipients`: acepta números, JIDs `@s.whatsapp.net` y JIDs `@lid`

        - `@lid` solo se incluye en el envío cuando puede resolverse localmente
        a un PN válido; de lo contrario, se descarta

        - para tipos de medios, `file` es obligatorio

        - `group`: JID del grupo (`@g.us`)


        Ejemplo de envío explícito:

        ```json

        {
          "type": "text",
          "text": "Novidades chegando!",
          "recipients": [
            "5511999999999",
            "5511888888888@s.whatsapp.net"
          ]
        }

        ```


        Ejemplo de envío parcial:

        ```json

        {
          "type": "text",
          "text": "Novidades chegando!",
          "background_color": 7,
          "font": 1,
          "max_recipients": 100
        }

        ```


        Ejemplo de estado de grupo:

        ```json

        {
          "type": "image",
          "file": "https://exemplo.com/status.jpg",
          "text": "Aviso para o grupo",
          "group": "120363123456789012@g.us"
        }

        ```
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - text
                    - image
                    - video
                    - audio
                    - myaudio
                    - ptt
                  description: Tipo del estado.
                  example: text
                text:
                  type: string
                  description: Texto principal o leyenda.
                  example: ¡Novedades en camino!
                background_color:
                  type: integer
                  minimum: 1
                  maximum: 19
                  description: Índice del color de fondo para estado de texto.
                  example: 7
                font:
                  type: integer
                  enum:
                    - 0
                    - 1
                    - 2
                    - 6
                    - 7
                    - 8
                    - 9
                    - 10
                  description: Fuente aceptada para `type=text`.
                  example: 1
                file:
                  type: string
                  description: URL o base64 del archivo multimedia.
                  example: https://example.com/video.mp4
                thumbnail:
                  type: string
                  description: >-
                    Campo aceptado en el payload; la API genera la miniatura
                    automáticamente cuando es necesario.
                  example: https://example.com/thumb.jpg
                mimetype:
                  type: string
                  description: MIME type del archivo, cuando sea necesario.
                  example: video/mp4
                recipients:
                  type: array
                  description: >-
                    Lista explícita de destinatarios. Acepta números en formato
                    de WhatsApp, JIDs `@s.whatsapp.net` y JIDs `@lid`. La API
                    valida elemento por elemento, descarta los inválidos con el
                    motivo en `debug` y envía al subconjunto válido restante.
                    Las entradas `@lid` dependen de una resolución conocida a
                    PN.
                  items:
                    type: string
                  example:
                    - '5511999999999'
                    - 5511888888888@s.whatsapp.net
                max_recipients:
                  type: integer
                  minimum: 0
                  description: >-
                    Limita el envío a un subconjunto determinístico de la
                    audiencia. Cuando se informa `recipients`, funciona como
                    límite de seguridad sobre la lista explícita ya validada.
                  example: 100
                group:
                  type: string
                  description: >-
                    JID del grupo (`@g.us`). Publica el estado en el grupo, para
                    los miembros, en lugar del estado de la cuenta. No se
                    combina con `recipients` ni `max_recipients`. Solo texto,
                    imagen y video: el audio devuelve `400`.
                  example: 120363123456789012@g.us
              required:
                - type
            examples:
              text:
                summary: Estado de texto
                value:
                  type: text
                  text: Novidades chegando!
              image:
                summary: Estado con imagen
                value:
                  type: image
                  file: https://exemplo.com/status.jpg
                  text: Confira a novidade
              audio:
                summary: Estado con audio
                value:
                  type: audio
                  file: https://exemplo.com/audio.mp3
              group:
                summary: Estado de grupo
                value:
                  type: image
                  file: https://exemplo.com/status.jpg
                  text: Aviso para o grupo
                  group: 120363123456789012@g.us
      responses:
        '200':
          description: Estado enviado con éxito
          content:
            application/json:
              schema:
                type: object
                properties:
                  Id:
                    type: string
                    description: ID del mensaje cuando hay un envío real.
                    example: ABCD1234
                  content:
                    type: object
                    description: Contenido procesado del mensaje cuando hay un envío real.
                  messageTimestamp:
                    type: integer
                    description: Timestamp en milisegundos cuando hay un envío real.
                    example: 1672531200000
                  status:
                    type: string
                    description: Estado del envío cuando hay un envío real.
                    example: Pending
                  debug:
                    type: object
                    description: >-
                      Métricas agregadas de la audiencia y de la selección
                      aplicada.
                    properties:
                      status_privacy_type:
                        type: string
                        example: contacts
                      audience_recipient_count:
                        type: integer
                        example: 245
                      total_contacts_in_store:
                        type: integer
                        example: 300
                      contacts_with_full_name:
                        type: integer
                        example: 245
                      contacts_with_push_name_only:
                        type: integer
                        example: 32
                      contacts_with_business_name_only:
                        type: integer
                        example: 23
                      used_default_privacy_fallback:
                        type: boolean
                        example: false
                      privacy_lookup_error:
                        type: string
                        example: privacy unavailable
                      explicit_recipients:
                        type: boolean
                        example: true
                      requested_recipient_count:
                        type: integer
                        example: 25
                      resolved_recipient_count:
                        type: integer
                        example: 20
                      discarded_recipient_count:
                        type: integer
                        example: 5
                      discarded_recipients:
                        type: array
                        items:
                          type: object
                          properties:
                            input:
                              type: string
                              example: 144637553594388@lid
                            reason:
                              type: string
                              example: lid_unresolved
                      max_recipients:
                        type: integer
                        example: 100
                      selected_recipient_count:
                        type: integer
                        example: 100
                      partial_send:
                        type: boolean
                        example: true
        '400':
          description: Solicitud inválida
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: Fuente inválida
                  debug:
                    type: object
                    description: >-
                      Presente especialmente cuando se informó `recipients`,
                      para indicar qué elementos se descartaron antes de
                      concluir que no quedó ningún recipient válido.
        '401':
          description: No autorizado
        '500':
          description: Error interno del servidor
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: 'failed to determine status audience: privacy unavailable'
components:
  securitySchemes:
    token:
      name: token
      type: apiKey
      in: header

````

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