Kora Compliance
AML/KYC compliance screening — sanctions, PEP, adverse media, risk scoring, and case management in a single API.
Kora Compliance lets you screen individuals and entities against global watchlists, calculate risk scores, manage compliance cases, monitor transactions, and generate regulatory reports — all through a unified REST API.
What You Can Do
- Screen against global watchlists — 826,000+ entries across 13 sanctions and PEP sources, updated daily
- Calculate risk scores — Configurable 0-1000 scoring with automated decisions (approve, review, block)
- Manage compliance cases — Full case lifecycle with assignment, escalation, disposition, and audit trail
- Monitor transactions — Real-time AML rule evaluation with configurable thresholds
- Generate regulatory reports — SAR, STR, CTR formats with submission tracking
How It Works
1. Create a screening request with subject data
2. Engine matches against sanctions, PEP, and adverse media lists
3. Risk engine calculates a composite score (0-1000)
4. Decision engine returns outcome: APPROVE / REVIEW_REQUIRED / BLOCK
5. Webhook delivers result to your server
Screening flow:
Your Server Kora Compliance
│ │
│ POST /v1/screenings │
│──────────────────────────────▶│
│ │── Sanctions matching
│ │── PEP matching
│ │── Adverse media check
│ │── Risk scoring
│ │── Decision engine
│ Screening result │
│◀──────────────────────────────│
│ │
│ Webhook: screening.completed │
│◀──────────────────────────────│
Quick Example
- cURL
- Python
- Go
curl -X POST https://api.korastratum.com/api/v1/screenings \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "X-Tenant-ID: YOUR_TENANT_ID" \
-H "Content-Type: application/json" \
-d '{
"mode": "SYNC",
"purpose": "ONBOARDING",
"subject": {
"type": "INDIVIDUAL",
"name": "John Doe",
"date_of_birth": "1990-01-15",
"nationality": "US"
},
"checks": ["SANCTIONS", "PEP", "ADVERSE_MEDIA"]
}'
import requests
response = requests.post(
"https://api.korastratum.com/api/v1/screenings",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"X-Tenant-ID": "YOUR_TENANT_ID",
},
json={
"mode": "SYNC",
"purpose": "ONBOARDING",
"subject": {
"type": "INDIVIDUAL",
"name": "John Doe",
"date_of_birth": "1990-01-15",
"nationality": "US",
},
"checks": ["SANCTIONS", "PEP", "ADVERSE_MEDIA"],
},
)
result = response.json()
print(f"Risk score: {result['risk_score']}, Decision: {result['decision']['outcome']}")
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
body, _ := json.Marshal(map[string]interface{}{
"mode": "SYNC",
"purpose": "ONBOARDING",
"subject": map[string]interface{}{
"type": "INDIVIDUAL",
"name": "John Doe",
"date_of_birth": "1990-01-15",
"nationality": "US",
},
"checks": []string{"SANCTIONS", "PEP", "ADVERSE_MEDIA"},
})
req, _ := http.NewRequest("POST",
"https://api.korastratum.com/api/v1/screenings",
bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("X-Tenant-ID", "YOUR_TENANT_ID")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Printf("Risk score: %v\n", result["risk_score"])
}
Next Steps
- Quickstart — Screen your first subject in 5 minutes
- Authentication — API keys, tenant IDs, and environments
- Screening Flow — Understand the full screening lifecycle
- API Reference — Complete endpoint documentation