API · Atualizado em 12/10/2026
Agendar mensagens pela API
Agende uma mensagem de texto ou um modelo para um contato em data futura, consulte o resultado, filtre por status e cancele antes da hora.
O agendamento guarda uma mensagem para ser enviada a um contato em uma data futura. Na hora marcada, o Pipe envia pelo mesmo caminho de qualquer outra mensagem: no ticket aberto, respeitando a janela de 24 horas, ou com um modelo quando é preciso abrir a conversa.
Quando usar
- Lembrete de consulta ou de pagamento em um dia e hora definidos.
- Mensagem de acompanhamento depois de alguns dias, sem manter um processo seu rodando.
Pré-requisitos
mensagens:escreverpara criar e cancelar,mensagens:lerpara consultar.- Um contato existente. Veja Contatos pela API.
- Para abrir conversa fora da janela de 24 horas, um modelo aprovado.
Rotas
| Método | Rota | Escopo | O que faz |
|---|---|---|---|
| POST | /v1/schedules | mensagens:escrever | Cria ou substitui um agendamento |
| GET | /v1/schedules | mensagens:ler | Lista agendamentos |
| GET | /v1/schedules/:id | mensagens:ler | Lê um agendamento |
| DELETE | /v1/schedules/:id | mensagens:escrever | Cancela um agendamento ainda não executado |
Passo a passo
- Defina o destinatário em
message.to: o id do contato, o telefone ou a identidade dele. - Crie o agendamento:
curl -s -X POST https://http.pipebr.app/v1/schedules \
-H "Authorization: Bearer $PIPE_CHAVE" \
-H "Content-Type: application/json" \
-d '{
"name": "Lembrete de consulta",
"when": "2026-10-20T12:00:00.000Z",
"message": {
"id": "lembrete-consulta-1234",
"to": "+5511955550101",
"type": "text/plain",
"content": "Lembrete: sua consulta é amanhã às 9h."
}
}'
- A resposta é 201 (novo) ou 200 (substituiu um agendamento com o mesmo id):
{
"id": "lembrete-consulta-1234",
"name": "Lembrete de consulta",
"contactId": "b3a1c9de-0000-4000-8000-000000000010",
"when": "2026-10-20T12:00:00.000Z",
"status": "scheduled",
"message": {
"id": "lembrete-consulta-1234",
"to": "b3a1c9de-0000-4000-8000-000000000010",
"type": "text/plain",
"content": "Lembrete: sua consulta é amanhã às 9h."
},
"createdAt": "2026-10-12T14:30:00.000Z",
"executedAt": null
}
- Para agendar um modelo, use o formato de modelo do WhatsApp:
{
"when": "2026-10-20T12:00:00.000Z",
"message": {
"to": "+5511955550101",
"type": "application/json",
"content": {
"type": "template",
"template": {
"name": "lembrete_consulta",
"language": { "code": "pt_BR" },
"components": [ { "type": "body", "parameters": [ { "type": "text", "text": "Maria" } ] } ]
}
}
}
}
Só os parâmetros de texto do corpo são usados.
Consultar e cancelar
GET /v1/schedules aceita status (scheduled, executed, canceled ou failed), contactId, from, to (ISO 8601), limit e cursor. Depois de executado ou com falha, o agendamento traz o campo result e executedAt.
Para cancelar, chame DELETE /v1/schedules/:id. A resposta mostra o agendamento com status: "canceled". Cancelar um agendamento já executado dá 409 schedule_not_cancellable.
Resultado esperado
Na data marcada, o contato recebe a mensagem e o agendamento passa para executed, com o resultado do envio. Se o envio falhar, ele passa para failed e o resultado fica em result.
Problemas comuns
- 422
schedule_in_past:whenprecisa estar no futuro. - 422
schedule_too_far: o limite é um ano. - 404: o contato não existe ou está fora do fluxo da chave.
- 409
schedule_already_executedouschedule_id_in_use: o id já foi usado por um agendamento executado ou de outro fluxo. Use outro id. - 422
schedule_broadcast_not_supported: lista de transmissão não é aceita por esta rota.
Boas práticas
- Defina seu próprio
message.id. Ele funciona como identificador estável para substituir ou cancelar depois. - Para fora da janela de 24 horas, agende um modelo, não texto livre.
- O conteúdo agendado pode ter até 64 KB.
Próximos passos
- Para listas grandes, veja Mensagens ativas e campanhas.
- Para envio imediato dentro de um ticket, veja Enviar mensagens.
Perguntas frequentes
Até quando posso agendar?
Até um ano à frente. A data when precisa estar no futuro e em formato ISO 8601.
Posso trocar um agendamento?
Sim, enquanto ele ainda está agendado: envie de novo com o mesmo message.id. A resposta é 200 em vez de 201. Um agendamento já executado não pode ser reutilizado.
Como cancelo?
Com DELETE /v1/schedules/:id, usando o id do agendamento. Só dá para cancelar o que ainda não foi executado.
Que tipos de mensagem posso agendar?
Texto simples (text/plain) e modelos do WhatsApp no formato application/json com type template. Listas de transmissão não são aceitas.
Esse artigo foi útil?
Obrigado pelo retorno!