English Version
Onboarding
Onboarding is the process by which you register your platform's users in API Broker, enabling a brokerage account for them to operate. It is a mandatory prerequisite for any module: Balance Remuneration, Mutual Funds, MEP Dollar, or Trading.
The flow is sequential and interdependent: each step generates an ID required by the next. Steps cannot be skipped.
General flow
POST /v2/persons
↓ person_id
POST /identity-documents (or /contracts for legal entities)
↓
POST /v2/investment-accounts
↓ investment_account_id
POST /bank-accounts
↓ bank_account_id
Step 1 — Person Registration
Endpoint
POST /api/accounts/v2/persons
The first step is to register the person in the system. Before starting, it is essential to distinguish the type:
- Individual (PF): a person with a national ID, date of birth, and personal data.
- Legal Entity (PJ): a legal entity (corporation, LLC, trust, etc.) with its own tax ID and company name.
This distinction determines which fields are required and what documentation will be requested in the next step.
Common fields (PF and PJ)
| Field | Type | Description |
|---|---|---|
job_activity_id | int | Economic activity code according to AFIP |
nationality_id | string | Nationality country code (e.g. "AR") |
country_document_id | string | Country of issue of the identity document |
is_pep | bool | Is the person a Politically Exposed Person? |
pep_relation | string | "direct" or "indirect". Required if is_pep = true |
pep_position | string | Position held by the PEP. Required if is_pep = true |
is_aml_cft_subject | bool | Is the person an AML/CFT obligated subject? |
fatca_id | string | FATCA identifier. Send empty ("") if not applicable |
oecd_identifiers | array | Tax residency in an OECD country. Send [] if not applicable |
tax_identifications | object | Tax information (tax ID, taxpayer type, VAT) |
domiciles | array | Address with street, number, province, zip code, and city |
contact | object | Email and phone number in E.164 format |
Individual-only fields (human_person)
human_person)| Field | Type | Description |
|---|---|---|
surname | string | Last name |
name | string | First name |
document_type_id | string | Document type (national ID, passport, etc.) |
document_num | string | Document number |
civil_status_id | string | Marital status |
birth_date | date | Date of birth |
birth_place | string | Place of birth |
gender_id | string | Gender |
signature | string | Digitized signature in base64 |
Legal entity-only fields (legal_person)
legal_person)| Field | Type | Description |
|---|---|---|
company_name | string | Company name |
registration_number | string | Registration number |
incorporation_place | string | Place of incorporation |
country_id | string | Country of incorporation |
constitution_date | date | Date of incorporation |
book / volume / page | string | Registry data |
is_state_supplier | bool | Is the entity a government supplier? |
corporate_type | int | Entity type |
Example body — Individual
{
"persons": [{
"job_activity_id": 10,
"nationality_id": "AR",
"country_document_id": "AR",
"is_pep": false,
"is_aml_cft_subject": false,
"fatca_id": "",
"oecd_identifiers": [],
"tax_identifications": {
"tax_identification_value": "20301234567",
"residence_country_id": "AR",
"tax_identification_type_id": "CUIL",
"taxpayer_income_tax_type_id": "...",
"vat_taxpayer_type_id": "...",
"vat_country_taxpayer_type_id": "AR"
},
"human_person": {
"surname": "García",
"name": "Martín",
"document_type_id": "DNI",
"document_num": "30123456",
"civil_status_id": "single",
"birth_date": "1990-05-15",
"birth_place": "Buenos Aires",
"gender_id": "M",
"signature": "base64string..."
},
"domiciles": [{
"domicile_type_id": "real",
"street": "Av. Corrientes",
"house_number": 1234,
"floor": 3,
"apartment": "B",
"country_id": "AR",
"province_id": "BA",
"zip_code": 1043,
"location_id": 1
}],
"contact": {
"email": "[email protected]",
"mobile_phone": "+5491155667788"
}
}]
}Example body — Legal Entity
{
"persons": [{
"job_activity_id": 50,
"nationality_id": "AR",
"country_document_id": "AR",
"is_pep": false,
"is_aml_cft_subject": false,
"fatca_id": "",
"oecd_identifiers": [],
"tax_identifications": {
"tax_identification_value": "30712345678",
"residence_country_id": "AR",
"tax_identification_type_id": "CUIT",
"taxpayer_income_tax_type_id": "...",
"vat_taxpayer_type_id": "...",
"vat_country_taxpayer_type_id": "AR"
},
"legal_person": {
"company_name": "Inversiones del Sur S.A.",
"registration_number": "12345",
"incorporation_place": "Buenos Aires",
"country_id": "AR",
"constitution_date": "2010-03-20",
"book": "5",
"volume": "10",
"page": "123",
"is_state_supplier": false,
"corporate_type": 1
},
"domiciles": [{
"domicile_type_id": "legal",
"street": "Florida",
"house_number": 500,
"country_id": "AR",
"province_id": "BA",
"zip_code": 1005,
"location_id": 1
}],
"contact": {
"email": "[email protected]",
"mobile_phone": "+541143210000"
}
}]
}Response
{
"items": [{
"person_id": "F-9686d35b-b2e4-4f29-bb33-28bd73d12437",
"surname": "García",
"name": "Martín",
"tax_identification_value": "20301234567",
"error": null
}]
}Save the
person_id. You will need it in all subsequent steps. Iferrorisnull, the registration was successful.
Step 2 — Documentation Upload
Individual — Identity documentation
POST /api/accounts/persons/identity-document
Three images are required in base64 format:
| Field | Description |
|---|---|
person_id | ID obtained in the previous step |
front | Front of the national ID in base64 |
back | Back of the national ID in base64 |
face | Face photograph (selfie) in base64 |
{
"person_id": "F-9686d35b-b2e4-4f29-bb33-28bd73d12437",
"front": "base64...",
"back": "base64...",
"face": "base64..."
}If the individual is a PEP, they must also upload proof of source of funds (last 3 pay stubs, accounting certification, property deeds, etc.) using the
/contractsendpoint with thepep_documentsfield.
Legal Entity — Corporate documentation
POST /api/accounts/persons/contracts
This endpoint uses multipart/form-data (not JSON). It allows sending files and text simultaneously.
| Field | Required | Description |
|---|---|---|
person_id | ✅ | Legal entity ID |
constituent_instrument | ✅ | Articles of incorporation (bylaws, partnership agreement, trust deed, etc.) |
power_of_attorney | When applicable | Legal power of attorney for authorized signatories who will operate the account |
administrative_body_record | ✅ | List or minutes with current authorities (board of directors, managing partners, etc.) |
latest_balance_certificate | ✅ | Latest annual financial statements certified by a professional accountant. If unavailable, a net worth certification |
shareholder_registry_copy | ✅ | Ownership register (shareholders, partners, trustors, etc.) |
capital_ownership_beneficiary | ✅ | Corporate structure with ultimate beneficial owners (individuals with ≥10% direct or indirect ownership) |
other_documents | Optional | Additional documentation for complex structures |
pep_documents | If PEP | Source of funds documentation for linked PEP individuals |
What goes in each field by entity type?
| Entity type | constituent_instrument | administrative_body_record | shareholder_registry_copy |
|---|---|---|---|
| Corporation | Bylaws | Shareholder and board meeting minutes | Shareholder registry |
| LLC | Partnership agreement | Minutes designating managing partners | Partners registry |
| Trust | Trust deed | — | List of trustors |
| HOA | Co-ownership regulations | Minutes designating the administrator | List of co-owners |
Ultimate beneficial owner: you must identify all individuals with direct or indirect ownership of 10% or more. For example: if company A owns 50% of company B, and John owns 30% of A → John has 15% indirect ownership of B and must be declared.
Step 3 — Brokerage Account Creation
POST /api/accounts/v2/investment-accounts
Creates the user's investment account. Links the person_id obtained in step 1.
Required fields
| Field | Type | Description |
|---|---|---|
external_id | string | Partner's own identifier to track the record |
person_account_type_id | string | Person type: individual or legal entity |
market_type | array | Enabled markets. Value: ["stock_market"] |
investment_profile | object | Answers to the risk profile questionnaire (5 questions, value from 1 to N depending on the options) |
owners | array | List of account holders. Each with person_id and person_role_id |
The investment profile questionnaire has 5 questions. You can retrieve them at
GET /api/master-tables/investor-questions. The system automatically calculates the resulting profile: conservative, moderate, or aggressive.
Example body
{
"investment_accounts": [{
"external_id": "client-123",
"person_account_type_id": "human",
"market_type": ["stock_market"],
"investment_profile": {
"1": 2,
"2": 1,
"3": 3,
"4": 2,
"5": 1
},
"owners": [{
"person_id": "F-9686d35b-b2e4-4f29-bb33-28bd73d12437",
"person_role_id": "holder"
}]
}]
}Response
{
"items": [{
"external_id": "client-123",
"investment_account_id": 43101,
"investment_risk_profile": "moderate",
"error": null
}]
}Save the
investment_account_id. It is the central identifier used across all operational modules.For legal entities: the system automatically generates a fund account in addition to the brokerage account. This enables the SIMPLE placement method for mutual funds.
Confirmation webhook
API Broker asynchronously notifies when the brokerage account and/or fund account has been created at the broker-dealer and/or the mutual fund management company:
Webhook: investment_account_update
Step 4 — Bank Account Registration
POST /api/accounts/bank-accounts/
Links a bank account to the brokerage account to enable deposits and withdrawals.
Fundamental rule: SAME NAME
The bank account must be held by the same owner as the brokerage account, verified by tax ID. Third-party accounts are not accepted.
Required fields
| Field | Type | Description |
|---|---|---|
investment_account_id | int | Brokerage account ID |
currency_id | string | Currency: "ARS" or "USD" |
cbu | string | 22-digit CBU, no dashes or spaces |
alias | string | CVU alias, no spaces (optional if CBU is provided) |
Example body
{
"bank_accounts": [{
"investment_account_id": 43101,
"currency_id": "ARS",
"cbu": "0000003100012345678901",
"alias": "martin.garcia.mp"
}]
}Response
{
"items": [{
"investment_account_id": 43101,
"cbu": "0000003100012345678901",
"alias": "martin.garcia.mp",
"bank_account_id": "ba-abc123",
"error": null
}]
}You can register multiple bank accounts per brokerage account (e.g. one in ARS and one in USD) in a single call.
Key differences: Individual vs Legal Entity
| Individual | Legal Entity | |
|---|---|---|
| Data object | human_person | legal_person |
| Documentation | POST /identity-document (national ID + selfie) | POST /contracts (multipart: bylaws, financials, powers of attorney, etc.) |
| Fund account | Not generated | Generated automatically |
| Default mutual fund method | ACDI | SIMPLE |
| Ultimate beneficial owner | Not applicable | Mandatory declaration for individuals with ≥10% |
| PEP | is_pep field • source of funds docs if applicable | is_pep field on linked representatives |
Query endpoints
Once onboarding is complete, you can retrieve information with:
| Query | Endpoint |
|---|---|
| Person by tax ID | GET /api/accounts/persons?tax_identification_value={tax_id} |
| Person by ID | GET /api/accounts/persons?person_id={person_id} |
| Brokerage account by ID | GET /api/accounts/investment-accounts/{investment_account_id} |
| Brokerage account by person | GET /api/accounts/investment-accounts/by-person-id/{person_id} |
| Details with market data | GET /api/accounts/investment-accounts/{id}?with_market_data=true |
| Bank accounts for a brokerage account | GET /api/accounts/bank-accounts?investment_account_id={id} |
Key points to remember
- Order is mandatory: a brokerage account cannot be created without a
person_id, nor can a bank account be registered without aninvestment_account_id. - Save the IDs at each step:
person_id,investment_account_id, andbank_account_idare the keys to all subsequent operations. - SAME NAME is non-negotiable: the bank account must be held by the same owner as the brokerage account, validated by tax ID.
- Conditional PEP fields: if
is_pep = true, the fieldspep_relationandpep_positionbecome mandatory. - Send FATCA and OECD as empty if not applicable: send
"fatca_id": ""and"oecd_identifiers": []rather than omitting them. - Legal entities automatically generate a fund account, which enables the SIMPLE method for mutual funds.
- Always use v2 of the persons and brokerage account endpoints.
- Always check the
errorfield in the response. If it is notnull, the registration failed and must be corrected before continuing. - Master table values (countries, provinces, document types, AFIP activity codes, etc.) must be retrieved beforehand from
GET /api/master-tables/.
Updated 6 months ago
