Pular para o conteúdo principal
Duas coisas que até agora só existiam no painel também estão na API pública e no servidor MCP:
  • 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.
As Páginas do Facebook e os Formulários Instantâneos do Meta Lead Ads têm página própria: Páginas e formulários do Lead Ads.

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 — o partnerBusinessId 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 — true enquanto a concessão de parceiro continua valendo, false quando o anunciante a revogou na Meta e null quando não foi possível consultar a Meta agora. Nunca leia null como 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; linked volta mesmo assim) ou not_configured.

POST /v1/ads/accounts

O corpo recebe 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:
  1. 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.
  2. A concessão de parceiro precisa ter chegado à Meta. Senão, 409 AD_ACCOUNT_NOT_SHARED.
Vincular de novo uma conta que você desvinculou reativa o mesmo vínculo.

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.
  • conversations e messages sã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 em GET /v1/leads.
  • Nomes: namesResolvedAt preenchido com todos os nomes null significa que a Pilot Status perguntou à Meta e não recebeu nada — em geral falta a concessão de parceiro. null significa que ainda não perguntou.
  • Privacidade: lastHeadline e lastSourceUrl (o texto do anúncio) vêm null para 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: true avisa que a lista foi cortada — restrinja com startDate/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.