Pular para o conteúdo

Mensagens agendadas

Mensagens agendadas são as mesmas da Agenda do painel: o que você agenda pela API aparece lá, e a equipe pode ver e acompanhar. O despachante verifica a fila a cada minuto e envia as mensagens que chegaram no horário.

Use para lembretes de consulta, cobranças, follow-ups e renovações.

  • send_at precisa estar no futuro e em até 365 dias.
  • O texto aceita as variáveis {{nome}} e {{telefone}}, preenchidas com os dados do contato na hora do envio.
  • Até 10 anexos; o texto vira a legenda do primeiro anexo que aceita legenda.
  • Não disponível para conversas do Chat do site (webchat) nem para grupos.
{
"id": "603916c7-604c-4c56-8a58-f3f76886634b",
"object": "scheduled_message",
"contact_id": "3f1c2b9a-7d4e-4c55-8a0e-1b2c3d4e5f60",
"to": "5511999998888",
"title": "Lembrete de consulta",
"text": "Oi {{nome}}, passando para lembrar da sua consulta amanhã às 9h.",
"media": [],
"send_at": "2026-12-01T15:00:00Z",
"status": "pending",
"sent_at": null,
"message_id": null,
"error": null,
"created_at": "2026-11-11T14:50:00Z",
"updated_at": "2026-11-11T14:50:00Z"
}
Campo Tipo Descrição
id UUID ID da mensagem agendada.
object string Sempre scheduled_message.
contact_id UUID ou null Contato de destino.
to string ou null Telefone de destino.
title string Título na Agenda (padrão: “Mensagem via API”).
text string ou null Texto, com as variáveis ainda não substituídas.
media lista Anexos: cada um com url, mime_type e filename.
send_at data Quando deve ser enviada.
status string pending, processing, sent, failed ou canceled.
sent_at data ou null Quando foi enviada.
message_id UUID ou null A mensagem gerada no envio.
error string ou null Motivo da falha, quando status é failed.
created_at data Criação.
updated_at data Última alteração.
Status Significado
pending Esperando o horário. É o único status que pode ser cancelado.
processing Sendo enviada agora.
sent Enviada (veja sent_at e message_id).
failed Não foi possível enviar (veja error).
canceled Cancelada antes do envio.

POST/v1/scheduled-messages

Programa uma mensagem para sair numa data e hora. Ela aparece na Agenda do painel e é enviada no horário pelo WhatsApp da conversa.

Parâmetro Onde Tipo Obrigatório Descrição
to corpo string to ou contact_id Telefone com DDI e DDD.
contact_id corpo UUID to ou contact_id Contato de destino.
send_at corpo data sim ISO 8601 com fuso (ex.: 2026-12-01T12:00:00-03:00). No futuro e em até 365 dias.
text corpo string text e/ou media Até 4096 caracteres. Aceita {{nome}} e {{telefone}}.
media corpo lista text e/ou media Até 10 anexos, cada um com url (HTTPS pública), type (image, video, audio, document) e, opcionalmente, filename, mime_type e voice_note. O texto vira legenda do primeiro anexo que aceita legenda.
title corpo string não Título na Agenda (até 120 caracteres). Padrão: “Mensagem via API”.
Idempotency-Key cabeçalho string não (recomendado) Evita agendar duas vezes numa retentativa.
Janela do terminal
curl https://platform.toptalking.com.br/v1/scheduled-messages \
-H "Authorization: Bearer $TOPTALKING_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: consulta-987-lembrete" \
-d '{
"to": "5511999998888",
"send_at": "2026-12-01T12:00:00-03:00",
"title": "Lembrete de consulta",
"text": "Oi {{nome}}, passando para lembrar da sua consulta amanhã às 9h."
}'
{
"id": "603916c7-604c-4c56-8a58-f3f76886634b",
"object": "scheduled_message",
"contact_id": "3f1c2b9a-7d4e-4c55-8a0e-1b2c3d4e5f60",
"to": "5511999998888",
"title": "Lembrete de consulta",
"text": "Oi {{nome}}, passando para lembrar da sua consulta amanhã às 9h.",
"media": [],
"send_at": "2026-12-01T15:00:00Z",
"status": "pending",
"sent_at": null,
"message_id": null,
"error": null,
"created_at": "2026-11-11T14:50:00Z",
"updated_at": "2026-11-11T14:50:00Z"
}
HTTP code Quando acontece
400 missing_field Faltou send_at, to/contact_id ou text/media.
400 invalid_field Campo inválido: send_at sem fuso, no passado ou a mais de 365 dias, mais de 10 anexos, texto longo demais, conversa do Chat do site ou de grupo…
400 invalid_phone Telefone inválido.
403 read_only_key Chave somente leitura.
404 resource_not_found contact_id não encontrado.
409 idempotency_conflict Idempotency-Key reutilizada com outro corpo.
400 invalid_field
{
"error": {
"type": "invalid_request_error",
"code": "invalid_field",
"message": "`send_at` precisa estar no futuro.",
"param": "send_at",
"request_id": "req_6f1d2c3b4a5e"
}
}

