Developer docs
AML Shield API Reference
Everything you need to integrate — no sales call required. Get a key from your dashboard's API Keys page and start making requests immediately.
Authentication
Every request is authenticated with an API key from your dashboard's API Keys page. Send it either way:
X-API-Key: amlk_live_xxxxxxxxxxxx
# or
Authorization: Bearer amlk_live_xxxxxxxxxxxx
Keys come in two environments — amlk_live_... and
amlk_test_.... Test keys hit the same endpoints and logic
but never count against production usage — use them while integrating.
Rate limits & quotas
Every response carries two headers so you always know where you stand — no separate usage call needed:
X-Request-Id: 8f14e45f-...
X-Quota-Remaining: 9482
Per-minute rate limits and monthly call quotas are set by your plan. Exceeding either returns
429. See GET /v1/me
below to check your quota programmatically at any time.
Errors
All errors return JSON with success: false and a human-readable message.
| Status | Meaning |
|---|---|
| 401 | Missing, invalid, or revoked API key |
| 403 | Your plan doesn't include this endpoint, or your key's IP allowlist blocked the request |
| 422 | Validation failed — check the field-level errors in the response body |
| 429 | Rate limit or monthly quota exceeded |
| 500 | Something went wrong on our end — these are logged and monitored |
Webhooks
Register endpoints from your dashboard's Webhooks page to receive
case.updated, monitoring.match,
screening.run, and kyc.completed
events. Every delivery is signed — verify it before trusting the payload:
X-AML-Signature: sha256=<hmac of body using your endpoint's secret>
X-AML-Event: monitoring.match
Recompute the HMAC-SHA256 of the raw request body with your endpoint's secret (shown once at creation) and compare.
/v1/me
Check your organization, plan, environment, and current quota usage.
curl http://ekedosltd.com//api/v1/me \ -H "X-API-Key: $KEY"
Response
{
"success": true,
"organization": "Acme Inc",
"plan": "Pro",
"environment": "live",
"quota": { "monthly": 100000, "used": 4218, "remaining": 95782 }
}
/v1/identity/verify
Identity Verification
first_name, last_name, date_of_birth required. Optional: email, id_number, id_type, country, customer_reference, persist_customer.
Request
curl http://ekedosltd.com//api/v1/identity/verify \
-H "X-API-Key: $KEY" -H "Content-Type: application/json" \
-d '{"first_name":"Jane","last_name":"Smith","date_of_birth":"1990-05-02","email":"jane@example.com","country":"GB"}'
Response
{"success":true,"status":"verified","confidence":92,"checks":{"first_name":true,"last_name":true,"date_of_birth":true,"age_valid":true,"email_format":true,"id_present":false},"issues":[]}
/v1/kyc/verify
KYC Verification
Full onboarding in one call: identity check + AML screening + risk score, and persists a customer record automatically.
Request
curl http://ekedosltd.com//api/v1/kyc/verify \
-H "X-API-Key: $KEY" -H "Content-Type: application/json" \
-d '{"first_name":"Jane","last_name":"Smith","date_of_birth":"1990-05-02","email":"jane@example.com","country":"GB"}'
Response
{"success":true,"decision":"approve","customer_reference":"3fa85f64-...","identity":{"status":"verified","confidence":92},"screening":{"reference":"b2c3...","status":"clear","match_count":0},"risk":{"score":8,"level":"low"}}
/v1/aml/screen
AML Screening
Sanctions + PEP + adverse media in one call. name required. Optional: date_of_birth, country, list_types, customer_reference, persist_customer.
Request
curl http://ekedosltd.com//api/v1/aml/screen \
-H "X-API-Key: $KEY" -H "Content-Type: application/json" \
-d '{"name":"Viktor Petrov","country":"RU"}'
Response
{"success":true,"reference":"a1b2...","status":"potential_match","match_count":1,"risk_score":96,"risk_level":"critical","breakdown":{"sanction":1},"matches":[{"name":"Viktor Petrov","score":96,"list_type":"sanction","source":"OFAC_SDN","program":"RUSSIA-EO14024"}]}
/v1/pep/screen
PEP Screening
Politically exposed person check. name required. Optional: date_of_birth, country, customer_reference, persist_customer.
Request
curl http://ekedosltd.com//api/v1/pep/screen \
-H "X-API-Key: $KEY" -H "Content-Type: application/json" \
-d '{"name":"Robert Kingsley","country":"GB"}'
Response
{"success":true,"reference":"c3d4...","status":"potential_match","is_pep":true,"match_count":1,"risk_score":60,"matches":[{"name":"Robert Kingsley","score":98,"list_type":"pep","program":"Cabinet Minister"}]}
/v1/sanctions/screen
Sanctions Screening
OFAC/UN/EU/UK list matching. name required. Optional: date_of_birth, country, customer_reference, persist_customer.
Request
curl http://ekedosltd.com//api/v1/sanctions/screen \
-H "X-API-Key: $KEY" -H "Content-Type: application/json" \
-d '{"name":"Jane Smith","country":"GB"}'
Response
{"success":true,"reference":"d4e5...","status":"clear","match_count":0,"risk_score":0,"risk_level":"low","matches":[]}
/v1/transactions/monitor
Transaction Monitoring
amount required. Optional: currency, amount_usd, direction, channel, counterparty_name/country/account, external_id, occurred_at, customer_reference.
Request
curl http://ekedosltd.com//api/v1/transactions/monitor \
-H "X-API-Key: $KEY" -H "Content-Type: application/json" \
-d '{"amount":15000,"currency":"USD","counterparty_country":"RU"}'
Response
{"success":true,"transaction_id":812,"risk_score":75,"risk_level":"high","is_flagged":true,"triggered_rules":[{"rule":"large_amount","detail":"Amount USD 15000 >= 10000"},{"rule":"high_risk_country","detail":"Counterparty country RU"}],"recommendation":"review"}
/v1/fraud/assess
Fraud Detection
All fields optional: email, ip_address, ip_country, billing_country, device_id, amount, recent_attempts.
Request
curl http://ekedosltd.com//api/v1/fraud/assess \
-H "X-API-Key: $KEY" -H "Content-Type: application/json" \
-d '{"email":"x@mailinator.com","ip_country":"NG","billing_country":"US","amount":6000}'
Response
{"success":true,"fraud_score":75,"signals":["disposable_email","geo_mismatch","high_amount"],"decision":"decline"}
/v1/risk/score
Risk Scoring
Combine signals from other endpoints into one explainable score. All fields optional booleans/numbers plus customer_reference to persist.
Request
curl http://ekedosltd.com//api/v1/risk/score \
-H "X-API-Key: $KEY" -H "Content-Type: application/json" \
-d '{"pep_hit":true,"country":"RU","flagged_transactions":2}'
Response
{"success":true,"score":50,"level":"medium","factors":{"pep_hit":25,"high_risk_country":15,"flagged_transactions":10},"persisted":false}
/v1/documents/verify
Document Verification
type required (passport, national_id, drivers_license, utility_bill, residence_permit). Optional: document_number, country, expiry_date, customer_reference, persist_customer.
Request
curl http://ekedosltd.com//api/v1/documents/verify \
-H "X-API-Key: $KEY" -H "Content-Type: application/json" \
-d '{"type":"passport","document_number":"X1234567","country":"GB","expiry_date":"2030-01-01"}'
Response
{"success":true,"status":"verified","authenticity_score":100,"checks":{"type_valid":true,"number_present":true,"country_present":true,"not_expired":true,"not_near_expiry":true,"no_tamper_signals":true},"issues":[]}
Continuous Monitoring
Enroll a previously-persisted customer for scheduled re-screening. New matches fire a monitoring.match webhook.
/v1/monitoring/enroll
curl http://ekedosltd.com//api/v1/monitoring/enroll \
-H "X-API-Key: $KEY" -H "Content-Type: application/json" \
-d '{"customer_reference":"3fa85f64-...","frequency":"daily","webhook_url":"https://you.example/hook"}'
/v1/monitoring/subscriptions
curl http://ekedosltd.com//api/v1/monitoring/subscriptions -H "X-API-Key: $KEY"
/v1/monitoring/run
curl http://ekedosltd.com//api/v1/monitoring/run \
-H "X-API-Key: $KEY" -H "Content-Type: application/json" \
-d '{"customer_reference":"3fa85f64-..."}'
/v1/monitoring/{reference}
curl -X DELETE http://ekedosltd.com//api/v1/monitoring/3fa85f64-... -H "X-API-Key: $KEY"
Ready to get a key?
Create your workspace →