Documentación

Añade el agente a tu página de registro, llama a un endpoint desde tu servidor y actúa según la decisión.

Inicio rápido

1. Añade el agente a tu página de registro

Recoge señales del dispositivo y pone un token de visitante de corta vida en un campo oculto llamado attrelix_visitor en cada formulario de la página. También expone 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. Verifica el registro desde tu servidor

Envía el correo, la IP del cliente y el token de visitante con tu clave secreta. Opcional: external_id (el id de tu usuario), user_agent y card_fingerprint (por ejemplo el card.fingerprint de 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. Actúa según la decisión

allow: da los créditos gratis. review: pide algo que le cueste dinero a una granja — una tarjeta, un teléfono — o da menos créditos. block: rechaza la cuenta o los créditos. Si la llamada falla, permite: nunca bloquees a usuarios reales por nuestra culpa.

Claves y tokens

  • Clave pública (pk_live_…): pública por diseño. Va en tu página y solo recoge señales, desde los orígenes que permitas en el panel.
  • Clave secreta (sk_live_…): solo en el servidor. Ejecuta verificaciones y lee resultados. Solo guardamos su hash: cópiala al crearla.
  • Token de visitante: firmado por nosotros, válido 15 minutos y para una sola verificación, ligado a tu proyecto. Un token usado dos veces, o desde otra red distinta a la del registro, sube la puntuación.

POST /v1/check

Cuerpo de la petición (JSON). Envía al menos uno de email, ip o visitor.

emailLa dirección que escribió el usuario.
ipLa IP del cliente en la petición de registro (no la de tu servidor).
visitorEl valor de attrelix_visitor del formulario.
user_agentLa cabecera User-Agent de la petición de registro.
external_idTu id de la cuenta, cuando ya existe.
card_fingerprintUna huella de tarjeta, cuando se añade una tarjeta en el registro.

Respuesta

decision es allow, review o block. score va de 0 a 100: la suma de los puntos de los motivos, con tope. Cada motivo tiene un código estable que puedes registrar o 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
}

Errores

Los errores son JSON: {"error": code, "message": text}.

401clave ausente, desconocida, revocada o del tipo equivocado (una clave pk_ en /v1/check).
400el cuerpo no es JSON o no tiene email, ip ni visitor.
402se agotaron las verificaciones mensuales del plan.
403el agente se ejecutó en un origen que no permitiste.
429demasiadas peticiones desde una dirección.

Puntuación

Los puntos se suman con un tope de 100. Por defecto: revisar desde 50, bloquear desde 80 — ambos ajustables. Un buzón desechable solo ya va a revisión; ninguna señal aislada de dispositivo o red llega ahí.

CódigoPuntosSignificado
invalid_email+50La dirección no es válida
disposable_email+50Dominio de correo desechable
no_mx+35El dominio no puede recibir correo
alias_of_existing+30Otra forma de escribir un buzón ya visto
relay_email+10Dirección de reenvío
plus_tag+5Etiqueta + o puntos de Gmail
tor_exit+35Nodo de salida de Tor
datacenter_ip+25Dirección de datacenter o nube
vpn_ip+20Dirección de VPN
ip_signups_24h+103+ cuentas desde esta IP en 24 h
ip_signups_24h_high+2510+ cuentas desde esta IP en 24 h
subnet_burst+1510+ cuentas desde esta subred en 1 h
automation_webdriver+40Automatización por WebDriver
headless_browser+40Navegador headless
automation_cdp+10Automatización por el protocolo DevTools (Puppeteer, Playwright)
antidetect_browser+15Navegador anti-detect (varios disfraces a la vez)
headless_viewport+15Ventana sin barra ni pestañas del navegador
webgl_os_mismatch+25La tarjeta gráfica pertenece a otro sistema operativo
memory_cpu_mismatch+10Núcleos y memoria no concuerdan
no_human_interaction+30Enviado al instante, sin teclear, mover el ratón ni tocar la pantalla
instant_signup+25Rellenado y enviado en menos de un segundo tras cargar la página
os_mismatch+20El sistema operativo se contradice
browser_mismatch+20El navegador contradice su user agent
fonts_mismatch+15Las fuentes no cuadran con el sistema declarado
canvas_noise+15Huella de canvas aleatorizada
software_renderer+15Gráficos por software (máquina virtual o headless)
zero_window+15Ventana sin tamaño
permissions_mismatch+15Estados de permisos contradictorios
no_plugins+10Chrome de escritorio sin plugins
no_languages+10Navegador sin idiomas
utc_timezone+5Reloj en UTC
token_missing0–100Sin token de visitante (el agente no cargó o fue bloqueado)
token_invalid+30Token de visitante falsificado o ajeno
token_replayed+35Token de visitante ya usado
token_expired+10Token de visitante caducado
token_ip_mismatch+8Token recogido en otra red
token_ua_mismatch+15Token recogido por otro navegador
linked_accounts+15Vinculada a otras cuentas
linked_accounts_3+30Vinculada a 3+ cuentas
linked_accounts_10+45Vinculada a 10+ cuentas
shared_card+30Tarjeta usada por otra cuenta
device_burst+155+ verificaciones desde este dispositivo en 1 h

Fuentes de datos

Dominios desechables: el proyecto disposable-email-domains (CC0) y disposable/disposable-email-domains (MIT), actualizados a diario. Rangos de datacenter: las listas publicadas por AWS, Google Cloud, Oracle Cloud, DigitalOcean y Linode. Tor: la lista de salidas del Tor Project, actualizada cada hora.

Ahora mismo: 98,644 dominios desechables y 21,665 rangos.