|| "en_GB"

Início Rápido

Obtenha sua chave API e faça sua primeira requisição em menos de 5 minutos.

1Obtenha Sua Chave API

Cadastre-se para uma conta grátis para obter sua chave API instantaneamente, ou experimente a demo ao vivo primeiro.

Sua chave API se parece com: sk_live_abc123...

2Faça Sua Primeira Requisição

Escolha seu idioma preferido:

curl -X POST https://api.scorika.com/v1/score \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "user@example.com",
    "ip": "1.2.3.4"
  }'

3Trate a Resposta

Resposta
{
  "data": {
    "case_id": "case_abc123def456",
    "score": 23,
    "decision": "allow",
    "confidence": 0.94,
    "reason_codes": [
      {
        "code": "EMAIL_FREE_MAJOR",
        "severity": "low",
        "score_impact": 5,
        "description": "Free email provider detected"
      }
    ],
    "signals": [
      {
        "type": "email",
        "status": "success",
        "score_delta": 5
      },
      {
        "type": "ip",
        "status": "success",
        "score_delta": 0
      }
    ]
  },
  "meta": {
    "request_id": "req_xyz789",
    "latency_ms": 142
  }
}

pontuação: 0-30

Baixo risco - geralmente permitido

pontuação: 31-70

Risco médio - revisão recomendada

pontuação: 71-100

Alto risco - geralmente negado

Guia de Integração

Implementações de clientes prontas para produção com tratamento de erros, lógica de repetição e melhores práticas.

⚠️

Crítico: Sempre Defina um Tempo Limite!

Nunca chame a API do Scorika de forma síncrona nos fluxos de checkout ou registro sem um tempo limite (timeout). Se nossa API estiver lenta ou indisponível, seus clientes não devem ser bloqueados.

Tempo limite recomendado: 3–5 segundos

Decisão de fallback: revisão (permitir + verificação assíncrona)

Melhores Práticas

✓ Fazer

  • • Definir tempo limite (3-5s) em todas as chamadas de API
  • • Implementar fallback para tempos limite/erros
  • • Usar variáveis de ambiente para chaves API
  • • Registrar case_ids para depuração

✗ Não fazer

  • • Bloquear o checkout em erros de API
  • • Fazer chamadas síncronas sem tempo limite
  • • Expor chaves API no código do lado do cliente
  • • Armazenar respostas brutas da API com PII

Exemplos de Clientes em Produção

Copie um destes clientes prontos para produção:

# scorika_client.py - Production-ready Scorika client

import requests
from requests.exceptions import Timeout, RequestException
from dataclasses import dataclass
from typing import Optional, List, Dict, Any
from enum import Enum

class Decision(Enum):
    ALLOW = "allow"
    REVIEW = "review"
    DENY = "deny"

@dataclass
class ScoreResult:
    case_id: Optional[str]
    score: int
    decision: Decision
    confidence: float
    signals: List[Dict]
    fallback: bool = False  # True if using fallback response

class ScorikaClient:
    BASE_URL = "https://api.scorika.com/v1"
    TIMEOUT = 5  # seconds - never block critical flows!

    def __init__(self, api_key: str):
        self.api_key = api_key
        self.session = requests.Session()
        self.session.headers.update({
            "X-Api-Key": api_key,
            "Content-Type": "application/json"
        })

    def score(
        self,
        email: Optional[str] = None,
        ip: Optional[str] = None,
        domain: Optional[str] = None,
        url: Optional[str] = None
    ) -> ScoreResult:
        """Evaluate risk for given inputs with timeout protection."""
        payload = {k: v for k, v in {
            "email": email, "ip": ip, "domain": domain, "url": url
        }.items() if v}

        try:
            response = self.session.post(
                f"{self.BASE_URL}/score",
                json=payload,
                timeout=self.TIMEOUT  # IMPORTANT: Always set timeout!
            )
            response.raise_for_status()
            data = response.json()["data"]

            return ScoreResult(
                case_id=data["case_id"],
                score=data["score"],
                decision=Decision(data["decision"]),
                confidence=data["confidence"],
                signals=data.get("signals", [])
            )
        except (Timeout, RequestException) as e:
            # Fallback: allow but flag for async review
            print(f"Scorika unavailable: {e}, using fallback")
            return ScoreResult(
                case_id=None,
                score=50,
                decision=Decision.REVIEW,
                confidence=0.0,
                signals=[],
                fallback=True
            )

