Onboarding
El onboarding es el proceso mediante el cual registrás a los usuarios de tu plataforma en API Broker, habilitándoles una cuenta comitente para operar. Es el prerequisito obligatorio para cualquier módulo: Remuneración de Saldo, FCI, Dólar MEP o Trading.
El flujo es secuencial e interdependiente: cada paso genera un ID que se necesita en el siguiente. No es posible saltear pasos.
Flujo general
POST /accounts/v2/persons
↓ person_id
POST /accounts/identity-documents (o /contracts para PJ)
↓
POST /accounts/v2/investment-accounts
↓ investment_account_id
POST /accounts/bank-accounts
↓ bank_account_id
Paso 1 — Alta de persona
Endpoint
POST /api/accounts/v2/persons
El primer paso es registrar a la persona en el sistema. Antes de empezar, es fundamental distinguir el tipo:
- Persona Física (PF): individuo con DNI, fecha de nacimiento y datos personales.
- Persona Jurídica (PJ): entidad legal (SA, SRL, Fideicomiso, etc.) con CUIT propio y razón social.
Esta distinción determina qué campos son requeridos y qué documentación se solicitará en el paso siguiente.
Campos comunes (PF y PJ)
| Campo | Tipo | Descripción |
|---|---|---|
job_activity_id | int | Código de actividad económica según AFIP |
nationality_id | string | Código de país de nacionalidad (ej: "AR") |
country_document_id | string | País emisor del documento de identidad |
is_pep | bool | ¿Es Persona Políticamente Expuesta? |
pep_relation | string | "directa" o "indirecta". Obligatorio si is_pep = true |
pep_position | string | Cargo de la persona PEP. Obligatorio si is_pep = true |
is_aml_cft_subject | bool | ¿Es sujeto obligado AML/CFT? |
fatca_id | string | Identificador FATCA. Enviar vacío ("") si no aplica |
oecd_identifiers | array | Residencia fiscal en país OCDE. Enviar [] si no aplica |
tax_identifications | object | Información tributaria (CUIT/CUIL, tipo de contribuyente, IVA) |
domiciles | array | Domicilio con calle, número, provincia, CP, localidad |
contact | object | Email y teléfono en formato E.164 |
Campos exclusivos Persona Física (human_person)
human_person)| Campo | Tipo | Descripción |
|---|---|---|
surname | string | Apellido |
name | string | Nombre |
document_type_id | string | Tipo de documento (DNI, Pasaporte, etc.) |
document_num | string | Número de documento |
civil_status_id | string | Estado civil |
birth_date | date | Fecha de nacimiento |
birth_place | string | Lugar de nacimiento |
gender_id | string | Género |
signature | string | Firma digitalizada en base64 |
Campos exclusivos Persona Jurídica (legal_person)
legal_person)| Campo | Tipo | Descripción |
|---|---|---|
company_name | string | Razón social |
registration_number | string | Número de inscripción |
incorporation_place | string | Lugar de constitución |
country_id | string | País de constitución |
constitution_date | date | Fecha de constitución |
book / volume / page | string | Datos registrales |
is_state_supplier | bool | ¿Es proveedora del estado? |
corporate_type | int | Tipo societario (SA, SRL, Fideicomiso, etc.) |
Body de ejemplo — Persona Física
{
"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": "soltero",
"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"
}
}]
}Body de ejemplo — Persona Jurídica
{
"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
}]
}Guardá el
person_id. Lo vas a necesitar en todos los pasos siguientes. Sierrorviene ennull, el alta fue exitosa.
Paso 2 — Carga de documentación
Persona Física — Documentación de identidad
POST /api/accounts/persons/identity-document
Se requieren tres imágenes en formato base64:
| Campo | Descripción |
|---|---|
person_id | ID obtenido en el paso anterior |
front | Frente del DNI en base64 |
back | Dorso del DNI en base64 |
face | Fotografía del rostro (selfie) en base64 |
{
"person_id": "F-9686d35b-b2e4-4f29-bb33-28bd73d12437",
"front": "base64...",
"back": "base64...",
"face": "base64..."
}Si la persona física es PEP, además debe cargar documentación de origen de fondos (últimos 3 recibos de sueldo, certificación contable, escrituras, etc.) usando el endpoint
/contractscon el campopep_documents.
Persona Jurídica — Documentación societaria
POST /api/accounts/persons/contracts
Este endpoint usa multipart/form-data (no JSON). Permite enviar archivos y texto simultáneamente.
| Campo | Obligatorio | Descripción |
|---|---|---|
person_id | ✅ | ID de la persona jurídica |
constituent_instrument | ✅ | Instrumento constitutivo (Estatuto SA, Contrato Social SRL, Contrato de Fideicomiso, etc.) |
power_of_attorney | Según caso | Poder legal de los apoderados que operarán la cuenta |
administrative_body_record | ✅ | Nómina o actas con autoridades vigentes (directorio, socios gerentes, etc.) |
latest_balance_certificate | ✅ | Último balance anual certificado por CPCE. Si no hay balance cerrado, certificación contable patrimonial |
shareholder_registry_copy | ✅ | Registro de participación societaria (accionistas, socios, fiduciantes, etc.) |
capital_ownership_beneficiary | ✅ | Estructura societaria con beneficiarios finales (personas humanas con ≥10% directa o indirectamente) |
other_documents | Opcional | Documentación adicional para estructuras complejas |
pep_documents | Si hay PEP | Documentación de origen de fondos para personas físicas PEP vinculadas |
¿Qué va en cada campo según tipo societario?
| Tipo societario | constituent_instrument | administrative_body_record | shareholder_registry_copy |
|---|---|---|---|
| SA | Estatuto | Actas de asamblea y directorio | Registro de accionistas |
| SRL | Contrato Social | Actas con designación de socios gerentes | Registro de socios |
| Fideicomiso | Contrato de Fideicomiso | — | Nómina de Fiduciantes |
| Consorcio | Reglamento de Copropietarios | Acta con designación del administrador | Nómina de copropietarios |
Beneficiario final: debés identificar a todas las personas humanas con participación directa o indirecta del 10% o más. Por ejemplo: si la empresa A tiene 50% de la empresa B, y Juan tiene 30% de A → Juan tiene 15% indirecto de B y debe ser declarado.
Paso 3 — Alta de cuenta comitente
POST /api/accounts/v2/investment-accounts
Crea la cuenta de inversión del usuario. Vincula el person_id obtenido en el paso 1.
Campos requeridos
| Campo | Tipo | Descripción |
|---|---|---|
external_id | string | Identificador propio del partner para rastrear el registro |
person_account_type_id | string | Tipo de persona: física o jurídica |
market_type | array | Mercados habilitados. Valor: ["stock_market"] |
investment_profile | object | Respuestas al cuestionario de perfil de riesgo (5 preguntas, valor del 1 al N según opciones) |
owners | array | Lista de titulares. Cada uno con person_id y person_role_id |
El cuestionario de perfil de inversión tiene 5 preguntas. Podés consultarlas en
GET /api/master-tables/investor-questions. El sistema calcula automáticamente el perfil resultante: conservador, moderado o agresivo.
Body de ejemplo
{
"investment_accounts": [{
"external_id": "cliente-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": "titular"
}]
}]
}Response
{
"items": [{
"external_id": "cliente-123",
"investment_account_id": 43101,
"investment_risk_profile": "moderado",
"error": null
}]
}Guardá el
investment_account_id. Es el identificador central que vas a usar en todos los módulos operativos.Para personas jurídicas: el sistema genera automáticamente una cuenta cuotapartista además de la cuenta comitente. Esto habilita el método de colocación SIMPLE en FCI.
Webhook de confirmación
API Broker notifica de forma asincrónica cuando la cuenta comitente y/o la cuenta cuotapartista fue creada en el ALyC y/o en la Sociedad Gestora de FCI:
Webhook: investment_account_update
Paso 4 — Alta de cuenta bancaria
POST /api/accounts/bank-accounts/
Vincula una cuenta bancaria a la cuenta comitente para habilitar depósitos y retiros.
Regla fundamental: SAME NAME
La cuenta bancaria debe estar a nombre del mismo titular que la cuenta comitente, verificado por CUIT. No se admiten cuentas de terceros.
Campos requeridos
| Campo | Tipo | Descripción |
|---|---|---|
investment_account_id | int | ID de la cuenta comitente |
currency_id | string | Moneda: "ARS" o "USD" |
cbu | string | CBU de 22 dígitos, sin guiones ni espacios |
alias | string | Alias CVU, sin espacios (opcional si se envía CBU) |
Body de ejemplo
{
"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
}]
}Podés dar de alta múltiples cuentas bancarias por comitente (ej: una en ARS y una en USD) en una sola llamada.
Diferencias clave: PF vs PJ
| Persona Física | Persona Jurídica | |
|---|---|---|
| Objeto de datos | human_person | legal_person |
| Documentación | POST /identity-document (DNI + selfie) | POST /contracts (multipart: estatuto, balance, poderes, etc.) |
| Cuenta cuotapartista | No se genera | Se genera automáticamente |
| Método FCI por defecto | ACDI | SIMPLE |
| Beneficiario final | No aplica | Obligatorio declarar personas humanas con ≥10% |
| PEP | Campo is_pep • docs de origen de fondos si aplica | Campo is_pep en representantes vinculados |
Endpoints de consulta
Una vez completado el onboarding, podés consultar la información con:
| Consulta | Endpoint |
|---|---|
| Persona por CUIT | GET /api/accounts/persons?tax_identification_value={cuit} |
| Persona por ID | GET /api/accounts/persons?person_id={person_id} |
| Cuenta comitente por ID | GET /api/accounts/investment-accounts/{investment_account_id} |
| Cuenta comitente por person | GET /api/accounts/investment-accounts/by-person-id/{person_id} |
| Detalles con datos de mercado | GET /api/accounts/investment-accounts/{id}?with_market_data=true |
| Cuentas bancarias de un comitente | GET /api/accounts/bank-accounts?investment_account_id={id} |
Puntos clave para recordar
- El orden es obligatorio: no se puede crear una cuenta comitente sin
person_id, ni registrar una cuenta bancaria sininvestment_account_id. - Guardá los IDs en cada paso:
person_id,investment_account_idybank_account_idson las llaves de toda la operatoria posterior. - SAME NAME es innegociable: la cuenta bancaria debe tener el mismo titular que la cuenta comitente, validado por CUIT.
- Campos condicionales PEP: si
is_pep = true, los campospep_relationypep_positionse vuelven obligatorios. - FATCA y OCDE vacíos si no aplican: enviar
"fatca_id": ""y"oecd_identifiers": []en lugar de omitirlos. - Las PJ generan cuenta cuotapartista automáticamente, lo que habilita el método SIMPLE en FCI.
- Usar siempre la v2 de los endpoints de personas y cuentas comitentes.
- Revisar siempre el campo
erroren el response. Si no esnull, el alta falló y hay que corregir antes de continuar. - Los valores de master-tables (países, provincias, tipos de documento, actividades AFIP, etc.) deben consultarse previamente en
GET /api/master-tables/.
Updated 6 months ago
