Leads do Meta Lead Ads
Lista os leads captados dos Formulários Instantâneos do Meta Lead Ads (Facebook / Instagram) nas Páginas do Facebook vinculadas, no painel da Pilot Status, ao número de WhatsApp da chave — mais recentes primeiro pelo created_time da Meta (empate desfeito pelo id, decrescente). Leads apagados nunca são listados nem contados.
Requer chave com escopo de número (ou uma chave da conta restrita com x-whatsapp-number-id). Tokens OAuth/MCP também precisam da permissão chat:read: o papel ANALYST é recusado.
id é o id do lead na Pilot Status (use-o em GET /v1/leads/{id}); leadgenId é o id da Meta. createdAt é quando a pessoa enviou o formulário na Meta, não quando a Pilot Status o guardou — um lead importado depois mantém a data original.
consentGiven tem três estados: true = a pessoa marcou a caixa de consentimento configurada para aquele formulário; false = deixou desmarcada; null = DESCONHECIDO (nenhuma caixa configurada para o formulário quando o lead foi guardado, ou sem resposta) — nunca leia null como recusa.
Privacidade (PII): um lead ocultado (redacted: true) mantém os ids, a atribuição (página, formulário, anúncio e os nomes resolvidos do anúncio) e os campos de status, mas fullName, email e phone voltam nulos e fields vazio. Num número RELAY_ONLY todos os leads vêm ocultados e a resposta traz notice: "PII_RELAY_ONLY"; em STORE_X_DAYS só os leads com createdAt anterior à janela são ocultados. total sempre conta todos os leads que atendem ao filtro.
curl --request GET \
--url https://pilotstatus.com.br/v1/leads \
--header 'x-api-key: <api-key>'import requests
url = "https://pilotstatus.com.br/v1/leads"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://pilotstatus.com.br/v1/leads', 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://pilotstatus.com.br/v1/leads",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <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"
"net/http"
"io"
)
func main() {
url := "https://pilotstatus.com.br/v1/leads"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://pilotstatus.com.br/v1/leads")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://pilotstatus.com.br/v1/leads")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"leads": [
{
"id": "cmg4x2k9a0001ab12cd34ef56",
"leadgenId": "1234567890123456",
"whatsappNumberId": "num_01HZX...",
"pageId": "102345678901234",
"pageName": "MM Design",
"formId": "987654321098765",
"formName": "Orçamento — Outubro",
"adId": "120249828053880703",
"adName": "Ads 01 - Vídeo dos 70%",
"adsetName": "[IG] [LL1% IG + VÍDEOS] - 35 a 50",
"campaignName": "[CD-01] [LEADS] - MM Design - Sale 70%",
"platform": "ig",
"isOrganic": false,
"createdAt": "2026-10-18T14:32:10.000Z",
"fullName": "Maria Souza",
"email": "maria@example.com",
"phone": "+55 11 91234-5678",
"fields": [
{
"key": "full_name",
"label": "full_name",
"values": [
"Maria Souza"
]
},
{
"key": "qual_ambiente",
"label": "Qual ambiente você quer reformar?",
"values": [
"Cozinha"
]
}
],
"consentGiven": null,
"conversationId": null,
"autoSendStatus": "none",
"autoSendReason": null,
"source": "webhook",
"redacted": false
},
{
"id": "cmg4x2k9a0002ab12cd34ef57",
"leadgenId": "1234567890654321",
"whatsappNumberId": "num_01HZX...",
"pageId": "102345678901234",
"pageName": "MM Design",
"formId": "987654321098765",
"formName": "Orçamento — Outubro",
"adId": null,
"adName": null,
"adsetName": null,
"campaignName": null,
"platform": "fb",
"isOrganic": true,
"createdAt": "2026-10-17T09:05:44.000Z",
"fullName": null,
"email": null,
"phone": null,
"fields": [],
"consentGiven": null,
"conversationId": null,
"autoSendStatus": "none",
"autoSendReason": null,
"source": "backfill",
"redacted": true
}
],
"total": 2,
"page": 1,
"pageSize": 30,
"totalPages": 1
}{
"error": "startDate must be before or equal to endDate",
"code": "INVALID_DATE_RANGE"
}{
"error": "Unauthorized"
}{
"error": "This endpoint acts on a single WhatsApp number: send the x-whatsapp-number-id header naming the number to act on (its id or instance id from GET /v1/numbers) | Este endpoint atua sobre um único número de WhatsApp: envie o header x-whatsapp-number-id indicando o número desejado (o id dele ou o id da instância, obtidos em GET /v1/numbers)",
"code": "TENANT_SCOPE_NOT_ALLOWED"
}Autorizações
Sua chave de API ps_
Parâmetros de consulta
Filtra por um único id de Formulário Instantâneo. (string)
Filtra por um único id de anúncio. (string)
Filtra por um único id de Página do Facebook. (string)
Início do período, sobre o createdAt do lead (created_time da Meta), inclusive. Deve ser ≤ endDate.
(string (ISO 8601))
Fim do período, sobre o createdAt do lead, inclusive.
(string (ISO 8601))
Página (padrão 1). Valores abaixo de 1 ou não numéricos viram 1. (integer (≥1))
Itens por página (padrão 30, máximo 100; valores maiores são limitados a 100). (integer (1–100))
Resposta
Leads do número da chave
Esta página foi útil?
curl --request GET \
--url https://pilotstatus.com.br/v1/leads \
--header 'x-api-key: <api-key>'import requests
url = "https://pilotstatus.com.br/v1/leads"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://pilotstatus.com.br/v1/leads', 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://pilotstatus.com.br/v1/leads",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <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"
"net/http"
"io"
)
func main() {
url := "https://pilotstatus.com.br/v1/leads"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://pilotstatus.com.br/v1/leads")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://pilotstatus.com.br/v1/leads")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"leads": [
{
"id": "cmg4x2k9a0001ab12cd34ef56",
"leadgenId": "1234567890123456",
"whatsappNumberId": "num_01HZX...",
"pageId": "102345678901234",
"pageName": "MM Design",
"formId": "987654321098765",
"formName": "Orçamento — Outubro",
"adId": "120249828053880703",
"adName": "Ads 01 - Vídeo dos 70%",
"adsetName": "[IG] [LL1% IG + VÍDEOS] - 35 a 50",
"campaignName": "[CD-01] [LEADS] - MM Design - Sale 70%",
"platform": "ig",
"isOrganic": false,
"createdAt": "2026-10-18T14:32:10.000Z",
"fullName": "Maria Souza",
"email": "maria@example.com",
"phone": "+55 11 91234-5678",
"fields": [
{
"key": "full_name",
"label": "full_name",
"values": [
"Maria Souza"
]
},
{
"key": "qual_ambiente",
"label": "Qual ambiente você quer reformar?",
"values": [
"Cozinha"
]
}
],
"consentGiven": null,
"conversationId": null,
"autoSendStatus": "none",
"autoSendReason": null,
"source": "webhook",
"redacted": false
},
{
"id": "cmg4x2k9a0002ab12cd34ef57",
"leadgenId": "1234567890654321",
"whatsappNumberId": "num_01HZX...",
"pageId": "102345678901234",
"pageName": "MM Design",
"formId": "987654321098765",
"formName": "Orçamento — Outubro",
"adId": null,
"adName": null,
"adsetName": null,
"campaignName": null,
"platform": "fb",
"isOrganic": true,
"createdAt": "2026-10-17T09:05:44.000Z",
"fullName": null,
"email": null,
"phone": null,
"fields": [],
"consentGiven": null,
"conversationId": null,
"autoSendStatus": "none",
"autoSendReason": null,
"source": "backfill",
"redacted": true
}
],
"total": 2,
"page": 1,
"pageSize": 30,
"totalPages": 1
}{
"error": "startDate must be before or equal to endDate",
"code": "INVALID_DATE_RANGE"
}{
"error": "Unauthorized"
}{
"error": "This endpoint acts on a single WhatsApp number: send the x-whatsapp-number-id header naming the number to act on (its id or instance id from GET /v1/numbers) | Este endpoint atua sobre um único número de WhatsApp: envie o header x-whatsapp-number-id indicando o número desejado (o id dele ou o id da instância, obtidos em GET /v1/numbers)",
"code": "TENANT_SCOPE_NOT_ALLOWED"
}