Documentação

Coloque o agente na sua página de cadastro, chame um endpoint do seu servidor e aja conforme a decisão.

Início rápido

1. Coloque o agente na página de cadastro

Ele coleta sinais do dispositivo e coloca um token de visitante de vida curta num campo oculto chamado attrelix_visitor em todo formulário da página. Também expõe window.attrelix.token() para single-page apps.

<script src="https://attrelix.com/v1.js?v=0bbe74b52d" data-key="pk_live_…" async></script>

// single-page apps: wait for the token before you submit
const visitor = await window.attrelix.token();

2. Cheque o cadastro pelo seu servidor

Envie o e-mail, o IP do cliente e o token de visitante com a sua chave secreta. Opcionais: external_id (o id do seu usuário), user_agent e card_fingerprint (por exemplo o card.fingerprint do Stripe).

curl https://attrelix.com/v1/check \
  -H "Authorization: Bearer $ATTRELIX_SECRET" \
  -H "Content-Type: application/json" \
  -d '{"email":"jdoe+7@gmail.com","ip":"203.0.113.9","visitor":"vt1.…"}'
# Python
r = requests.post("https://attrelix.com/v1/check", timeout=3,
    headers={"Authorization": f"Bearer {SECRET}"},
    json={"email": email, "ip": ip, "visitor": form["attrelix_visitor"]})
decision = r.json().get("decision", "allow") if r.ok else "allow"

3. Aja conforme a decisão

allow: libere os créditos grátis. review: peça algo que custe dinheiro a uma fazenda — um cartão, um telefone — ou libere menos créditos. block: recuse a conta ou os créditos. Se a chamada falhar, permita: nunca trave usuários reais por nossa causa.

Chaves e tokens

  • Chave pública (pk_live_…): pública por definição. Fica na sua página e só coleta sinais, nas origens que você liberar no painel.
  • Chave secreta (sk_live_…): só no servidor. Roda checagens e lê resultados. Guardamos apenas o hash dela: copie quando criar.
  • Token de visitante: assinado por nós, vale 15 minutos e uma única checagem, preso ao seu projeto. Um token usado duas vezes, ou vindo de outra rede que não a do cadastro, aumenta o score.

POST /v1/check

Corpo da requisição (JSON). Envie pelo menos um entre email, ip e visitor.

emailO endereço que o usuário digitou.
ipO IP do cliente na requisição de cadastro (não o do seu servidor).
visitorO valor de attrelix_visitor vindo do formulário.
user_agentO cabeçalho User-Agent da requisição de cadastro.
external_idO seu id da conta, quando ela já existe.
card_fingerprintUm fingerprint de cartão, quando um cartão é cadastrado no signup.

Resposta

decision é allow, review ou block. score vai de 0 a 100: a soma dos pontos dos motivos, com teto. Cada motivo tem um código estável que você pode registrar ou mostrar.

{
  "id": "chk_3fJ8kQ2mN7pX1aZb",
  "decision": "block",
  "score": 100,
  "reasons": [
    { "code": "linked_accounts_10", "points": 45, "detail": "14" },
    { "code": "alias_of_existing", "points": 30, "detail": "3 variants of jdoe@gmail.com" },
    { "code": "datacenter_ip", "points": 25, "detail": "aws" }
  ],
  "email":   { "normalized": "jdoe@gmail.com", "disposable": false, "relay": false, "mx": "yes", … },
  "network": { "ip": "3.88.0.1", "type": "datacenter", "provider": "aws", "signups_24h": 2 },
  "device":  { "id": "dev_9c1e…", "token": "valid", "browser": "Firefox 144", "flags": ["canvas_noise"] },
  "linked":  { "accounts": 14, "by_device": 12, "by_card": 0, "cluster": "cl_7q2f…" },
  "latency_ms": 38
}

Erros

Erros vêm em JSON: {"error": code, "message": text}.

401chave ausente, desconhecida, revogada ou do tipo errado (uma chave pk_ em /v1/check).
400o corpo não é JSON ou não tem email, ip nem visitor.
402as checagens mensais do plano acabaram.
403o agente rodou numa origem que você não liberou.
429requisições demais vindas de um endereço.

Pontuação

Os pontos se somam, com teto de 100. Padrão: revisar a partir de 50, bloquear a partir de 80 — ambos ajustáveis. Uma caixa descartável sozinha já vai para revisão; nenhum sinal isolado de dispositivo ou rede chega lá.

CódigoPontosSignificado
invalid_email+50O endereço não é válido
disposable_email+50Domínio de e-mail descartável
no_mx+35O domínio não recebe e-mail
alias_of_existing+30Outra grafia de uma caixa já vista
relay_email+10Endereço de encaminhamento
plus_tag+5Tag + ou pontos do Gmail
tor_exit+35Nó de saída do Tor
datacenter_ip+25Endereço de datacenter ou nuvem
vpn_ip+20Endereço de VPN
ip_signups_24h+103+ contas deste IP em 24 h
ip_signups_24h_high+2510+ contas deste IP em 24 h
subnet_burst+1510+ contas desta sub-rede em 1 h
automation_webdriver+40Automação por WebDriver
headless_browser+40Navegador headless
automation_cdp+10Automação pelo protocolo DevTools (Puppeteer, Playwright)
antidetect_browser+15Navegador anti-detect (vários disfarces ao mesmo tempo)
headless_viewport+15Janela sem barra nem abas do navegador
webgl_os_mismatch+25A placa de vídeo pertence a outro sistema operacional
memory_cpu_mismatch+10Número de núcleos e memória não batem
no_human_interaction+30Enviado na hora, sem digitar, mover o mouse ou tocar na tela
instant_signup+25Preenchido e enviado em menos de um segundo após a página carregar
os_mismatch+20O sistema operacional se contradiz
browser_mismatch+20O navegador contradiz o próprio user agent
fonts_mismatch+15As fontes não batem com o sistema declarado
canvas_noise+15Fingerprint de canvas aleatorizado
software_renderer+15Gráficos por software (máquina virtual ou headless)
zero_window+15Janela sem tamanho
permissions_mismatch+15Estados de permissão contraditórios
no_plugins+10Chrome de desktop sem plugins
no_languages+10Navegador sem idiomas
utc_timezone+5Relógio em UTC
token_missing0–100Sem token de visitante (agente não carregou ou foi bloqueado)
token_invalid+30Token de visitante forjado ou de outro projeto
token_replayed+35Token de visitante já usado
token_expired+10Token de visitante expirado
token_ip_mismatch+8Token coletado em outra rede
token_ua_mismatch+15Token coletado por outro navegador
linked_accounts+15Ligada a outras contas
linked_accounts_3+30Ligada a 3+ contas
linked_accounts_10+45Ligada a 10+ contas
shared_card+30Cartão usado por outra conta
device_burst+155+ checagens deste dispositivo em 1 h

Fontes de dados

Domínios descartáveis: o projeto disposable-email-domains (CC0) e disposable/disposable-email-domains (MIT), atualizados todo dia. Faixas de datacenter: as listas publicadas por AWS, Google Cloud, Oracle Cloud, DigitalOcean e Linode. Tor: a lista de saídas do Tor Project, atualizada a cada hora.

Agora: 98,644 domínios descartáveis e 21,665 faixas.