This page covers the partner-submitted KYC model, where you collect the customer’s data and send it to Submit KYC Information. If Ripio hosts the KYC, you do not send any of these fields — see Ripio-hosted KYC.
required list in the API reference is only the intersection of the four. This page is the per-country matrix.
The authoritative, always-current list is the one your account returns from Retrieve KYC Requirements — it is already scoped to your account’s country and carries the catalogs for every CHOICE field. Read it at integration time; use this page to understand what each field means and what format it takes.
Only the envelope is camelCase (
kycSubmission, redirectUrl, kycProviderShareToken). Every field inside kycSubmission is snake_case: first_name, id_number_type, personal_activity_other.Everything is validated before anything is created
Formats, catalog values and cross-field rules are checked at the API boundary. A bad value returns400 with error code 20000 and nothing is created: no verification process is opened at the provider and the customer’s KYC is not consumed. Correct the field and repeat the same call.
What is normalized for you
Several fields are cleaned up before validation, so more payloads are accepted than a strict reading of the formats suggests:- Surrounding whitespace is trimmed everywhere.
- Catalog values are case-insensitive —
cpf,ccanddniare accepted and stored asCPF,CC,DNI. - Country-prefixed codes accept the bare form —
SPbecomesBR.SP,babecomesAR.BA,abecomesAR.A. The prefix is only added when the result is a real catalog value. - Documents, phones and postal codes tolerate separators —
20-38804362-9,123.456.789-09,01310-100,B1665 DQJand+54 (11) 2345-6789are all valid. - Dates accept two formats —
YYYY-MM-DDandDD/MM/YYYY.
state, net_income, personal_activity, personal_activity_other, id_number_type and address_type accept only the value from /kycRequirements/ — "Buenos Aires" is rejected, AR.BA is correct. Labels are deliberately not resolved: Buenos Aires is the label of AR.BA and the colloquial name of AR.DF, so accepting it would file submissions under the wrong province.
Fields that a country does not accept are ignored, not rejected — sending postal_code for Colombia is harmless, but it is also not stored.
Length limits
Text fields are capped, and the cap is the identity provider’s own — a longer value is refused here rather than at the provider, where the rejection would arrive after the verification was already opened.Not every ISO country code is accepted
nationality and Mexico’s birthday_place take an ISO 3166-1 alpha-2 code, but sixteen current codes are refused: AX, BL, BQ, CD, CW, GG, IM, JE, ME, MF, MK, PS, RS, SS, SX, TL — among them Serbia, Montenegro, North Macedonia, South Sudan, Palestine and DR Congo.
The reason is upstream: the identity provider’s list predates the 2006 ISO revision, so it does not carry them. A customer with one of these nationalities cannot be verified today either way; refusing the value here means you get a legible 400 instead of an opaque one after the verification was opened. The list will shrink as the provider adds them.
You do not need to hardcode the exclusions: nationality and birthday_place are returned by Retrieve KYC Requirements as a CHOICE carrying the accepted codes, so a form built from that response never offers one of the sixteen.
Argentina
Argentina does not use
district.
net_income and personal_activity are published as required and should be sent — they are the regulatory intent and the API will start refusing payloads without them. Today a payload that omits them is still accepted, so that the integrations already live are not turned away; when the value is present it is validated against the catalog. Treat them as required when you build the form.net_income)
Occupations (
personal_activity)
Province codes are in the
state entry of /kycRequirements/, and the 64 detailed-activity codes in the personal_activity_other entry.
Brazil
Brazil requires the fewest fields — only location, contact and income bracket. The identity fields are optional but recommended, since the provider collects them anyway during document upload.
Income brackets (
net_income)
For Brazil, identity documents (ID front/back and selfie) are collected through the KYC provider’s document-upload flow, not submitted as inline base64 fields in this request.
Mexico
Mexico does not use
id_number_type — the document is always a CURP.
Occupations (personal_activity)
birthday_place used to be documented as the city of birth. It is a country code: Guadalajara returns 400, MX is correct.Colombia
Colombia does not use
postal_code or gender.
Document types (id_number_type)
Dwelling types (
address_type)
The DANE codes are listed in the
city entry of /kycRequirements/, and the department codes in state.
Cross-field rules
Three rules cannot be read off the field list, and each returns400 with error code 20000.
Argentina — personal_activity_other follows personal_activity. It is required when personal_activity is AR.3 (Monotributista) or AR.4 (Autónomo), and optional for the other four occupations, which have a catalog entry of their own.
Colombia — city must belong to state. The DANE code is preferred, but the API also accepts a city name when it matches a city in the declared department. Two different errors, on purpose:
Mexico —
date_of_expiration must be later than date_of_issue. An already-expired document is accepted: whether it disqualifies the customer is decided by the KYC provider, not by this API.
When validation fails
The response is400 with error code 20000. The offending fields are nested under kycSubmission, keyed by field name, each with a human-readable message and a stable code you can branch on:
A
400 here means nothing was created. Correct the field and repeat the same call.