autentify
Referência da API · v1

Documentação Identity API

Envie e-mail + CPF e receba em uma única resposta um score de identidade (0–1000), o vínculo entre os dados, sinais de risco e exposição, e uma ação recomendada (aprovar, revisar ou monitorar).

POST /v1/auth/token POST /v1/identity/analyze

1 Visão geral

A Identity API recebe email e cpf e retorna uma análise completa de identidade digital, combinando vínculo entre os dados, histórico digital, exposição a vazamentos de credenciais e proximidade a fraude.

Score (0–1000)

Quanto maior, mais confiável é a identidade. Acompanha um nível de garantia (identity_assurance.level).

Ação recomendada

recommended_actions.action_level: APPROVE, MANUAL_REVIEW, MONITOR ou REJECT.

Vínculo e-mail × CPF

email_cpf_link indica se os dois dados estão associados e com qual força.

Sinais e riscos

signals, risk e risk_analysis trazem exposição, proximidade de fraude e histórico.

2 Autenticação

Troque sua X-Api-Key por um access_token (Bearer, válido por 1h).

request.sh
curl -X POST https://identity.autentify.com.br/v1/auth/token \
  -H "X-Api-Key: ak_live_xxx"

Resposta:

response.json
{
  "access_token": "eyJhbGciOiJIUzI1NiIs...",
  "token_type": "bearer",
  "expires_in": 3600,
  "expires_at": 1781234567
}

Reaproveite o token até pouco antes de expires_at — gerar tokens em excesso pode ser limitado por rate limit.

3 Analisar identidade

endpoint
POST /v1/identity/analyze
Authorization: Bearer <access_token>
Content-Type: application/json
payload.json
{
  "payload": {
    "email": "usuario@empresa.com",
    "cpf": "12345678901"
  }
}

Notas de contrato

  • request_id é opcional; se ausente, a API gera automaticamente.
  • schema_version é opcional (default v1).
  • channel é opcional para chamadas externas e assume api.
  • cpf aceita com ou sem máscara; é normalizado para 11 dígitos.

4 Resposta completa

Exemplo real de retorno do endpoint /v1/identity/analyze:

response.json
{
  "request_id": "demo_req_9ab4c2f1",
  "meta": {
    "latency_ms": 947,
    "processed_at": "2026-06-18T22:13:09.522Z"
  },
  "identity_assurance": {
    "score": 742,
    "level": "MODERATE"
  },
  "email_cpf_link": {
    "is_linked": true,
    "link_strength": "STRONG"
  },
  "signals": {
    "email_deliverable": true,
    "domain_integrity": true,
    "data_breach_exposure": "LOW",
    "fraud_proximity_level": "LOW",
    "identity_history_depth": "MEDIUM"
  },
  "identity_profile": {
    "classification": "VERIFIED_IDENTITY",
    "summary": "Identidade com confiança moderada, vínculo forte entre email e CPF e sem exposição crítica em vazamentos.",
    "factors": {
      "presence_strength": 78,
      "temporal_consistency": {
        "identity_age_days": 1847
      },
      "local_intelligence": {
        "document_validation": true,
        "registry_status": "ACTIVE"
      }
    }
  },
  "risk": {
    "profile_level": "LOW",
    "primary_driver": "low_exposure",
    "profile_score": 0.12
  },
  "digital_profile": {
    "index": 26,
    "engagement_level": "BASIC",
    "persona": "UNCLASSIFIED",
    "gambling_flag": false
  },
  "dimensions_index": {
    "behavior": 85,
    "network_depth": 72,
    "fraud_distance_index": 91,
    "profile_stability": 78
  },
  "risk_analysis": {
    "signals": {
      "trust": [
        "email_validated",
        "document_match",
        "active_registry"
      ],
      "identity_risk_indicators": []
    }
  },
  "evidence": {
    "digital_identity_found": true
  },
  "recommended_actions": {
    "action_level": "MONITOR",
    "reason": "Identidade com confiança moderada; monitoramento recomendado."
  }
}

5 Dicionário de campos

Raiz da resposta

CampoTipoDescrição
request_idstringIdentificador único da requisição.
meta.latency_msintegerTempo de processamento em milissegundos.
meta.processed_atstring (ISO-8601)Timestamp UTC do processamento.

identity_assurance

CampoTipoDescrição
scoreintegerScore de identidade de 0 a 1000. Quanto maior, mais confiável.
levelstringNível de garantia: VERY_LOW, LOW, MODERATE, HIGH, VERY_HIGH.

email_cpf_link

CampoTipoDescrição
is_linkedbooleanSe há vínculo confirmado entre o e-mail e o CPF informados.
link_strengthstringNONE, UNVERIFIED, LOW, MEDIUM, STRONG.

signals

