Skip to main content
POST
/
api
/
v1
/
kyc
/
ewallet
/
verify
curl --request POST \
  --url https://sandbox.singapay.id/api/v1/kyc/ewallet/verify \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "request_id": "8b1d6f3e-9a02-4c5d-9f7a-2c8e1b3d4f5a",
  "phone_number": "081234567890",
  "name": "Budi Santoso",
  "ewallet_code": "DANA"
}
'
{
  "request_id": "8b1d6f3e-9a02-4c5d-9f7a-2c8e1b3d4f5a",
  "status": "found with kyc",
  "similarity": 96.5,
  "suggestion": "pass"
}

Authorizations

Authorization
string
header
required

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

application/json
request_id
string
required

Merchant-supplied idempotency key. Recommended: UUID v4. Two requests with the same key return the same answer and are billed once.

Example:

"8b1d6f3e-9a02-4c5d-9f7a-2c8e1b3d4f5a"

phone_number
string
required

E-wallet phone number. Accept 0xxx... or 62xxx... (9-13 digits total). Service canonicalises before lookup.

Pattern: ^(0|62)[1-9][0-9]{7,11}$
Example:

"081234567890"

name
string
required

Name to verify against the registered holder name. Trimmed, case-insensitive, normalised (whitespace + honorifics).

Required string length: 1 - 200
Example:

"Budi Santoso"

ewallet_code
enum<string>
required

Primary wallet to check. The other three wallets are queried in parallel and returned under other_ewallet_similarity.

Available options:
DANA,
SHOPEEPAY,
GOPAY,
OVO

Response

Verification complete (whether the account exists or not). Inspect status for the outcome and suggestion for the action.

request_id
string
required

Echo of the request's request_id.

status
enum<string>
required

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.
Available options:
not found,
found without kyc,
found with kyc
similarity
number<float>
required

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.

Required range: 0 <= x <= 100
suggestion
enum<string>
required

Recommended 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 is found without kyc.
  • reject — similarity < pass-10, OR status is not found.
Available options:
pass,
review,
reject
other_ewallet_similarity
object[]