TRUST

Score de confiabilidade

Um número de 0 a 100 pra um domínio, composto a partir de vários sinais independentes — SSL, blocklist, histórico de malware, idade do domínio, situação cadastral via CNPJ. Cada sinal é auditável na própria resposta.

Trust score

A 0-100 number for a domain, composed from several independent signals — SSL, blocklist, malware history, domain age, business status via CNPJ. Every signal is auditable right in the response.

SYNC resposta na mesma chamada answers in the same call

Endpoint

Endpoint

GET /api/v1/trust/{domain} score composto pra um domínio composite score for a domain

?cnpj= opcional — só relevante pra domínios que não são .br, onde não dá pra derivar o CNPJ automaticamente via RDAP.

Optional ?cnpj= — only relevant for non-.br domains, where the CNPJ can't be derived automatically via RDAP.

Sinais e pesos

Signals and weights

SinalSignalPesoFonteSource
ssl 25 Dial próprio na porta 443 — certificado válido, não expirado, não self-signed Own dial on port 443 — certificate valid, not expired, not self-signed
dns_blocklist_big + dns_blocklist_nsfw 5 + 5 Blocklists OISD, as mesmas da API de DNS OISD blocklists, the same ones the DNS API uses
malware_history 30 Feed de malware do URLhaus (abuse.ch) — maior peso, o sinal mais forte de perigo real URLhaus (abuse.ch) malware feed — heaviest weight, the strongest signal of real danger
domain_age 0 / 10 / 20 RDAP do registro.br, só domínios .br — <30 dias: 0 · 30–364: 10 · ≥365: 20 registro.br RDAP, .br domains only — <30 days: 0 · 30–364: 10 · ≥365: 20
business 15 CNPJ derivado do RDAP, ou ?cnpj=, checado via BrasilAPI (Receita Federal) — situação "ATIVA" CNPJ derived from RDAP, or ?cnpj=, checked via BrasilAPI (Receita Federal) — status "ATIVA"

score = 100 × ganhos / possíveis, calculado só sobre os sinais que puderam ser checados de verdade. Um sinal ausente ou não aplicável sai do denominador inteiro — não é tratado como falha, não faz um domínio parecer pior só por falta de um dado opcional.

score = 100 × earned / possible, computed only over signals that could actually be checked. A missing or not-applicable signal drops out of the whole denominator — it's not treated as a failure, it doesn't make a domain look worse just because an optional data source was unavailable.

Exemplo

Example

curl "https://api.alicercelabs.com.br/api/v1/trust/exemplo.com.br" \
  -H "Authorization: Bearer <token>"
{
  "success": true,
  "data": {
    "domain": "exemplo.com.br",
    "score": 82,
    "verdict": "confiável",
    "points_earned": 90,
    "points_possible": 110,
    "signals": {
      "ssl": { "checked": true, "valid": true, "days_until_expiry": 45 },
      "dns_blocklist_big": { "checked": true, "blocked": false },
      "dns_blocklist_nsfw": { "checked": true, "blocked": false },
      "malware_history": { "checked": true, "listed": false },
      "domain_age": { "checked": true, "age_days": 3200 },
      "business": { "checked": true, "cnpj": "00.000.000/0001-00", "situacao": "ATIVA" }
    }
  },
  "meta": { "elapsed_ms": 640, "request_id": "..." }
}

Erros possíveis

Possible errors

StatusMotivoReason
400domínio inválido, ou cnpj inválido (esperado 14 dígitos)invalid domain, or invalid cnpj (14 digits expected)
401token ausente ou inválidomissing or invalid token
429limite de taxa excedidorate limit exceeded

Não existe um 503 pra API inteira — um sinal específico indisponível ou não configurado vem checked:false com um reason, o resto da resposta continua normal.

There's no whole-API 503 — a specific unavailable or unconfigured signal comes back checked:false with a reason, the rest of the response stays normal.

Fora de escopo v1

Out of scope for v1

Busca do conteúdo HTML do site (exigiria a mesma proteção contra SSRF já construída pra API de Imagem, mais heurística de conteúdo que ainda não existe) · RDAP multi-registrador pra domínios não-.br · consulta direta a Spamhaus DBL/SURBL (o feed do URLhaus já cobre o sinal de malware sem esse risco) · pesos do score configuráveis (é decisão de produto, não cota).

Fetching the site's HTML content (would need the same SSRF protection already built for the Imagem API, plus content heuristics that don't exist yet) · multi-registrar RDAP for non-.br domains · querying Spamhaus DBL/SURBL directly (the URLhaus feed already covers the malware signal without that risk) · configurable score weights (a product decision, not a quota).

Limites

Limits

10.000/dia · 416/hora. Resultado composto em cache: 24 horas (tunável via admin). Lookup de CNPJ em cache: 7 dias, reaproveitado entre domínios diferentes que compartilhem titular.

10,000/day · 416/hour. Composite result cached: 24 hours (tunable via admin). CNPJ lookup cached: 7 days, reused across different domains sharing the same owner.