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 detalles de un chat
Devuelve los datos disponibles para presentar o editar una conversación: identificación, nombres conocidos, teléfono, foto, estado del chat, datos de lead e información de grupo cuando corresponda.
Úselo después de elegir un chat en POST /chat/find. Para obtener solo la
imagen, prefiera POST /chat/avatar, más liviano, principalmente en listas con
muchos chats. El campo preview permite elegir una imagen más pequeña para
interfaces de listado o la imagen completa.
Cada instancia procesa hasta 4 consultas de esta ruta al mismo tiempo. La
siguiente espera hasta 2 segundos por un espacio; si no lo hay, recibe 429
con el header Retry-After. La ruta también cuenta en el límite de llamadas de la
instancia.
Para contactos individuales, is_business indica si hay un nombre comercial
conocido. business_name trae ese nombre cuando está disponible.
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"
}Autorizaciones
Cuerpo
Número de teléfono o ID del grupo
"5511999999999"
Controla el tamaño de la imagen de perfil devuelta:
true: Devuelve la imagen en tamaño preview (más pequeña, optimizada para listados)false(predeterminado): Devuelve la imagen en tamaño full (resolución original, mayor calidad)
Respuesta
Información completa del chat devuelta con éxito
Representa una conversación/ticket en el sistema
ID único de la conversación (r + 7 bytes aleatorios en hex)
Identificador rápido de WhatsApp
ID completo del chat en WhatsApp
LID del chat en WhatsApp (cuando esté disponible)
Indica si el chat está archivado
Nombre guardado en la agenda del teléfono para este número (vacío: no está guardado). La conversación se crea con él (por LID, mediante el número vinculado) y cambia cuando el contacto se guarda o se elimina en el teléfono.
Nombre definido por el usuario en el perfil de WhatsApp ("push name"). Proviene del perfil del contacto y puede no estar disponible según el contexto o el origen de los datos.
Nombre resuelto por el sistema como fallback. Normalmente consolida el mejor valor disponible entre datos internos, el nombre proveniente de WhatsApp y el nombre guardado en los contactos. Por eso, suele tener mayor probabilidad de venir completado.
URL de la foto de perfil en tamaño original; vacía si no hay.
URL de la foto de perfil en tamaño reducido; vacía si no hay.
Comunidad principal del chat cuando representa un subgrupo
Show child attributes
Show child attributes
Tiempo de expiración de mensajes efímeros
Indica si el contacto está bloqueado
Indica si es un grupo
Indica si el usuario es admin del grupo
Indica si es un grupo solo de anuncios
Indica si es una comunidad
Indica si es miembro del grupo
Indica si el chat está fijado
Etiquetas del chat
Notas internas del chat sincronizadas mediante app state
Texto/voto del último mensaje
Tipo del último mensaje
Timestamp del último mensaje
Remitente del último mensaje
true cuando el contacto espera respuesta: el último mensaje es suyo y nadie concluyó la conversación (POST /lead/resolve). El mensaje del contacto lo activa; el nuestro (usted, la IA, un flujo o una integración) lo desactiva. En las conversaciones anteriores a este campo, la api decide según el remitente (el número o el LID de la instancia). Solo en conversaciones con personas: ausente en grupos y canales, que no entran en ninguno de los dos filtros, y cuando la conversación no tiene un último mensaje conocido (solo la fecha). Filtrable en /chat/find.
Timestamp del fin del silenciamiento
Propietario de la instancia
Contador de mensajes no leídos
Número de teléfono
Grupos en común separados por coma, formato: (nombre_grupo)id_grupo
"Grupo Familia(120363123456789012@g.us),Trabajo(987654321098765432@g.us)"
Nombre del lead
Nombre completo del lead
Email del lead
Documento de identificación
Estado libre del lead
Etiquetas del lead. Las etiquetas configuradas con kanban=true también determinan las
columnas en las que aparece la tarjeta en el Kanban.
Notas sobre el lead
Indica si tiene un ticket abierto
ID del agente responsable
Orden en el kanban
Inicio de la memoria de la IA (ms): el agente solo lee los mensajes de la conversación a partir de aquí. 0: sin corte (se aplica la ventana del agente). Se guarda mediante /chat/editLead.
ID del último disparador ejecutado
Timestamp del último disparador
Automatización (IA, disparadores y flujos) pausada en esta conversación hasta este horario, en milisegundos. -1: hasta que alguien la vuelva a activar; 0: activada.
Motivo de la pausa realizada por la automatización: solicitud de humano (IA o flujo; pausa hasta que alguien la reactive) o límite de respuestas de la IA (pausa de 1 hora). Vacío cuando no hay pausa o después de que termina. Reactivar (chatbot_disableUntil: 0 en /chat/editLead) o concluir (POST /lead/resolve) lo limpia.
Existe un nombre comercial conocido para este contacto.
Nombre comercial conocido, o string vacío.
Grupos en común separados por coma, formato: nombre_grupo(id_grupo)
"Grupo Familia(120363123456789012@g.us),Trabajo(987654321098765432@g.us)"
