Quickstart
Screen your first subject against global watchlists in 5 minutes.
Prerequisites
- A Kora Stratum account — sign up here
- Your API key and Tenant ID from the dashboard
Step 1: Screen a Subject
Submit a screening request with the subject's details. Use SYNC mode to get results immediately.
- cURL
- Python
- Node.js
- 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",
"identifiers": [
{
"type": "PASSPORT",
"value": "A12345678",
"country": "US"
}
]
},
"checks": ["SANCTIONS", "PEP", "ADVERSE_MEDIA"]
}'
import requests
API_KEY = "YOUR_API_KEY"
TENANT_ID = "YOUR_TENANT_ID"
BASE_URL = "https://api.korastratum.com/api/v1"
response = requests.post(
f"{BASE_URL}/screenings",
headers={
"Authorization": f"Bearer {API_KEY}",
"X-Tenant-ID": TENANT_ID,
},
json={
"mode": "SYNC",
"purpose": "ONBOARDING",
"subject": {
"type": "INDIVIDUAL",
"name": "John Doe",
"date_of_birth": "1990-01-15",
"nationality": "US",
"identifiers": [
{"type": "PASSPORT", "value": "A12345678", "country": "US"}
],
},
"checks": ["SANCTIONS", "PEP", "ADVERSE_MEDIA"],
},
)
result = response.json()
const response = await fetch(
"https://api.korastratum.com/api/v1/screenings",
{
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"X-Tenant-ID": "YOUR_TENANT_ID",
"Content-Type": "application/json",
},
body: JSON.stringify({
mode: "SYNC",
purpose: "ONBOARDING",
subject: {
type: "INDIVIDUAL",
name: "John Doe",
date_of_birth: "1990-01-15",
nationality: "US",
identifiers: [
{ type: "PASSPORT", value: "A12345678", country: "US" },
],
},
checks: ["SANCTIONS", "PEP", "ADVERSE_MEDIA"],
}),
}
);
const result = await response.json();
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",
"identifiers": []map[string]string{
{"type": "PASSPORT", "value": "A12345678", "country": "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()
Response:
{
"screening_id": "scr_abc123",
"status": "COMPLETED",
"risk_score": 150,
"risk_band": "LOW",
"decision": {
"outcome": "APPROVE",
"triggered_rules": [],
"explanation": "No matches found across all watchlists"
},
"matches": [],
"match_summary": {
"total_matches": 0,
"sanctions_matches": 0,
"pep_matches": 0,
"exact_matches": 0,
"strong_matches": 0
}
}
Step 2: Handle the Decision
The decision.outcome tells you what to do next:
| Outcome | Action |
|---|---|
APPROVE | Proceed — no watchlist matches found |
APPROVE_WITH_MONITORING | Proceed but flag for ongoing monitoring |
REVIEW_REQUIRED | Create a case for manual compliance review |
BLOCK | Deny — high-confidence sanctions or PEP match |
Step 3: Screen with a Match
Try screening a known sanctioned entity to see how matches look:
- cURL
- Python
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": "ENTITY",
"name": "Acme Trading LLC",
"country": "IR"
},
"checks": ["SANCTIONS"]
}'
response = requests.post(
f"{BASE_URL}/screenings",
headers={
"Authorization": f"Bearer {API_KEY}",
"X-Tenant-ID": TENANT_ID,
},
json={
"mode": "SYNC",
"purpose": "ONBOARDING",
"subject": {
"type": "ENTITY",
"name": "Acme Trading LLC",
"country": "IR",
},
"checks": ["SANCTIONS"],
},
)
Response with matches:
{
"screening_id": "scr_def456",
"status": "COMPLETED",
"risk_score": 780,
"risk_band": "CRITICAL",
"decision": {
"outcome": "BLOCK",
"triggered_rules": ["SANCTIONS_MATCH", "HIGH_RISK_COUNTRY"],
"explanation": "Strong sanctions match detected"
},
"matches": [
{
"source": "OFAC_SDN",
"source_type": "SANCTIONS",
"match_strength": "STRONG",
"score": 0.94,
"matched_name": "Acme Trading Company LLC",
"matched_entry": {
"list_id": "OFAC_SDN",
"entry_id": "12345",
"name": "Acme Trading Company LLC",
"type": "ENTITY",
"country": "IR"
}
}
],
"match_summary": {
"total_matches": 1,
"sanctions_matches": 1,
"pep_matches": 0,
"exact_matches": 0,
"strong_matches": 1
}
}
Step 4: Set Up Webhooks (Optional)
For asynchronous screening or real-time event notifications, register a webhook endpoint:
- cURL
curl -X POST https://api.korastratum.com/api/v1/webhooks/subscriptions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "X-Tenant-ID: YOUR_TENANT_ID" \
-H "Content-Type: application/json" \
-d '{
"name": "My Webhook",
"url": "https://your-server.com/webhooks/compliance",
"events": [
"screening.completed",
"screening.match_found",
"case.created",
"risk.threshold_breached"
]
}'
Now when you use ASYNC mode, results will be delivered to your webhook URL.
Next Steps
- Authentication — API key formats and environment setup
- Screening Flow — Full screening lifecycle and state machine
- Batch Screening — Screen hundreds of subjects at once
- Webhooks — Event types, signatures, and retry logic
- Risk Scoring — How the 0-1000 score is calculated