Quando a mensagem for enviada (ou falhar), você recebe os webhooks scheduled_message.sent ou scheduled_message.failed.

GET/v1/scheduled-messages

As mensagens agendadas, ordenadas pelo horário de envio (as mais próximas primeiro). Use para mostrar a agenda de um cliente ou conferir o que ainda vai sair.

Parâmetro Onde Tipo Obrigatório Descrição
status query string não pending, processing, sent, failed ou canceled.
contact_id query UUID não Só as deste contato.
limit query inteiro não Itens por página, 1 a 100 (padrão 20).
cursor query string não next_cursor da página anterior.
Janela do terminal
curl "https://platform.toptalking.com.br/v1/scheduled-messages?status=pending&limit=50" \
-H "Authorization: Bearer $TOPTALKING_API_KEY"
{
"object": "list",
"data": [
{
"id": "603916c7-604c-4c56-8a58-f3f76886634b",
"object": "scheduled_message",
"contact_id": "3f1c2b9a-7d4e-4c55-8a0e-1b2c3d4e5f60",
"to": "5511999998888",
"title": "Lembrete de consulta",
"text": "Oi {{nome}}, passando para lembrar da sua consulta amanhã às 9h.",
"media": [],
"send_at": "2026-12-01T15:00:00Z",
"status": "pending",
"sent_at": null,
"message_id": null,
"error": null,
"created_at": "2026-11-11T14:50:00Z",
"updated_at": "2026-11-11T14:50:00Z"
}
],
"has_more": false,
"next_cursor": null
}

Só os gerais: 401 (chave) e 429 (limite por minuto). Veja Erros.

GET/v1/scheduled-messages/{scheduled_message_id}

Uma mensagem agendada pelo ID. Use para saber se já saiu (status, sent_at) e qual mensagem ela gerou (message_id).

Parâmetro Onde Tipo Obrigatório Descrição
scheduled_message_id caminho UUID sim ID da mensagem agendada.
Janela do terminal
curl https://platform.toptalking.com.br/v1/scheduled-messages/d3440bed-1a6f-4470-9d89-cec62fe2fc67 \
-H "Authorization: Bearer $TOPTALKING_API_KEY"

Exemplo de uma mensagem que já foi enviada:

{
"id": "d3440bed-1a6f-4470-9d89-cec62fe2fc67",
"object": "scheduled_message",
"contact_id": "721bfe94-e549-4354-b90c-a8d679e9b271",
"to": "5521987654321",
"title": "Renovação do plano",
"text": "Oi {{nome}}! Seu plano vence na sexta. Quer que a gente renove?",
"media": [],
"send_at": "2026-11-10T13:00:00Z",
"status": "sent",
"sent_at": "2026-11-10T13:00:41Z",
"message_id": "8e395744-cc4c-4eae-9ccd-06c8dde834e0",
"error": null,
"created_at": "2026-11-03T18:22:10Z",
"updated_at": "2026-11-10T13:00:41Z"
}
HTTP code Quando acontece
404 resource_not_found A mensagem agendada não existe.

DELETE/v1/scheduled-messages/{scheduled_message_id}

Cancela uma mensagem que ainda está pending — ela some da fila e fica como cancelada na Agenda. A resposta é o item com status: "canceled".

Parâmetro Onde Tipo Obrigatório Descrição
scheduled_message_id caminho UUID sim ID da mensagem agendada.
Janela do terminal
curl -X DELETE https://platform.toptalking.com.br/v1/scheduled-messages/603916c7-604c-4c56-8a58-f3f76886634b \
-H "Authorization: Bearer $TOPTALKING_API_KEY"
{
"id": "603916c7-604c-4c56-8a58-f3f76886634b",
"object": "scheduled_message",
"contact_id": "3f1c2b9a-7d4e-4c55-8a0e-1b2c3d4e5f60",
"to": "5511999998888",
"title": "Lembrete de consulta",
"text": "Oi {{nome}}, passando para lembrar da sua consulta amanhã às 9h.",
"media": [],
"send_at": "2026-12-01T15:00:00Z",
"status": "canceled",
"sent_at": null,
"message_id": null,
"error": null,
"created_at": "2026-11-11T14:50:00Z",
"updated_at": "2026-11-11T15:02:13Z"
}
HTTP code Quando acontece
403 read_only_key Chave somente leitura.
404 resource_not_found A mensagem agendada não existe.
409 invalid_state A mensagem não está mais pending (já foi enviada, está sendo enviada, falhou ou já foi cancelada).
409 invalid_state
{
"error": {
"type": "conflict_error",
"code": "invalid_state",
"message": "Só é possível cancelar mensagens pendentes (status atual: sent).",
"request_id": "req_6f1d2c3b4a5e"
}
}