Skip to main content
POST
/
batch-import
/
import
/
entities
Importar entidades (CSV)
curl --request POST \
  --url http://api.gu1.ai/batch-import/import/entities \
  --header 'Authorization: Bearer <token>'

Endpoint

POST https://api.gu1.ai/batch-import/import/entities

Descripción

Content-Type: multipart/form-data. Encola el mismo job bulk que el hub Importaciones masivas. Requiere entities:bulk_import y la flag org de importación masiva automática. Respuesta 202 con jobId e importMode efectivo.

Autenticación

Authorization: Bearer TU_API_KEY

Modos de importación (entityImportMode)

ModoCuándoComportamiento
manualDefault si omitís el campoEntidad mínima con taxId + suggested_name (obligatorio). Sin pipeline de datos básicos (Nosis/CPF). Enrichments opcionales vía autoExecuteIntegrations en el form y/o columnas CSV por fila. Sin depth / accionistas. País: cualquier ISO2 válido de plataforma (prioridad country_code por fila).
automaticEnviás entityImportMode=automaticDatos básicos por tax ID (AR, BR o CL) + enrichments (default todos activos si omitís autoExecuteIntegrations) + depth / accionistas opcional.
Los valores legacy manual_no_enrichment y automatic_enriched siguen aceptándose en el request y se normalizan a manual / automatic. La respuesta usa los nombres canónicos.

Default si mandás solo el CSV

curl -X POST 'https://api.gu1.ai/batch-import/import/entities' \
  -H 'Authorization: Bearer TU_API_KEY' \
  -F 'file=@bulk-entities-template.csv'
importMode: manual — entidad mínima, sin enrichments salvo que los agregues explícitamente.

Manual con enrichments elegidos

Misma semántica que el modo Manual del hub:
curl -X POST 'https://api.gu1.ai/batch-import/import/entities' \
  -H 'Authorization: Bearer TU_API_KEY' \
  -F 'file=@bulk-entities-template.csv' \
  -F 'entityImportMode=manual' \
  -F 'autoExecuteIntegrations={"executeAllActiveEnrichments":false,"enrichments":["nosis_enrichment"]}' \
  -F 'riskMatrixCompanyId=UUID_DE_TU_MATRIZ'
Opcional: monitoring JSON (solo entidad principal en manual).

Modo automático (explícito)

curl -X POST 'https://api.gu1.ai/batch-import/import/entities' \
  -H 'Authorization: Bearer TU_API_KEY' \
  -F 'file=@bulk-entities-template.csv' \
  -F 'entityImportMode=automatic'
Sin autoExecuteIntegrations en automático → todos los enrichments activos de la org. Con depth > 0 podés enviar autoExecuteIntegrationsShareholders (JSON) para accionistas.

Manual sin reglas post-creación

  -F 'entityImportMode=manual' \
  -F 'skipRulesExecution=true'
(Omití entityImportMode — ya es manual por default.)

CSV formato plataforma (sin mappingId)

Cabeceras mínimas: tax_id, type. Recomendado: suggested_name (obligatorio en manual). Ver País (ISO2) para country_code.

País (ISO2) — siempre obligatorio

Cada fila necesita un país para crear la entidad (manual y automático). Podés indicarlo en uno o ambos lugares:
FuenteCuándo usarla
Campo del form countryPaso 2 del hub o campo multipart en la API. Obligatorio en CSV simple (solo tax_id + type). Obligatorio en filas sin country_code.
Columna CSV country_code (alias country)Por fila. Pisa el country del lote cuando está presente.
Prioridad: country_code en la fila → country del lote. Si ninguno está definido en una fila, el import falla con missing country antes de encolar el job.
ModoPaíses permitidos
Automático (automatic)AR, BR, CL (pipeline datos básicos)
Manual (manual)Cualquier ISO2 válido de plataforma
Ejemplos:
  • CSV simple, todo AR → cabeceras tax_id,type + form country=AR.
  • CSV avanzado, países mixtos → country_code en cada fila (country del lote opcional como respaldo).
  • CSV avanzado, un solo país → todas las filas con country_code=AR o form country=AR sin la columna.
Plantillas de referencia — descarga (tax IDs de demo fijos; reemplazá antes de importar en producción) o generá IDs nuevos desde el hub del panel (Entidades → importación masiva): Fuente canónica (mantener alineada si cambian columnas): apps/web/src/lib/bulk-automatic-entity-import-parse.ts.
tax_id,type,country_code,suggested_name,...,execute_all_active_enrichments,...,depth,status,segment_tag
20123456789,company,AR,Acme Argentina SA,...,true,...,0,under_review,retail
tax_id,type,country_code,suggested_name,...,status,segment_tag
20123456789,company,AR,Empresa Manual AR SA,...,under_review,retail
XAXX010101000,company,MX,Empresa México Demo SA,...,active,latam

