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

# Status da mensagem

> Consultar o status de entrega de uma mensagem individual enviada com template

## Descrição

Este endpoint retorna o status atualizado de uma mensagem individual enviada com um template do WhatsApp. É o complemento do padrão fire-and-forget de [Enviar mensagem](/pt/api-reference/mensajes/enviar-mensaje): você usa o `message_id` (wamid) retornado no envio para consultar em qual status de entrega a mensagem está.

Os status de entrega (`sent`, `delivered`, `read`, `failed`) são atualizados automaticamente conforme a Meta envia os webhooks correspondentes. Uma mensagem recém-enviada normalmente mostra `sent` até chegarem as confirmações de entrega e leitura.

## Cabeçalho de autenticação

<ParamField header="X-API-Key" type="string" required>
  Sua API Key da Mindo. Formato: `mindo_xxxxxxxxxxxxxxxxxxxxxxxx`
</ParamField>

## Parâmetros de rota

<ParamField path="message_id" type="string" required>
  ID da mensagem atribuído pela Meta (wamid). É o valor de `message_id` retornado por [Enviar mensagem](/pt/api-reference/mensajes/enviar-mensaje) ao enviar o template.
</ParamField>

## Resposta (200 OK)

<ResponseField name="id" type="integer">
  ID interno do registro de envio na Mindo.
</ResponseField>

<ResponseField name="template" type="object">
  Informações do template utilizado.

  <Expandable title="Propriedades de template">
    <ResponseField name="id" type="integer">
      ID interno do template.
    </ResponseField>

    <ResponseField name="name" type="string">
      Nome do template.
    </ResponseField>

    <ResponseField name="language" type="string">
      Idioma do template (ex: `"es"`, `"en"`, `"pt_BR"`).
    </ResponseField>

    <ResponseField name="category" type="string">
      Categoria do template na Meta (ex: `"MARKETING"`, `"UTILITY"`, `"AUTHENTICATION"`).
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="recipient" type="object">
  Informações do destinatário.

  <Expandable title="Propriedades de recipient">
    <ResponseField name="phone" type="string">
      Número de telefone do destinatário.
    </ResponseField>

    <ResponseField name="contact_name" type="string | null">
      Nome do contato na Mindo. `null` se o telefone não corresponder a um contato registrado.
    </ResponseField>

    <ResponseField name="contact_id" type="integer | null">
      ID do contato na Mindo. `null` se o telefone não corresponder a um contato registrado.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="variables_used" type="object">
  Variáveis usadas para renderizar o template neste envio.
</ResponseField>

