Endpoints para descargar fallos
Alias legacy CSV entidades:
GET /entities/automatic/bulk/imports/{jobId}/failures.csv.
…/failures.csv→ archivo CSV descargable (Content-Type: text/csv)…/failures→ JSON (Content-Type: application/json)
Modelo de tres capas
Cada fallo por fila incluye
code (máquina) y message (humano). Jobs legacy pueden tener solo error en texto libre; la API normaliza al leer.
Tres resultados posibles por fila (entidades)
Duplicate por taxId — el caso que confunde
Bulk manual (default): duplicateTaxIdPolicy: skip_existing.
- Mismo
taxId+ mismotypeya existe →skipped_existing, códigoSKIPPED_DUPLICATE_TAX_ID - No aparece en
failures.csv(no es error) - Contador:
skippedExistingen historial unificado
- Entidad principal ya existía →
skipped_existingrefresh: false:SKIPPED_ENTITY_ALREADY_EXISTS— sin re-enriquecimientorefresh: true:SKIPPED_ENTITY_ALREADY_EXISTS_REFRESHED— creación omitida, re-enriquecimiento ejecutado
failed):
Códigos de fallo por fila (failures[] / failures.csv)
Ids redondeados por planilla
Abrir un CSV en Excel o Google Sheets hace que los ids numéricos largos (CPF, CNPJ, números de cuenta) se lean como números y se re-exporten redondeados:50400000000000
queda como 5,04E+13. Sobreviven solo tres cifras significativas, así que el id original
no se puede recuperar del valor.
Las filas de batch de transacciones se rechazan con SCIENTIFIC_NOTATION_ID cuando
alguno de externalId, originExternalId, destinationExternalId, originTaxId o
destinationTaxId coincide con ese patrón. El message del fallo nombra los campos
afectados, y identifier_type en failures.csv los lista.
Para evitarlo, exportá el CSV manteniendo las columnas de id como texto (en Sheets:
Archivo → Descargar → CSV sin abrir las columnas como números; en Excel: poné formato
Texto en la columna antes de importar, o usá Datos → Desde texto/CSV marcando las
columnas de id como Texto).
Códigos de skip (skips[] — solo entidades, no es fallo)
Matriz de riesgo / reglas de negocio: la ejecución de reglas ocurre después de crear la fila. Los resultados de reglas no aparecen en
failures.csv / JSON failures[] y no revierten la fila. Usá alertas, score de riesgo y timelines de auditoría.Códigos de job completo (jobFailure)
Matriz de escenarios (FAQ cliente)
Escenarios reproducibles (pruebas)
User events (fallos por fila más simples): CSV válido + mapping; una fila con campo requerido vacío →GET …/user-event-jobs/{jobId}/failures.
Entidades (manual): crear entidad con external_id=X, importar otra fila con mismo external_id → DUPLICATE_EXTERNAL_ID.
Transacciones (job-level abort): validateExistingEntity=true + batchErrorHandling=rollback_all + originExternalId=DOES_NOT_EXIST → job failed, jobFailure.code=INVALID_ENTITY_REFERENCES, detalle en failures.csv.
Transacciones (row-level skip): batchErrorHandling=continue_collect_errors + refs inválidas mezcladas con válidas → filas válidas creadas; inválidas en ENTITY_NOT_FOUND / endpoint de fallos.
Transacciones (row-level insert): batchErrorHandling=continue_collect_errors + filas válidas mezcladas con violaciones de constraint → entradas en endpoint de fallos.
Límites
- El sample JSON de fallos por fila está limitado a 500 (
truncated+failuresTotal), hidratado desdefailures.csven S3 cuando existe (jobs legacy pueden caer a DB). La descarga CSV es el listado completo.
created, skipped_existing, failed) con columna code.
Ver también: Importaciones masivas — overview.