Referencia de columnas (CSV plataforma)

Cabeceras sin distinguir mayúsculas; espacios → _. Alias entre paréntesis.
Columna CSVAliasCampo API / entidadNotas
tax_idtaxIdtaxIdObligatorio. Se normaliza por país.
typetipotypeObligatorio. person / company (persona, empresa, pf, pj).
country_codecountrycountryISO2 por fila. Pisa el country del form del lote. La columna es opcional en el CSV si enviás country en el lote (CSV simple) o si cada fila trae country_code. El país siempre es obligatorio — columna y/o campo del lote.
suggested_namename, nombresuggestedNameNombre para mostrar. Obligatorio en manual en cada fila.
gendergenderDato de creación (customData). Enum: M, F, male, female, other, unknown. Usar other para no binario. Ver Crear entidad — Persona.
external_idexternalIdexternalIdID externo de la entidad.
emailemailEmail de contacto.
phonephoneTeléfono de contacto.
registration_dateregistrationDateFecha de registro (ISO).
risk_matrix_idriskMatrixIdUUID de matriz por fila; vacío / null limpia. Pisa matrices del lote si viene informado.
execute_all_active_enrichmentsautoExecuteIntegrations.executeAllActiveEnrichmentstrue / false. Aplica enrichments por fila si esta columna, enrichments o enrichment_group_refs están presentes.
enrichmentsautoExecuteIntegrations.enrichmentsCódigos de proveedor separados por , o ;.
enrichment_group_refsautoExecuteIntegrations.enrichmentGroupRefsSlugs de grupos de enrichment.
omit_enrichmentsexclude_enrichmentsautoExecuteIntegrations.excludeEnrichmentsCódigos a omitir del conjunto final. Funciona con execute_all_active_enrichments=true (todos los activos menos estos). Si es la única columna de enrichment en la fila, se suma a la config del lote (no la reemplaza).
create_relationshipscreateRelationshipsSolo modo automático (ignorado en manual).
depthdepthEntero 0–5. Accionistas/relaciones. Solo automático (se elimina en manual).
statusstatusactive, under_review, blocked, etc.
attributes.<path>attributesDato de negocio anidado (misma idea que transacciones con puntos). Ej.: attributes.segment_tag, attributes.tags.tier.
entityData.<path>entityData.{person|company}Perfil KYC/KYB. Sin person/company en la cabecera → usa el type de la fila (personentityData.person.*, companyentityData.company.*). Ej.: entityData.income, entityData.tradeName.
entityData.person.<path>entityData.personExplícito para persona (ignora mismatch con type=company en la misma fila).
entityData.company.<path>entityData.companyExplícito para empresa.
metadata.<path>attributes (legacy)Deprecado; se fusiona en attributes. Preferí attributes.*.
Columna sin prefijoattributesRetrocompat: segment_tagattributes.segment_tag.
Eliminado (2026-06-04): las columnas CSV execute_all_active_checks y checks ya no forman parte del contrato de importación. Usá enrichments, enrichment_group_refs y execute_all_active_enrichments. Ver Changelog.
Dot notation: igual que el CSV nativo de transacciones — cabeceras con . generan objetos anidados. Enriquecimientos pueden sobrescribir entityData; los valores del CSV se re-aplican al final (el CSV gana en conflictos). Qué va a attributes: columnas attributes.*, metadata.* (legacy) o sin prefijo. El form attributes (JSON) del lote se fusiona con los de fila (gana la fila en conflicto de clave). CSV simple (solo tax_id + type): enviá country (ISO2) en el form del lote — obligatorio. No hace falta columna country_code. CSV custom: requiere mappingId (mapeo guardado en el dashboard).
  • Columnas de enrichment por fila aplican en ambos modos; depth / accionistas solo en automatic.

Enrichments en relacionados por fila (CSV plataforma)

