Snabbstart
Få din API-nyckel och gör din första förfrågan på under 5 minuter.
1Hämta din API-nyckel
Registrera dig för ett gratis konto för att få din API-nyckel direkt, eller prova vår live-demo först.
Din API-nyckel ser ut så här: sk_live_abc123...
2Gör din första förfrågan
Välj ditt föredragna språk:
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"
}'3Hantera svaret
{
"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
}
}poäng: 0-30
Låg risk - tillåt vanligtvis
poäng: 31-70
Mellanrisk - granskning rekommenderas
poäng: 71-100
Hög risk - neka vanligtvis
Integrationsguide
Produktionsklara klientimplementationer med felhantering, omförsökslogik och bästa praxis.
Kritiskt: Ange alltid en timeout!
Anropas aldrig Scorika API synkront i köp- eller registreringsflöden utan en timeout. Om vårt API är långsamt eller otillgängligt ska dina kunder inte blockeras.
Rekommenderad timeout: 3–5 sekunder
Fallback-beslut: granska (tillåt + asynkron kontroll)
Bästa praxis
✓ Gör
- • Ange timeout (3-5s) på alla API-anrop
- • Implementera fallback för timeouts/fel
- • Använd miljövariabler för API-nycklar
- • Logga case_ids för felsökning
✗ Gör inte
- • Blockera inte köpflöden vid API-fel
- • Gör inte synkrona anrop utan timeout
- • Exponera inte API-nycklar i kod på klientsidan
- • Lagra inte råa API-svar med personuppgifter (PII)
Exempel på klienter för produktion
Kopiera en av dessa produktionsklara klienter:
# 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})")Felhantering
Implementera alltid korrekt felhantering för produktionsbruk:
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;}Autentisering
Alla API-förfrågningar kräver autentisering med en API-nyckel som skickas i headern X-Api-Key.
Säkerhetsmeddelande: Exponera aldrig din API-nyckel i kod på klientsidan. Gör alltid API-anrop från din server.
curl -H "X-Api-Key: sk_live_your_api_key_here" \ https://api.scorika.com/v1/scoreFelhantering
API:et använder standard HTTP-statuskoder och returnerar fel i ett konsekvent JSON-format.
| Status | Beskrivning |
|---|---|
200 | Lyckat |
400 | Ogiltig förfrågan - Felaktiga parametrar |
401 | Obehörig - Ogiltig API-nyckel |
403 | Förbjudet - Saknar behörighet |
429 | Anropsgräns överskriden |
500 | Internt serverfel |
Exempel på felsvar
{
"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"
}
}POST /v1/score
Evaluate risk for a given set of inputs and return a risk score with decision.
Request Body
| Parameter | Typ | Required | Description |
|---|---|---|---|
email | string | No* | Email address to evaluate |
ip | string | No* | IP address (IPv4 or IPv6) |
domain | string | No* | Domain name to check |
url | string | No* | Full URL to analyze |
* At least one input parameter is required.
E-post-signal
E-post-signalen analyserar e-postadresser för olika riskindikatorer.
Orsakskoder
disposable_emailE-posten kommer från en känd leverantör av tillfällig e-post
free_providerE-posten kommer från en gratisleverantör (Gmail, Yahoo, etc.)
valid_mxDomänen har giltiga MX-poster
IP-signal
IP-signalen analyserar IP-adresser för VPN, proxy och andra riskindikatorer.
Orsakskoder
tor_exit_nodeIP-adressen är en känd Tor exit node
vpn_detectedIP-adressen tillhör en känd VPN-leverantör
residentialIP-adressen verkar vara en hemanslutning
Domän-signal
Domän-signalen analyserar domännamn med avseende på ålder, rykte och andra indikatorer.
Orsakskoder
newly_registeredDomänen registrerades inom de senaste 30 dagarna
young_domainDomänen är yngre än 6 månader
established_domainDomänen är äldre än 1 år
SDKs & Developer Tools
Official SDKs, API collections, and developer tools to speed up your integration.
Python SDK
pip install scorika
Official Python client with async support, type hints, and retry logic.
Node.js SDK
npm install @scorika/client
TypeScript-first SDK with full type definitions and ESM support.
Ruby Gem
gem install scorika
Rails-friendly gem with ActiveSupport integration.
Developer Tools
Postman Collection
Import ready-to-use requests into Postman
OpenAPI Specification
Download the OpenAPI 3.0 spec for code generation
Interactive API Reference
Try API calls directly in your browser
Mock Server
Test your integration without hitting production
https://mock.scorika.com/v1