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:escrever para criar e cancelar, mensagens:ler para consultar.
  • Um contato existente. Veja Contatos pela API.
  • Para abrir conversa fora da janela de 24 horas, um modelo aprovado.

Rotas

MétodoRotaEscopoO que faz
POST/v1/schedulesmensagens:escreverCria ou substitui um agendamento
GET/v1/schedulesmensagens:lerLista agendamentos
GET/v1/schedules/:idmensagens:lerLê um agendamento
DELETE/v1/schedules/:idmensagens:escreverCancela um agendamento ainda não executado

Passo a passo

  1. Defina o destinatário em message.to: o id do contato, o telefone ou a identidade dele.
  2. 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."
    }
  }'
  1. 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
}
  1. 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: when precisa 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_executed ou schedule_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

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.