--- title: Prevenção de Fraude — Fraude em anúncios --- # Fraude em anúncios Este é um **guia de cenário**. A integração principal não muda — você carrega o [Web SDK](../web-sdk), lê um [veredito](../verdict-reference) e obtém dados da [Data API](../data-api) exatamente como descrito naquelas páginas. Esta página acrescenta as poucas especificidades de que só o cenário de fraude em anúncios precisa. A proteção contra fraude em anúncios filtra bots e tráfego inválido para fora de campanhas pagas, para que anunciantes e plataformas de anúncios paguem por cliques e impressões genuínos — não por volume falso. O que a torna diferente dos outros casos de uso é que **um terceiro entrega o visitante** e ambos os lados precisam chegar a um acordo sobre uma conclusão humano / bot independente e por clique. ## Bloqueio em tempo real na origem A Fraud Prevention roda inline no ponto de entrada e retorna um veredito em tempo real — não é um relatório a posteriori. Quem for dono da página em que o visitante aterrissa pode agir sobre esse veredito de imediato: - **Os anunciantes** rodam o SDK na landing page: o tráfego inválido é detectado — e, opcionalmente, recebe um desafio — no momento em que chega, antes de entrar no funil ou distorcer os relatórios. - **As plataformas de tráfego** rodam o SDK em sua própria pre-lander ou página de redirecionamento: um clique é verificado *antes* de ser encaminhado, de modo que os bots são barrados na entrada e nunca se tornam tráfego entregue. O único requisito é uma página capaz de rodar o SDK: um veredito precisa de sinais do navegador, então um 302 puramente do lado do servidor não tem onde coletá-los — adicione uma página intermediária leve e o mesmo bloqueio em tempo real se aplica. O token de clique assinado e a Data API ficam por cima para a conciliação entre os dois lados; o bloqueio inline em tempo real é o mecanismo principal, e a limpeza posterior via API é o recurso de reserva para o tráfego sem página intermediária. ## Os dois papéis - **Anunciante (Advertiser)** — é dono da landing page em que o visitante chega. Roda o Web SDK nessa página para obter um veredito para cada visita que chega, e obtém vereditos da Data API para conciliar aquilo pelo que foi cobrado. - **Provedor (Provider)** (fonte de tráfego / anúncio) — entrega o clique. Ele precisa **comprovar a qualidade do que enviou**, então emite um token de clique por clique e, depois, cruza seu relatório de entrega com os vereditos independentes. Ambos os lados se autenticam na [Data API](../data-api) com suas próprias credenciais de aplicação e leem o mesmo veredito por clique, que é o que lhes permite conciliar sem confiar nos logs brutos um do outro. ## Fluxo de ponta a ponta A sequência abaixo mostra como um clique percorre o caminho desde a entrega do provedor, passando pelo visitante e pela landing page do anunciante, até um único veredito que **ambas as contas leem depois, cada uma do seu lado**. ```mermaid sequenceDiagram autonumber participant P as Provedor (conta B) participant V as Visitante participant A as Página do anunciante + SDK participant F as API de Prevenção de Fraude P->>P: Assina click_token (bot_kid + secret, carrega pkid) P->>V: Entrega o link com ?_ctk=click_token V->>A: Clica → chega à página do anunciante (URL carrega _ctk) A->>A: SDK lê _ctk da URL A->>F: POST criptografado /bot/verify
(app_key = anunciante, click_token = assinado pelo provedor) F->>F: app_key → advertiser_app_id,
verifica pkid → provider_app_id, chega a um veredito,
grava uma linha carregando ambos os app_ids F-->>A: verdict → onVerdict A->>A: Trata conforme verdict.action (registrar / bloquear / desafiar) Note over P,F: Conciliação (entre contas) A->>F: GET /v1/bot com App-Key do anunciante F-->>A: Mesma linha (correspondida em advertiser_app_id) P->>F: GET /v1/bot com App-Key do provedor F-->>P: Mesma linha (correspondida em provider_app_id) ``` A propriedade decisiva: **ambos os app_ids ficam na mesma linha.** O anunciante a lê correspondida em `advertiser_app_id`, o provedor a lê correspondida em `provider_app_id` — duas contas diferentes, cada uma consultando com sua própria App-Key, cada uma chegando ao mesmo veredito independente. Nenhum dos lados precisa expor ou confiar nos logs brutos do outro para concordar sobre o que aconteceu em um determinado clique. ## Tokens de clique Um **token de clique** vincula o clique entregue por um provedor ao veredito que a visita acaba recebendo. É o identificador por clique sobre o qual ambas as partes liquidam. Os outros casos de uso da Prevenção de Fraude não precisam de tokens de clique — eles conciliam vereditos sem eles. O fluxo: 1. **Emitir** — o provedor obtém um token de clique assinado (um por clique) quando roteia um visitante em direção à landing page do anunciante. 2. **Carregá-lo na URL de destino** — acrescente o token emitido à URL de destino como um parâmetro de consulta: ``` https://advertiser.example/lp?click_token=ct_xxxxxxxx ``` 3. **Lê-lo na página** — o [Web SDK](../web-sdk) lê o token da URL automaticamente. Se você usar um nome de parâmetro diferente, defina `tokenParam`: ```js BotSignal.init({ appKey: 'YOUR_APP_KEY', tokenParam: 'click_token' }); ``` 4. **Conciliar** — consulte o clique depois pela Data API e cruze-o de volta com o relatório de entrega do provedor. ::: info O token já está assinado quando é emitido para você — você só precisa **carregá-lo até a URL de destino**. Não há nada para assinar ou calcular do seu lado. ::: ### Opção `tokenParam` O Web SDK ganha uma opção extra neste cenário: | Opção | Tipo | Padrão | Descrição | | --- | --- | --- | --- | | `tokenParam` | string | detectado automaticamente | Nome do parâmetro de consulta da URL que carrega o token de clique do provedor (por exemplo, `click_token`). O SDK o lê da URL da página e vincula o veredito a esse clique. Deixe sem definir se você não usar tokens de clique. | ## Conciliação e liquidação Uma vez que as visitas carregam um token de clique, ambos os lados liquidam com base nos mesmos vereditos independentes: - **Obter o veredito de um único clique** — por exemplo, para contestar ou confirmar um clique: ```bash GET /v1/bot/verdict?click_token=ct_xxx X-App-Key: YOUR_APP_KEY X-App-Secret: YOUR_APP_SECRET ``` - **Exportar linhas por clique** — obtenha um intervalo de tempo e cruze o `click_token` de cada linha de volta com seus próprios logs de clique: ```bash GET /v1/bot/export?from=2026-06-01&to=2026-06-30&format=csv X-App-Key: YOUR_APP_KEY X-App-Secret: YOUR_APP_SECRET ``` Cada linha carrega o `click_token` da visita (quando presente), o timestamp e os campos do veredito (`is_bot`, `score`, `level`, `action`). O anunciante exclui cliques sinalizados e de bots daquilo pelo que paga; o provedor concilia seu relatório de entrega com as mesmas conclusões. Como ambos leem o **mesmo veredito independente**, a liquidação não depende dos logs brutos de nenhum dos lados. ## Modelo de segurança A `cid` e o token de clique viajam na URL, então trate-os como identificadores — não como credenciais: - **Ler um veredito exige App-Key + App-Secret.** A Data API autentica cada chamada com o seu app secret (comparado em tempo constante) e retorna apenas linhas em que o seu app é o advertiser ou o provider. Uma `cid` sozinha não busca nada — um terceiro que a copia da URL não tem secret e não é parte da linha. - **O provider fica vinculado pela assinatura.** O token de clique é assinado com HMAC usando o secret do provider e carrega o `pkid` do provider; não pode ser forjado, e uma `cid` só pode ser reivindicada uma vez (protegida contra repetição). - **Opcionalmente, vincule também o advertiser.** Assine o `app_key` do advertiser de destino no token como `aud`. A verificação passa então a exigir que o app_key da página coincida com `aud`, de modo que um token emitido para o advertiser A não possa atribuir um veredito ao advertiser B. Omita `aud` e qualquer página de advertiser poderá aceitar o token. Efeito líquido: o veredito de uma `cid` só é legível pelos dois apps vinculados a ela — o advertiser cuja página rodou o SDK e o provider cujo token foi apresentado — cada um autenticando-se com o seu próprio App-Secret. ## Próximos passos - [Web SDK](../web-sdk) — colete vereditos na landing page - [Referência de Veredito](../verdict-reference) — cada campo e como agir sobre ele - [Data API](../data-api) — obtenha e concilie vereditos no lado do servidor