# Usage example
if __name__ == "__main__":
    client = ScorikaClient("sk_live_your_api_key")
    result = client.score(email="user@example.com", ip="1.2.3.4")

    if result.fallback:
        print("⚠ Using fallback - queue for async review")
    elif result.decision == Decision.ALLOW:
        print(f"✓ Allowed (score: {result.score})")
    elif result.decision == Decision.REVIEW:
        print(f"⚠ Review needed (score: {result.score})")
    else:
        print(f"✗ Denied (score: {result.score})")

Tratamento de Erros

Sempre implemente um tratamento de erros adequado para uso em produção:

Error Handling Pattern
try {  const result = await client.score({ email, ip });  // Handle decision} catch (error) {  if (error.status === 429) {    // Rate limited - back off and retry    await sleep(retryAfter * 1000);    return retry();  } else if (error.status >= 500) {    // Server error - allow and log for investigation    console.error('Scorika unavailable, allowing by default');    return { decision: 'allow', fallback: true };  }  throw error;}

Autenticação

Todas as requisições de API exigem autenticação usando uma chave de API passada no cabeçalho X-Api-Key.

Nota de Segurança: Nunca exponha sua chave API no código do lado do cliente. Sempre faça chamadas de API a partir do seu servidor.

curl -H "X-Api-Key: sk_live_your_api_key_here" \     https://api.scorika.com/v1/score

Tratamento de Erros

A API utiliza códigos de status HTTP padrão e retorna erros em um formato JSON consistente.

StatusDescrição
200Sucesso
400Requisição Inválida - Parâmetros inválidos
401Não Autorizado - Chave API inválida
403Proibido - Escopo ausente
429Limite de taxa excedido
500Erro Interno do Servidor

Exemplo de Resposta de Erro

400 Bad Request
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid request parameters",
    "details": [
      {
        "field": "email",
        "code": "INVALID_FORMAT",
        "message": "Email must be a valid email address"
      }
    ],
    "request_id": "req_xyz789",
    "documentation_url": "https://docs.scorika.io/errors/VALIDATION_ERROR"
  }
}

Pontuação de Risco

Avalie o risco para um determinado conjunto de entradas e retorne uma pontuação de risco com decisão.

Corpo da Requisição

ParâmetroTipoObrigatórioDescrição
emailstringNo*Endereço de e-mail para verificar
ipstringNo*Endereço IP para verificar
domainstringNo*Nome de domínio para verificar
urlstringNo*URL para verificar

* Pelo menos um parâmetro de entrada é obrigatório.

Sinal de E-mail

O sinal de e-mail analisa endereços de e-mail para diversos indicadores de risco.

Códigos de Motivo

disposable_email

O e-mail é de um provedor de e-mail descartável conhecido

free_provider

O e-mail é de um provedor gratuito (Gmail, Yahoo, etc.)

valid_mx

O domínio possui registros MX válidos

Sinal de IP

O sinal de IP analisa endereços IP em busca de VPN, proxy e outros indicadores de risco.

Códigos de Motivo

tor_exit_node

O IP é um nó de saída Tor conhecido

vpn_detected

O IP pertence a um provedor de VPN conhecido

residential

O IP parece ser de uma conexão residencial

Sinal de Domínio

O sinal de domínio analisa nomes de domínio quanto à idade, reputação e outros indicadores.

Códigos de Motivo

newly_registered

O domínio foi registrado nos últimos 30 dias

young_domain

O domínio tem menos de 6 meses

established_domain

O domínio tem mais de 1 ano

SDKs & Ferramentas para Desenvolvedores

SDKs oficiais, coleções de API e ferramentas de desenvolvedor para acelerar sua integração.

🐍

SDK Python

pip install scorika

Cliente Python oficial com suporte assíncrono, dicas de tipo e lógica de repetição.

Python 3.8+Em breve
📦

SDK Node.js

npm install @scorika/client

SDK focado em TypeScript com definições de tipo completas e suporte a ESM.

Node 18+Em breve
💎

Ruby Gem

gem install scorika

Gem amigável ao Rails com integração ActiveSupport.

Ruby 3.0+Em breve

Ferramentas para Desenvolvedores