- Contas de anúncios — conecte as contas de anúncios da Meta cujos anúncios trazem pessoas aos seus números, para a Pilot Status resolver o nome de cada anúncio, do conjunto de anúncios e da campanha.
- Resumo de anúncios — o tráfego Click-to-WhatsApp agrupado por anúncio: conversas, mensagens, os nomes resolvidos e quantos leads do Lead Ads cada anúncio gerou.
Endpoints
Sem login na Meta: compartilhamento de parceiro
Nenhum endpoint aqui pede token da Meta, e nenhum vai pedir. O acesso vem do compartilhamento de parceiro: o anunciante adiciona o portfólio empresarial da Pilot Status — opartnerBusinessId devolvido por GET /v1/ads/accounts — como parceiro da conta de anúncios
no Meta Business Manager. É o único passo manual, e ele acontece do lado da Meta. A partir daí, a
Pilot Status lê com o próprio usuário do sistema.
Credenciais e permissões
Uma chave
ps_ clássica não tem papel e passa na checagem de permissão pelo escopo. No resumo,
uma chave com escopo de número — ou uma credencial da conta inteira com o header
x-whatsapp-number-id — reporta só aquele número; uma credencial da
conta inteira sem o header reporta o workspace todo.
GET /v1/ads/accounts
sharingActive—trueenquanto a concessão de parceiro continua valendo,falsequando o anunciante a revogou na Meta enullquando não foi possível consultar a Meta agora. Nunca leianullcomo revogada.candidates— contas compartilhadas com a Pilot Status que comprovadamente são do seu workspace, porque um anúncio delas já chegou a um dos seus números, e ainda não vinculadas. Um workspace novo começa com a lista vazia; vincule a sua conta pelo id.sharingLookup—ok,unavailable(a Meta não respondeu;linkedvolta mesmo assim) ounot_configured.
POST /v1/ads/accounts
adAccountId (act_ seguido de dígitos) e nada mais: qualquer outro campo — um
token, por exemplo — é recusado com 400 UNKNOWN_FIELDS. A resposta é 201 { "link": { … } }.
Duas checagens rodam antes de gravar qualquer coisa:
- A conta precisa ser sua. Se nenhum anúncio dela chegou às suas conversas ainda, a resposta
é
409 AD_ACCOUNT_NOT_PROVEN— fale com o suporte para vinculá-la. - A concessão de parceiro precisa ter chegado à Meta. Senão,
409 AD_ACCOUNT_NOT_SHARED.
DELETE /v1/ads/accounts/{adAccountId}
Desconecta a conta: os anúncios dela deixam de receber nomes novos. O vínculo fica guardado como
histórico, então os nomes já resolvidos continuam. Responde
200 { "unlinked": true, "adAccountId": "act_…" }, ou 404 NOT_FOUND quando a conta nunca foi
vinculada, já foi desvinculada ou é de outro workspace.
GET /v1/ads/summary
string
Restringe a um número dentro do escopo da credencial. Um número fora dele responde
403 NUMBER_NOT_IN_GRANT.string
Início do intervalo (ISO 8601), sobre o horário da mensagem — e a data de criação do lead na
Meta para
leadCount. Deve ser anterior ou igual a endDate.string
Fim do intervalo (ISO 8601), inclusive.
conversationsemessagessão contagens separadas: conversas distintas, e mensagens.leadCount— leads do Lead Ads que o mesmo anúncio gerou, no mesmo escopo de números e intervalo de datas. Um anúncio que gerou leads mas nunca uma conversa não tem linha aqui: consulte-o emGET /v1/leads.- Nomes:
namesResolvedAtpreenchido com todos os nomesnullsignifica que a Pilot Status perguntou à Meta e não recebeu nada — em geral falta a concessão de parceiro.nullsignifica que ainda não perguntou. - Privacidade:
lastHeadlineelastSourceUrl(o texto do anúncio) vêmnullpara um anúncio visto só em número RELAY_ONLY. As contagens não mudam. O resumo nunca traz conteúdo de conversa. - Limite: no máximo 200 anúncios, os mais movimentados primeiro.
truncated: trueavisa que a lista foi cortada — restrinja comstartDate/endDate.
GET /v1/referrals/summary é a visão por número, com chat:read, do mesmo
tráfego.
Erros
As recusas destes endpoints trazem
{ "error": "<English> | <Português>", "code": "…" }; as recusas de autenticação e de permissão (401, 403 NUMBER_SCOPE_NOT_ALLOWED, 403 PERMISSION_DENIED) mantêm o corpo que têm em todo endpoint /v1.