Customers
Customers represent the individuals or businesses your institution serves. Each customer has a risk profile that is dynamically scored across six factors.
Create customer
Push a customer when they onboard or update their KYC. Requires write scope.
- Name
email- Type
- string
- Description
Customer email. Must be unique within the tenant.
- Name
customer_type- Type
- string
- Description
individualorcorporate.
- Name
full_name- Type
- string
- Description
Full name (for individuals).
- Name
business_name- Type
- string
- Description
Business name (for corporates).
- Name
external_id- Type
- string
- Description
Your internal customer reference.
- Name
nationality- Type
- string
- Description
ISO country code (e.g.
NG).
- Name
phone- Type
- string
- Description
Phone number.
- Name
date_of_birth- Type
- string
- Description
ISO date (e.g.
1990-04-15).
- Name
occupation- Type
- string
- Description
Customer occupation.
- Name
source_of_funds- Type
- string
- Description
Declared source of funds.
- Name
pep_status- Type
- string
- Description
One of
none,declared,screened,confirmed. Defaults tonone.
- Name
kyc_status- Type
- string
- Description
Current KYC state if you already onboarded the customer through your provider. One of
pending,in_review,approved,rejected,expired.
- Name
kyc_provider- Type
- string
- Description
Provider that performed KYC, e.g.
sumsub. Used to correlate provider webhooks back to this customer record. See Integrations.
- Name
kyc_provider_ref- Type
- string
- Description
Provider-side identifier for this customer (e.g. Sumsub
applicantId).
- Name
onboarding_channel- Type
- string
- Description
digital,agent,branch,referral, orpartner.
- Name
account_refs- Type
- string[]
- Description
Array of account references linking this customer to your ledger / core banking.
- Name
address- Type
- object
- Description
Address sub-object:
line1,line2,city,state,country,postal_code.
- Name
tags- Type
- string[]
- Description
Free-form tags for filtering.
The full request also accepts business_type, industry_type, registration_no, tax_id, income_range, source_of_wealth, beneficial_owners, related_parties, and metadata.
Request
curl -X POST "https://api.whocomply.com/api/v1/tenants/kuda-mfb/customers" \
-H "Authorization: Bearer wc_..." \
-H "Content-Type: application/json" \
-d '{
"email": "adebayo@example.com",
"customer_type": "individual",
"full_name": "Adebayo Mustapha",
"nationality": "NG",
"phone": "+2348012345678",
"source_of_funds": "salary",
"kyc_provider": "sumsub",
"kyc_provider_ref": "5d2b1a3e0000000000000001",
"account_refs": ["ACC-001"]
}'
Response (201)
{
"status": "ok",
"data": {
"id": "f1e2d3c4-...",
"tenant_id": "...",
"email": "adebayo@example.com",
"customer_type": "individual",
"full_name": "Adebayo Mustapha",
"kyc_status": "pending",
"kyc_provider": "sumsub",
"kyc_provider_ref": "5d2b1a3e0000000000000001",
"risk_rating": "medium",
"account_refs": ["ACC-001"],
"created_at": "2026-04-17T10:00:00Z"
}
}
List customers
Returns customers for the tenant. Requires read scope.
- Name
limit- Type
- integer
- Description
Number of results (1-100, default 20).
- Name
offset- Type
- integer
- Description
Pagination offset (default 0).
Request
curl "https://api.whocomply.com/api/v1/tenants/kuda-mfb/customers?limit=20&offset=0" \
-H "Authorization: Bearer wc_..."
Response
{
"status": "ok",
"data": [
{
"id": "f1e2d3c4-...",
"full_name": "Adebayo Mustapha",
"customer_type": "individual",
"kyc_status": "pending",
"risk_rating": "medium",
"created_at": "2026-04-17T10:00:00Z"
}
]
}
Get customer
Returns a single customer by ID. Requires read scope.
Request
curl "https://api.whocomply.com/api/v1/tenants/kuda-mfb/customers/{customer_id}" \
-H "Authorization: Bearer wc_..."
Response
{
"status": "ok",
"data": {
"id": "f1e2d3c4-...",
"tenant_id": "...",
"email": "adebayo@example.com",
"customer_type": "individual",
"full_name": "Adebayo Mustapha",
"phone": "+2348012345678",
"nationality": "NG",
"kyc_status": "approved",
"kyc_provider": "sumsub",
"kyc_provider_ref": "5d2b1a3e0000000000000001",
"risk_rating": "medium",
"pep_status": "none",
"onboarding_channel": "digital",
"account_refs": ["ACC-001"],
"created_at": "2026-04-17T10:00:00Z",
"updated_at": "2026-04-17T10:00:00Z"
}
}
Get risk view
Returns the unified risk view for a customer. Includes the customer profile, risk scores (composite + per-factor), identity verification status, active alerts, open cases, screening results, and compliance flags. Requires read scope.
When provider plugins are activated for the tenant, the risk view merges signals from those providers (e.g. ComplyAdvantage screening hits, Sumsub KYC state) alongside WhoComply's native engines. You consume the merged view; no per-provider branching needed in your code.
Response fields
- Name
customer- Type
- object
- Description
Full customer profile.
- Name
risk- Type
- object
- Description
Risk scores:
composite_score(0-1000), plus per-factor scoresidentity_score,geographic_score,product_score,behavioral_score,channel_score,relationship_score.
- Name
active_alerts- Type
- array
- Description
Currently open alerts for this customer.
- Name
open_cases- Type
- array
- Description
Currently open investigation cases.
- Name
is_sanctioned- Type
- boolean
- Description
Whether the customer has confirmed sanctions hits.
- Name
requires_edd- Type
- boolean
- Description
Whether enhanced due diligence is required.
Request
curl "https://api.whocomply.com/api/v1/tenants/kuda-mfb/customers/{id}/risk-view" \
-H "Authorization: Bearer wc_..."
Response
{
"status": "ok",
"data": {
"customer": { "id": "...", "full_name": "Adebayo Mustapha", "risk_rating": "medium" },
"risk": {
"composite_score": 320,
"identity_score": 150,
"geographic_score": 100,
"product_score": 80,
"behavioral_score": 200,
"channel_score": 50,
"relationship_score": 60
},
"active_alerts": [],
"open_cases": [],
"is_sanctioned": false,
"requires_edd": false,
"generated_at": "2026-04-17T10:05:00Z"
}
}
Get risk history
Returns the immutable risk-rating history for a customer: every transition with the reason, trigger type, composite score, and actor. CBN §5.4 requires this audit trail.
Request
curl "https://api.whocomply.com/api/v1/tenants/kuda-mfb/customers/{id}/risk-history" \
-H "Authorization: Bearer wc_..."
Response
{
"status": "ok",
"data": [
{
"rating_from": "medium",
"rating_to": "high",
"reason": "Sumsub review returned RED",
"trigger_type": "onboarding",
"score": 580,
"actor_type": "system",
"created_at": "2026-04-17T10:08:00Z"
}
]
}