Skip to main content

Screening Flow

A screening takes subject data, matches it against global watchlists, scores the risk, and returns an automated decision.

Screening Lifecycle

                    ┌──────────┐
│ PENDING │
└────┬─────┘

┌────▼──────────┐
│ IN_PROGRESS │
└────┬──────────┘

┌──────────┼──────────┐
│ │
┌─────▼─────┐ ┌─────▼────┐
│ COMPLETED │ │ FAILED │
└─────┬─────┘ └──────────┘

┌─────────┼──────────┬──────────────────┐
│ │ │ │
┌───▼───┐ ┌──▼────────┐ ┌▼──────────────┐ ┌▼──────┐
│APPROVE│ │APPROVE w/ │ │REVIEW_REQUIRED│ │ BLOCK │
│ │ │MONITORING │ │ │ │ │
└───────┘ └───────────┘ └───────────────┘ └───────┘

Screening Modes

Synchronous (SYNC)

The API processes the screening and returns the result in the same request (30-second timeout).

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": "Jane Smith",
"date_of_birth": "1985-03-20",
"nationality": "GB"
},
"checks": ["SANCTIONS", "PEP"]
}'

Asynchronous (ASYNC)

The API returns a screening_id immediately (HTTP 202). Results are delivered via webhook.

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": "ASYNC",
"purpose": "ONBOARDING",
"callback_url": "https://your-server.com/webhooks/screening",
"subject": {
"type": "INDIVIDUAL",
"name": "Jane Smith",
"date_of_birth": "1985-03-20",
"nationality": "GB"
},
"checks": ["SANCTIONS", "PEP", "ADVERSE_MEDIA"]
}'

Response (HTTP 202):

{
"screening_id": "scr_abc123",
"status": "PENDING"
}

Poll the result or wait for the webhook:

curl https://api.korastratum.com/api/v1/screenings/scr_abc123 \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "X-Tenant-ID: YOUR_TENANT_ID"

Screening Purpose

The purpose field tells the engine why you're screening, which affects risk factor weighting:

PurposeWhen to Use
ONBOARDINGNew customer sign-up
PROFILE_CHANGECustomer data changed (name, address, nationality)
TRANSACTIONTransaction-triggered screening
PERIODICScheduled rescreen (e.g., quarterly)
BATCHBulk rescreen of your customer base
ON_DEMANDManual ad-hoc screening

What Gets Checked

Each screening runs the subject against multiple engines in parallel:

CheckEngineSourcesDescription
SANCTIONSSanctions Engine9 lists (OFAC, UN, EU, UK, AU, CA, CH, JP)Sanctions list matching
PEPPEP Engine4 lists (Global, Wikidata, African, Nigeria)Politically Exposed Person screening
ADVERSE_MEDIAMedia EngineNews APIs, web feedsAdverse media mentions

Matching Process

For each check, the engine:

  1. Normalizes the subject name — lowercase, remove diacritics, strip titles (Mr., Dr., etc.)
  2. Compares against all entries using a composite algorithm:
    • Jaro-Winkler distance (60% weight) — handles typos and transpositions
    • Token matching (15%) — handles name reordering ("John Doe" ↔ "Doe John")
    • N-gram similarity (15%) — catches character-level variations
    • Soundex phonetic (10%) — catches names that sound alike
  3. Classifies match strength:
    • EXACT — normalized exact match
    • STRONG — composite score ≥ 0.92
    • POSSIBLE — composite score ≥ 0.75

See Matching Algorithms for full details.

Risk Scoring

After matching, the risk engine calculates a composite score from 0 to 1000:

Risk BandScore RangeTypical Decision
LOW0–250APPROVE
MEDIUM251–500APPROVE_WITH_MONITORING
HIGH501–750REVIEW_REQUIRED
CRITICAL751–1000BLOCK

Risk factors that contribute to the score:

  • Sanctions match — High impact (weight: 0.8)
  • PEP match — High impact (weight: 0.7)
  • Adverse media — Medium impact (weight: 0.5)
  • High-risk country — Medium impact (FATF blacklist/greylist, EU high-risk)
  • Customer type — Individual vs entity
  • Transaction patterns — Velocity and amount thresholds

See Risk Scoring for the full scoring methodology.

Decision Outcomes

OutcomeMeaningRecommended Action
APPROVENo significant riskProceed with onboarding/transaction
APPROVE_WITH_MONITORINGLow risk with flagsProceed but set up ongoing monitoring
REVIEW_REQUIREDPotential matches foundRoute to compliance team for manual review
BLOCKHigh-confidence matchDeny and file regulatory report if required

Subject Types

TypeFieldsExample
INDIVIDUALname, date_of_birth, nationality, identifiersA person
ENTITYname, country, registration_numberA company or organization

Supported identifier types:

TypeDescription
PASSPORTPassport number
NATIONAL_IDNational ID card
DRIVERS_LICENSEDriver's license
BVNBank Verification Number (Nigeria)
NINNational Identification Number
TINTax Identification Number
BUSINESS_REGBusiness registration number
LEILegal Entity Identifier

Next Steps