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

# Reintentar Mensaje

> Reintenta el envío de un mensaje que falló

Cuando un mensaje falla (por ejemplo, por ventana de 24h expirada), queda guardado en Whaapy con `status: failed`.

Este endpoint te permite reintentar el envío una vez que las condiciones permitan su entrega (por ejemplo, después de que el usuario te escriba o después de enviar un template).

## Path Parameters

<ParamField path="id" type="string" required>
  UUID del mensaje a reintentar. Lo recibes en `data.id` de la respuesta original.
</ParamField>

## Cuándo Usar Este Endpoint

<AccordionGroup>
  <Accordion title="Después de que el usuario responda">
    Si enviaste un mensaje y falló por ventana de 24h (`131047`), el usuario puede escribirte para reabrir la ventana. Luego puedes reintentar el mensaje original.
  </Accordion>

  <Accordion title="Después de enviar un template">
    Los templates pueden enviarse en cualquier momento. Una vez que el usuario responde al template, se abre una nueva ventana de 24h y puedes reintentar mensajes pendientes.
  </Accordion>

  <Accordion title="Después de configurar pagos">
    Si el error fue `131042` (pago requerido), una vez configures el método de pago en Meta Business, puedes reintentar.
  </Accordion>
</AccordionGroup>

## Request

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST https://api.whaapy.com/messages/v1/550e8400-e29b-41d4-a716-446655440000/retry \
    -H "Authorization: Bearer wha_TU_API_KEY"
  ```

  ```javascript JavaScript theme={null}
  const messageId = '550e8400-e29b-41d4-a716-446655440000';

  const response = await fetch(`https://api.whaapy.com/messages/v1/${messageId}/retry`, {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer wha_TU_API_KEY'
    }
  });

  const data = await response.json();
  ```

  ```python Python theme={null}
  import requests

  message_id = '550e8400-e29b-41d4-a716-446655440000'

  response = requests.post(
      f'https://api.whaapy.com/messages/v1/{message_id}/retry',
      headers={
          'Authorization': 'Bearer wha_TU_API_KEY'
      }
  )

  print(response.json())
  ```
</RequestExample>

## Respuesta Exitosa

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "message": "Mensaje reenviado exitosamente",
    "data": {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "messageId": "wamid.HBgLNTIxNTUxMjM0NTY3OA==",
      "status": "sent",
      "retriedAt": "2026-01-22T11:00:00Z"
    }
  }
  ```
</ResponseExample>

## Respuestas de Error

### Mensaje No Encontrado

<ResponseExample>
  ```json 404 Not Found theme={null}
  {
    "error": "not_found",
    "message": "Mensaje no encontrado"
  }
  ```
</ResponseExample>

### Mensaje No Está Fallido

<ResponseExample>
  ```json 400 Bad Request theme={null}
  {
    "error": "invalid_state",
    "message": "Solo se pueden reintentar mensajes con status 'failed'"
  }
  ```
</ResponseExample>

### Reintento También Falló

<ResponseExample>
  ```json 400 Bad Request theme={null}
  {
    "error": "retry_failed",
    "message": "La ventana de conversación de 24 horas sigue expirada",
    "code": "131047",
    "action_required": "Enviar template o esperar respuesta del usuario"
  }
  ```
</ResponseExample>

## Flujo de Recuperación de Mensajes Fallidos

```mermaid theme={null}
sequenceDiagram
    participant App as Tu App
    participant Whaapy as Whaapy API
    participant Meta as Meta/WhatsApp
    participant User as Usuario

    App->>Whaapy: POST /messages/v1 (texto)
    Whaapy->>Meta: Enviar mensaje
    Meta-->>Whaapy: Error 131047 (ventana cerrada)
    Whaapy-->>App: { status: "failed", id: "xxx" }
    
    Note over App,User: Opción 1: Enviar template
    App->>Whaapy: POST /messages/v1 (template)
    Whaapy->>Meta: Enviar template
    Meta-->>User: Template recibido
    User-->>Meta: Responde al template
    Meta-->>Whaapy: Mensaje del usuario
    
    Note over App: Ventana reabierta
    App->>Whaapy: POST /messages/v1/xxx/retry
    Whaapy->>Meta: Reenviar mensaje original
    Meta-->>User: Mensaje entregado
    Whaapy-->>App: { status: "sent" }
```

## Best Practices

<Tip>
  **Implementa un sistema de cola** para mensajes fallidos. Cuando recibas un webhook indicando que el usuario respondió, procesa la cola de mensajes pendientes para esa conversación.
</Tip>

<Warning>
  **No reintentes inmediatamente** después de un error de ventana. Primero debes lograr que el usuario responda (via template u otro medio).
</Warning>

## Campos del Mensaje Reusados

Cuando reintentas un mensaje, Whaapy usa los mismos datos que guardó originalmente:

* **Destinatario**: El mismo `to` o `conversationId`
* **Tipo**: El mismo `type` (text, image, etc.)
* **Contenido**: El mismo `content`, `text`, `image`, etc.
* **Metadata**: Se preservan campos opcionales como `caption`

<Note>
  Si necesitas cambiar el contenido del mensaje, mejor envía uno nuevo en lugar de reintentar.
</Note>
