Skip to main content
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.
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.
ConditionWhat it meansExample
when X = YInclude the field only if the condition is true; otherwise omit it.occupation is required only when employment_status = "employed"
unless X = YInclude the field in all cases except when the condition is true.ssn is required for everyone except non-US citizens
EDD individualIf 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 businessProof 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 to address_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

Complete POST /v1/users bodies for each category. Use the copy button and adapt for your integration; content fields take base64-encoded images.
{
  "type": "individual",
  "first_name": "Ana",
  "last_name": "García",
  "birth_date": "1990-04-22",
  "email": "ana@example.com",
  "phone": "+15551234567",
  "nationality": "USA",
  "address_street": "123 Main St",
  "address_city": "Austin",
  "address_state": "TX",
  "address_zip_code": "78701",
  "address_country": "USA",
  "document_type": "drivers_license",
  "document_number": "DL-987654321",
  "document_country": "USA",
  "employment_status": "employed",
  "occupation": "Software Engineer",
  "current_employer": "Acme Corp",
  "account_purpose": "receive_payments",
  "expected_monthly_volume": "10000_to_49999",
  "expected_transaction_count": "11_to_50",
  "identifying_information": [
    { "type": "ssn", "number": "XXX-XX-XXXX" },
    { "type": "front", "content": "<base64>" },
    { "type": "back",  "content": "<base64>" }
  ]
}