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"
}Get chat details
Returns the data available to display or edit a chat: identification, known names, phone, photo, chat state, lead data, and group information when applicable.
Use after choosing a chat in POST /chat/find. To get only the
image, prefer POST /chat/avatar, which is lighter, especially in lists with
many chats. The preview field lets you choose a smaller image for
listing interfaces or the full image.
Each instance processes up to 4 queries to this route at the same time. The
next one waits up to 2 seconds for a slot; if none is available, it receives 429
with the Retry-After header. The route also counts toward the instance’s
call limit.
For individual contacts, is_business indicates whether there is a known
business name. business_name contains that name when available.
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"
}Authorizations
Body
Phone number or group ID
"5511999999999"
Controls the size of the returned profile picture:
true: Returns the image in preview size (smaller, optimized for listings)false(default): Returns the image in full size (original resolution, higher quality)
Response
Full chat information returned successfully
Represents a conversation/ticket in the system
Unique conversation ID (r + 7 random bytes in hex)
WhatsApp fast identifier
Full chat ID on WhatsApp
Chat LID on WhatsApp (when available)
Indicates whether the chat is archived
Name saved in the phone's address book for this number (empty: not saved). The conversation is created with it (by LID, via the linked number) and it changes when the contact is saved or deleted on the phone.
Name set by the user in the WhatsApp profile ("push name"). Comes from the contact's profile and may not be available depending on the context or data source.
Name resolved by the system as a fallback. It usually consolidates the best value available among internal data, the name coming from WhatsApp and the name saved in contacts. Therefore, it is more likely to be filled in.
Original-size profile picture URL; empty if none.
Smaller-size profile picture URL; empty if none.
Parent community of the chat when it represents a subgroup
Show child attributes
Show child attributes
Expiration time for ephemeral messages
Indicates whether the contact is blocked
Indicates whether it is a group
Indicates whether the user is a group admin
Indicates whether it is an announcement-only group
Indicates whether it is a community
Indicates whether is a group member
Indicates whether the chat is pinned
Chat labels
Internal chat notes synced via app state
Text/vote of the last message
Type of the last message
Timestamp of the last message
Sender of the last message
true when the contact is awaiting a reply: the last message is theirs and no one has resolved the conversation (POST /lead/resolve). The contact's message turns it on; ours (you, the AI, a flow, or an integration) turns it off. In conversations predating this field, the api decides based on the sender (the instance's number or LID). Only in conversations with people: absent in groups and channels, which are not included in either filter, and when the conversation has no known last message (only the date). Filterable in /chat/find.
Timestamp of the end of muting
Instance owner
Unread message counter
Phone number
Groups in common separated by commas, format: (group_name)group_id
"Family Group(120363123456789012@g.us),Work(987654321098765432@g.us)"
Lead name
Lead's full name
Lead email
Identification document
Free-form lead status
Lead tags. Tags configured with kanban=true also determine the
columns in which the card appears in the Kanban.
Notes about the lead
Indicates whether there is an open ticket
ID of the responsible attendant
Order in the kanban
AI memory start (ms): the agent only reads the conversation messages from this point on. 0: no cutoff (the agent's window applies). Set via /chat/editLead.
ID of the last executed trigger
Timestamp of the last trigger
Automation (AI, triggers, and flows) paused in this conversation until this time, in milliseconds. -1: until someone turns it back on; 0: on.
Reason for the pause made by the automation: human request (AI or flow; paused until someone turns it back on) or AI reply limit (1-hour pause). Empty when there is no pause or after it ends. Turning it back on (chatbot_disableUntil: 0 in /chat/editLead) or resolving (POST /lead/resolve) clears it.
There is a known business name for this contact.
Known business name, or empty string.
Groups in common separated by commas, format: group_name(group_id)
"Family Group(120363123456789012@g.us),Work(987654321098765432@g.us)"
