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.

StatusMeaning
401Missing, invalid, or revoked API key
403Your plan doesn't include this endpoint, or your key's IP allowlist blocked the request
422Validation failed — check the field-level errors in the response body
429Rate limit or monthly quota exceeded
500Something 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.

GET

/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 }
}
POST

/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":[]}
POST

/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"}}
POST

/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"}]}
POST

/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"}]}
POST

/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":[]}
POST

/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"}
POST

/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"}
POST

/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}
POST

/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.

POST

/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"}'
GET

/v1/monitoring/subscriptions

curl http://ekedosltd.com//api/v1/monitoring/subscriptions -H "X-API-Key: $KEY"
POST

/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-..."}'
DELETE

/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 →