> ## 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.

# Mensaje interactivo

> Envía botones de respuesta o una lista dentro de los límites admitidos.

Envía botones de respuesta o una lista dentro de los límites admitidos.

## Endpoint

```http theme={null}
POST /broadcast/public/send-freeform
```

## Campos comunes

| Campo             | Tipo   | Requerido | Descripción                                   |
| ----------------- | ------ | --------- | --------------------------------------------- |
| `fromPhoneNumber` | cadena | Requerido | Su número WABA                                |
| `toPhoneNumber`   | cadena | Requerido | Destinatario con código de país, solo dígitos |
| `type`            | cadena | Requerido | Uno de los ocho tipos siguientes              |

**Límite:** 20 solicitudes por minuto para cada combinación de clave API y `fromPhoneNumber`.

## Botones de respuesta

Hasta **3** botones de respuesta. Se rechaza más de tres.

```json theme={null}
{
  "fromPhoneNumber": "14844634680",
  "toPhoneNumber": "919675360316",
  "type": "interactive",
  "interactive": {
    "type": "button",
    "header": { "type": "text", "text": "Renew your plan" },
    "body": { "text": "Your subscription ends in 3 days. Renew now?" },
    "footer": { "text": "Reply STOP to opt out" },
    "action": {
      "buttons": [
        { "type": "reply", "reply": { "id": "renew_yes", "title": "Renew now" } },
        { "type": "reply", "reply": { "id": "renew_later", "title": "Remind me later" } }
      ]
    }
  }
}
```

## Interactivo — lista

Hasta **10** filas contadas en *todas* las secciones combinadas, no por sección.

```json theme={null}
{
  "fromPhoneNumber": "14844634680",
  "toPhoneNumber": "919675360316",
  "type": "interactive",
  "interactive": {
    "type": "list",
    "header": { "type": "text", "text": "Pick a plan" },
    "body": { "text": "Choose the plan that fits your team." },
    "action": {
      "button": "View plans",
      "sections": [
        {
          "title": "Monthly",
          "rows": [
            { "id": "starter_m", "title": "Starter", "description": "3 seats included" },
            { "id": "growth_m", "title": "Growth", "description": "10 seats included" }
          ]
        }
      ]
    }
  }
}
```

## Respuesta satisfactoria

El endpoint devuelve la misma respuesta satisfactoria para este tipo de contenido.

```json theme={null}
{
  "status": true,
  "status_code": 200,
  "message": "Free-form message queued successfully",
  "data": {}
}
```

## Errores

| Estado        | Causa                                                  | Qué comprobar                                    |
| ------------- | ------------------------------------------------------ | ------------------------------------------------ |
| `400`         | Un campo común o específico no es válido               | Comprueba los campos obligatorios de esta página |
| `400`         | La URL o extensión multimedia no es compatible         | Usa `http` o `https` y una extensión admitida    |
| `400`         | Las coordenadas, botones o filas superan los límites   | Corrige los límites de la carga útil             |
| `401`         | La clave o el remitente no pertenece a la organización | Usa un remitente obtenido con la misma clave     |
| `429`         | Se superó el límite de 20 solicitudes                  | Espera el intervalo indicado en la respuesta     |
| `500` o `503` | Fallo transitorio del servicio                         | Reintenta con espera exponencial                 |
