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
{
"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:
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/scoreTratamento de Erros
A API utiliza códigos de status HTTP padrão e retorna erros em um formato JSON consistente.
| Status | Descrição |
|---|---|
200 | Sucesso |
400 | Requisição Inválida - Parâmetros inválidos |
401 | Não Autorizado - Chave API inválida |
403 | Proibido - Escopo ausente |
429 | Limite de taxa excedido |
500 | Erro Interno do Servidor |
Exemplo de Resposta de Erro
{
"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âmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
email | string | No* | Endereço de e-mail para verificar |
ip | string | No* | Endereço IP para verificar |
domain | string | No* | Nome de domínio para verificar |
url | string | No* | 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_emailO e-mail é de um provedor de e-mail descartável conhecido
free_providerO e-mail é de um provedor gratuito (Gmail, Yahoo, etc.)
valid_mxO 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_nodeO IP é um nó de saída Tor conhecido
vpn_detectedO IP pertence a um provedor de VPN conhecido
residentialO 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_registeredO domínio foi registrado nos últimos 30 dias
young_domainO domínio tem menos de 6 meses
established_domainO 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.
SDK Node.js
npm install @scorika/client
SDK focado em TypeScript com definições de tipo completas e suporte a ESM.
Ruby Gem
gem install scorika
Gem amigável ao Rails com integração ActiveSupport.
Ferramentas para Desenvolvedores
Coleção do Postman
Importe requisições prontas para uso no Postman
Especificação OpenAPI
Baixe a especificação OpenAPI 3.0 para geração de código
Referência de API Interativa
Teste chamadas de API diretamente no seu navegador
Servidor Mock
Teste sua integração sem afetar a produção
https://mock.scorika.com/v1