Idioma configurável de validação
POST /api/kyc/validations agora aceita o campo opcional language, assim como
a criação de sessões biométricas. O idioma do request prevalece sobre o padrão
da organização; se nenhum estiver configurado, a interface hospedada detecta o idioma do dispositivo.Veja Criar validação KYC e
Sessão biométrica incorporada.Reativação segura de onboarding
As solicitações de documentos podem usar lembretes automáticos e um encerramento final aprovado por um operador. O link Continuar cadastro registra a intenção e executa a análise novamente sem reativar diretamente a entidade.Ver endpoint de reativação.APIMatrizes de riscoData listsWebhooks
Organizações pai podem compartilhar matrizes, listas e webhooks ao vivo com canais filhos diretos
Compartilhar matrizes, listas e webhooks com canais
O holding pode selecionar explicitamente quais filhas diretas do mesmo ambiente recebem cada matriz, data list tenant ou webhook. O canal selecionado vê o mesmo UUID (e os mesmos itens da lista ou o mesmo secret do webhook). Campos de catálogo:origin (local | parent), readOnly, sharedEnabled.
Atribuir ou executar uma matriz do pai, e disparar um webhook do pai, exigem o
opt-in do canal (POST /risk-matrices/{id}/child-share,
POST /data-lists/{id}/child-share e POST /webhook-config/{id}/child-share).
Escrever uma linha do pai responde 403
SHARED_RESOURCE_READ_ONLY. O payload do webhook leva organizationId do canal.
Ver Listar matrizes de risco,
Listar data lists e
Configuração de webhooks.APITransaçõesInvestigações
As transações agora podem ser reportadas manualmente em uma categoria de investigação
Reportes manuais de risco transacional
Analistas podem usar Reportar risco em uma transação para classificá-la em uma categoria ativa, como Fraude ou AML. A Gu1 cria um alerta sem regra; o analista escolhe criar uma investigação ou consolidar em uma compatível do sujeito selecionado. A decisão é auditada, o motivo é opcional, o status financeiro não muda e nenhum risk analysis audit é criado artificialmente. A transação mantém os IDs do alerta e da investigação, bloqueia reportes duplicados e permite voltar ao caso.APIServiçosArgentina
Accounts-count de holder intelligence passa a incluir estimativas demográficas do CUIT
Demografia CUIT no accounts-count
Totais CBU/CVU agora inclui o objeto aditivocuitDemographics (coorte etária, estrangeiro provável,
gênero / tipo de contribuinte inferidos). Calculado em tempo de resposta a partir dos
dígitos do CUIT — baixa confiança; não prova idade nem nacionalidade. Os totais de
contas e os paths de regras em services.holder_intelligence.* permanecem iguais.O Rule Builder também adiciona tax_id_demographics_matches em campos CUIT: um único
configurador combina faixa etária (sobreposição ou totalmente contida) e estrangeiro
provável (confiança média ou alta). O cálculo é local, não consulta nem cobra Holder
Intelligence e não altera os operadores tax_id_age_* existentes. As templates de
Holder Intelligence oferecem essa pré-configuração como filtro opcional; quando fica
vazia, as condições originais permanecem inalteradas.CNAE principal nas fichas de empresas brasileiras
A criação automática de entidades agora copia a atividade econômica principal normalizada paraentityData.company.cnae, cnaeDescription e para a descrição compatível
industry. Os integradores não precisam mais de outra leitura de enrichment para
obter o CNAE principal depois de criar a empresa.GET de enrichment normalizado e dados atuais
Dois endpoints de leitura passam a estar documentados (já existiam; isto é documentação, não um contrato novo):- Obter enrichment normalizado —
GET /entities/{id}/normalized-enrichment. Dossiê Gu1NormalizeType(RootData+ consolidadores + summaries). 404NOT_FOUNDse a entidade ainda não tem linha normalizada. - Obter dados atuais de enrichment —
GET /entities/{id}/enrichment-data. Últimos payloadsmapped/rawpor código de integração. Se a entidade existe mas não há snapshot, HTTP 200 comhasEnrichmentData: false.
entities:read.statusIds nos in-list do CPF
As checagens de membership do CPF agora devolvem os status das operações, além de count e dos valores:- CUIT in-list:
statusIds,asRecipientStatusIds,asInitiatorStatusIds. - Account in-list:
statusIds.
1 (caso carregado), 2 (caso confirmado como fraude), 3 (transação genuína). São calculados na mesma passagem do COUNT, então o custo e a latência esperados não mudam. Com availableCount=false chegam como null, igual a count.Os campos são aditivos: um integrador que envia a mesma request de ontem recebe a mesma resposta mais essas chaves.Em regras, services.cpf.status_ids (e suas variantes por papel e por conta) deixou de exigir o lookup completo: resolve com o mesmo in-list de count.Além disso, as condições de membership (services.cpf.in_list, services.cpf.hit, services.cpf.cbu.in_list, services.cpf.cvu.in_list, services.cpf.account.in_list, services.cpf.account.hit) aceitam o modificador opcional serviceCpfStatusIds no corpo da condição:value: false) não é afetada. É aditivo: uma regra existente sem o campo se comporta igual.Mensagens error para integradores
Na criação automática de entidades (síncrona, proxy/webhook e creationFailed[]), o campo error é sempre em inglês. Para ramificar, use code (por exemplo UPSTREAM_CREDITS_ERROR, DOCUMENT_RESTRICTED, INVALID_TAX_ID). O dashboard continua localizando esses códigos para o operador.Quando os dados básicos falham e a entidade não é criada, enrichmentFailed permanece [] (esse array é só para enrichments extras em entidade persistida). O campo aditivo enrichmentFailedDetails lista cada tentativa (primário + fallbacks) com providerCode, code e errorMessage. A mesma lista vai aninhada na linha de creationFailed[].A Gu1 agora pode habilitar expressamente a criação de menores com o nome provisório Person <taxId>. Quando a fonte primária identifica o menor, a entidade é criada imediatamente com attributes.isMinor: true, sem novas tentativas, fallbacks ou enrichments adicionais. A análise de risco é executada normalmente. A configuração fica desativada por padrão.Rotas de contas por external ID e tax ID
GET/POST /entities/{id}/accounts e PATCH/DELETE /entities/{id}/accounts/{accountId} continuam usando o UUID da Gu1. As mesmas operações existem em:/entities/by-external-id/{externalId}/accounts/entities/by-tax-id/{taxId}/accounts
/{accountId} em PATCH/DELETE). {accountId} continua sendo o UUID da conta na Gu1. A busca por tax ID ignora pontuação e maiúsculas (mesma chave alfanumérica da unicidade no nível da organização). Consulte Contas de uma entidade.Identificação fiscal KYB na Espanha (autônomos)
ComcountryCode: ES e type: company, taxId agora aceita NIF (8 dígitos + letra, ex. 74387028Z) e NIE (X/Y/Z + 7 dígitos + letra) além do CIF. Autônomos antes falhavam com INVALID_TAX_ID / “Invalid CIF format”.Consulte Requisitos por país e Formatos de Tax ID.Contas de entidades
As entidades pessoa e empresa agora podem ter várias contas financeiras em moedas como USD, ARS e BRL. Os novos endpoints CRUD aceitam ID da conta do cliente, status, CBU/CVU, IBAN, número genérico, alias e uma conta principal por moeda. O painel inclui a aba Contas, seletores de país e tipo, e eventos de conta traduzidos na timeline.accountType agora é um enum canônico para contas bancárias, poupança, corrente, carteira, pagamento, investimento, crédito e operações institucionais. POST e PATCH retornam 400 VALIDATION_ERROR para valores desconhecidos. Valores históricos fora do enum são preservados em metadata.legacyAccountType e normalizados para other.Consulte Contas de uma entidade.Espera de rate limit no body do 429
Quando uma API key excede a cota,message inclui quantos minutos faltam (p. ex. Try again in 17 minutes.). O JSON também inclui retryAfterMinutes (teto de retryAfter em segundos). retryAfter e Retry-After continuam em segundos. A janela ainda começa no primeiro request do ciclo, não em horas do relógio.Veja Autenticação.Linhas automáticas vs manuais
Importar entidades documenta queautomatic é o mesmo pipeline que Criar entidade automática: se o passo de dados básicos falhar, a linha não é criada e o job segue (salvo stopOnFirstError). Enrichments extras que falham depois de dados básicos OK não desfazem a entidade. Em manual a alta usa suggested_name primeiro; se enrichments opcionais falharem, a ficha permanece.Veja também Importações em lote.Importações em loteEntidadesTransaçõesAPI
Teto de 20k entidades, um job vivo por org e vagas globais
Concorrência de importações em lote e teto de linhas de entidades
Importações CSV de entidades têm teto de 20.000 linhas por request (os limites de plano ainda valem abaixo disso;BULK_AUTOMATIC_ENTITY_MAX_ITEMS só pode reduzir o teto). Arquivos de transação continuam em até 5 × 100.000.Cada organização pode ter um job vivo (queued ou running) por tipo de importação. Um segundo POST do mesmo tipo retorna 409 JOB_IN_PROGRESS com jobId. No máximo um job pode esperar (queued) por organização: se já há um na fila de qualquer um dos tipos, um POST do outro tipo retorna 409 JOB_ALREADY_WAITING. Transações e entidades não rodam ao mesmo tempo na mesma organização: um POST do outro tipo retorna 202 queued com code: "QUEUED_WAITING_PREVIOUS_JOB" e queue.waitingForOrgJob: true somente quando o outro tipo está running e ninguém já está esperando. Começa quando o job atual termina. No máximo duas organizações processam o mesmo tipo ao mesmo tempo; as demais recebem 202 com code: "QUEUED_WAITING_SLOT" e queue: { globalSlots, running, waitingAhead, waitingForOrgJob } — nunca 409 pelo teto global.O message do 202 explica por que está na fila, com code (QUEUED_WAITING_PREVIOUS_JOB ou QUEUED_WAITING_SLOT). O mesmo motivo fica na linha do job em metadata.queueWaitReason (previous_job ou global_slot) para o histórico de importações exibir enquanto o status continua queued. Não vai no JSON do 202.Jobs de transação permanecem running até terminar a avaliação de regras enfileirada quando executeRules é true. Importações de eventos de usuário não mudam.Veja Importações em lote e Importar entidades.Retenção por arquivo no histórico
As respostas dos jobs de exportação agora incluemfileExpiresAt, que aceita null. Esse valor significa que o arquivo armazenado não expira; linkExpiresAt continua descrevendo apenas o link assinado enviado por e-mail.Novas exportações de entidades e transações permanecem disponíveis no histórico sem expiração. Os demais tipos mantêm seu período de retenção e os arquivos existentes preservam a expiração anterior. Veja Exportação em massa de entidades e Jobs de exportação de relatórios.Fechamento de importações relacionadas
postImportActions.run_risk_matrix_filtered agora aceita sourceImportJobId. Após a conclusão do arquivo atual, a Gu1 pode executar a matriz nas entidades created de uma importação anterior selecionada, inclusive nas entidades sem relação no arquivo atual. O lote anterior é validado dentro da mesma organização e deve ter seu relatório completo disponível.O novo escopo onlyWithoutRiskMatrixExecution=true executa a matriz em todas as entidades do tipo selecionado sem uma execução de matriz registrada. Depois de processadas, essas entidades não são selecionadas por importações posteriores.É um campo opcional e aditivo e não pode ser combinado com relatedEntitiesOfCreatedEntitiesOnly=true. Veja Importar entidades.Dispositivos de uma entidade e suas relações diretas
O novo endpointGET /devices/entity/{entityId}/investigation-context retorna dispositivos agrupados por entidade para telas de investigação. Use includeRelatedEntities=true para incluir relações diretas ativas em ambas as direções; por padrão, retorna somente a entidade investigada.É um endpoint aditivo. As consultas existentes da listagem de dispositivos não mudam. Veja Listar dispositivos de uma entidade.jobFailure.code: ARTIFACT_UPLOAD_FAILED e QUEUE_ERROR
Quando um lote era registrado mas morria antes de iniciar — porque não foi possível salvar seu payload/arquivo, ou porque a fila rejeitou o enfileiramento — o job terminava em failed com jobFailure.code: "WORKER_ERROR", e o motivo real ficava apenas no texto livre da mensagem. Esses dois casos agora têm código próprio:ARTIFACT_UPLOAD_FAILED— não foi possível armazenar o payload ou o arquivo de origem, então o worker não tinha o que retomar.QUEUE_ERROR— a fila rejeitou o enfileiramento e o job nunca iniciou.
jobFailure.code no status do job e em failures (JSON), e são os mesmos que o POST de importação já retornava em error.code.Mudança aditiva: se você faz switch em jobFailure.code, esses valores antes chegavam como WORKER_ERROR. Jobs antigos não são reescritos.Ver Códigos de falha de importação.validate-csv: avisos por linha em mapeamentos de transação
A pré-checagem de mapeamentos transaction agora percorre o arquivo inteiro (até 50.000 linhas de dados) em vez das 50 primeiras, e confere os conjuntos fechados de type, status, paymentMethod e reason — antes um enum sem mapeamento só aparecia com o job de importação já rodando.Mudanças aditivas na resposta 200, sem quebra de contrato:- Novo
totalRowsna raiz, ao lado dosampledRowsque já existia. - Cada entrada de
warningspode trazerfield,value,allowedValueseoccurrences. Oscode,message,rowecolumnexistentes não mudam. - Novo código de aviso
INVALID_ENUM_VALUE. Para códigos desconhecidos, usemessagecomo fallback. - Os avisos são agrupados por problema em vez de emitidos por linha: uma entrada informa a primeira linha afetada mais
occurrences. Se você contavawarnings.lengthcomo “linhas com problema”, leiaoccurrences.
ok continua true em mapeamentos de transação e a importação segue permitida. Nada muda no que é importado.Ver Validar CSV.Novo status de entidade: awaiting_information
Entidades pessoa/empresa aceitam o valor de ciclo de vida awaiting_information (espera de dados do cliente — em geral documentos pedidos no onboarding). Não é pending_verification (KYC/KYB de identidade pendente).- Você pode enviar
status: "awaiting_information"no create ou PATCH como qualquer outro valor de ciclo de vida. - O analista de onboarding define este status quando envia o e-mail de pedido de documentos e guarda o status anterior no pedido. Quando o merchant envia os documentos (ou o operador aceita/descarta o intake), o Gu1 restaura esse status — salvo se um operador o tiver alterado ou travado enquanto esperava.
awaiting_informationnão bloqueia operações comoblocked/suspended/rejected.
Serviço marketplace: Central de Prevenção de Fraude (CPF)
Novo códigoar_gueno_cpf_service. Gu1 expõe lookups CPF (CUIT + CBU/CVU receptor) com checks in-list, lookups completos, batches e detalhe de operação.- Base:
/api/integration-services/ar_gueno_cpf_service - Regras:
services.cpf.* - In-list (
availableCount=true): também retorna valores acumulados (totalAmount, valores por papel) - Distinto da Central de Devedores BCRA
Relatório de entidade: risco vigente e screening AML explícitos
GET /entities/{id}/export-data adiciona dois objetos e muda a semântica de checks[]. O PDF (download do painel, POST /entities/{id}/export e o envio por e-mail) reflete os mesmos dados.riskSummary(novo): risco que o relatório apresenta como vigente.modeémanual,automaticounot_evaluated. Com override manual ativo,effectivetraz o score manual,manualinclui justificativa, usuário, data e score anterior, eautomatic.supersededByManualmarca o score da matriz como histórico. Antes o relatório mostrava o score da matriz mesmo quando o operador havia definido o risco manualmente.amlScreening(novo): uma linha por fonte de listas commatchStatus,totalHits/relevantHits,listNames,reportedRiskLevel(valor bruto recebido, incluindounknownquando é o valor retornado) eeffectiveRiskLevel+riskLevelSource(nível derivado das correspondências quando necessário internamente). O PDF mostra oreportedRiskLevelquando existe.checks[]: passa a incluirscreeningType,executionStatus(completed/failed),matchStatuseeffectiveRiskLevelopcional.matchStatuspode serundetermined: um check sem screening normalizado já não é apresentado como “No Match”.- Impacto para integradores: os campos são aditivos e os existentes não mudam. Se você inferia “sem correspondências” a partir de
checks[], leiaamlScreeningouchecks[].matchStatuse trateundeterminedcomo inconclusivo.
Transações: comprimento do MCC relaxado
destinationDetails.mcc na criação de transações agora aceita 3 ou 4 caracteres (antes exatamente 4). Integradores podem enviar valores como "742" ou "0742". A forma preferida continua sendo o string ISO 18245 de 4 dígitos quando disponível.Ver Criar transação.AML Crypto: paridade do fluxo do cliente
Gu1 AML Crypto (/api/aml-crypto) agora alinha o fluxo de produto para screening de wallets/transações:- Endpoints de execução respondem
{ success, data }comcheckIdopcional quando um snapshot é gravado. GET /aml-crypto/checkssuporta filtros + paginação (total,limit,offset).GET /aml-crypto/checks/:idretorna um check por organização.- Permissões:
aml_crypto:read(histórico) eaml_crypto:execute(consultas).
POST /automations/from-template cria sempre desabilitada
As automações criadas a partir de um modelo agora são persistidas sempre com enabled: false, independentemente do valor de enabled na definição do modelo. Antes a maioria dos modelos do catálogo era criada ativa e podia disparar no próximo evento correspondente antes de você revisar destinatários, matriz de risco ou filtros.- Impacto para integradores: após
from-template, ative explicitamente comPOST /automations/:id/toggle. - Não há mudança em campos de request nem de response.
Modelo de automation: monitoramento de entidades (agendado)
- Novo modelo
entity_monitoring_scheduled: cron →fetch_entities(filtros pré-configuráveis) →run_risk_matrix(matriz escolhida). Criada desabilitada. - Knobs de pré-config: frequência/hora/fuso, builder de filtros, limite do listado,
riskMatrixId.
Modelos de automation: pré-config + alerta → email
GET /automations/templatespode incluirparameterDefinitions(path+mirrorPathsopcionais).POST /automations/from-templateaceitaparamValuesopcional. Params obrigatórios ausentes → 400.- Novo modelo
alert_created_email_notify: emalert_created, envia email comsend_push_notification(regras, severidades, destinatários, modelo). Criada desabilitada.
Presets editáveis + preview + CSV/PDF
Os presets de relatórios agora podem ser atualizados comPATCH /report-presets/:id (name, description, params; templateCode fixo). Há POST /report-templates/:code/preview (CSV/PDF com dados de exemplo) e o catálogo admite CSV/PDF em templates bulk e alerts_by_rules. Ver Presets e Modelos.Gerar relatório → async S3 + Downloads
Gerar (execução de modelo ou preset) sempre enfileira uma exportação em segundo plano para object storage e responde 202 comjobId. Baixe em Relatórios Downloads via Jobs de exportação de relatórios (GET /report-export-jobs).alerts_by_rulesdeixa de devolver um XLSX síncrono oucontentBase64na resposta do run.- A automation
send_report/ Gerar relatório priorizareportPresetId; comsendEmailopcional (+recipientEmails) também envia o arquivo por e-mail. - Investigações, ficha da entidade (PDF) e Metrics Hub com
delivery: "download"não retornam maisskippedpor falta de destinatários: enfileiram o job e o arquivo fica em Descargables. Os relatórios de ficha e métricas aparecem comkind: "documents".
API de presets de relatórios
Organizações podem salvar configurações congeladas de modelos Gu1 viaGET/POST /report-presets, GET/DELETE /report-presets/:id e POST /report-presets/:id/run. Os presets são imutáveis após a criação (só excluir), com limite de 50 por org, e habilitam download em um clique e automações send_report. Ver Presets de relatórios.API de templates de relatórios
Gu1 agora expõeGET /report-templates, GET /report-templates/:code e POST /report-templates/:code/run. Relatórios de alertas, entidades, transações e investigações expõem condições campo → operador → valor, incluindo Tax ID em listas personalizadas, idade, PEP, sanções, mídia adversa, MEI e processos legais criminais. As condições podem ser congeladas em presets da organização. Os modelos ambíguos de carteira/variações de titulares não fazem parte do catálogo. Ver Modelos de relatórios.WorkflowsInvestigações
O trigger investigation_status_changed cobre todas as transições e expõe o status anterior
Automações por mudança de status de investigação
O disparadorinvestigation_status_changed agora é emitido em toda transição de status do caso, não apenas quando o status é alterado via API.- Novas origens que disparam automações: avançar ou voltar de etapa (Em progresso ↔ Pendente de revisão e fechamento por etapa), reabertura de um caso fechado, ações de agente, a ação
change_status/start_investigationde outra automação e o pipeline automático de resolução. Nenhuma delas emitia o evento antes, então automações sobrePENDING_REVIEWnunca rodavam. - Não é mais emitido quando o status não muda: reenviar o status atual (por exemplo
CLOSEDem um caso já fechado) deixa de gerar notificações duplicadas. - Status anterior no contexto: nova condição
investigation.previousStatuse nova variável de template{{investigation.previousStatus}}, além deinvestigation.transitionSourcepara saber de onde veio a mudança. - Novos templates de email de sistema por status:
investigation_in_progress_email_*,investigation_pending_review_email_*,investigation_closed_email_*einvestigation_reopened_email_*(es / en / pt). - O seletor de status nas condições agora oferece os quatro status reais do fluxo, incluindo Pendente de revisão.
Novo status de entidade: not_started
Entidades pessoa/empresa aceitam o valor de ciclo de vida not_started (equivalente ao NOT_STARTED da V2).- O padrão na criação continua
under_reviewpara não quebrar integrações existentes. - Envie
status: "not_started"no create (manual, automático ou bulk) para optar por ele. - Rótulos da matriz e regras
updateEntityStatuspodem ir denot_startedparaunder_review,active,rejected,blocked, etc. — não há passo intermediário obrigatório. - Tabela completa e fluxos de exemplo: Visão geral — Status.
Delta e % de mudança totais (CBU+CVU) em metrics
GET /integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/metrics
agora expõe totais derivados em data.metrics:totalDelta—cbuDelta + cvuDeltatotalPctChange— % sobre o estoque total no início (nullse start = 0)totalAccountsStart/totalAccountsEnd— estoque CBU+CVU nos extremos da janela
services.holder_intelligence.metrics.total_delta,
total_pct_change. Os campos por canal não mudam.autoExecuteIntegrations.enrichments é filtrado por país e tipo de entidade
Ao criar uma entidade (manual ou automática), os códigos de enriquecimento cuja ficha de
catálogo não cobre o countryCode da entidade (ou GLOBAL) e o seu type agora são
ignorados em vez de executados. Um enriquecimento do cadastro fiscal argentino nunca
consegue resolver um CNPJ brasileiro: a chamada só gerava uma falha garantida na
auditoria da entidade.- Vale para
enrichments,enrichmentGroupRefseexecuteAllActiveEnrichments, tanto na entidade principal quanto nas relacionadas (autoExecuteIntegrationsShareholders). - Não muda a habilitação por organização, os bloqueios de integração nem as cadeias de fallback: aqui só se valida a cobertura de país / tipo de entidade.
- Impacto: requisições que misturavam códigos de outro país deixam de retornar esses
provedores nos erros de
enrichment. Todo provedor válido para o país da entidade se comporta exatamente como antes.
Criar notas no dossiê da entidade
Os operadores podem adicionar várias notas em uma entidade pessoa/empresa a partir do diálogo de notas do Entity Builder (não apenas via HITL do agente contextual).POST /entities/{id}/notes— body:content(obrigatório, máx. 8000),noteTypeopcional (general|analysis|finding|recommendation),isImportantopcional (boolean). Requerentities:edit(legacyentities:write).- Cada nota guarda
source:manual(UI) ouagent(HITL / agente contextual). - Evento de auditoria
note_addedcomsource,noteType,noteIde conteúdo. GET /entities/{id}/notessem alterações (lista, mais recentes primeiro).
source=agent (linhas legacy agent_contextual são renomeadas pela migração).Novo código de falha por linha: SCIENTIFIC_NOTATION_ID
As linhas do batch de transações agora são rejeitadas quando um campo de id chega em
notação científica (ex.: 5,04E+13), o que acontece ao abrir e salvar novamente no
Excel ou no Google Sheets um CSV com ids numéricos longos (CPF, CNPJ, números de
conta). Do arredondamento sobrevivem apenas três dígitos significativos, então o id não
pode ser recuperado e quebra silenciosamente qualquer regra que agrupe por ele.- Campos verificados:
externalId,originExternalId,destinationExternalId,originTaxId,destinationTaxId. - A linha falha com o código
SCIENTIFIC_NOTATION_IDemfailures.csv/ JSONfailures[];identifier_typelista os campos afetados. - O comportamento segue
batchErrorHandlingcomo qualquer outra falha de linha (rollback_allaborta o arquivo,continue_collect_errorscria as válidas). - Impacto: arquivos que antes importavam com ids corrompidos agora reportam essas linhas como falhas. Reexporte o CSV mantendo as colunas de id como texto.
Política de erros e artefatos S3 no batch de transações
batchErrorHandling=rollback_allé o padrão (UI + upload multipart se omitido): aborta o arquivo com refs/amounts inválidos ou falhas de insert; o detalhe vai parafailures.csv(S3), sem arrays gigantes em jsonb.- O cliente pode escolher
continue_collect_errors(pular linhas inválidas e criar as válidas) oustop_keep_success. - O seletor de política também está nos imports sem mapper (TX e entidades).
- CSV de falhas: colunas
external_id,code,error,role,identifier_type,value. - Novo
GET /batch-import/jobs/{jobId}/payload: baixa opayload.jsonprocessado quando guardado (anexo autenticado). - Alinhamento: jobs de user-events e entidades seguem o mesmo modelo S3-first das transações. O kind nas respostas é
entity_batch;entity_automaticpermanece como alias de entrada.
Filtro pela última avaliação de regras
GET /transactions agora aceita os filtros ISO inclusivos opcionais
lastRiskEvaluationFrom e lastRiskEvaluationTo. Eles podem ser combinados para selecionar
transações cuja última avaliação de regras concluída com sucesso esteja dentro de um intervalo.
Transações avaliadas antes da existência desse campo são resolvidas a partir do seu histórico
de análise de risco, e a lista agora retorna lastRiskEvaluationAt.Veja Listar transações.Campos adicionais nos webhooks legacy planos de entidades
Os payloads legacy planos de webhooks de entidades agora incluem os campos aditivosriskScore e documentNumber. Os valores e mapeamentos de status existentes permanecem
inalterados.Veja Eventos de webhook de entidades.Relatório de linhas ignoradas em batch de transações
Novo endpointGET /batch-import/transaction-jobs/{jobId}/skips.csv: lista as transações que o batch não inseriu porque o externalId já existia (colunas external_id,reason). Até agora skipped era apenas um contador, e um reenvio de duplicatas parecia uma falha silenciosa.- Disponível para jobs executados com o default
skipDuplicates=true; comskipDuplicates=falseas duplicatas são resolvidas pelo banco e apenas contadas, então o endpoint retornaSKIPS_NOT_AVAILABLE. - Jobs finalizados antes deste release não têm relatório salvo (
SKIPS_NOT_AVAILABLE). - Também disponível como botão de download no histórico de importações.
Relações declarativas com tax_id duplicado (bulk)
Na importação em massa manual, se o tax_id da linha já existir e a criação for omitida, a Gu1 ainda aplica as relationships / colunas CSV related_* dessa linha (igual ao create automático). Se o vínculo (mesmo source → target + tipo) já existir, é omitido de forma idempotente.Ver Importar entidades (bulk).Vínculos a entidades existentes no create e na importação em massa
Você pode declarar relações a entidades já existentes (relatedEntityId / relatedTaxId / relatedExternalId + relationshipType + role) sem depender do depth de enrichment:POST /entitiesePOST /entities/automatic: body opcionalrelationships[](máx. 10).- Bulk CSV plataforma: colunas
related_tax_id/related_external_id/related_entity_id,relationship_type,relationship_role,relationship_as_source(uma relação por linha). - Se a contraparte não existir →
RELATED_ENTITY_NOT_FOUNDe a entidade não é criada.
security.member.environment_changed
Quando um admin atualiza o acesso prod/sandbox de um membro em Equipes (roster) em uma atribuição, a Gu1 emite um único webhook em vez de vários grant/revoke:- Evento:
security.member.environment_changed context.fromAccess/context.toAccess:"both"|"production"|"sandbox"|"none"changes.environmentAccess:{ previous, current }com os mesmos valores
security.member.environment_granted / .environment_revoked continuam existindo para fluxos de grant/revoke de um único ambiente.Ver Eventos de webhook de segurança.Vínculo de entidades: soft-link sempre, default estrito do lote inalterado
Criar TX / lote sempre tenta auto-vincular quando há match (entityId → externalId → taxId).- Default do lote (BC): omitir flags continua estrito —
validateExistingEntitypadrãotrue. Refs não resolvidas → 400 (igual a antes). linkEntityStrict=true: força hard-fail (body ou query).linkEntityStrict=false: força soft-link (não falha se faltar), mesmo sevalidateExistingEntitydiga o contrário.validateExistingEntity=false: soft-link (e agora vincula se encontrar — antes o soft do lote pulava o link).
POST /transactions (uma TX) mantém validateExistingEntity padrão false.Ver Criar lote.Código de erro: CREATION_CONTRACT_QUOTA_EXCEEDED
Quando a cota contratual de criação da organização se esgota (entidades, transações, eventos de usuário), as APIs Gu1 passam a responder 429 com o código CREATION_CONTRACT_QUOTA_EXCEEDED (substitui CREATION_QUOTA_EXCEEDED).- Mesmo status HTTP e shape do payload (
module,remainingTotal,periodKey,requested). - Falhas de linha no bulk import emitem
CREATION_CONTRACT_QUOTA_EXCEEDED; o código antigo permanece como alias depreciado parafailures.csvhistóricos.
Unicidade de tax ID (por organização)
UmtaxId ativo (normalizado alfanumérico) pode pertencer a apenas uma entidade por organização, seja person ou company.- Mesmo tipo já existe → a criação automática reutiliza essa entidade (
alreadyExisted). - Outro tipo já possui o tax ID →
409com códigoDUPLICATE_TAX_ID(sem nova linha). - Aplica-se a create manual, create automatic, PATCH de tax ID e restore de soft-delete.
- Duplicados históricos não são apagados; writes conflitantes novos são bloqueados na app e via trigger no banco.
Nova ação de regra: addFieldToCustomList
Regras de transação, pessoa e empresa podem incluir addFieldToCustomList. Ao corresponder, o motor extrai um ou mais campos do contexto avaliado e os adiciona a listas customizadas do tenant (type: custom, ativas, não globais).primaryValue são omitidos. Disponível em POST/PUT de regras universais e no Rule Builder.Bloqueio na criação (configuração de análise de risco)
As organizações podem configurar regras de bloqueio na criação em Configurações da organização → Análise de risco: campo da entidade (ex.taxId) contra uma lista custom. Se o valor estiver na lista, a criação é bloqueada: a requisição falha com 422 e código ENTITY_CREATION_LIST_BLOCK (details: ruleId, listId, fieldPath, scope, matchedValue). A tentativa bloqueada é registrada no log de auditoria como evidência.Aplica-se a POST /entities, POST /entities/automatic, importação em massa, upsert (somente criação) e criação automática via eventos SDK. Acionistas/UBO na criação automática quando o escopo da regra incluir; se um acionista for bloqueado, as entidades criadas nessa execução automática são revertidas.Endpoint dedicado para atributos
PATCH /entities/{id}/attributes — atualiza apenas atributos personalizados sem alterar outros campos.mode: merge(padrão) — chaves enviadas sobrescrevem ou criam; omitidas são mantidasmode: replace—attributesdo body substitui o mapa completo ({}limpa tudo)- Buckets aninhados por categoria na escrita
- Dispara webhook
entity.updatede matrizes com triggerentity_updatedquando configurado
Atributos personalizados armazenados como enviados (API)
Aditivo. Osattributes são armazenados exatamente como enviados em create/update/upsert/importação automática — o input aninhado não é mais achatado.- Sem categoria: valores escalares/array na raiz (ex.:
{ "phone": "..." }) — inalterado. - Categorizado: um objeto de primeiro nível agrupa suas chaves internas sob essa categoria (ex.:
{ "contact": { "phone": "..." } }). A chave do objeto é a categoria; no dashboard aparece como card de categoria. - Leitura:
GETretorna a mesma forma que foi escrita (sem achatar). - Regras / webhooks: leem a forma armazenada —
attributes.phonepara plano,attributes.contact.phonepara aninhado. Use chaves de categoria seguras como identificador.
Ativação operacional por país (merchant)
Aditivo. Ativar ou desativar países suportados por entidade sem alterar o perfil da entidade:GET /entities/{id}/country-activations— lista AR, BR, CL, CO, MX, US; linhas ausentes =deactivated(opt-in).PATCH /entities/{id}/country-activations/{countryCode}— body{ "status": "deactivated" | "activation_requested" | "activation_in_progress" | "activated" }; requerentities:edit. Transições livres. Idempotente se o status não mudar (sem webhook).- Webhook
entity.country_activation_changed— emitido em cada mudança real; incluiactiveCountryCodes, snapshotcountriesetimelinepor país; inscrever-se na config de webhooks existente.
Import batch de eventos de usuário — política de erros por linha
Aditivo. Imports CSV de eventos alinham com entidades e transações:POST /batch-import/import/user-eventsaceitabatchErrorHandling:continue_collect_errors(padrão),rollback_alloustop_keep_success.- Respostas
202incluempreflightFailuresquando linhas inválidas são ignoradas com política continue. POST /batch-import/validate-csvvalida cada linha quando o target éuser_event(rowErrors,validRowCount,invalidRowCount).
POST /rules — revisão IA síncrona em toda criação
- Regras novas ficam sempre em
in_progresscomenabled: false;status/enableddo body são ignorados no create. - A resposta inclui
aiReviewe pode levar vários segundos. - Body opcional
creationProvenance: origem (user,agent,import_json,template,bundle,api) e ids de chat do agente. - A revisão é auditada mas não debita tokens de IA.
security.member.invited / security.member.created — payload.context ampliado
Aditivo. Webhooks do ciclo de convite incluem metadados de correlação e acesso em payload.context:invitationId— correlacionarinvited→createdgranularRoleIds,granularRoleIdsSandboxincludeProduction,includeSandboxteamId,teamIdSandboxhasEnvironmentAccess— flag de acesso para a org do envelopeenvironment—"production"ou"sandbox"conforme a org do envelopeinvitedByUserId,acceptedVia(emcreated)syncPartialFailure,syncErrorMessage(emcreatedquando a configuração secundária não concluiu)
Polling de jobs batch import
Aditivo. Novo endpoint canônico para consultar um job de importação batch sem percorrer o histórico paginado.Endpoints HTTP
GET /batch-import/jobs/{jobId}— lookup direto por job id (entidades, transações e user events). Retornastatus, contadores (totalItems,succeeded,failed,skipped), timestamps ejobFailureopcional se o job inteiro abortou. Query opcionalinclude=failuresretorna o mesmo JSON dos endpoints de failures por tipo.GET /batch-import/unified-history— novo query paramjobId(correspondência exata; 0 ou 1 linha). O histórico unificado continua para listagens; useGET /batch-import/jobs/{jobId}para polling pós-upload.
Fluxo recomendado para integradores
Upload (202 + jobId) → poll GET /batch-import/jobs/{jobId} a cada 2–5 s até status terminal → buscar falhas se necessário.Ver Consultar status do job batch e Histórico unificado.Inteligência de Titulares CBU/CVU (ar_gueno_holder_intelligence_service)
Aditivo. Endpoint de totais renomeado para accounts-count (substitui cbu-count em desenvolvimento). Retorna snapshotDate, isNew, cbuCount, cvuCount e totalAccounts.Endpoints HTTP
GET /api/integration-services/ar_gueno_holder_intelligence_service/health— disponibilidade e frescor do corpus (status,corpusFreshnessDate). Sem cobrança.GET /api/integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/exists— verificação no corpus. RetornafoundesnapshotDate(nullse não encontrado). Sempre HTTP200em sucesso (incluindofound: false). Sem cobrança.GET /api/integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/accounts-count— totais CBU/CVU +isNewesnapshotDate. Cobrável por request quando o produto tem preço.GET /api/integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/metrics— lookback densificado (lookback1–180 ou presetwindoww_1d…w_180d). Query opcionaldate(YYYY-MM-DD, fim inclusive). Retorna aliases de estoque, deltas,%, variância e aceleração. Cobrável por request quando o produto tem preço. Erros:400LOOKBACK_REQUIRED/INVALID_LOOKBACK/INVALID_WINDOW/INVALID_DATE,404CUIT_NOT_FOUND,422INCOMPLETE_WINDOW/NO_INCREMENTAL_STATE.
Motor de regras
Novos campos emservices.holder_intelligence.*: found, snapshot_date, cbu_quantity, cvu_quantity, total_accounts e metrics.* com holderIntelligenceLookbackDays (1–180) por condição. Em regras de transação a janela termina em transactedAt por padrão. Métricas disparam fetch upstream cobrável separado.Ver Códigos de provedor e Serviços marketplace.Identificadores de entidade além de entityId
Aditivo — retrocompatível. Clientes que enviam apenas entityId não mudam.Criação (POST)
POST /api/kyc/validations— body aceitaentityId,entityExternalIdouentityTaxId(exatamente um).POST /api/kyc/biometric/sessions— mesmas opções.
404 NOT_FOUND se não houver entidade persistida.Leitura (GET)
GET /api/kyc/validations?entityTaxId=...ou?entityExternalId=...GET /api/kyc/biometric/sessions?entityTaxId=...ou?entityExternalId=...- KYC:
GET /api/kyc/entities/by-tax-id/:taxId/current|validations|statuse rotasby-external-id - Biométrico:
GET /api/kyc/biometric/entities/by-tax-id/:taxId/currenteby-external-id
Prévia sandbox (somente GET)
GET /api/entities/by-tax-id/{taxId}eGET /api/entities?taxId=...podem retornar dados sintéticossandboxMock: true(id: null) para números do catálogo sem linha real. Não habilita POST sem criar entidade real.
Respostas 409 aditivas para sessões / validações abertas
Sem breaking change para clientes que leem apenaserror e message. Campos opcionais novos em códigos 409 existentes:Biometria incorporada — POST /api/kyc/biometric/sessions
- Com a última sessão em
pendingouin_progress, o create sempre retorna409 ACTIVE_SESSION_EXISTS(nunca201com a mesma sessão pending). - O body inclui
activeSessionIdpara cancelar:POST .../sessions/{activeSessionId}/cancel.
Validação KYC — POST /api/kyc/validations
- Com validação aberta (
pending,in_progress,in_review), o create retorna409 VALIDATION_IN_PROGRESS. - O body agora também inclui
activeValidationIdpara cancelar:DELETE .../validations/{activeValidationId}/cancel.
includeRulesSummary no GET de uma transação
GET /transactions/{id} e GET /transactions/external/{externalId} aceitam um query param opcional:includeRulesSummary=full— Adicionapersisted.rulesExecutionSummaryda linha mais recente derisk_analysis_auditsdessa transação. Regras não são reexecutadas na leitura.
rulesExecutionSummary na leitura. Use full apenas em telas de detalhe ou debugging, não em polling em volume de listagens.Ver Obter transação e Resumo de execução de regras.Campos opcionais em rulesExecutionSummary
Quando regras transacionais usam updateEntityStatus com status de entidade origem ou destino, a API pode incluir estes campos opcionais (aditivos; clientes existentes sem alteração):rulesHit[].actions.originEntityStatus/destinationEntityStatus— configurados na regra que deu match.actionsExecuted.originEntityStatus/destinationEntityStatus— status finais de entidade aplicados na execução (junto comactionsExecuted.statuspara a transação).
Eventos security.member.* (nomenclatura unificada)
Todos os eventos de IAM sobre pessoas usam o prefixo security.member.* (não mais security.user.*, security.team.* nem security.channel.*):- Perfil / senha:
security.member.profile_updated,.password_reset,.password_generated - Equipes:
security.member.team_added,.team_removed,.team_role_changed - Canais (org filha):
security.member.channel_granted,.channel_revoked - Acesso a ambientes (production / sandbox):
security.member.environment_granted,.environment_revoked— distinguidos porcontext.environment("production"|"sandbox")
security.role.assigned / security.role.updated ambíguos.Breaking: se você assinou security.user.password_* ou outros keys antigos, migre para os equivalentes security.member.*.Ver Eventos webhook de segurança.GET /api/kyc/biometric/entities/:entityId/current
Alinhado ao KYC GET /api/kyc/entities/:entityId/current:- Retorna a última sessão biométrica da entidade (por
createdAt), qualquer status (pending,in_progress,approved,rejected, …). 200comnullquando a entidade não tem sessões biométricas (não mais404).- Na listagem,
currentSessionIdcontinua sendo apenas a última sessãoapproved.
409 ACTIVE_SESSION_EXISTS ao criar inclui activeSessionId para cancelar a sessão bloqueante sem consulta extra.Ver Sessão biométrica atual.Eventos webhook de segurança (security.*)
Nova categoria outbound para monitoramento Segurança / IAM (integrações SIEM). Inscreva-se em Webhooks → Configuração em eventos como:- Auth:
security.auth.login_succeeded,security.auth.logout,security.auth.login_failed - Membros:
security.member.invited,.created,.removed,.activated,.deactivated - Perfis:
security.role.created,.updated,.deleted,.assigned,.revoked - RBAC:
security.rbac.granular_toggled - Senha (admin):
security.member.password_reset,security.member.password_generated(antessecurity.user.password_*) - Settings:
security.settings.updated(sandbox, configurações de segurança auditadas)
actionAt, actor, affectedUser, description, changes (anterior/atual) e context (IP, user agent, scope).Não coberto: alteração de senha self-service no Clerk, MFA/SSO no Clerk, auth por API key.Ver Eventos webhook de segurança.Triggers granulares de matriz (watchFields)
Triggers entity_updated (entidades e transação atualizada em KYT) aceitam watchFields opcional: paths do motor (ex. email, phone, attributes.clientTypes, metadata.email). Vazio ou ausente = qualquer mudança dispara a matriz (retrocompatível). Com valores, a matriz roda só se pelo menos um path listado mudou.Configure no editor de matrizes (aba Triggers) ou em risk_matrices.triggers[] via API.Atualização de entidade — entity_updated ativo
PATCH /entities/{id} (e por external ID / tax ID) executa matrizes atribuídas com trigger entity_updated, salvo skipRulesExecution: true. O webhook entity.updated inclui rulesExecutionSummary. Ver Atualizar entidade.PATCH de transação com executeRules=true repassa paths alterados ao mesmo filtro.Import bulk automático — enrichments nos filhos e escopo de monitoramento
POST /batch-import/import/entities e bulk JSON aceitam (modo automático, depth > 0):childEnrichmentPolicy:all_active(padrão),by_root_typeoubasic_only.by_root_type: linhas empresa → acionistas com todos os enrichments ativos excetoglobal_gueno_sanctions_enrichment; linhas pessoa → relacionadas só com dados básicos do provedor da raiz.
monitoringApplyToRelationships: comfalse,monitoringsó nas entidades principais. Padrãotruecomdepth> 0 se omitido.
Eventos — campos de sessão do SDK e pré-login
POST /events/user agora aceita dois campos opcionais: sessionId (id de sessão do SDK, sess_...) e sdkSignals (sinais estruturados do SDK — flags de integridade e comportamento, separados do metadata). Ambos são persistidos no evento. Omiti-los mantém o comportamento anterior byte a byte.Para organizações com o SDK habilitado, um evento que traz apenas um sessionId (sem entityId/entityExternalId/taxId) agora é aceito e armazenado como evento anônimo pré-login em vez de retornar erro; é vinculado à entidade depois, no primeiro evento que trouxer sessionId e um identificador de entidade juntos. Sem o SDK habilitado, um identificador de entidade continua obrigatório (mesma resposta de antes).Eventos — novos tipos
Foram adicionados três tipos de evento do SDK:SESSION_STARTED, SESSION_IDENTIFIED, SCREEN_VIEW. Clientes existentes não são afetados.Novo endpoint — GET /sdk/config
Retorna o remote config do SDK (toggles de sinais + defaults de transporte) mais a flag sdkEnabled da organização.Veja Criar Evento de Usuário.Enrichment marketplace — erros estruturados
POST /integration-execution/marketplace/enrichment retorna objetos error mais ricos: category, retryable e statusCode opcionais.Criação automática / bulk — tax ID estrito
taxId deve ser apenas o identificador fiscal; valores fusionados com colunas extras são rejeitados com INVALID_TAX_ID.Transações — exchangeRate opcional (fallback)
POST /transactions e batch aceitam exchangeRate opcional por transação. Sem este campo, o comportamento permanece o mesmo (conversão automática).Usado somente quando a conversão automática falha. Semântica: unidades da moeda base por 1 unidade de currency; valor normalizado na base = amount × exchangeRate. rateSource: client-provided.Não conversíveis hoje (sem taxa automática): WLD (Worldcoin), ETH (Ethereum). Envie exchangeRate para valor normalizado na moeda base e regras que dependem de conversão.Ver Criar transação — Conversão de moeda.POST /entities/{entityId}/refresh — escopo unificado e sync seguro
Novos campos opcionais (retrocompatíveis quando omitidos):refreshScope:basic_data|all_active|selected(+providerCodesseselected).preserveName:truemantém o nome; omitido = sync legacy defullNamenormalizado.preserveEntityData: apenas comrefreshScope: "basic_data"—truepreenche vazios ementityData,falsesubstitui; omitido = não alterar ficha.
basic_data sempre só na entidade raiz (sem sócios), independente de depth.Ver Atualizar entidade. Payloads existentes sem esses campos mantêm o comportamento anterior.Aviso GUENO_CROSS_ENTITY_DUPLICATED
Quando Gu1 resolve referências duplicadas do provedor em outra entidade da mesma organização (metadata.kycCrossEntityDuplicates.matches):- Adiciona
GUENO_CROSS_ENTITY_DUPLICATEDawarningsda validação por sessão. - Se o provedor mapeou
approved, Gu1 define o status comoin_review(metadata.guenoCrossEntityDuplicateEscalation). - Não omitível: não pode constar em
omitWarnings(400) e bloqueia autoaprovação por omit.
omitWarnings.Gu1 Biometria (POST /api/kyc/biometric e /api/kyc/biometric/sessions)
Reautenticação após KYC aprovado: verificação por imagem ou sessão com UI hospedada (sessionUrl, iframeAllow, hostedSessionId, webhookUrl opcional, webhooks biometric.session_*, veredito Gu1 com rejectionCode). Produto global_gueno_biometric_kyc. Ver Verificação biométrica e Sessão biométrica.decision sempre inclui pares array + objeto por feature
Ao persistir (sync, webhook, ingest manual), o Gu1 normaliza decision para integradores lerem chaves singulares legacy ou arrays de forma intercambiável:id_verification↔id_verifications[0]liveness↔liveness_checks[0]face_match↔face_matches[0]aml_screening↔aml_screenings[0]ip_analysis↔ip_analyses[0]
array[0] prevalece e o objeto singular é sincronizado. Vale para GET de validação e webhooks KYC (payload.decision).Exemplos Mintlify atualizados com decision completo (sem branding de vendor; mídia como chaves kyc/...). Ver Eventos webhook KYC.Config do motor em POST /entities/{entityId}/analyze
Novo objeto opcional rulesEngineConfig: partialCoverage e omitCoverage (defaults false).Ver Analisar entidade.ejemplar em extractedData
Verificações de DNI argentino podem incluir extractedData.ejemplar (A–D) em validações KYC e registos de ID Verification (GET, sync, webhooks).Com doubleCheckRenaper: true, comparisonResults.ejemplar compara OCR vs RENAPER; mismatch adiciona RENAPER_EJEMPLAR_NOT_MATCH a warnings.Ver campos de extractedData e dupla verificação RENAPER.Dupla verificação RENAPER em validações KYC
ComdoubleCheckRenaper: true, metadata.responseDoubleChecks.renaper inclui comparisonResults, renaperBiometric (quando aplicável) e códigos RENAPER em warnings (ex.: RENAPER_TRAMITE_ID_NOT_MATCH, RENAPER_EXPIRY_NOT_MATCH) sem substituir avisos da verificação OCR KYC.Enforce (rejeição automática): somente se a verificação OCR KYC retornar o estado approved. Em in_review e rejected o chequeo é informativo e grava dados em metadata. POST /api/kyc/validations/{id}/approve a partir de in_review não reexecuta RENAPER.Ver Criar validação KYC e Aprovar validação.Produto marketplace *_check removido
- Removido: códigos
*_check,POST /integration-execution/marketplace/check, triggers/ações de regrascheck_completed/execute_check, e permissões RBACchecks:read/checks:execute. - Use em vez disso: o
*_enrichmentcorrespondente com Executar enrichment. - Compat legacy: payloads de create/import com
checks,executeAllActiveChecksou*_checkemautoExecuteIntegrations.enrichmentssão ignorados no parse.
Códigos estáveis e endpoints JSON de falhas batch
- Falhas por linha com
code+message— Catálogo. CSV inclui colunacode. - JSON:
GET /batch-import/transaction-jobs/{jobId}/failures,GET /batch-import/user-event-jobs/{jobId}/failures,GET /batch-import/entity-jobs/{jobId}/failures— incluemfailures[],jobFailureopcional,skips[]em entidades,truncated/failuresTotal(máx. 500). - CSV: mesmas rotas com sufixo
.csvpara download direto.
Atribuir matrizes de risco na atualização de entidade
PATCH /entities/{id}(ePATCH /entities/by-external-id/{externalId},PATCH /entities/by-tax-id/{taxId}): documentadosriskMatrixIds(string[]) eriskMatrixId(string | string[] | null) — mesma normalização do create. Apenas atribui matrizes; não executa o motor de regras (usar Analisar entidade ou triggers de ciclo de vida).- Mintlify atualizado em
/en/,/es/,/pt/em Atualizar entidade e Atualizar por ID externo.
configRulesExecution na criação de transação
POST /transactions: objeto opcional no bodyconfigRulesExecutioncomnotifications(boolean). Comfalse, a gu1 não envia notificações in-app da avaliação de regras (matriz / status). AçõescreateAlerte investigações permanecem iguais.- Padrão: omitir o objeto mantém o comportamento anterior na maioria das orgs (
notificationsefetivamentetrue). Paytime prod (3bc1f621-27d4-423e-9d64-86680bec2388) usanotifications: falsepor padrão. - Legacy KYT
POST /legacy/kyt/verifyTransaction: mesmo campo no body Gu2; Paytime prodnotifications: falsepor padrão se omitido. - Vale para regras sync e async (
asyncRules).
/en/ e /es/.POST /transactions e lote — campos de contraparte vinculados
Quando origem ou destino fica vinculado a pessoa/empresa (originEntityId / auto-link por external ou tax id), a gu1 sempre sobrescreve as colunas denormalizadas a partir da entidade antes do insert:originTaxId/destinationTaxId←entities.tax_idoriginExternalId/destinationExternalId←entities.external_id
POST /events/user — isNewDevice respeita o valor do integrador
- Se você enviar
isNewDevice: trueoufalse, a gu1 persiste exatamente esse valor (sem sobrescrita no servidor). - Se omitir o campo, a gu1 infere quando há
deviceId+deviceDetails(registro de dispositivos;truese o device for novo oufirstSeenAtestiver nos últimos 5 minutos); caso contráriofalse.
CSV plataforma: attributes.* e entityData.*
- Cabeçalhos com ponto (como transações nativas):
attributes.segment_tag,entityData.income,entityData.tradeName. entityData.<campo>semperson/company→ bucket conformetypeda linha.- Colunas sem prefixo permanecem em
attributes(retrocompat). - Ver Importar entidades (CSV).
Limites documentados (en / es / pt)
- Importações em lote — overview: matriz de arquivos por request, linhas por plano e manual vs automático em entidades.
- Páginas por endpoint com limites (entidades CSV, transações, eventos).
- Consulta limites em runtime:
GET /individual-organization/batch-upload-enabled.
Países na importação bulk (manual vs automático)
- Manual (
manual): qualquer ISO2 válido da plataforma (lote oucountry_code/countrypor linha). Sem pipeline Nosis/CPF. - Automático (
automatic): AR, BR e CL (dados básicos por tax ID, incl. enrichments Chile: ruts.info / BaseAPI). - Vale para
POST /batch-import/import/entities(CSV plataforma e CSV custom commappingId).
POST /batch-import/import/entities — enrichments no manual
- Modo manual multipart alinhado ao hub Manual:
autoExecuteIntegrations,monitoringe matrizes opcionais — sem pipeline Nosis/CPF. - Só CSV (sem enrichments explícitos) → entidade mínima, sem enrichments.
- Colunas CSV de enrichment por linha aplicam no manual;
depthsó no automático.
POST /batch-import/import/entities — padrão manual
- Sem
entityImportMode→manual(entidade mínima; enrichments só se pedidos). - Automático com
entityImportMode=automatic. Resposta202incluiimportMode.
POST /batch-import/import/entities — formato plataforma
mappingIdpassa a ser opcional quando o CSV usa cabeçalhos canônicos do hub (tax_id,type,country_code, … — template automático/manual).- Sem mudança para layouts custom: colunas arbitrárias ainda exigem
mappingId(mapeamento salvo). - CSV simples (
tax_id+typeapenas): enviecountry(ISO2, ex.AR) no form multipart como padrão do lote. - Paridade com transações: formato nativo → sem mapeamento; colunas custom → com mapeamento.
asyncRules ao criar transação
POST /transactions: flag opcionalasyncRulesem query ou body (padrãofalse). ComtrueeexecuteRulesdiferente defalse, a transação é criada na mesma request mas as regras rodam em background via fila de jobs. A resposta HTTP retorna na hora comrulesHit/rulesNoHitvazios, maisasyncRules: trueerulesEvaluationStatus: "queued".- Padrão inalterado: omitir
asyncRulesmantém execução síncrona erulesExecutionSummarycompleto — clientes existentes continuam iguais. - Legacy KYT
POST /legacy/kyt/verifyTransaction: mesmo flag via query ou campo no body Gu2. Paytime prod (3bc1f621-27d4-423e-9d64-86680bec2388) usa async por padrão se omitirem o flag;asyncRules=falseforça sync numa request. - Não vale para batch. Se Redis/fila indisponível, pode retornar 503
ASYNC_RULES_QUEUE_UNAVAILABLE(a transação pode já existir — conferir o body antes de reenviar).
Dupla verificação RENAPER em endpoints KYC standalone
POST /api/kyc/face-match:doubleCheckRenaperopcional (body ou query). Após face match aprovado: RENAPER biométrico + dados. RequerdocumentNumber,gender,personalNumber(fallback de entidade para DNI/gênero). Resposta comresponseDoubleChecks.POST /api/kyc/id-verification: mesmo flag; após OCR approved apenas chequeo dados RENAPER. Falha →declined+ códigos emwarnings.- Credenciais RENAPER da org (igual ao KYC por sessão). Timeout HTTP ≥ 60 s no face-match com double-check.
KYT — triggers separados: mudança de status vs atualização de campos
PATCH …/changeStatusexecuta regras/matrizes com triggerstatus_changed(trigger_transaction_status_changed), nãoupdated.PATCH /transactions/{id}comexecuteRules=truecontinua usandoupdated(trigger_transaction_updated) para alterações de metadata, deviceDetails, channel ou reason.- Migração: reconfigurar regras que rodavam na mudança de status para o novo trigger (Rule Builder: Mudança de status; matrizes:
transaction_status_changed).
Atualização parcial de transação
PATCH /transactions/{id}ePATCH /transactions/external/{externalId}: atualizarmetadata(merge superficial),deviceDetails(merge superficial emdevice_details),channel(nullable) e/oureason(enum). Requertransactions:edit.- Query
executeRules=truereexecuta regras KYT com triggerupdated— não regras de mudança de status. - Auditoria
transaction_updatede webhooktransaction.updatedcom mapachanges(incluideviceDetailsquando aplicável).
Eventos de usuário — has-events por external ID ou tax ID
GET /events/user/entity/has-events(novo): verificação sim/não sem UUID interno. Query params:entity_id,entity_external_idoutax_id(pelo menos um obrigatório). Prioridade:entity_id→entity_external_id→tax_id; tax ID com normalização (caracteres não alfanuméricos removidos).- A resposta inclui
entityIdresolvido para chamar Listar por entidade quandohasEventsfor true. GET /events/user/entity/{entityId}/has-eventscontinua suportado (contrato inalterado).
KYC por sessão — avisos de análise de dispositivo e IP
GET /api/kyc/validations/:id(e rotas de sync/webhook): o arraywarningsagora funde códigosriskdedecision.ip_analyses[].warnings[](e legacydecision.ip_analysis.warnings), além de verificação de documento, liveness, face match e AML.- Oito códigos do provedor (ex.:
PRIVATE_NETWORK_DETECTED,DUPLICATED_DEVICE_FINGERPRINT,IP_ADDRESS_IN_BLOCKLIST). Ver Códigos de aviso KYC — Análise de dispositivo e IP. - Os mesmos códigos são válidos em
omitWarningsemPOST /api/kyc/validationsao autoaprovar sessões emin_review.
warnings armazenado até o próximo sync; consulte novamente ou sincronize para preencher códigos de IP analysis em linhas antigas.ID Verification — extractedData mais completo
POST /api/kyc/id-verificatione auditoria list/get passam a persistir e devolver umextractedDatamais amplo: identidade (personalNumber,taxNumber,placeOfBirth, …),providerStatus,warningMeta(ex.: sessão duplicada), pontuações de qualidade,extraFields,mrz,parsedAddress,barcodesquando o serviço ID Verification da Gu1 os devolve.warningscontinua como array de códigos de risco para i18n; metadados estruturados de duplicado ficam emwarningMetadentro deextractedData.- URLs externas de imagem e base64 não são devolvidas; imagens enviadas estão em imagens ID Verification.
debugProviderResponseapenas em ambientes não produtivos da API Gu1 (payload de verificação sanitizado, sem imagens).
Horário operativo por entidade (global)
- Entidades: campo opcional na raiz
operationalHours(timezoneenum +weekly). Colunaentities.operational_hours. Ver Criar entidade. - Transações: enum
transaction_time_zoneampliado (fusos do Brasil).timeZoneindependente deoperationalHours.transactedAt: gravado em UTC; ISO comZinalterado para clientes atuais; datetime local +timeZoneopcional converte para UTC. - Regras: operadores
outside_entity_operational_hourseinside_entity_operational_hoursemtransactedAt(value:origin|destination).
timeZone em transações
- Banco de dados: Nova coluna nullable
time_zoneemtransactionscom enumtransaction_time_zone(valores IANA comoAmerica/Argentina/Buenos_Aires,UTC, etc.). Registros existentes permanecemnull. - API:
timeZoneopcional emPOST /transactionse criação em lote; retornado emGET /transactions/{id}eGET /transactions/external/{externalId}comostring | null.
validateExistingEntity (criação de transações)
POST /transactions: campo opcionalvalidateExistingEntity(padrãofalse). Comtrue, cada identificador de origem/destino enviado deve existir na org; senão 400INVALID_ENTITY_REFERENCESe a linha não é criada.- Lote (
POST /transactions/batch, upload, JSON): padrão continuatrue. Import permissivo:validateExistingEntity: false. - Legacy KYT
POST /legacy/kyt/verifyTransaction: mesmo campo no body Gu2.
excludeEnrichments na criação de entidades
autoExecuteIntegrations e autoExecuteIntegrationsShareholders aceitam excludeEnrichments: códigos de provedor excluídos do conjunto final de enriquecimentos (inclusive com executeAllActiveEnrichments: true).executeAllActiveChecks e checks não fazem mais parte do contrato público desses objetos; payloads legados que os enviem são ignorados no parse.Ver Criar entidade (automática).Novo: Documentação da Página de Onboarding Hospedada
Documentação completa para a Página de Onboarding Hospedada - a maneira mais rápida de implementar verificação KYC sem código.Novidades
Documentação da Página Hospedada:- ✅ Guia completo de parâmetros de personalização (branding, cores, layout)
- ✅ Configuração de regras de validação (verificação de idade, métodos de captura, detecção de duplicados)
- ✅ Regras de validação de documentos (QR/código de barras, MRZ, datas de validade, vivacidade)
- ✅ Guia de integração passo a passo com exemplos de código
- ✅ Diagrama de fluxo visual mostrando o processo completo
- ✅ Melhores práticas de segurança para gerenciamento de sessões
- ✅ Confirmação de design mobile-responsive
- 📱 Design mobile-responsive para todos os dispositivos
- 🎨 Personalização completa de cores, branding e layout
- 🔒 Diretrizes de segurança abrangentes
- 📊 Diagramas de sequência visuais para clareza
- 🌐 Informações de canal de suporte para alterações de configuração
Idiomas
Toda a documentação disponível em:- 🇺🇸 English
- 🇪🇸 Español
- 🇧🇷 Português
Impacto
- Implementação mais rápida para soluções sem código
- Orientação clara sobre opções de personalização
- Maior conscientização sobre segurança
- Melhor compreensão do fluxo da página hospedada
Refinamento de Páginas KYC Baseado em Feedback do Cliente
Grande melhoria na documentação de KYC baseada em 14 perguntas do feedback de clientes.Novidades
Documentação de Fluxo Completo:- ✅ Tabela comparativa completa: Criação Automática vs Manual
- ✅ Guia completo de configuração de Matriz de Risco com instruções do dashboard
- ✅ Esclarecimento sobre recurso de acionistas (apenas KYB, não KYC)
- ✅ Referência de códigos de provedores com exemplos de uso
- ✅ Seção detalhada de gestão de créditos com custos e fluxos de trabalho
- ✅ Explicação Webhooks vs polling manual
- ✅ Tabela comparativa KYC Completo vs Verificações Individuais
- ✅ Aviso completo sobre segurança de comparação facial para bancos/fintech
- ✅ Tabela melhorada de endpoints API com casos de uso
- ✅ Diagrama de sequência completo mostrando o fluxo completo
- ✅ Esclarecimento Sandbox vs Produção
- ✅ Tratamento de entidades duplicadas com exemplos de código
- ✅ Documentação expandida de integrationCode
- ✅ Campos opcionais marcados com exemplos (attributes, entityData)
- ✅ Exemplos de criação de entidade mínima vs completa
Idiomas
Todas as melhorias disponíveis em:- 🇺🇸 English
- 🇪🇸 Español
- 🇧🇷 Português
Impacto
- 14 perguntas de cliente respondidas inline
- 12 arquivos de documentação atualizados
- 0 links quebrados
- Experiência de onboarding de desenvolvedores melhorada
Documentação Multi-idioma Aprimorada
Estrutura de documentação melhorada com traduções completas em espanhol e português.Mudanças
- Cobertura completa de tradução para KYC, KYB e Monitoramento de Transações
- Terminologia consistente em todos os idiomas
- Exemplos específicos do idioma (CPF para Brasil, DNI para Espanha, etc.)
Idiomas Disponíveis
- Inglês (EN) - Principal
- Espanhol (ES) - Completo
- Português (PT) - Completo
Lançamento da Documentação gu1
Lançamento inicial da documentação API completa.Funcionalidades Principais
- Referência API completa para todos os endpoints
- Guias de casos de uso (KYC, KYB, Monitoramento de Transações)
- Guias de integração de webhooks
- Tutoriais interativos
- Suporte multi-idioma
Componentes
- API de entidades pessoa
- API de entidades empresa
- Fluxos de validação KYC
- Monitoramento de transações
- Motor de regras
- Matrizes de risco
- Alertas e investigações