Migration guide · Virtual accounts
Portage and ACT previously required different payloads. The products converge on one unified field set — one correctly filled POST /v1/users body covers everything. This guide lists every field that was added, changed, or removed.
This is the migration changelog — what moved and why. For the canonical, version-accurate field reference (enums aligned to the live spec), see Creating users and the Create a user API reference. The authoritative per-user “what’s still missing” list is always the
missing_fields map on GET /v1/users/{id}.Badge key
didn’t exist before — add it ACT users: add this field Portage users: add this field no longer required not applicable for this category no change needed
What changed per bank
Pick the bank you integrated with before. The right-hand column is the unified payload you send now.How the user category is determined
Two fields drive the required set:type and address_country. The combination produces one of four categories.
Required fields
Select the user type to see every required field, its accepted values, and what changed per bank.The per-bank badges for the identity and document fields tracked by the live
missing_fields map (document_country, the document photos, immigration_status, additional_info, employment_status) are reconciled against that map. Provenance for the questionnaire fields (account_purpose, expected_*, current_employer, income_source) and for the KYB section is illustrative — those fields aren’t tracked by the map, so always confirm against GET /v1/users/{id} → missing_fields.- 👤 KYC — Individual
- 🏢 KYB — Business
Category is set by
address_country: "USA" → usa_individual, anything else → international_individual.All fields from USA Individual apply. The differences are listed below.
Conditional field rules
Some fields are only required in specific situations. Here is what each condition means.| Condition | What it means | Example |
|---|---|---|
when X = Y | Include the field only if the condition is true; otherwise omit it. | occupation is required only when employment_status = "employed" |
unless X = Y | Include the field in all cases except when the condition is true. | ssn is required for everyone except non-US citizens |
| EDD individual | If address_country is in the EDD list (53 countries), also upload a proof-of-address document. | User from MEX → add file_proof_of_address to identifying_information |
| EDD business | Proof of address is required if any one is true: address_country in the EDD list, formation_country in the EDD list, or the company was formed within the last 180 days. | Company formed 3 months ago → add file_proof_of_address regardless of country |
Country restrictions
All codes are ISO 3166-1 alpha-3. Rules apply toaddress_country unless otherwise noted.
🚫
Blocked — ineligible for all virtual-account products
Users with
address_country in this list cannot create any virtual account.⚠️
EDD countries — individual users (53 countries)
When
address_country matches, a proof-of-address document is additionally required.⚠️
EDD countries — business users (51 countries)
Same list minus
GTM and CCK. Applies to address_country AND formation_country — also triggered if the company was formed within the last 180 days.EDD trigger logic — business users
OR
OR
→
Example payloads
CompletePOST /v1/users bodies for each category. Use the copy button and adapt for your integration; content fields take base64-encoded images.
Related
- Creating users — the canonical, version-accurate required-fields reference.
- Create a user — API reference — full schema and live “Try it”.
- For AI agents —
eligible_products/missing_fieldsand conditional tokens. - Known limitations — the auto-reject gotcha and
statusvsverification_status.