curl --request POST \
--url https://api.wppfy.com/chat/details \
--header 'Content-Type: application/json' \
--header 'token: <api-key>' \
--data '
{
"number": "5511999999999",
"preview": false
}
'import requests
url = "https://api.wppfy.com/chat/details"
payload = {
"number": "5511999999999",
"preview": False
}
headers = {
"token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {token: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({number: '5511999999999', preview: false})
};
fetch('https://api.wppfy.com/chat/details', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wppfy.com/chat/details",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'number' => '5511999999999',
'preview' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.wppfy.com/chat/details"
payload := strings.NewReader("{\n \"number\": \"5511999999999\",\n \"preview\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("token", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.wppfy.com/chat/details")
.header("token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"number\": \"5511999999999\",\n \"preview\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.wppfy.com/chat/details")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"number\": \"5511999999999\",\n \"preview\": false\n}"
response = http.request(request)
puts response.read_body{
"id": "r1a2b3c4d5e6f7",
"wa_fastid": "admin:5511999999999",
"wa_chatid": "5511999999999@s.whatsapp.net",
"wa_name": "João Silva",
"name": "João Silva",
"phone": "+55 11 99999-9999",
"owner": "admin",
"wa_archived": false,
"wa_isBlocked": false,
"wa_isGroup": false,
"lead_name": "João",
"lead_fullName": "João Silva",
"lead_email": "joao@exemplo.com",
"lead_status": "ativo",
"wa_contactName": "João Silva",
"is_business": false,
"business_name": "",
"wa_common_groups": "Grupo Família(120363123456789012@g.us),Trabalho(987654321098765432@g.us)",
"image": "https://pps.whatsapp.net/v/t61.24694-24/12345_image.jpg"
}Consultar detalhes de um chat
Retorna os dados disponíveis para apresentar ou editar uma conversa: identificação, nomes conhecidos, telefone, foto, estado do chat, dados de lead e informações de grupo quando aplicáveis.
Use depois de escolher um chat em POST /chat/find. Para obter somente a
imagem, prefira POST /chat/avatar, mais leve, principalmente em listas com
muitos chats. O campo preview permite escolher uma imagem menor para
interfaces de listagem ou a imagem completa.
Cada instância processa até 4 consultas desta rota ao mesmo tempo. A
seguinte espera até 2 segundos por uma vaga; se não houver, recebe 429
com o header Retry-After. A rota também conta no limite de chamadas da
instância.
Para contatos individuais, is_business indica se há um nome comercial
conhecido. business_name traz esse nome quando disponível.
curl --request POST \
--url https://api.wppfy.com/chat/details \
--header 'Content-Type: application/json' \
--header 'token: <api-key>' \
--data '
{
"number": "5511999999999",
"preview": false
}
'import requests
url = "https://api.wppfy.com/chat/details"
payload = {
"number": "5511999999999",
"preview": False
}
headers = {
"token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {token: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({number: '5511999999999', preview: false})
};
fetch('https://api.wppfy.com/chat/details', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wppfy.com/chat/details",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'number' => '5511999999999',
'preview' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.wppfy.com/chat/details"
payload := strings.NewReader("{\n \"number\": \"5511999999999\",\n \"preview\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("token", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.wppfy.com/chat/details")
.header("token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"number\": \"5511999999999\",\n \"preview\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.wppfy.com/chat/details")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"number\": \"5511999999999\",\n \"preview\": false\n}"
response = http.request(request)
puts response.read_body{
"id": "r1a2b3c4d5e6f7",
"wa_fastid": "admin:5511999999999",
"wa_chatid": "5511999999999@s.whatsapp.net",
"wa_name": "João Silva",
"name": "João Silva",
"phone": "+55 11 99999-9999",
"owner": "admin",
"wa_archived": false,
"wa_isBlocked": false,
"wa_isGroup": false,
"lead_name": "João",
"lead_fullName": "João Silva",
"lead_email": "joao@exemplo.com",
"lead_status": "ativo",
"wa_contactName": "João Silva",
"is_business": false,
"business_name": "",
"wa_common_groups": "Grupo Família(120363123456789012@g.us),Trabalho(987654321098765432@g.us)",
"image": "https://pps.whatsapp.net/v/t61.24694-24/12345_image.jpg"
}Autorizações
Corpo
Número do telefone ou ID do grupo
"5511999999999"
Controla o tamanho da imagem de perfil retornada:
true: Retorna imagem em tamanho preview (menor, otimizada para listagens)false(padrão): Retorna imagem em tamanho full (resolução original, maior qualidade)
Resposta
Informações completas do chat retornadas com sucesso
Representa uma conversa/chamado no sistema
ID único da conversa (r + 7 bytes aleatórios em hex)
Identificador rápido do WhatsApp
ID completo do chat no WhatsApp
LID do chat no WhatsApp (quando disponível)
Indica se o chat está arquivado
Nome salvo na agenda do celular deste número (vazio: não está salvo). A conversa nasce com ele (por LID, pelo número ligado) e ele muda quando o contato é salvo ou apagado no celular.
Nome definido pelo usuário no perfil do WhatsApp ("push name"). Vem do perfil do contato e pode não estar disponível dependendo do contexto ou da origem dos dados.
Nome resolvido pelo sistema como fallback. Normalmente consolida o melhor valor disponível entre dados internos, nome vindo do WhatsApp e nome salvo nos contatos. Por isso, costuma ter maior chance de vir preenchido.
URL da foto de perfil em tamanho original; vazia se não houver.
URL da foto de perfil em tamanho menor; vazia se não houver.
Comunidade pai do chat quando ele representa um subgrupo
Show child attributes
Show child attributes
Tempo de expiração de mensagens efêmeras
Indica se o contato está bloqueado
Indica se é um grupo
Indica se o usuário é admin do grupo
Indica se é um grupo somente anúncios
Indica se é uma comunidade
Indica se é membro do grupo
Indica se o chat está fixado
Labels do chat
Anotações internas do chat sincronizadas via app state
Texto/voto da última mensagem
Tipo da última mensagem
Timestamp da última mensagem
Remetente da última mensagem
true quando o contato espera resposta: a última mensagem é dele e ninguém concluiu a conversa (POST /lead/resolve). A mensagem do contato liga; a nossa (você, a IA, um fluxo ou uma integração) desliga. Nas conversas anteriores a este campo, a api decide pelo remetente (o número ou o LID da instância). Só em conversas com pessoas: ausente em grupos e canais, que não entram em nenhum dos dois filtros, e quando a conversa não tem última mensagem conhecida (só a data). Filtrável no /chat/find.
Timestamp do fim do silenciamento
Dono da instância
Contador de mensagens não lidas
Número de telefone
Grupos em comum separados por vírgula, formato: (nome_grupo)id_grupo
"Grupo Família(120363123456789012@g.us),Trabalho(987654321098765432@g.us)"
Nome do lead
Nome completo do lead
Email do lead
Documento de identificação
Status livre do lead
Tags do lead. Tags configuradas com kanban=true também determinam as
colunas em que o cartão aparece no Kanban.
Anotações sobre o lead
Indica se tem ticket aberto
ID do atendente responsável
Ordem no kanban
Início da memória da IA (ms): o agente só lê as mensagens da conversa a partir daqui. 0: sem corte (vale a janela do agente). Grave pelo /chat/editLead.
ID do último gatilho executado
Timestamp do último gatilho
Automação (IA, gatilhos e fluxos) pausada nesta conversa até este horário, em milissegundos. -1: até alguém religar; 0: ligada.
Motivo da pausa feita pela automação: pedido de humano (IA ou fluxo; pausa até alguém religar) ou limite de respostas da IA (pausa de 1 hora). Vazio quando não há pausa ou depois que ela acaba. Religar (chatbot_disableUntil: 0 no /chat/editLead) ou concluir (POST /lead/resolve) limpa.
Há um nome comercial conhecido para este contato.
Nome comercial conhecido, ou string vazia.
Grupos em comum separados por vírgula, formato: nome_grupo(id_grupo)
"Grupo Família(120363123456789012@g.us),Trabalho(987654321098765432@g.us)"
