Filtro por última evaluación de reglas
GET /transactions ahora acepta los filtros ISO inclusivos opcionales
lastRiskEvaluationFrom y lastRiskEvaluationTo. Pueden combinarse para seleccionar
transacciones cuya última evaluación exitosa de reglas esté dentro de un rango.
Las transacciones evaluadas antes de que existiera este campo se resuelven desde su
historial de análisis de riesgo, y el listado ahora devuelve lastRiskEvaluationAt.Ver Listar transacciones.Campos adicionales en webhooks legacy planos de entidades
Los payloads legacy planos de webhooks de entidades ahora incluyen los campos aditivosriskScore y documentNumber. Los valores y mapeos de estados existentes no cambian.Ver Eventos de webhook de entidades.Reporte de filas omitidas en batch de transacciones
Nuevo endpointGET /batch-import/transaction-jobs/{jobId}/skips.csv: lista las transacciones que el batch no insertó porque el externalId ya existía (columnas external_id,reason). Hasta ahora skipped era solo un contador, y una recarga de duplicados parecía un fallo silencioso.- Disponible para jobs corridos con el default
skipDuplicates=true; conskipDuplicates=falselos duplicados los resuelve la base de datos y solo se cuentan, así que el endpoint devuelveSKIPS_NOT_AVAILABLE. - Los jobs terminados antes de este release no tienen reporte guardado (
SKIPS_NOT_AVAILABLE). - También disponible como botón de descarga en el historial de importaciones.
Relaciones declarativas con tax_id duplicado (bulk)
En importación masiva manual, si el tax_id de la fila ya existe y se omite la creación, Gu1 igual aplica las relationships / columnas CSV related_* de esa fila (igual que en create automático). Si el vínculo (mismo source → target + tipo) ya existe, se omite de forma idempotente.Ver Importar entidades (bulk).Vínculos a entidades existentes en create e importación masiva
Podés declarar relaciones a entidades ya existentes (porrelatedEntityId / relatedTaxId / relatedExternalId + relationshipType + role) sin depender del depth de enrichment:POST /entitiesyPOST /entities/automatic: body opcionalrelationships[](máx. 10).- Bulk CSV plataforma: columnas
related_tax_id/related_external_id/related_entity_id,relationship_type,relationship_role,relationship_as_source(una relación por fila). - Si la contraparte no existe →
RELATED_ENTITY_NOT_FOUNDy la entidad no se crea.
security.member.environment_changed
Cuando un admin actualiza el acceso prod/sandbox de un miembro desde Equipos (roster) en una asignación, Gu1 emite un solo webhook en lugar de varios grant/revoke:- Evento:
security.member.environment_changed context.fromAccess/context.toAccess:"both"|"production"|"sandbox"|"none"changes.environmentAccess:{ previous, current }con los mismos valores
security.member.environment_granted / .environment_revoked siguen existiendo para flujos de grant/revoke de un solo ambiente.Ver Eventos de webhook de seguridad.Link de entidades: soft-link siempre, default estricto de batch sin cambio
Crear TX / lote siempre intenta auto-vincular si hay match (entityId → externalId → taxId).- Default batch (BC): omitir flags sigue estricto —
validateExistingEntitydefaulttrue. Refs sin resolver → 400 (igual que antes). linkEntityStrict=true: fuerza hard-fail (body o query).linkEntityStrict=false: fuerza soft-link (no falla si falta), aunquevalidateExistingEntitydiga otra cosa.validateExistingEntity=false: soft-link (y ahora sí vincula si encuentra — antes el soft de batch salteaba el link).
POST /transactions (una TX) mantiene validateExistingEntity default false.Ver Crear lote.Código de error: CREATION_CONTRACT_QUOTA_EXCEEDED
Cuando se agota la cuota contractual de creación de la organización (entidades, transacciones, eventos de usuario), las APIs de Gu1 responden 429 con código CREATION_CONTRACT_QUOTA_EXCEEDED (antes CREATION_QUOTA_EXCEEDED).- Mismo status HTTP y shape del payload (
module,remainingTotal,periodKey,requested). - Los fallos de fila en bulk import emiten
CREATION_CONTRACT_QUOTA_EXCEEDED; el código viejo queda como alias deprecado parafailures.csvhistóricos.
Unicidad de tax ID (por organización)
UntaxId activo (normalizado alfanumérico) puede pertenecer a una sola entidad por organización, sea person o company.- Mismo tipo ya existe → la creación automática reutiliza esa entidad (
alreadyExisted). - Otro tipo ya tiene el tax ID →
409con códigoDUPLICATE_TAX_ID(sin fila nueva). - Aplica a create manual, create automatic, PATCH de tax ID y restore de soft-delete.
- Los duplicados históricos no se borran; los writes conflictivos nuevos se bloquean en app y con un trigger en base de datos.
Nueva acción de regla: addFieldToCustomList
Las reglas de transacción, persona y empresa pueden incluir la acción addFieldToCustomList. Al hacer match, el motor extrae uno o más campos del contexto evaluado y los agrega a listas custom del tenant (type: custom, activas, no globales).primaryValue se ignoran. Disponible en POST/PUT de reglas universales y en el Rule Builder.Bloqueo en creación (configuración de análisis de riesgo)
Las organizaciones pueden configurar reglas de bloqueo en creación en Configuración de la organización → Análisis de riesgo: un campo de entidad (p. ej.taxId) contra una lista custom. Si el valor está en la lista, se bloquea la creación: la solicitud falla con 422 y código ENTITY_CREATION_LIST_BLOCK (details: ruleId, listId, fieldPath, scope, matchedValue). El intento bloqueado queda registrado en el log de auditoría como evidencia.Aplica a POST /entities, POST /entities/automatic, importación masiva, upsert (solo alta) y creación automática desde eventos SDK. Accionistas/UBO en creación automática si el alcance de la regla lo incluye; si se bloquea un accionista, se revierten las entidades creadas en esa corrida automática.Endpoint dedicado para atributos
PATCH /entities/{id}/attributes — actualiza solo atributos personalizados sin tocar otros campos.mode: merge(default) — las claves enviadas pisan o crean; las omitidas se conservanmode: replace—attributesdel body reemplaza el mapa completo ({}borra todo)- Buckets anidados por categoría en escritura
- Dispara webhook
entity.updatedy matrices con triggerentity_updatedcuando aplica
Atributos personalizados almacenados tal cual (API)
Aditivo. Losattributes se almacenan exactamente como se envían en create/update/upsert/importación automática — el input anidado ya no se aplana.- Sin categoría: valores escalares/array en la raíz (p. ej.
{ "phone": "..." }) — sin cambios. - Categorizado: un objeto de primer nivel agrupa sus claves internas bajo esa categoría (p. ej.
{ "contact": { "phone": "..." } }). La clave del objeto es la categoría; en el dashboard se muestra como card de categoría. - Lectura:
GETdevuelve la misma forma que se escribió (sin aplanar). - Reglas / webhooks: leen la forma almacenada —
attributes.phonepara plano,attributes.contact.phonepara anidado. Usá claves de categoría identificador-seguras.
Activación operativa por país (merchant)
Aditivo. Activar o desactivar países soportados por entidad sin modificar el perfil de la entidad:GET /entities/{id}/country-activations— lista AR, BR, CL, CO, MX, US; filas ausentes =deactivated(opt-in).PATCH /entities/{id}/country-activations/{countryCode}— body{ "status": "deactivated" | "activation_requested" | "activation_in_progress" | "activated" }; requiereentities:edit. Transiciones libres. Idempotente si el estado no cambia (sin webhook).- Webhook
entity.country_activation_changed— se emite en cada cambio real; incluyeactiveCountryCodes, snapshotcountriesytimelinepor país; suscribirse en la config de webhooks existente.
Import batch de eventos de usuario — política de errores por fila
Aditivo. Los imports CSV de eventos alinean con entidades y transacciones:POST /batch-import/import/user-eventsaceptabatchErrorHandling:continue_collect_errors(default),rollback_allostop_keep_success.- Respuestas
202incluyenpreflightFailurescuando filas inválidas se omiten con política continue. POST /batch-import/validate-csvvalida cada fila si el target esuser_event(rowErrors,validRowCount,invalidRowCount).
POST /rules — revisión IA síncrona en toda alta
- Las reglas nuevas quedan siempre en
in_progressconenabled: false;status/enableddel body se ignoran en create. - La respuesta incluye
aiReviewy puede tardar varios segundos. - Body opcional
creationProvenance: origen (user,agent,import_json,template,bundle,api) e ids de chat del agente. - La revisión se audita pero no debita tokens de IA.
security.member.invited / security.member.created — payload.context ampliado
Aditivo. Los webhooks del ciclo de invitación incluyen metadata de correlación y acceso en payload.context:invitationId— correlacionarinvited→createdgranularRoleIds,granularRoleIdsSandboxincludeProduction,includeSandboxteamId,teamIdSandboxhasEnvironmentAccess— flag de acceso para la org del sobreenvironment—"production"o"sandbox"según la org del sobreinvitedByUserId,acceptedVia(encreated)syncPartialFailure,syncErrorMessage(encreatedcuando la configuración secundaria no se completó)
Polling de jobs batch import
Aditivo. Nuevo endpoint canónico para consultar un job de importación batch sin recorrer el histórico paginado.Endpoints HTTP
GET /batch-import/jobs/{jobId}— lookup directo por job id (entidades, transacciones y user events). Devuelvestatus, contadores (totalItems,succeeded,failed,skipped), timestamps yjobFailureopcional si abortó el job completo. Query opcionalinclude=failuresdevuelve el mismo JSON que los endpoints de failures por tipo.GET /batch-import/unified-history— nuevo query paramjobId(coincidencia exacta; 0 o 1 fila). El histórico unificado sigue siendo para listados; usarGET /batch-import/jobs/{jobId}para polling post-upload.
Flujo recomendado para integradores
Upload (202 + jobId) → poll GET /batch-import/jobs/{jobId} cada 2–5 s hasta status terminal → descargar fallos si hace falta.Ver Consultar estado de job batch y Historial unificado.Inteligencia de Titulares CBU/CVU (ar_gueno_holder_intelligence_service)
Aditivo. Endpoint de totales renombrado a accounts-count (antes cbu-count en desarrollo). Devuelve snapshotDate, isNew, cbuCount, cvuCount y totalAccounts.Endpoints HTTP
GET /api/integration-services/ar_gueno_holder_intelligence_service/health— disponibilidad y frescura del corpus (status,corpusFreshnessDate). Sin cobro.GET /api/integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/exists— pertenencia al corpus. DevuelvefoundysnapshotDate(nullsi no existe). Siempre HTTP200en éxito (inclusofound: false). Sin cobro.GET /api/integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/accounts-count— totales CBU/CVU +isNewysnapshotDate. Cobro por request cuando el producto tiene precio.GET /api/integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/metrics— lookback densificado (lookback1–180 o presetwindoww_1d…w_180d). Query opcionaldate(YYYY-MM-DD, fin inclusive). Devuelve aliases de stock, deltas,%, varianza y aceleración. Cobro por request cuando el producto tiene precio. Errores:400LOOKBACK_REQUIRED/INVALID_LOOKBACK/INVALID_WINDOW/INVALID_DATE,404CUIT_NOT_FOUND,422INCOMPLETE_WINDOW/NO_INCREMENTAL_STATE.
Motor de reglas
Nuevos campos bajoservices.holder_intelligence.*: found, snapshot_date, cbu_quantity, cvu_quantity, total_accounts y metrics.* con holderIntelligenceLookbackDays (1–180) por condición. En reglas de transacción la ventana termina en transactedAt por defecto. Las métricas disparan un fetch upstream cobrable separado.Ver Códigos de proveedor y la sección Servicios marketplace.Identificadores de entidad además de entityId
Aditivo — compatible hacia atrás. Clientes que envían solo entityId no cambian.Creación (POST)
POST /api/kyc/validations— body aceptaentityId,entityExternalIdoentityTaxId(exactamente uno).POST /api/kyc/biometric/sessions— mismas opciones.
404 NOT_FOUND si no hay entidad persistida.Lectura (GET)
GET /api/kyc/validations?entityTaxId=...o?entityExternalId=...GET /api/kyc/biometric/sessions?entityTaxId=...o?entityExternalId=...- KYC:
GET /api/kyc/entities/by-tax-id/:taxId/current|validations|statusy rutasby-external-id - Biométrico:
GET /api/kyc/biometric/entities/by-tax-id/:taxId/currentyby-external-id
Vista previa sandbox (solo GET)
GET /api/entities/by-tax-id/{taxId}yGET /api/entities?taxId=...pueden devolver datos sintéticossandboxMock: true(id: null) para números del catálogo sin fila real. No habilita POST sin crear entidad real.
Respuestas 409 aditivas para sesiones / validaciones abiertas
Sin breaking change para clientes que solo leenerror y message. Campos opcionales nuevos en códigos 409 existentes:Biometría embebida — POST /api/kyc/biometric/sessions
- Con la última sesión en
pendingoin_progress, el create siempre devuelve409 ACTIVE_SESSION_EXISTS(nunca201con la misma sesión pending). - El body incluye
activeSessionIdpara cancelar:POST .../sessions/{activeSessionId}/cancel.
Validación KYC — POST /api/kyc/validations
- Con una validación abierta (
pending,in_progress,in_review), el create devuelve409 VALIDATION_IN_PROGRESS. - El body ahora también incluye
activeValidationIdpara cancelar:DELETE .../validations/{activeValidationId}/cancel.
includeRulesSummary en GET de una transacción
GET /transactions/{id} y GET /transactions/external/{externalId} aceptan un query param opcional:includeRulesSummary=full— Agregapersisted.rulesExecutionSummarydesde la fila más reciente derisk_analysis_auditsde esa transacción. No se re-ejecutan reglas en la lectura.
rulesExecutionSummary al leer. Usá full solo en vistas de detalle o debugging, no en polling masivo de listados.Ver Obtener transacción y Resumen de ejecución de reglas.Campos opcionales en rulesExecutionSummary
Cuando reglas transaccionales usan updateEntityStatus con estado de entidad origen o destino, la API puede incluir estos campos opcionales (aditivos; clientes existentes sin cambios):rulesHit[].actions.originEntityStatus/destinationEntityStatus— configurados en la regla que hizo match.actionsExecuted.originEntityStatus/destinationEntityStatus— estados finales de entidad aplicados en esa corrida (junto conactionsExecuted.statuspara la transacción).
Eventos security.member.* (nomenclatura unificada)
Todos los eventos de IAM sobre personas usan el prefijo security.member.* (ya no security.user.*, security.team.* ni security.channel.*):- Perfil / contraseña:
security.member.profile_updated,.password_reset,.password_generated - Equipos:
security.member.team_added,.team_removed,.team_role_changed - Canales (org hija):
security.member.channel_granted,.channel_revoked - Acceso a entornos (production / sandbox):
security.member.environment_granted,.environment_revoked— distinguidos porcontext.environment("production"|"sandbox")
security.role.assigned / security.role.updated ambiguos.Breaking: si tenías suscripciones a security.user.password_* u otros keys anteriores, actualizá a los equivalentes security.member.*.Ver Eventos webhook de seguridad.GET /api/kyc/biometric/entities/:entityId/current
Alineado con KYC GET /api/kyc/entities/:entityId/current:- Devuelve la última sesión biométrica de la entidad (por
createdAt), cualquier estado (pending,in_progress,approved,rejected, …). 200connullsi la entidad no tiene sesiones biométricas (ya no404).- En el listado,
currentSessionIdsigue siendo solo la última sesiónapproved.
409 ACTIVE_SESSION_EXISTS al crear incluye activeSessionId para cancelar la sesión bloqueante sin consulta extra.Ver Sesión biométrica actual.Eventos webhook de seguridad (security.*)
Nueva categoría outbound para monitoreo Seguridad / IAM (integraciones SIEM). Suscríbase en Webhooks → Configuración a eventos como:- Auth:
security.auth.login_succeeded,security.auth.logout,security.auth.login_failed - Miembros:
security.member.invited,.created,.removed,.activated,.deactivated - Roles:
security.role.created,.updated,.deleted,.assigned,.revoked - RBAC:
security.rbac.granular_toggled - Contraseña (admin):
security.member.password_reset,security.member.password_generated(antessecurity.user.password_*) - Settings:
security.settings.updated(sandbox, parámetros de seguridad auditados)
actionAt, actor, affectedUser, description, changes (anterior/actual) y context (IP, user agent, scope).No cubierto: cambio de contraseña self-service en Clerk, MFA/SSO en Clerk, auth por API key.Ver Eventos webhook de seguridad.Triggers granulares de matriz (watchFields)
Los triggers entity_updated (entidades y transacción actualizada en KYT) admiten watchFields opcional: paths del motor de reglas (p. ej. email, phone, attributes.clientTypes, metadata.email). Vacío o ausente = cualquier cambio dispara la matriz (retrocompatible). Con valores, la matriz corre solo si cambió al menos un path listado.Configurable en el editor de matrices (pestaña Triggers) o en risk_matrices.triggers[] vía API.Actualización de entidad — entity_updated cableado
PATCH /entities/{id} (y por external ID / tax ID) ejecuta matrices asignadas con trigger entity_updated, salvo skipRulesExecution: true. El webhook entity.updated incluye rulesExecutionSummary. Ver Actualizar entidad.PATCH de transacción con executeRules=true pasa los paths cambiados al mismo filtro.Import bulk automático — enrichments en hijos y alcance de monitoreo
POST /batch-import/import/entities e import bulk JSON aceptan (modo automático, depth > 0):childEnrichmentPolicy:all_active(default),by_root_typeobasic_only.by_root_type: filas empresa → accionistas con todos los enrichments activos exceptoglobal_gueno_sanctions_enrichment; filas persona → relacionadas solo con datos básicos del proveedor de la raíz.
monitoringApplyToRelationships: confalse,monitoringsolo en entidades principales. Defaulttruecondepth> 0 si se omite.
Eventos — campos de sesión del SDK y pre-login
POST /events/user ahora acepta dos campos opcionales: sessionId (id de sesión del SDK, sess_...) y sdkSignals (señales estructuradas del SDK — flags de integridad y comportamiento, separadas del metadata). Ambos se persisten en el evento. Omitirlos mantiene el comportamiento anterior byte a byte.Para organizaciones con el SDK habilitado, un evento que trae solo un sessionId (sin entityId/entityExternalId/taxId) ahora se acepta y se guarda como evento anónimo pre-login en lugar de devolver error; se vincula a la entidad más tarde, en el primer evento que traiga sessionId y un identificador de entidad juntos. Sin el SDK habilitado, sigue siendo obligatorio un identificador de entidad (misma respuesta que antes).Eventos — nuevos tipos
Se agregaron tres tipos de evento del SDK:SESSION_STARTED, SESSION_IDENTIFIED, SCREEN_VIEW. Los clientes existentes no se ven afectados.Nuevo endpoint — GET /sdk/config
Devuelve el remote config del SDK (toggles de señales + defaults de transporte) más el flag sdkEnabled de la organización.Ver Crear Evento de Usuario.Enrichment marketplace — errores estructurados
POST /integration-execution/marketplace/enrichment devuelve objetos error más ricos: category, retryable y statusCode opcionales.Creación automática / bulk — tax ID estricto
taxId debe ser solo el identificador fiscal; valores fusionados con columnas extra se rechazan con INVALID_TAX_ID.Transacciones — exchangeRate opcional (fallback)
POST /transactions y batch aceptan exchangeRate opcional por transacción. Sin este campo, el comportamiento es el mismo de siempre (conversión automática).Solo se usa si falla la conversión automática. Semántica: unidades de moneda base por 1 unidad de currency; monto normalizado en base = amount × exchangeRate. rateSource: client-provided.No convertibles hoy (sin tasa automática): WLD (Worldcoin), ETH (Ethereum). Enviá exchangeRate para monto normalizado en moneda base y reglas que dependen de conversión.Ver Crear transacción — Conversión de moneda.POST /entities/{entityId}/refresh — scope unificado y sync seguro
Campos opcionales nuevos (retrocompatibles si se omiten):refreshScope:basic_data|all_active|selected(+providerCodessiselected).preserveName:trueconserva el nombre; omitido = sync legacy desdefullNamenormalizado.preserveEntityData: solo conrefreshScope: "basic_data"—truecompleta vacíos enentityData,falsereemplaza; omitido = no tocar ficha.
basic_data siempre es solo entidad raíz (sin socios), sin importar depth.Ver Actualizar entidad. Payloads existentes sin estos campos no cambian de comportamiento.Warning GUENO_CROSS_ENTITY_DUPLICATED
Cuando Gu1 resuelve referencias duplicadas del proveedor en otra entidad de la misma organización (metadata.kycCrossEntityDuplicates.matches):- Añade
GUENO_CROSS_ENTITY_DUPLICATEDawarningsde la validación por sesión. - Si el proveedor mapeó
approved, Gu1 deja el estado enin_review(metadata.guenoCrossEntityDuplicateEscalation). - No omitible: no puede ir en
omitWarnings(400) y bloquea auto-aprobación por omit.
omitWarnings.Gu1 Biometría (POST /api/kyc/biometric y /api/kyc/biometric/sessions)
Re-autenticación tras KYC aprobado: verificación por imagen (POST /api/kyc/biometric) o sesión con UI hospedada (sessionUrl, iframeAllow, hostedSessionId, webhookUrl opcional, webhooks biometric.session_*, veredicto Gu1 con rejectionCode). Producto marketplace global_gueno_biometric_kyc. Ver Verificación biométrica y Sesión biométrica.decision siempre incluye pares array + objeto por feature
Al persistir (sync, webhook, ingest manual), Gu1 normaliza decision para que integradores lean indistintamente claves singulares legacy o arrays: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] gana y el objeto singular se sincroniza. Aplica a GET de validación y webhooks KYC (payload.decision).Ejemplos Mintlify actualizados con decision completo (sin branding de vendor; media como claves kyc/...). Ver Eventos webhook KYC.Config del motor en POST /entities/{entityId}/analyze
Nuevo objeto opcional rulesEngineConfig: partialCoverage (cobertura por matriz) y omitCoverage (omitir gates de cobertura). Defaults false — sin cambio vs comportamiento histórico.Ver Analizar entidad.ejemplar en extractedData
Las verificaciones de DNI argentino pueden incluir extractedData.ejemplar (A–D) en validaciones KYC y registros de ID Verification (GET, sync, webhooks).Con doubleCheckRenaper: true, comparisonResults.ejemplar compara OCR vs RENAPER; un mismatch agrega RENAPER_EJEMPLAR_NOT_MATCH a warnings.Ver campos de extractedData y doble chequeo RENAPER.Doble chequeo RENAPER en validaciones KYC
CondoubleCheckRenaper: true, metadata.responseDoubleChecks.renaper incluye comparisonResults, renaperBiometric (cuando aplica) y códigos RENAPER en warnings (p. ej. RENAPER_TRAMITE_ID_NOT_MATCH, RENAPER_EXPIRY_NOT_MATCH) sin reemplazar advertencias de la verificación OCR KYC.Enforce (rechazo automático): solo si la verificación OCR KYC devuelve el estado approved. En in_review y rejected el chequeo es informativo y deja datos en metadata. POST /api/kyc/validations/{id}/approve desde in_review no re-ejecuta RENAPER.Ver Crear validación KYC y Aprobar validación.Producto marketplace *_check eliminado
- Eliminado: códigos
*_check,POST /integration-execution/marketplace/check, triggers/acciones de reglascheck_completed/execute_check, y permisos RBACchecks:read/checks:execute. - Usar en su lugar: el
*_enrichmentequivalente con Ejecutar enrichment. - Compat legacy: payloads de create/import con
checks,executeAllActiveCheckso*_checkenautoExecuteIntegrations.enrichmentsse ignoran al parsear.
Códigos estables y endpoints JSON de fallos batch
- Fallos por fila con
code+message— Catálogo. CSV incluye columnacode. - JSON:
GET /batch-import/transaction-jobs/{jobId}/failures,GET /batch-import/user-event-jobs/{jobId}/failures,GET /batch-import/entity-jobs/{jobId}/failures— incluyenfailures[],jobFailureopcional,skips[]en entidades,truncated/failuresTotal(máx. 500). - CSV: mismas rutas con sufijo
.csvpara descarga directa.
Asignar matrices de riesgo al actualizar entidad
PATCH /entities/{id}(yPATCH /entities/by-external-id/{externalId},PATCH /entities/by-tax-id/{taxId}): documentadosriskMatrixIds(string[]) yriskMatrixId(string | string[] | null) — misma normalización que en create. Solo asigna matrices; no ejecuta el motor de reglas (usar Analizar entidad o triggers del ciclo de vida).- Mintlify actualizado en
/en/,/es/,/pt/en Actualizar entidad y Actualizar por ID externo.
configRulesExecution en alta de transacción
POST /transactions: objeto opcional en el bodyconfigRulesExecutionconnotifications(boolean). Confalse, gu1 omite notificaciones in-app de la evaluación de reglas (matriz / estado). AccionescreateAlerte investigaciones no cambian.- Default: si se omite el objeto, el resto de organizaciones mantiene el comportamiento anterior (
notificationsefectivamentetrue). Paytime prod (3bc1f621-27d4-423e-9d64-86680bec2388) usanotifications: falsepor defecto. - Legacy KYT
POST /legacy/kyt/verifyTransaction: mismo campo en el body Gu2; Paytime prodnotifications: falsepor defecto si se omite. - Aplica en reglas sync y async (
asyncRules).
/en/ y /pt/.POST /transactions y lote — campos de contraparte vinculados
Cuando origen o destino queda vinculado a persona/empresa (originEntityId / auto-link por external o tax id), gu1 siempre pisa las columnas denormalizadas desde la entidad antes del insert:originTaxId/destinationTaxId←entities.tax_idoriginExternalId/destinationExternalId←entities.external_id
POST /events/user — isNewDevice respeta el valor del integrador
- Si envías
isNewDevice: trueofalse, gu1 persiste exactamente ese valor (sin sobrescritura en servidor). - Si omitís el campo, gu1 lo infiere cuando hay
deviceId+deviceDetails(registro de dispositivos;truesi el device es nuevo ofirstSeenAtestá dentro de los últimos 5 minutos); si no,false.
CSV plataforma: attributes.* y entityData.*
- Cabeceras con punto (misma idea que transacciones nativas):
attributes.segment_tag,attributes.tags.tier,entityData.income,entityData.tradeName. entityData.<campo>sinperson/company→ bucket segúntypede la fila.- Columnas sin prefijo (
segment_tag) siguen yendo aattributes(retrocompat). - Plantillas hub actualizadas; ver Importar entidades (CSV).
Límites documentados (en / es / pt)
- Importaciones masivas — overview: matriz de archivos por request, filas por plan e manual vs automático en entidades.
- Páginas por endpoint con límites: Importar entidades (CSV), transacciones, eventos de usuario.
- Consulta límites en runtime:
GET /individual-organization/batch-upload-enabled.
Países en import bulk (manual vs automático)
- Manual (
manual): cualquier ISO2 válido de plataforma (lote ocountry_code/countrypor fila). Sin pipeline Nosis/CPF. - Automático (
automatic): AR, BR y CL (datos básicos por tax ID, incl. enrichments Chile: ruts.info / BaseAPI). - Aplica a
POST /batch-import/import/entities(CSV plataforma y CSV custom conmappingId).
POST /batch-import/import/entities — enrichments en manual
- El modo manual multipart coincide con el hub Manual:
autoExecuteIntegrations,monitoringy matrices opcionales — sin pipeline Nosis/CPF. - Solo CSV (sin enrichments explícitos) → entidad mínima, sin enrichments.
- Columnas CSV de enrichment por fila aplican en manual;
depthsolo en automático.
POST /batch-import/import/entities — default manual
- Sin
entityImportMode, el modo efectivo esmanual(entidad mínima; enrichments solo si los pedís). - Automático con
entityImportMode=automatic(+autoExecuteIntegrations,depth, etc.). - Modo manual exige
suggested_nameen cada fila (400si falta). - Respuesta
202incluyeimportModeaplicado.
POST /batch-import/import/entities — formato plataforma
mappingIdopcional con CSV formato plataforma (tax_id,type, …). Default de import:manual(ver entrada siguiente en este changelog).
asyncRules al crear transacción
POST /transactions: flag opcionalasyncRulesen query o body (defaultfalse). ContrueyexecuteRulesdistinto defalse, la transacción se crea en la misma request pero las reglas corren en background vía cola de jobs. La respuesta HTTP vuelve al instante conrulesHit/rulesNoHitvacíos, másasyncRules: trueyrulesEvaluationStatus: "queued".- Sin cambio por defecto: omitir
asyncRulesmantiene ejecución síncrona y unrulesExecutionSummarycompleto — clientes existentes siguen igual. - Legacy KYT
POST /legacy/kyt/verifyTransaction: mismo flag por query o campo en body Gu2. Paytime prod (3bc1f621-27d4-423e-9d64-86680bec2388) usa async por defecto si no envían el flag;asyncRules=falsefuerza sync en una request. - No aplica a batch. Si Redis/cola no está disponible, puede responder 503
ASYNC_RULES_QUEUE_UNAVAILABLE(la transacción puede existir — revisar el body antes de reintentar).
Doble chequeo RENAPER en endpoints KYC standalone
POST /api/kyc/face-match:doubleCheckRenaperopcional (body o query). Tras aprobar face match: RENAPER biométrico + datos. RequieredocumentNumber,gender,personalNumber(fallback de entidad para DNI/género). Respuesta conresponseDoubleChecks.POST /api/kyc/id-verification: mismo flag; tras OCR approved solo chequeo datos RENAPER. Fallo →declined+ códigos enwarnings.- Credenciales RENAPER de org (igual que KYC por sesión). Timeout HTTP ≥ 60 s en face-match con double-check.
KYT — triggers separados: cambio de estado vs actualización de campos
PATCH …/changeStatusejecuta reglas/matrices con triggerstatus_changed(trigger_transaction_status_changed), noupdated.PATCH /transactions/{id}conexecuteRules=truesigue usandoupdated(trigger_transaction_updated) para cambios de metadata, deviceDetails, channel o reason.- Migración: reconfigurar reglas que debían correr al cambiar estado al nuevo trigger (Rule Builder: Al cambiar estado; matrices:
transaction_status_changed).
Actualización parcial de transacción
PATCH /transactions/{id}yPATCH /transactions/external/{externalId}: actualizarmetadata(merge superficial),deviceDetails(merge superficial endevice_details),channel(nullable) y/oreason(enum). Requieretransactions:edit.- Query
executeRules=truere-ejecuta reglas KYT con triggerupdated— no reglas de cambio de estado. - Auditoría
transaction_updatedy webhooktransaction.updatedcon mapachanges(incluyedeviceDetailssi aplica).
Eventos de usuario — has-events por external ID o tax ID
GET /events/user/entity/has-events(nuevo): comprobación sí/no sin UUID interno. Query params:entity_id,entity_external_idotax_id(al menos uno obligatorio). Prioridad:entity_id→entity_external_id→tax_id; comparación de tax ID con normalización (sin caracteres no alfanuméricos).- La respuesta incluye
entityIdresuelto para poder llamar a Listar por entidad cuandohasEventses true. GET /events/user/entity/{entityId}/has-eventssigue soportado (contrato sin cambios).
KYC por sesión — advertencias de análisis de dispositivo e IP
GET /api/kyc/validations/:id(y rutas de sync/webhook): el arraywarningsahora fusiona códigosriskdedecision.ip_analyses[].warnings[](y legacydecision.ip_analysis.warnings), además de verificación de documento, liveness, face match y AML.- Ocho códigos del proveedor (p. ej.
PRIVATE_NETWORK_DETECTED,DUPLICATED_DEVICE_FINGERPRINT,IP_ADDRESS_IN_BLOCKLIST). Ver Códigos de advertencia KYC — Análisis de dispositivo e IP. - Los mismos códigos son válidos en
omitWarningsdePOST /api/kyc/validationsal auto-aprobar sesiones enin_review.
warnings hasta el próximo sync; volvé a consultar o sincronizá para backfillear códigos de IP analysis en filas antiguas.ID Verification — extractedData más completo
POST /api/kyc/id-verificationy auditoría list/get persisten y devuelven unextractedDatamás amplio: identidad (personalNumber,taxNumber,placeOfBirth, …),providerStatus,warningMeta(p. ej. sesión duplicada), scores de calidad,extraFields,mrz,parsedAddress,barcodescuando los devuelve el servicio ID Verification de Gu1.warningssigue siendo un array de códigos de riesgo para i18n; la metadata estructurada de duplicados va enwarningMetadentro deextractedData.- No se devuelven URLs externas de imagen ni base64; las imágenes subidas están en imágenes ID Verification.
debugProviderResponsesolo en entornos no productivos de la API Gu1 (payload de verificación sanitizado, sin imágenes).
Horario operativo por entidad (global)
- Entidades: campo opcional en raíz
operationalHours(timezoneenum +weekly). Aplica apersonycompany, manual yPOST /entities/automatic. Columnaentities.operational_hours. Ver Crear entidad, person/create y create-automatic. - Transacciones: enum
transaction_time_zoneampliado (zonas Brasil).timeZoneindependiente deoperationalHours.transactedAt: UTC en DB; ISO conZsin cambios para clientes actuales; datetime local +timeZoneopcional convierte a UTC. - Reglas: operadores
outside_entity_operational_hourseinside_entity_operational_hourssobretransactedAt(value:origin|destination).
timeZone en transacciones
- Base de datos: Nueva columna nullable
time_zoneentransactionscon enumtransaction_time_zone(valores IANA comoAmerica/Argentina/Buenos_Aires,UTC, etc.). Las filas existentes siguen ennull. - API:
timeZoneopcional enPOST /transactionsy creación en lote; se devuelve enGET /transactions/{id}yGET /transactions/external/{externalId}comostring | null.
validateExistingEntity (creación de transacciones)
POST /transactions: nuevo campo opcionalvalidateExistingEntity(defaultfalse). Contrue, cada identificador de origen/destino que envíes debe existir en la org; si no, 400INVALID_ENTITY_REFERENCESy no se crea la fila.- Batch (
POST /transactions/batch, upload, JSON): el default sigue siendotrue(validación estricta si enviás identificadores). Para import histórico permisivo:validateExistingEntity: false. - Legacy KYT
POST /legacy/kyt/verifyTransaction: acepta el mismo campo en el body Gu2 (validateExistingEntity).
excludeEnrichments en creación de entidades
autoExecuteIntegrations y autoExecuteIntegrationsShareholders aceptan excludeEnrichments: códigos de proveedor que se excluyen del conjunto final de enriquecimientos (también con executeAllActiveEnrichments: true).executeAllActiveChecks y checks ya no forman parte del contrato público de estos objetos; los payloads legacy que los envíen se ignoran al parsear.Ver Crear entidad (automática).Nuevo: Documentación de Página de Onboarding Alojada
Documentación completa para la Página de Onboarding Alojada - la forma más rápida de implementar verificación KYC sin código.Novedades
Documentación de Página Alojada:- ✅ Guía completa de parámetros de personalización (branding, colores, diseño)
- ✅ Configuración de reglas de validación (verificación de edad, métodos de captura, detección de duplicados)
- ✅ Reglas de validación de documentos (QR/código de barras, MRZ, fechas de vencimiento, vivacidad)
- ✅ Guía de integración paso a paso con ejemplos de código
- ✅ Diagrama de flujo visual mostrando el proceso completo
- ✅ Mejores prácticas de seguridad para gestión de sesiones
- ✅ Confirmación de diseño mobile-responsive
- 📱 Diseño mobile-responsive para todos los dispositivos
- 🎨 Personalización completa de colores, branding y diseño
- 🔒 Directrices de seguridad completas
- 📊 Diagramas de secuencia visuales para mayor claridad
- 🌐 Información de canal de soporte para cambios de configuración
Idiomas
Toda la documentación disponible en:- 🇺🇸 English
- 🇪🇸 Español
- 🇧🇷 Português
Impacto
- Implementación más rápida para soluciones sin código
- Guía clara sobre opciones de personalización
- Mayor conciencia de seguridad
- Mejor comprensión del flujo de la página alojada
Refinamiento de Páginas KYC Basado en Feedback del Cliente
Mejora importante en la documentación de KYC basada en 14 preguntas del feedback de clientes.Novedades
Documentación de Flujo Completo:- ✅ Tabla comparativa completa: Creación Automática vs Manual
- ✅ Guía completa de configuración de Matriz de Riesgo con instrucciones del dashboard
- ✅ Aclaración sobre función de accionistas (solo KYB, no KYC)
- ✅ Referencia de códigos de proveedores con ejemplos de uso
- ✅ Sección detallada de gestión de créditos con costos y flujos de trabajo
- ✅ Explicación Webhooks vs polling manual
- ✅ Tabla comparativa KYC Completo vs Verificaciones Individuales
- ✅ Advertencia completa sobre seguridad de face matching para bancos/fintech
- ✅ Tabla mejorada de endpoints API con casos de uso
- ✅ Diagrama de secuencia completo mostrando el flujo completo
- ✅ Aclaración Sandbox vs Producción
- ✅ Manejo de entidades duplicadas con ejemplos de código
- ✅ Documentación expandida de integrationCode
- ✅ Campos opcionales marcados con ejemplos (attributes, entityData)
- ✅ Ejemplos de creación de entidad mínima vs completa
Idiomas
Todas las mejoras disponibles en:- 🇺🇸 English
- 🇪🇸 Español
- 🇧🇷 Português
Impacto
- 14 preguntas de cliente respondidas inline
- 12 archivos de documentación actualizados
- 0 enlaces rotos
- Experiencia de onboarding de desarrolladores mejorada
Documentación Multi-idioma Mejorada
Estructura de documentación mejorada con traducciones completas en español y portugués.Cambios
- Cobertura completa de traducción para KYC, KYB y Monitoreo de Transacciones
- Terminología consistente en todos los idiomas
- Ejemplos específicos del idioma (DNI para España, CPF para Brasil, etc.)
Idiomas Disponibles
- Inglés (EN) - Principal
- Español (ES) - Completo
- Portugués (PT) - Completo
Lanzamiento de Documentación gu1
Lanzamiento inicial de documentación API completa.Funcionalidades Principales
- Referencia API completa para todos los endpoints
- Guías de casos de uso (KYC, KYB, Monitoreo de Transacciones)
- Guías de integración de webhooks
- Tutoriales interactivos
- Soporte multi-idioma
Componentes
- API de entidades persona
- API de entidades empresa
- Flujos de validación KYC
- Monitoreo de transacciones
- Motor de reglas
- Matrices de riesgo
- Alertas e investigaciones