Pular para o conteúdo principal

Documentation Index

Fetch the complete documentation index at: https://developer.zapsterapi.com/llms.txt

Use this file to discover all available pages before exploring further.

zapsterapi message send

Envia uma mensagem para um destinatário no WhatsApp. Suporta texto, mídia, templates WABA, botões interativos, mentions, agendamento, reply, view-once e mais.
zapsterapi message send \
  --recipient <numero> \
  [--text <texto>] \
  [--instance-id <id>] \
  [--send-at <iso8601>] \
  [--media-url <url> | --media-base64 <b64>] \
  [--media-caption <texto>] [--media-filename <nome>] \
  [--ptt | --ptv | --sticker] \
  [--template-name <nome> --template-language <code> [--template-components <json>]] \
  [--button '<json>' ...]  [--buttons-mode <auto|interactive>] \
  [--mention <pn> ... | --mention-everyone] \
  [--reply-to <message-id>] \
  [--view-once] [--no-link-preview] [--auto-mention] \
  [--profile <nome>] [--json]

Flags principais

FlagObrigatórioDescrição
--recipient <numero>SimTelefone E.164 sem + (ex: 5511999999999) ou ID de grupo (group:<id>).
--text <texto>CondicionalConteúdo da mensagem. Pelo menos um de --text, --media-* ou --template-* é necessário.
--instance-id <id>NãoInstância específica de envio. Se omitido e você só tiver uma instância conectada, a CLI usa ela; com mais de uma, a flag é obrigatória.
--send-at <iso8601>NãoAgenda a mensagem (ISO 8601, ex: 2026-05-15T10:00:00Z). Mínimo 1 minuto no futuro.

Mídia (--media-*)

Use --media-url sempre que possível — --media-base64 carrega o arquivo no payload e fica reservado pra quando a URL não estiver acessível.
FlagDescrição
--media-url <url>URL pública/assinada do arquivo. Preferida.
--media-base64 <b64>Conteúdo em base64. Use só quando URL não for viável.
--media-caption <texto>Legenda (imagem/vídeo) ou texto sob o documento.
--media-filename <nome>Nome de arquivo (ex: relatorio.pdf).
--pttMarca o áudio como push-to-talk (mensagem de voz).
--ptvMarca o vídeo como push-to-view (efêmero).
--stickerEnvia a mídia como figurinha.
Exatamente um de --media-url ou --media-base64 é necessário quando enviar mídia.

Templates WABA (--template-*)

Templates são exclusivos de instâncias WABA (Meta oficial). Mutuamente exclusivos com --text e --media-*.
FlagDescrição
--template-name <nome>Nome do template aprovado na Meta.
--template-language <code>Código de idioma (ex: en_US, pt_BR).
--template-components <json>Array JSON de components com header/body/buttons e parâmetros.

Botões interativos (--button, --buttons-mode)

Repita --button até 3 vezes. Cada valor é JSON com type + campos do tipo. Veja o guia de botões pra detalhes de cada tipo.
--button '{"type":"reply","label":"Sim"}' \
--button '{"type":"call","label":"Ligar","phone_number":"+5511999999999"}' \
--button '{"type":"url","label":"Abrir","url":"https://exemplo.com"}'
TipoCampos obrigatórios
replylabel
calllabel, phone_number (E.164 com +)
urllabel, url
copyablelabel, copy_code
--buttons-mode <auto\|interactive> é opcional (default auto). Use interactive pra forçar visual rico mesmo só com reply.

Mentions (--mention, --mention-everyone)

FlagDescrição
--mention <pn>Telefone/JID a ser mencionado. Pode repetir.
--mention-everyoneMenciona @todos no grupo.
--mention e --mention-everyone são mutuamente exclusivos.

Outros

FlagDescrição
--reply-to <message-id>Responde a uma mensagem existente (limite de 7 dias).
--view-onceMarca como mensagem efêmera (some após visualizar).
--no-link-previewDesativa o preview de URLs (default: ativo).
--auto-mentionHabilita auto-mention.

Saída — envio imediato (não-oficial / Baileys)

{
  "ok": true,
  "data": {
    "kind": "immediate",
    "message_id": "3EB0C68ECE69F2DF660423",
    "message_trace_id": "x7jCGxw83jXOjaXR60qJQ24Zkrs4MacA"
  }
}

Saída — envio imediato (oficial / WABA)

{
  "ok": true,
  "data": {
    "kind": "immediate",
    "message_id": "wamid.HBgMNTU4NzgxMTcwMjYxFQIAERgSNDQyQzhBOTY1OEI5Mzk2MzI3AA=="
  }
}

Saída — agendamento (--send-at definido)

{
  "ok": true,
  "data": {
    "kind": "scheduled",
    "message_id": "msg_4rajud08wyl9pmi6bhnwr",
    "send_at": "2026-05-15T10:00:00.000Z",
    "status": "scheduled"
  }
}

