Checks a B2C cardholder's personal data against the rules POST /v1/users/{id}/cardholder applies, without storing anything or sending anything to the card provider. Call it when your customer submits the form, so they can correct a field at once instead of waiting for a refused cardholder.

The body takes the user meta fields of a B2C cardholder (see POST /v1/users/{id}/cardholder) and the ssn. The values are normalized first, as on create: the post code loses its spaces, the address is transliterated to English letters, the nationality is upper-cased, a phone code without + is accepted. The country and town are checked against the live lists (/v1/cardholders/regions, /v1/cardholders/cities); when those cannot be read, that check is skipped, townChecked is false, and valid can still be true although the create, which needs the lists, would then refuse.

The answer is always 200 for a readable body: valid says whether the values pass the create's checks, and problems lists each refused field with the reason, one entry per field.

It checks the values only, not the user they are meant for: the body names no user. So valid: true does not promise the create succeeds. The create still refuses when the user's KYC is not completed, or when the email is already held by another cardholder on that card type. It also works on a cardholder the user already has on that card type (returns it, or submits it again) instead of creating one, and then asks for no SSN when one is on file, where this always asks a U.S. national for one.

Request body

application/json · CardholderUpdateRequest · required

FieldTypeRequiredDescription
accountPurpose string no
address string no

English letters, digits, hyphens and spaces only (no commas or other punctuation); max 40 chars. Accented Latin and Cyrillic letters are transliterated to ASCII.

annualSalary string no
birthday string no

YYYY-MM-DD.

country string no

Country code, see /v1/cardholders/regions.

email string no

Max 50 chars.

expectedMonthlyVolume string no
firstName string no

Latin letters, space, hyphen, apostrophe and period only; max 40 chars. TEST/MOCK/SANDBOX are rejected.

gender string no

M or F (B2C).

idExpiryDate string no

YYYY-MM-DD. Must not be earlier than idIssueDate.

idIssueDate string no

YYYY-MM-DD. Required for B2C.

idNo string no
idType string no

PASSPORT, DLN or GOVERNMENT_ISSUED_ID_CARD; PASSPORT only for a Hong Kong national.

lastName string no

Same rules as firstName.

nationality string no

Two-letter ISO 3166-1 country code (US, GB), see /v1/cardholders/regions. Stored upper-case.

occupation string no

Occupation code, see /v1/cardholders/occupations.

phone string no

Digits only, 7-15 digits, no country code; must be a mobile number.

phoneCode string no

"+" and 1-4 digits, e.g. "+372".

postCode string no

Letters and digits only, max 15 chars; spaces are stripped.

ssn string no

U.S. Social Security number (nine digits; hyphens and spaces are ignored), for a B2C cardholder whose nationality is US. Replaces the one on file; omit it to keep that. Changing the nationality away from US drops the stored one. Never returned.

town string no

City code, see /v1/cardholders/cities.

Responses

StatusBodyDescription
200 CardholderValidateResponse

The verdict.

400 Error

The body is not a JSON object.

Specification

This page is generated from the OpenAPI specification, which remains the authoritative machine-readable source.