<ResponseField name="delivery_status" type="object">
  Status de entrega detalhado com os timestamps de cada transição. Atualizado via webhooks da Meta.

  <Expandable title="Propriedades de delivery_status">
    <ResponseField name="current" type="string">
      Status atual da mensagem. Veja [tabela de status](#status-da-mensagem).
    </ResponseField>

    <ResponseField name="sent_at" type="string (ISO 8601) | null">
      Data e hora em que a mensagem foi enviada para a Meta.
    </ResponseField>

    <ResponseField name="delivered_at" type="string (ISO 8601) | null">
      Data e hora da entrega ao dispositivo. `null` se ainda não foi entregue.
    </ResponseField>

    <ResponseField name="read_at" type="string (ISO 8601) | null">
      Data e hora da leitura. `null` se ainda não foi lida.
    </ResponseField>

    <ResponseField name="failed_at" type="string (ISO 8601) | null">
      Data e hora em que o envio falhou. `null` se não falhou.
    </ResponseField>

    <ResponseField name="error_code" type="string | null">
      Código de erro da Meta se a mensagem falhou. `null` se não houve erro.
    </ResponseField>

    <ResponseField name="error_message" type="string | null">
      Descrição do erro se a mensagem falhou. `null` se não houve erro.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="meta_message_id" type="string | null">
  ID da mensagem na Meta (wamid). Coincide com o `message_id` da rota.
</ResponseField>

<ResponseField name="was_successful" type="boolean">
  Indica se o envio inicial para a Meta foi bem-sucedido.
</ResponseField>

<ResponseField name="error_message" type="string | null">
  Mensagem de erro do envio inicial. `null` se não houve erro.
</ResponseField>

<ResponseField name="sent_at" type="string (ISO 8601)">
  Data e hora em que o envio foi registrado.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X GET "https://api.mindosoftware.com/api/v1/meta-templates/messages/wamid.HBgNNTQ5MTEyMzQ1Njc4FQIAERgSQjVBN0YzRjQ2NzFCNDVBNQA=/" \
    -H "X-API-Key: mindo_xxxxxxxxxxxxxxxxxxxxxxxx"
  ```

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

  message_id = "wamid.HBgNNTQ5MTEyMzQ1Njc4FQIAERgSQjVBN0YzRjQ2NzFCNDVBNQA="

  response = requests.get(
      f"https://api.mindosoftware.com/api/v1/meta-templates/messages/{message_id}/",
      headers={"X-API-Key": "mindo_xxxxxxxxxxxxxxxxxxxxxxxx"}
  )

  data = response.json()
  print(f"Status atual: {data['delivery_status']['current']}")
  print(f"Entregue: {data['delivery_status']['delivered_at']}")
  print(f"Lida: {data['delivery_status']['read_at']}")
  ```

  ```javascript JavaScript theme={null}
  const messageId = "wamid.HBgNNTQ5MTEyMzQ1Njc4FQIAERgSQjVBN0YzRjQ2NzFCNDVBNQA=";

  const response = await fetch(
    `https://api.mindosoftware.com/api/v1/meta-templates/messages/${encodeURIComponent(messageId)}/`,
    {
      method: "GET",
      headers: {
        "X-API-Key": "mindo_xxxxxxxxxxxxxxxxxxxxxxxx"
      }
    }
  );

  const data = await response.json();
  console.log("Status atual:", data.delivery_status.current);
  console.log("Entregue:", data.delivery_status.delivered_at);
  console.log("Lida:", data.delivery_status.read_at);
  ```
</RequestExample>

<ResponseExample>
  ```json 200 - OK theme={null}
  {
    "id": 123,
    "template": {
      "id": 45,
      "name": "welcome_message",
      "language": "es",
      "category": "MARKETING"
    },
    "recipient": {
      "phone": "+5491112345678",
      "contact_name": "Juan Perez",
      "contact_id": 789
    },
    "variables_used": {
      "name": "Juan Perez",
      "code": "ABC123"
    },
    "delivery_status": {
      "current": "read",
      "sent_at": "2025-11-16T21:30:00Z",
      "delivered_at": "2025-11-16T21:30:05Z",
      "read_at": "2025-11-16T21:31:00Z",
      "failed_at": null,
      "error_code": null,
      "error_message": null
    },
    "meta_message_id": "wamid.HBgNNTQ5MTEyMzQ1Njc4FQIAERgSQjVBN0YzRjQ2NzFCNDVBNQA=",
    "was_successful": true,
    "error_message": null,
    "sent_at": "2025-11-16T21:30:00Z"
  }
  ```

  ```json 404 - Mensagem não encontrada theme={null}
  {
    "error": "Mensaje no encontrado"
  }
  ```

  ```json 403 - Sem acesso theme={null}
  {
    "error": "No tienes acceso a este mensaje"
  }
  ```

  ```json 401 - Não autenticado theme={null}
  {
    "error": "Este endpoint requiere autenticacion con API Key (header X-API-Key)"
  }
  ```
</ResponseExample>

## Status da mensagem

O campo `delivery_status.current` pode ter os seguintes valores:

| Status      | Descrição                                        |
| ----------- | ------------------------------------------------ |
| `sent`      | Mensagem enviada à Meta com sucesso              |
| `delivered` | Mensagem entregue ao dispositivo do destinatário |
| `read`      | Mensagem lida pelo destinatário                  |
| `failed`    | O envio da mensagem falhou                       |

<Note>
  Os status são atualizados automaticamente conforme a Meta envia os webhooks de entrega e leitura. Se você consultar imediatamente após o envio, é normal ver o status `sent` até as confirmações chegarem.
</Note>