Opcional — solo modo automatic. Prefijo relationship_ (alias plural relationships_).
ColumnaDescripción
relationship_execute_all_active_enrichmentstrue = todos los activos en accionistas/relacionadas; false = solo datos básicos. Reemplaza la política del lote (childEnrichmentPolicy) para esa fila.
relationship_enrichments_companyCódigos de proveedor para hijos tipo empresa (separados por , o ;)
relationship_enrichments_personCódigos para hijos tipo persona
relationship_enrichment_group_refsGrupos de marketplace (opcional)
relationship_omit_enrichmentsAlias de relationship_exclude_enrichments. Códigos a omitir del conjunto final (también con execute_all_active=true). Si es la única columna relationship_* en la fila, se fusiona con la política del lote en lugar de reemplazarla.
relationship_exclude_enrichmentsIgual que relationship_omit_enrichments (nombre legacy).
Paytime / lotes con childEnrichmentPolicy custom: omití relationship_execute_all_active_enrichments del CSV si querés que aplique la política del formulario paso 2. Usá relationship_omit_enrichments por fila solo para excepciones puntuales. Ejemplo omit en accionistas (all active del lote, menos sanciones globales en hijos):
tax_id,type,country_code,depth,relationship_omit_enrichments
67250861000107,company,BR,1,global_gueno_sanctions_enrichment

CSV custom

Columnas distintas al formato plataforma → mappingId obligatorio.

Campos del formulario

CampoObligatorioDescripción
fileCSV
mappingIdCondicionalCustom; opcional con formato plataforma
entityImportModeNomanual (default) o automatic
countryCondicional (obligatorio en la práctica)ISO2 del lote. Obligatorio si el CSV no trae country_code en una fila (CSV simple típico). Respaldo opcional si todas las filas incluyen country_code.
riskMatrixPersonIdNoUUID — ambos modos
riskMatrixCompanyIdNoUUID — ambos modos
skipRulesExecutionNotrue / false
stopOnFirstErrorNotrue / false
autoExecuteIntegrationsNoJSON — manual: enrichments opcionales; automático: default todos activos
autoExecuteIntegrationsShareholdersNoJSON a nivel lote — solo automático + depth > 0. Por fila: columnas relationship_* en CSV o campo en bulk JSON.
childEnrichmentPolicyNoall_active (default), by_root_type o basic_only — ver Enrichments en hijos y monitoreo.
monitoringApplyToRelationshipsNotrue / false — si false, monitoring solo en entidades principales. Default true con depth > 0 si se omite.
depthNo0–5 — solo automático
monitoringNoJSON — ambos modos
reportRecipientEmailsNoJSON array
emailLocaleNoen / es / pt

Enrichments en hijos y monitoreo

Con entityImportMode=automatic y depth > 0 se crean accionistas (raíz empresa) o entidades relacionadas (raíz persona). Dos campos del lote controlan enrichments y watchlist en esos hijos:
childEnrichmentPolicyEntidad principalEmpresa → accionistasPersona → relacionadas
all_active (default)Según configTodos los enrichments activos del tipo del hijoIgual
by_root_typeSegún configTodos los activos excepto global_gueno_sanctions_enrichmentSolo datos básicos del snapshot del proveedor de la raíz
basic_onlySegún configSolo datos básicosSolo datos básicos
monitoringApplyToRelationships: con false, el JSON monitoring aplica solo a la entidad principal (monitoring.main). Recomendado false con by_root_type cuando la raíz entra a monitoreo de sanciones pero los hijos no. Ejemplo (CSV mixto, depth 1):
-F 'entityImportMode=automatic' \
-F 'depth=1' \
-F 'childEnrichmentPolicy=by_root_type' \
-F 'monitoringApplyToRelationships=false' \
-F 'monitoring={"main":{"global_gueno_sanctions_enrichment":{"watchlist":true}}}'
Un autoExecuteIntegrationsShareholders por fila en bulk JSON o columnas relationship_* en CSV sigue pisando la política del lote para ese ítem.

Manual vs automático

ManualAutomático
Datos básicos Nosis/CPFNo
suggested_nameObligatorioRecomendado
País (ISO2)Obligatoriocountry del lote y/o country_code por fila (gana la fila)Igual (automático: solo AR, BR, CL)
EnrichmentsOpcionalesDefault todos activos
Matrices de riesgo
depth accionistasNoSí (0–5)
PaísesCualquier ISO2 válidoAR, BR, CL

Límites

Valor
Archivos por request1 CSV (campo file)
Máx. filas por importSegún plan de la org (overview — Límites por plan): Freemium 4.000 → Enterprise 100.000
Tope servidor (opcional)BULK_AUTOMATIC_ENTITY_MAX_ITEMS puede bajar el límite del plan en este endpoint
Supera límite400 TOO_MANY_ITEMS

Default si omitís modo

EndpointDefault
POST /batch-import/import/entitiesmanual

Hub vs API

FlujoEndpointDefault
Pantalla EntidadesEste endpoint (POST /batch-import/import/entities)UI (automático → entityImportMode=automatic)
API multipartPOST /batch-import/import/entitiesManual
CustomPOST /batch-import/import/entities + mappingIdSelector UI
Ver también: Importaciones masivas.