Pular para o conteúdo

Histórico de recibos

Após uma mensagem ser enviada, o WhatsApp retorna confirmações de entrega e leitura. O histórico de recibos registra essas confirmações: delivered (entregue no dispositivo) e read (lida pelo destinatário), em ordem cronológica crescente.

Consultar recibos

Para listar o histórico de recibos de uma mensagem, faça uma requisição GET informando o message_id retornado no envio.

Endpoint: GET /v1/messages/{message_id}/receipts para o número principal. Para números extras, use GET /v1/numbers/{ref}/messages/{message_id}/receipts, em que {ref} é o alias atual do número ou o id do número (num_…, o number_id da mensagem).

Escopo obrigatório: messages:read

Parâmetros de caminho:

ParâmetroTipoDescrição
refstring(apenas na rota de número extra) Alias do número ao qual a mensagem pertence (main ou o alias de um número extra) ou o id dele (num_…).
message_idstringIdentificador público da mensagem (msg_{hex32})
turbo-notify.sh
curl -X GET \
https://api.turbonotify.com/v1/messages/msg_0198d3c5a1b24d3e9f01a2b3c4d5e6f7/receipts \
-H "Authorization: Bearer SUA_CHAVE"

Exemplos de resposta

Com histórico completo (mensagem direta)

Status HTTP: 200
{
  "message_id": "msg_0198d3c5a1b24d3e9f01a2b3c4d5e6f7",
  "receipts": [
    {
      "from": {
        "contact_id": "ct_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
        "name": "Ana Souza",
        "number": "5511988887777"
      },
      "status": "delivered",
      "at": "2025-07-16T10:00:05Z"
    },
    {
      "from": {
        "contact_id": "ct_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
        "name": "Ana Souza",
        "number": "5511988887777"
      },
      "status": "read",
      "at": "2025-07-16T10:01:12Z"
    }
  ]
}

Em grupo (múltiplos destinatários)

O campo contact_id aparece apenas para participantes cujo contato já esteja registrado no Turbo Notify. O campo name (o nome de exibição no WhatsApp) é independente: pode aparecer mesmo sem contact_id. No exemplo abaixo, Ana Souza já é um contato registrado; Carlos Lima tem nome de exibição, mas ainda não é um contato registrado.

Status HTTP: 200
{
  "message_id": "msg_0198d3c5a1b24d3e9f01a2b3c4d5e6f7",
  "receipts": [
    {
      "from": {
        "contact_id": "ct_b1c2d3e4f5a6b1c2d3e4f5a6b1c2d3e4",
        "name": "Ana Souza",
        "number": "5511988887777"
      },
      "status": "delivered",
      "at": "2025-07-16T10:00:05Z"
    },
    {
      "from": {
        "name": "Carlos Lima",
        "number": "5511977776666"
      },
      "status": "delivered",
      "at": "2025-07-16T10:00:08Z"
    },
    {
      "from": {
        "contact_id": "ct_b1c2d3e4f5a6b1c2d3e4f5a6b1c2d3e4",
        "name": "Ana Souza",
        "number": "5511988887777"
      },
      "status": "read",
      "at": "2025-07-16T10:01:12Z"
    }
  ]
}

Sem recibos ainda

Status HTTP: 200
{
  "message_id": "msg_0198d3c5a1b24d3e9f01a2b3c4d5e6f7",
  "receipts": []
}

Estrutura da resposta

CampoTipoDescrição
message_idstringIdentificador público da mensagem.
receiptsarrayLista de transições de status, em ordem cronológica crescente.
receipts[].fromobjectQuem confirmou o recibo. Omitido quando o WhatsApp não informa nenhum dado de quem confirmou o recibo.
receipts[].from.contact_idstringIdentificador público do contato (ct_{hex32}). Omitido quando não disponível.
receipts[].from.namestringNome de exibição no WhatsApp (dado pessoal, sob responsabilidade da sua organização). Omitido quando não disponível.
receipts[].from.numberstringNúmero E.164 sem + de quem confirmou o recibo. Omitido quando o WhatsApp não revela o número de quem confirmou o recibo.
receipts[].statusstringStatus atingido nesta transição (delivered ou read).
receipts[].atstringData e hora ISO 8601 em que o status foi registrado.

Tabela de status

StatusDescrição
deliveredConfirmação do WhatsApp de que a mensagem foi entregue ao dispositivo.
readConfirmação do WhatsApp de que a mensagem foi lida pelo destinatário.

Nota: Apenas confirmações enviadas pelo WhatsApp (delivered e read) são registradas nos recibos. O status sent (envio ao WhatsApp) pode ser consultado via GET /v1/numbers/{ref}/messages/{id}/status.

Exige plano Empresarial ou superior

O histórico detalhado de recibos (GET .../messages/{id}/receipts) requer o recurso read_receipts, disponível a partir do plano Empresarial. Organizações nos planos Gratuito e Lobo Solitário recebem:

Status HTTP: 402
{
  "error": "feature_not_available"
}

Essa restrição vale para as duas rotas (a aninhada /v1/numbers/{ref}/messages/{id}/receipts e a rota curta /v1/messages/{id}/receipts do número principal). A restrição não afeta o status geral da mensagem: GET .../messages/{id}/status continua disponível em todos os planos, inclusive no Gratuito e no Lobo Solitário. Só o histórico detalhado, mudança a mudança, exige o plano Empresarial ou superior.

Veja Cota e uso para os limites e restrições de cada plano.

Erros possíveis

StatusCódigo de erroDescrição
402feature_not_availableOrganização no plano Gratuito ou Lobo Solitário: o histórico de recibos exige o plano Empresarial ou superior.
401not_authenticatedA chave de API está inválida ou ausente.
403insufficient_scopeA chave de API não possui o escopo messages:read.
404not_foundA mensagem não foi encontrada, pertence a outra organização ou pertence a um número diferente do da URL (na rota atalho sem {ref}, o número principal): todos esses casos devolvem a mesma resposta, sem distinção.
404number_not_found(apenas na rota com {ref}) O alias ou o id informado na URL não corresponde a nenhum número cadastrado.
400invalid_number_id(apenas na rota com {ref}) O valor na URL começa com num_, mas não é um id de número válido.
500internal_errorErro interno inesperado no servidor.