Skip to main content

Endpoints para baixar falhas

RecursoCSVJSON
TransaçõesGET /batch-import/transaction-jobs/{jobId}/failures.csvGET …/failures
EventosGET /batch-import/user-event-jobs/{jobId}/failures.csvGET …/failures
EntidadesGET /batch-import/entity-jobs/{jobId}/failures.csvGET …/failures
Alias legacy CSV entidades: GET /entities/automatic/bulk/imports/{jobId}/failures.csv.
  • …/failures.csv → arquivo CSV para download (Content-Type: text/csv)
  • …/failures → JSON (Content-Type: application/json)

Modelo de três camadas

CamadaQuandoOnde ler
Pre-jobRequest rejeitado antes de retornar jobId (400)Body HTTP (error.code)
Job completoJob abortado (status: failed)Histórico unificadoworkerError, metadata.apiError; JSON → jobFailure
Por linhaAlgumas linhas falharam (failed > 0, job pode ser completed)CSV/JSON de falhas por tipo de job
Cada falha por linha inclui code (máquina) e message (humano). Jobs legacy podem ter só error em texto livre; a API normaliza na leitura.

Três resultados possíveis por linha (entidades)

ResultadooutcomeVai para failures.csv?Onde ver
CriadacreatedNãoJob succeeded, relatório completo
Omitida (skip)skipped_existingNãoJob skipped / skippedExisting, relatório completo, JSON skips[]
FalhoufailedSimJob failed, failures.csv / JSON failures[]

Duplicado por taxId

Bulk manual (default): duplicateTaxIdPolicy: skip_existing.
  • Mesmo taxId + mesmo type já existe → skipped_existing, código SKIPPED_DUPLICATE_TAX_ID
  • Não aparece em failures.csv
  • Contador: skippedExisting no histórico unificado
Bulk automático: entidade principal já existia → skipped_existing, SKIPPED_ENTITY_ALREADY_EXISTS Quando é falha (failed):
SituaçãoCódigo batch
Mesmo taxId, tipo diferente (person vs company)TAX_ID_TYPE_MISMATCH
Mesmo taxId+tipo com política error (API unitária)DUPLICATE_TAX_ID
Mesmo externalIdDUPLICATE_EXTERNAL_ID

Códigos de falha por linha (failures[] / failures.csv)

CódigoSignificado
VALIDATION_ERRORValidação Zod / esquema antes de persistir
PROCESSING_ERRORErro inesperado ao processar a linha
ENTITY_NOT_FOUNDEntidade referenciada não existe na org
INVALID_RISK_MATRIXMatriz inválida ou de outra org
CREATION_QUOTA_EXCEEDEDCota de criação excedida
DATABASE_INSERT_ERRORInsert rejeitado pelo PG (sem classificar)
DUPLICATE_EXTERNAL_IDMesmo externalId já existe
DUPLICATE_TAX_IDMesmo taxId + tipo (erro duro)
TAX_ID_TYPE_MISMATCHtaxId registrado sob outro tipo de entidade
CONSTRAINT_VIOLATIONOutro constraint PG (FK, check, unique)
MISSING_COUNTRYLinha sem país ISO2 válido
INVALID_COUNTRYPaís não permitido para o modo (p. ex. automatic ≠ AR/BR/CL)
ENRICHMENT_FAILEDProvedor enrichment falhou
CREATION_FAILEDNão foi possível criar a entidade

Códigos de skip (skips[] — só entidades, não é falha)

CódigoSignificado
SKIPPED_DUPLICATE_TAX_IDBulk manual: taxId+tipo já existia, linha omitida
SKIPPED_ENTITY_ALREADY_EXISTSBulk automático: entidade já existia
Matriz de risco / regras de negócio: a execução de regras ocorre depois de criar a linha. Resultados de regras não aparecem em failures.csv / JSON failures[] e não revertem a linha. Use alertas, score de risco e timelines de auditoria.

Códigos de job completo (jobFailure)

CódigoSignificado
INVALID_ENTITY_REFERENCESBatch txn: validateExistingEntity=true e refs origem/destino não resolvidas — nenhuma linha criada
TOO_MANY_ITEMSArquivo excede limite do plano
CSV_PARSE_ERRORCSV não parseável ou mapeamento falhou
MAPPING_VALIDATION_ERRORMapeamento salvo ou preflight validate-csv falhou
MISSING_REQUIRED_FIELDCampo multipart / linha obrigatório faltando antes de enfileirar
COOPERATIVE_CANCELJob cancelado durante processamento
WORKER_ERRORErro não tratado do worker

Matriz de cenários (FAQ cliente)

CenárioEm failures por linha?Código / localização típica
Coluna CSV faltando (pre-parse)Não400 antes do job
Ref entidade inválida (txn batch, validação default)NãoJob INVALID_ENTITY_REFERENCES
Duplicado txn externalId com skipDuplicates=trueNãoContado como skipped
Duplicado entity externalId (import manual)SimDUPLICATE_EXTERNAL_ID
Duplicado entity taxId (mesmo tipo, bulk default)Nãoskipped_existingSKIPPED_DUPLICATE_TAX_ID em skips[]
Duplicado entity taxId (tipo diferente)SimTAX_ID_TYPE_MISMATCH
Falha enrichment (entity automatic)SimENRICHMENT_FAILED
Campo inválido em user eventSimVALIDATION_ERROR
Erro avaliação regras / matrizNãoLinha ainda é criada

Cenários reproduzíveis (testes)

User events: CSV válido + mapping; uma linha com campo obrigatório vazio → GET …/user-event-jobs/{jobId}/failures. Entidades (manual): criar entidade com external_id=X, importar outra linha com mesmo external_idDUPLICATE_EXTERNAL_ID. Transações (job-level): validateExistingEntity=true + originExternalId=DOES_NOT_EXIST → job failed, jobFailure.code=INVALID_ENTITY_REFERENCES. Transações (row-level): batchErrorHandling=continue_collect_errors + linhas válidas misturadas com violações de constraint → entradas no endpoint de falhas.

Limites

  • Máx. 500 falhas por linha persistidas por job batch de transações (CSV + JSON podem truncar; JSON expõe truncated + failuresTotal).
Relatório completo por email (entidades): todas as linhas (created, skipped_existing, failed) com coluna code. Ver também: Importações em lote — overview.