curl --request GET \
--url https://api.zapsterapi.com/v1/wa/recipients/{recipient} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.zapsterapi.com/v1/wa/recipients/{recipient}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.zapsterapi.com/v1/wa/recipients/{recipient}', 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.zapsterapi.com/v1/wa/recipients/{recipient}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.zapsterapi.com/v1/wa/recipients/{recipient}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.zapsterapi.com/v1/wa/recipients/{recipient}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zapsterapi.com/v1/wa/recipients/{recipient}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"is_business": true,
"profile_picture": "https://api.zapsterapi.com/v1/wa/recipients/5511999999999/pp",
"lid": "<string>",
"name": "Padaria Pão Quente"
}{
"errors": [
{
"code": "recipient_invalid_format",
"message": "The recipient must be a phone number in international format (e.g. 5511999999999)."
}
]
}{
"errors": [
{
"code": "recipient_not_found",
"message": "The specified recipient could not be found."
}
]
}{
"errors": [
{
"code": "rate_limited",
"message": "You can only make 10 recipient checks every 60 seconds."
}
]
}{
"errors": [
{
"code": "recipient_pool_unavailable",
"message": "The recipient verification service is temporarily unavailable. Please try again shortly."
}
]
}Verificação de Número (Sem Instância)
Verifica se um número existe no WhatsApp sem precisar de uma instância conectada.
curl --request GET \
--url https://api.zapsterapi.com/v1/wa/recipients/{recipient} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.zapsterapi.com/v1/wa/recipients/{recipient}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.zapsterapi.com/v1/wa/recipients/{recipient}', 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.zapsterapi.com/v1/wa/recipients/{recipient}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.zapsterapi.com/v1/wa/recipients/{recipient}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.zapsterapi.com/v1/wa/recipients/{recipient}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zapsterapi.com/v1/wa/recipients/{recipient}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"is_business": true,
"profile_picture": "https://api.zapsterapi.com/v1/wa/recipients/5511999999999/pp",
"lid": "<string>",
"name": "Padaria Pão Quente"
}{
"errors": [
{
"code": "recipient_invalid_format",
"message": "The recipient must be a phone number in international format (e.g. 5511999999999)."
}
]
}{
"errors": [
{
"code": "recipient_not_found",
"message": "The specified recipient could not be found."
}
]
}{
"errors": [
{
"code": "rate_limited",
"message": "You can only make 10 recipient checks every 60 seconds."
}
]
}{
"errors": [
{
"code": "recipient_pool_unavailable",
"message": "The recipient verification service is temporarily unavailable. Please try again shortly."
}
]
}Introdução
Este endpoint verifica se um número existe no WhatsApp sem exigir uma instância conectada. A consulta é atendida por uma infraestrutura dedicada da própria Zapster, com cache persistente, então não depende de você ter um número próprio ativo na plataforma. A resposta traz o ID do destinatário, se é uma conta comercial, o LID e a URL da foto de perfil.429 com o código rate_limited e o header Retry-After indica quando tentar de novo.instance_id), este endpoint só retorna o campo name para contas comerciais (is_business: true), com o nome da empresa no WhatsApp. O nome de um contato pessoal só existe no histórico de conversa de uma instância específica, então ele nunca é retornado aqui.Casos de Uso
- Validação em formulários de cadastro: confirme que um número tem WhatsApp antes de salvá-lo, mesmo antes de ter qualquer instância conectada.
- Limpeza de base de contatos: valide listas de telefones em lote (veja a versão em lote) sem consumir a cota de uma instância de envio.
- Pré-venda e onboarding: use no seu fluxo de signup ou numa ferramenta pública para mostrar valor antes do cliente configurar uma instância.
Por que não precisa de instância?
A consulta é atendida por um pool de números dedicados da própria Zapster, reservado exclusivamente para esse tipo de verificação. As instâncias dos seus clientes nunca são usadas para checar números de terceiros. O resultado passa por um cache que reduz consultas repetidas ao mesmo número, o que também torna respostas para números já conhecidos praticamente instantâneas.Formato do número
Orecipient deve estar em formato internacional (E.164): código do país seguido do número, com o + inicial opcional. Ambos os formatos abaixo são aceitos:
5511999999999
+5511999999999
400 com o código recipient_invalid_format.
5511999999999 ou 551199999999) — ambas as grafias resolvem para a mesma conta no WhatsApp, e a API aceita qualquer uma delas.Pontos de Atenção
profile_picture está sempre presente em um destinatário encontrado: é uma URL estável que aponta para o endpoint de Foto de Perfil do Destinatário. Ela não expira como uma URL assinada, então pode ser armazenada e usada diretamente em um <img src> — a cada acesso, a foto mais recente disponível é servida. Quando o contato mantém a foto de perfil privada ou não possui nenhuma foto atribuída, o endpoint responde com um avatar genérico (placeholder), configurável pelo parâmetro placeholder.429 com o código rate_limited e os headers descritos na seção de erros da resposta abaixo.Autorizações
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Parâmetros de caminho
Número do destinatário em formato internacional (E.164), com ou sem o + inicial.
Resposta
Success
ID ou número do destinatário.
Define se o recipient informado é um perfil do tipo business ou normal.
Foto de perfil do destinatário. Sempre presente — é uma URL estável que aponta para o endpoint de foto de perfil (GET /wa/recipients/{recipient}/pp), então pode ser usada diretamente em um <img src> e armazenada como referência. Quando o número não tem foto disponível, esse endpoint responde com um placeholder configurável.
"https://api.zapsterapi.com/v1/wa/recipients/5511999999999/pp"
Identificador LID do destinatário no WhatsApp.
Nome da conta comercial (WhatsApp Business), como aparece no WhatsApp. Presente apenas quando is_business é true e a conta tem um nome; contas pessoais nunca trazem esse campo.
"Padaria Pão Quente"