GET /v1/leads.
Endpoints
pageLinkId é o id do vínculo (linked[].pageLinkId), não o id da Página do Facebook.
Antes de vincular: compartilhamento e posse
Não há etapa de login na Meta. Do lado da Meta, o anunciante:- compartilha a Página com o portfólio empresarial da Pilot Status — o
partnerBusinessIdqueGET /v1/lead-pagesdevolve — no Meta Business Manager; - dá ao usuário do sistema da Pilot Status as tarefas da Página de que ele precisa.
candidates[].missingTaskslista o que ainda falta:MODERATE,MANAGE_LEADS, ouPAGE_ACCESSquando a Página nem foi atribuída ao usuário do sistema. Lista vazia significa pronta;nullsignifica que não foi possível consultar a Meta.
candidates vem vazio e eligibilityBlocker é NO_OFFICIAL_NUMBER. Os
leads, depois, podem ir para qualquer número do workspace, oficial ou não.
Credenciais e permissões
- Tokens OAuth/MCP precisam de
integrations:manage(ADMIN ou OWNER do workspace) em todos os endpoints, leituras incluídas — ANALYST e AGENT são recusados com403 PERMISSION_DENIED. Uma chaveps_clássica não tem papel e passa pelo escopo. - Escopo: uma chave com escopo de número, ou uma credencial da conta inteira com o header
x-whatsapp-number-id, vê e altera só os vínculos daquele número. Uma credencial da conta inteira sem o header vê o workspace todo e indica o número no corpo. Um vínculo num número fora do escopo da credencial responde403 NUMBER_NOT_IN_GRANT.
GET /v1/lead-pages
subscribedAt: null significa que a Meta não está enviando os leads daquela Página, diga o
que disser o resto do vínculo. subscriptionError traz o motivo: META_PERMISSION_MISSING,
PAGE_ACCESS_MISSING, META_NOT_FOUND, META_UNAVAILABLE, META_NOT_CONFIRMED, META_ERROR, ou
— quando a Página deixou de ser elegível — PAGE_NOT_SHARED, PAGE_BUSINESS_MISMATCH,
NO_OFFICIAL_NUMBER. Corrija do lado da Meta e ressincronize o vínculo (abaixo).
POST /v1/lead-pages
pageIdé o id numérico da Página do Facebook.whatsappNumberIdsó pode ficar de fora quando a credencial está vinculada a um número. Qualquer outro campo é recusado com400 UNKNOWN_FIELDS.- A posse e as tarefas da Página são conferidas antes de gravar qualquer coisa:
409 PAGE_NOT_ELIGIBLE(comreasonquando conhecido; sem ele quando outro workspace já vinculou a Página),409 PAGE_MISSING_PERMISSION(commissingTasks),409 PAGE_ALREADY_LINKED(com opageLinkIdexistente). - Com sucesso (
201 { "link": { … } }), a Pilot Status se inscreve nos leads da Página e começa a buscar os leads dos últimos 90 dias em segundo plano. Se a Meta recusar a inscrição, o vínculo é criado mesmo assim esubscriptionErrordiz o motivo.
PATCH /v1/lead-pages/{pageLinkId}
Move o vínculo para outro número do workspace. O corpo é { "whatsappNumberId": "…" }. Só os
leads novos acompanham; os já captados ficam no número em que chegaram.
Quando o número novo envia outro tipo de mensagem — número oficial envia templates, não oficial
envia texto livre — ou fica em outra WABA, toda mensagem automática dos formulários do vínculo é
desligada, e a resposta traz "autoSendDisabled": true. Revise os formulários antes de religar.
DELETE /v1/lead-pages/{pageLinkId}
A Pilot Status também cancela a inscrição nos leads da Página na Meta. Se a Meta falhar, o
desvínculo acontece mesmo assim e nenhum lead novo daquela Página é guardado.
POST /v1/lead-pages/{pageLinkId}/resync
Busca de novo os leads dos últimos 90 dias da Página — leads já guardados não se duplicam — e,
quando o vínculo não está inscrito, tenta a inscrição de novo. Não recebe corpo e responde 202:
subscribedAt e subscriptionError só aparecem quando esta chamada tentou a inscrição de novo. A
busca em si roda em segundo plano e pode levar minutos.
- Uma ressincronização por vínculo a cada 10 minutos. Dentro dessa janela a resposta é
429 RESYNC_COOLDOWNcomretryAfterSeconds. Se não for possível conferir a espera, a resposta é503 RESYNC_UNAVAILABLE, nunca uma ressincronização sem limite. - A posse é conferida de novo. Uma Página que deixou de ser elegível é marcada no vínculo
(
subscriptionError) e responde409 PAGE_NOT_ELIGIBLEcomreason.
GET /v1/lead-pages/{pageLinkId}/forms
Os Formulários Instantâneos da Página, lidos ao vivo da Meta, cada um com as questions, as
consentCheckboxes e a configuração guardada na Pilot Status (config, ou null quando nunca
configurado). A resposta também traz numberIsOfficial e, para um número oficial, os templates
aprovados que o número do vínculo pode enviar automaticamente (templates, cada um
{ id, name, variables }; vazio num número não oficial).
consentAvailable: false— as caixas do formulário não puderam ser lidas. A lista é desconhecida, não vazia.formsTruncated: true— a Página tem mais formulários do que a Pilot Status leu.
PUT /v1/lead-pages/{pageLinkId}/forms/{formId}
Cria ou substitui a configuração de um formulário. Envie o objeto inteiro:
As regras da mensagem só valem quando
autoSendEnabled é true, então você pode salvar a caixa de
consentimento e um rascunho antes. A resposta é 200 { "config": { … } }.
Erros
As recusas destes endpoints trazem
{ "error": "<English> | <Português>", "code": "…" }.