Exemplos

Texto simples:
zapsterapi message send --recipient 5511999999999 --text "olá"
Texto + mídia + caption:
zapsterapi message send --recipient 5511999999999 \
  --text "veja o relatório anexo" \
  --media-url https://exemplo.com/relatorio.pdf \
  --media-filename relatorio.pdf
Botões interativos:
zapsterapi message send --recipient 5511999999999 \
  --text "Como podemos te ajudar?" \
  --button '{"type":"reply","label":"Suporte"}' \
  --button '{"type":"reply","label":"Vendas"}' \
  --buttons-mode interactive
Template WABA:
zapsterapi message send --recipient 5511999999999 \
  --template-name welcome --template-language pt_BR
Mensagem em grupo com mention everyone:
zapsterapi message send --recipient group:120363021234567890 \
  --text "Reunião em 10min @everyone" --mention-everyone
Reply + view-once:
zapsterapi message send --recipient 5511999999999 \
  --text "Aqui está a senha temporária" \
  --reply-to msg_4rajud08wyl9pmi6bhnwr \
  --view-once
Agendamento:
zapsterapi message send --recipient 5511999999999 \
  --text "Bom dia!" --send-at 2026-05-16T08:00:00-03:00

zapsterapi message cancel <message-id>

Cancela uma mensagem agendada (scheduled) ou pendente (pending). Mensagens já enviadas não podem ser canceladas.
zapsterapi message cancel msg_4rajud08wyl9pmi6bhnwr [--profile <nome>] [--json]

Saída

{
  "ok": true,
  "data": {
    "id": "msg_4rajud08wyl9pmi6bhnwr",
    "status": "canceled"
  }
}

Códigos de erro específicos

error.codeCausa
message_not_foundID não existe ou não pertence à conta.
message_cannot_cancelMensagem já saiu do estado scheduled/pending.

zapsterapi message list

Lista mensagens dentro de uma janela de tempo. Útil pra auditoria, dashboards e agentes que precisam reconciliar status.
zapsterapi message list \
  --from <iso8601> \
  --to <iso8601> \
  [--status <pending|scheduled|sent|failed|canceled>] \
  [--instance-id <id>] \
  [--recipient <numero>] \
  [--message-id <id>] \
  [--connection-type <waba|unofficial>] \
  [--limit <n>] \
  [--after <cursor>] \
  [--profile <nome>] \
  [--json]
FlagObrigatórioDescrição
--from <iso8601>SimInício da janela. ISO 8601.
--to <iso8601>SimFim da janela. ISO 8601. Janela máxima de 90 dias.
--status <status>NãoFiltra por status.
--instance-id <id>NãoFiltra por instância.
--recipient <pn>NãoFiltra por destinatário.
--message-id <id>NãoFiltra por ID de mensagem (wamid ou msg_...).
--connection-type <type>Nãowaba ou unofficial.
--limit <n>Não1–100, default 20.
--after <cursor>NãoCursor de paginação (meta.next_cursor da página anterior).

Saída

{
  "ok": true,
  "data": {
    "data": [
      {
        "id": "msg_01HABC...",
        "message_id": "wamid.HBg...",
        "recipient": "5511999999999",
        "status": "sent",
        "connection_type": "waba",
        "instance_id": "i_xyz1234abc",
        "send_at": null,
        "sent_at": "2026-05-08T10:00:00Z",
        "canceled_at": null,
        "errors": null
      }
    ],
    "meta": {
      "next_cursor": null,
      "has_more": false,
      "limit": 20
    }
  }
}

Códigos de erro específicos

error.codeCausa
from_after_to--from igual ou maior que --to.
window_too_largeJanela excede 90 dias.
invalid_argument--from ou --to não é ISO 8601 válido.

Códigos de erro comuns

error.codeCausa
missing_recipientFlag --recipient ausente ou vazia.
missing_textNenhum de --text, --media-* ou --template-* foi informado.
incompatible_content--template-* combinado com --text ou --media-* (são mutuamente exclusivos).
invalid_media--media-url e --media-base64 ambos presentes, ou nenhum dos dois.
invalid_buttonJSON inválido em --button, mais de 3 botões, ou campo obrigatório do tipo ausente.
invalid_template--template-name ou --template-language ausente.
invalid_mentions--mention e --mention-everyone foram passados juntos.
invalid_send_at--send-at não é ISO 8601 válido.
invalid_tokenToken inválido ou expirado.
invalid_recipientNúmero não é WhatsApp válido.
instance_not_found--instance-id não pertence à conta.
no_connected_instance--instance-id omitido e nenhuma instância está conectada.
instance_id_required--instance-id omitido e há múltiplas instâncias conectadas.
Para a referência completa do payload (todos os campos, validações cross-field, edge cases), veja a REST API e o guia de botões.