Verify the holder name on an e-wallet account.
Looks up the registered holder name on the named e-wallet for
the given phone number and compares it against the submitted
name.
Behaviour by outcome
| Upstream result | Response shape |
|---|---|
| Account exists, real name | status="found with kyc", similarity ≥ 0 |
| Account exists, no KYC (placeholder name) | status="found without kyc", similarity=0, suggestion="review" |
Account not found (definitive success=false from upstream) | status="not found", similarity=0, suggestion="reject" |
| Upstream unavailable (5xx / timeout / transport error) | HTTP 502/503/504; no row persisted for this attempt |
| Internal validation error (bad phone / name / wallet code) | HTTP 400 |
Phone number format
Accept both 0xxx... and 62xxx... forms (9-13 digits total).
The service canonicalises and re-formats per-wallet before
calling each upstream.
Idempotency
Two requests with the same (merchant_id, request_id) return
the same response and are billed once. Choose a UUID v4 for
request_id.
Authorizations
RS256-signed JWT obtained from POST /api/v1/kyc/auth/get-auth-token.
Default lifetime one hour. JWKS is published at
/.well-known/jwks.json on the service side (used by the gateway,
not by merchants).
Body
Merchant-supplied idempotency key. Recommended: UUID v4. Two requests with the same key return the same answer and are billed once.
"8b1d6f3e-9a02-4c5d-9f7a-2c8e1b3d4f5a"
E-wallet phone number. Accept 0xxx... or 62xxx... (9-13
digits total). Service canonicalises before lookup.
^(0|62)[1-9][0-9]{7,11}$"081234567890"
Name to verify against the registered holder name. Trimmed, case-insensitive, normalised (whitespace + honorifics).
1 - 200"Budi Santoso"
Primary wallet to check. The other three wallets are queried
in parallel and returned under other_ewallet_similarity.
DANA, SHOPEEPAY, GOPAY, OVO Response
Verification complete (whether the account exists or not).
Inspect status for the outcome and suggestion for the action.
Echo of the request's request_id.
Account state on the named wallet:
not found— no account for this phone.found without kyc— account exists but the holder never completed KYC, so the upstream returned a placeholder (a bare phone for DANA/OVO/GOPAY, or a machine-generated handle for SHOPEEPAY; a name-like nickname is NOT flagged).found with kyc— account exists with a real registered name.
not found, found without kyc, found with kyc Name-match score (0.0–100.0). 0 when status is not found
or found without kyc (no real name to match); otherwise the
score for the found with kyc name. Internally a 0–1 float,
multiplied by 100 at the API boundary.
0 <= x <= 100Recommended action, from similarity vs the wallet's configured
pass threshold (GOPAY/OVO/DANA 80, SHOPEEPAY 70):
pass— similarity >= pass.review— pass-10 <= similarity < pass, OR status isfound without kyc.reject— similarity < pass-10, OR status isnot found.
pass, review, reject 