CampoTipoDescrição
email_deliverablebooleanSe o e-mail é entregável (validação de deliverability).
domain_integritybooleanSe o domínio do e-mail é íntegro (não descartável/suspeito).
data_breach_exposurestringNível de exposição em vazamentos: NONE, LOW, MEDIUM, HIGH, CRITICAL.
fraud_proximity_levelstringProximidade a clusters de fraude: NONE, LOW, MEDIUM, HIGH.
identity_history_depthstringProfundidade do histórico digital: NEW, LOW, MEDIUM, HIGH, DEEP.

identity_profile

CampoTipoDescrição
classificationstringClassificação da identidade: VERIFIED_IDENTITY, STRONG_IDENTITY, WEAK_IDENTITY, UNVERIFIED.
summarystringResumo em texto explicando a classificação, pronto para exibição.
factors.presence_strengthintegerForça de presença digital (0–100).
factors.temporal_consistency.identity_age_daysintegerIdade da identidade digital em dias.
factors.local_intelligence.document_validationbooleanSe o documento foi validado com sucesso.
factors.local_intelligence.registry_statusstringStatus no registro: ACTIVE, REGULAR, INACTIVE, UNKNOWN.

risk

CampoTipoDescrição
profile_levelstringNível geral de risco: LOW, MEDIUM, HIGH.
primary_driverstringPrincipal fator que motivou o nível de risco (ex.: low_exposure, credential_exposure).
profile_scorefloatScore de risco normalizado entre 0.0 e 1.0.

digital_profile

CampoTipoDescrição
indexintegerÍndice de presença/engajamento digital (0–100).
engagement_levelstringBASIC, MODERATE, HIGH.
personastringPersona digital inferida, quando disponível.
gambling_flagbooleanIndício de atividade em apostas online.

dimensions_index

CampoTipoDescrição
behaviorintegerÍndice comportamental (0–100).
network_depthintegerProfundidade da rede digital (0–100).
fraud_distance_indexintegerDistância de clusters de fraude (0–100, maior = mais seguro).
profile_stabilityintegerEstabilidade do perfil (0–100).

risk_analysis

CampoTipoDescrição
signals.trustarrayLista de sinais de confiança identificados (ex.: email_validated, document_match).
signals.identity_risk_indicatorsarrayLista de indicadores de risco identificados (vazia quando não há riscos).

evidence & recommended_actions

CampoTipoDescrição
evidence.digital_identity_foundbooleanSe foram encontradas evidências digitais associadas à identidade.
recommended_actions.action_levelstringAPPROVE, MANUAL_REVIEW, MONITOR, REJECT.
recommended_actions.reasonstringMotivo da ação recomendada, em texto descritivo.

6 Erros

StatusQuando ocorre
400Payload inválido — ex.: CPF sem 11 dígitos.
401Token ausente, inválido ou expirado.
403Produto não habilitado para essa API key.
413Corpo da requisição maior que 64KB.
429Limite de requisições ou quota de demo excedidos.
502Serviço de identidade indisponível temporariamente.
error-response.json
{
  "detail": "invalid or expired demo key"
}

7 Rate limit & quotas

  • POST /v1/identity/analyze — 30 requisições/minuto por IP.
  • POST /v1/demo-keys — 5 requisições/minuto por IP.
  • Chaves de demonstração têm quota própria (consulte /v1/demo-keys); ao esgotar, a API retorna 429.

8 Exemplos de código

cURL

example.sh
TOKEN=$(curl -s -X POST https://identity.autentify.com.br/v1/auth/token \
  -H "X-Api-Key: ak_live_xxx" | jq -r .access_token)

curl -X POST https://identity.autentify.com.br/v1/identity/analyze \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"payload": {"email": "usuario@empresa.com", "cpf": "12345678901"}}'

Python

example.py
import httpx

API_KEY = "ak_live_xxx"
BASE_URL = "https://identity.autentify.com.br"

with httpx.Client(timeout=30) as client:
    token_resp = client.post(f"{BASE_URL}/v1/auth/token", headers={"X-Api-Key": API_KEY})
    access_token = token_resp.json()["access_token"]

    analyze_resp = client.post(
        f"{BASE_URL}/v1/identity/analyze",
        headers={"Authorization": f"Bearer {access_token}"},
        json={"payload": {"email": "usuario@empresa.com", "cpf": "12345678901"}},
    )
    data = analyze_resp.json()
    print(data["identity_assurance"]["score"], data["recommended_actions"]["action_level"])

Node.js

example.js
const BASE_URL = "https://identity.autentify.com.br";
const API_KEY = "ak_live_xxx";

const tokenRes = await fetch(`${BASE_URL}/v1/auth/token`, {
  method: "POST",
  headers: { "X-Api-Key": API_KEY },
});
const { access_token } = await tokenRes.json();

const analyzeRes = await fetch(`${BASE_URL}/v1/identity/analyze`, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${access_token}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ payload: { email: "usuario@empresa.com", cpf: "12345678901" } }),
});
const data = await analyzeRes.json();
console.log(data.identity_assurance.score, data.recommended_actions.action_level);