curl --request POST \
--url http://localhost:3000/chat/{chat_jid}/history \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '{
"count": 50
}'import requests
url = "http://localhost:3000/chat/{chat_jid}/history"
payload = { "count": 50 }
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({count: 50})
};
fetch('http://localhost:3000/chat/{chat_jid}/history', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "3000",
CURLOPT_URL => "http://localhost:3000/chat/{chat_jid}/history",
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([
'count' => 50
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/json"
],
]);
$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 := "http://localhost:3000/chat/{chat_jid}/history"
payload := strings.NewReader("{\n \"count\": 50\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
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("http://localhost:3000/chat/{chat_jid}/history")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"count\": 50\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:3000/chat/{chat_jid}/history")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"count\": 50\n}"
response = http.request(request)
puts response.read_body{
"status": 200,
"code": "SUCCESS",
"message": "History sync requested successfully",
"results": {
"status": "requested",
"chat_jid": "6289685028129@s.whatsapp.net",
"requested_count": 50,
"anchor_message_id": "3EB0C767D82B0A0D1234",
"anchor_timestamp": "2026-05-16T08:00:00Z"
}
}{
"code": 400,
"message": "field cannot be blank",
"results": null
}{
"code": 401,
"message": "Unauthorized access",
"results": null
}{
"code": "INTERNAL_SERVER_ERROR",
"message": "you are not loggin",
"results": null
}Request older chat history from the phone
Asks the phone for older messages of a chat on demand (what WhatsApp Web does when you scroll up / “load older messages”). The request is anchored at the oldest message currently stored locally for that chat, so the chat must already have at least one stored message. The phone answers asynchronously with a history sync event that gets persisted into chat storage; this endpoint only confirms the request was sent, it does not return the older messages directly.
curl --request POST \
--url http://localhost:3000/chat/{chat_jid}/history \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '{
"count": 50
}'import requests
url = "http://localhost:3000/chat/{chat_jid}/history"
payload = { "count": 50 }
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({count: 50})
};
fetch('http://localhost:3000/chat/{chat_jid}/history', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "3000",
CURLOPT_URL => "http://localhost:3000/chat/{chat_jid}/history",
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([
'count' => 50
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/json"
],
]);
$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 := "http://localhost:3000/chat/{chat_jid}/history"
payload := strings.NewReader("{\n \"count\": 50\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
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("http://localhost:3000/chat/{chat_jid}/history")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"count\": 50\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:3000/chat/{chat_jid}/history")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"count\": 50\n}"
response = http.request(request)
puts response.read_body{
"status": 200,
"code": "SUCCESS",
"message": "History sync requested successfully",
"results": {
"status": "requested",
"chat_jid": "6289685028129@s.whatsapp.net",
"requested_count": 50,
"anchor_message_id": "3EB0C767D82B0A0D1234",
"anchor_timestamp": "2026-05-16T08:00:00Z"
}
}{
"code": 400,
"message": "field cannot be blank",
"results": null
}{
"code": 401,
"message": "Unauthorized access",
"results": null
}{
"code": "INTERNAL_SERVER_ERROR",
"message": "you are not loggin",
"results": null
}Authorizations
Basic authentication header of the form Basic <encoded-value>, where <encoded-value> is the base64-encoded string username:password.
Headers
Device identifier for multi-device support. Required when multiple devices are registered.
If only one device is registered, it will be used as the default.
Can also be provided as device_id query parameter.
"my-device-id"
Path Parameters
Chat JID (e.g., phone@s.whatsapp.net for individual or groupid@g.us for group). Percent-encoded values (e.g., groupid%40g.us) are accepted.
Body
Number of older messages to request from the phone. Omit it, or send 0, to use the default of 50.
0 <= x <= 50050
