curl --request POST \
--url https://api.wppfy.com/send/text \
--header 'Content-Type: application/json' \
--header 'token: <api-key>' \
--data '
{
"number": "5511999999999",
"text": "Olá! Como posso ajudar?"
}
'{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"messageid": "<string>",
"chatid": "<string>",
"sender": "<string>",
"senderName": "<string>",
"isGroup": false,
"fromMe": false,
"messageType": "<string>",
"source": "<string>",
"messageTimestamp": 0,
"status": "<string>",
"text": "",
"quoted": "",
"edited": "",
"reaction": "",
"vote": "",
"convertOptions": "",
"buttonOrListid": "",
"owner": "",
"error": "",
"content": {},
"wasSentByApi": true,
"pinned": true,
"sendFunction": "<string>",
"sendPayload": {},
"fileURL": "<string>",
"callPeer": {
"jid": "<string>",
"name": "<string>",
"imagePreviewUrl": "<string>"
},
"send_folder_id": "<string>",
"track_source": "<string>",
"track_id": "<string>",
"ai_metadata": {
"agent_id": "<string>",
"turn": "<string>",
"flow_id": "<string>",
"request": {
"messages": "<array>",
"tools": "<array>",
"options": {
"model": "<string>",
"temperature": 123,
"maxTokens": 123,
"topP": 123,
"frequencyPenalty": 123,
"presencePenalty": 123
}
},
"response": {
"choices": "<array>",
"toolResults": "<array>",
"error": "<string>"
},
"outcome": {
"status": "sent",
"texts": 123,
"audio": true,
"menus": 123,
"files": 123,
"handoff": "<string>",
"lead": [
"<string>"
],
"detail": "<string>"
}
},
"sender_pn": "<string>",
"sender_lid": "<string>",
"sender_image_preview_url": "<string>",
"response": {
"status": "success",
"message": "Message sent successfully"
}
}Enviar mensagem de texto
Envia uma mensagem de texto para um contato, grupo ou canal/newsletter.
Recursos Específicos
- Preview de links com suporte a personalização automática ou customizada
- Formatação básica do texto
- Substituição automática de placeholders dinâmicos
Envio para Newsletter
Para enviar texto para um canal, use o mesmo campo number, mas informe o JID completo do canal:
- Exemplo:
120363123456789012@newsletter
{
"number": "120363123456789012@newsletter",
"text": "Post publicado no canal"
}
Responder enquete, lista ou botão
Use este mesmo endpoint para responder uma mensagem interativa que esteja salva no histórico local da instância. Envie:
number: chat onde a mensagem original foi recebida ou enviada;replyid: ID da mensagem interativa original;text: seleção iniciada por>.
O marcador > é obrigatório para gerar uma resposta interativa. Sem ele,
a API envia apenas uma mensagem de texto citando a original.
Responder uma enquete
Use a posição da opção, começando em 1. Nesta documentação pública, responda somente uma opção por requisição.
{
"number": "5511999999999",
"replyid": "3EB0ID_DA_ENQUETE",
"text": ">1"
}
Responder uma lista
Prefira o rowId configurado ao criar a lista. Também são aceitos o texto
exato do item ou sua posição (>1).
{
"number": "5511999999999",
"replyid": "3EB0ID_DA_LISTA",
"text": ">plano_pro"
}
Responder um botão
Prefira o ID do botão de resposta rápida. Também são aceitos o texto exato
exibido ou sua posição (>1). Isso vale para botões rápidos legados,
templates, native flow e carrossel. Botões de URL, ligação ou cópia executam
a própria ação e não são respondidos por este fluxo.
{
"number": "5511999999999",
"replyid": "3EB0ID_DOS_BOTOES",
"text": ">confirmar"
}
A API devolve erro quando a mensagem original não está disponível ou a opção informada não existe.
Campos Comuns
Este endpoint suporta todos os campos opcionais comuns documentados na tag “Enviar Mensagem”, incluindo:
delay, readchat, readmessages, replyid, mentions, forward, track_source, track_id, placeholders e envio para grupos.
Preview de Links
Preview Automático
{
"number": "5511999999999",
"text": "Confira: https://exemplo.com",
"linkPreview": true
}
Preview Personalizado
{
"number": "5511999999999",
"text": "Confira nosso site! https://exemplo.com",
"linkPreview": true,
"linkPreviewTitle": "Título Personalizado",
"linkPreviewDescription": "Uma descrição personalizada do link",
"linkPreviewImage": "https://exemplo.com/imagem.jpg",
"linkPreviewLarge": true
}
curl --request POST \
--url https://api.wppfy.com/send/text \
--header 'Content-Type: application/json' \
--header 'token: <api-key>' \
--data '
{
"number": "5511999999999",
"text": "Olá! Como posso ajudar?"
}
'{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"messageid": "<string>",
"chatid": "<string>",
"sender": "<string>",
"senderName": "<string>",
"isGroup": false,
"fromMe": false,
"messageType": "<string>",
"source": "<string>",
"messageTimestamp": 0,
"status": "<string>",
"text": "",
"quoted": "",
"edited": "",
"reaction": "",
"vote": "",
"convertOptions": "",
"buttonOrListid": "",
"owner": "",
"error": "",
"content": {},
"wasSentByApi": true,
"pinned": true,
"sendFunction": "<string>",
"sendPayload": {},
"fileURL": "<string>",
"callPeer": {
"jid": "<string>",
"name": "<string>",
"imagePreviewUrl": "<string>"
},
"send_folder_id": "<string>",
"track_source": "<string>",
"track_id": "<string>",
"ai_metadata": {
"agent_id": "<string>",
"turn": "<string>",
"flow_id": "<string>",
"request": {
"messages": "<array>",
"tools": "<array>",
"options": {
"model": "<string>",
"temperature": 123,
"maxTokens": 123,
"topP": 123,
"frequencyPenalty": 123,
"presencePenalty": 123
}
},
"response": {
"choices": "<array>",
"toolResults": "<array>",
"error": "<string>"
},
"outcome": {
"status": "sent",
"texts": 123,
"audio": true,
"menus": 123,
"files": 123,
"handoff": "<string>",
"lead": [
"<string>"
],
"detail": "<string>"
}
},
"sender_pn": "<string>",
"sender_lid": "<string>",
"sender_image_preview_url": "<string>",
"response": {
"status": "success",
"message": "Message sent successfully"
}
}Autorizações
Corpo
ID do chat para o qual a mensagem será enviada. Pode ser um número de telefone em formato internacional, um ID de grupo (@g.us), um ID de usuário (com @s.whatsapp.net ou @lid) ou um ID de canal/newsletter (@newsletter).
"5511999999999"
Texto da mensagem. Para responder enquete, lista ou botão, use uma seleção iniciada por > junto com replyid. Aceita placeholders em mensagens de texto comuns.
"Olá {{name}}! Como posso ajudar?"
Ativa/desativa preview de links. Se true, procura automaticamente um link no texto para gerar preview.
Comportamento:
- Se apenas linkPreview=true: gera preview automático do primeiro link encontrado no texto
- Se fornecidos campos personalizados (title, description, image): usa os valores fornecidos
- Se campos personalizados parciais: combina com dados automáticos do link como fallback
- Título ou descrição só com espaço: o preview sai sem esse campo, sem buscar no link
true
Define um título personalizado para o preview do link. Vazio usa o título do link; só com espaço (" "), o preview sai sem título.
"Título Personalizado"
Define uma descrição personalizada para o preview do link. Vazia usa a descrição do link; só com espaço (" "), o preview sai sem descrição.
"Descrição personalizada do link"
URL ou Base64 da imagem para usar no preview do link
"https://exemplo.com/imagem.jpg"
Se true, gera um preview grande com upload da imagem. Se false, gera um preview pequeno sem upload
true
ID da mensagem original. Com text iniciado por >, gera a resposta nativa de enquete, lista ou botão quando o tipo original for suportado.
"3EB0538DA65A59F6D8A251"
Números para mencionar (separados por vírgula)
"5511999999999,5511888888888"
Marca conversa como lida após envio
true
Marca últimas mensagens recebidas como lidas
true
Atraso em milissegundos antes do envio, durante o atraso apacerá 'Digitando...'
1000
Marca a mensagem como encaminhada no WhatsApp
true
Origem do rastreamento da mensagem
"chatwoot"
ID para rastreamento da mensagem (aceita valores duplicados)
"msg_123456789"
Se true, envia a mensagem de forma assíncrona via fila interna. Útil para alto volume de mensagens.
false
Resposta
Mensagem enviada com sucesso
Representa uma mensagem trocada no sistema
ID único interno da mensagem (formato r + 7 caracteres hex aleatórios)
ID original da mensagem no provedor
ID da conversa relacionada
ID do remetente da mensagem
Nome exibido do remetente
Indica se é uma mensagem de grupo
Indica se a mensagem foi enviada pelo usuário
Tipo de conteúdo da mensagem
Plataforma de origem da mensagem
Timestamp original da mensagem em milissegundos
Status do ciclo de vida da mensagem.
Exemplos comuns: Queued, Canceled, Failed, Sent, Delivered, Read.
Em mensagem de grupo, segue o participante mais adiantado: Delivered quando pelo menos um recebeu, Read quando pelo menos um leu e Played quando pelo menos um ouviu.
Texto original da mensagem
ID da mensagem citada/respondida
Histórico de edições da mensagem
ID da mensagem reagida
Dados de votação de enquete e listas
Conversão de opções da mensagem, lista, enquete e botões
ID do botão ou item de lista selecionado
Dono da mensagem
Mensagem de erro caso o envio tenha falhado
Conteúdo bruto da mensagem (JSON serializado ou texto)
Indica se a mensagem foi enviada via API
Mensagem fixada na conversa (fixar e desafixar chegam também em messages_update, tipos Pinned e Unpinned)
Função usada para enviar a mensagem (quando enviada via API)
Payload usado no envio quando disponível. Dados de mídia em base64 são omitidos.
URL ou referência de arquivo da mensagem
Contato conhecido associado a uma ligação, quando disponível em messageType: call.
Show child attributes
Show child attributes
Pasta associada ao envio (quando aplicável)
Origem de rastreamento
ID de rastreamento (pode repetir)
Registro de uma rodada da IA. O completo (pedido ao modelo, resposta e outcome) fica uma vez, na última mensagem do contato que a rodada respondeu, também quando nada saiu (erro, resposta descartada). Cada mensagem enviada pela IA leva só agent_id e turn (o id dessa mensagem do contato).
Show child attributes
Show child attributes
JID PN resolvido do remetente (quando disponível)
LID original do remetente (quando disponível)
URL temporária de preview do remetente, quando conhecida. A hidratação desta versão preenche mensagens recebidas em grupos; o campo pode ser omitido. Não provoca consulta de foto ao WhatsApp na listagem.
Show child attributes
Show child attributes
