Skip to main content
POST
/
transactions
API Reference - Monitoreo de Transacciones
curl --request POST \
  --url http://api.gu1.ai/transactions \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "externalId": "<string>",
  "type": "<string>",
  "status": "<string>",
  "amount": 123,
  "currency": "<string>",
  "paymentMethod": "<string>",
  "originEntityId": "<string>",
  "originExternalId": "<string>",
  "originName": "<string>",
  "originCountry": "<string>",
  "originDetails": {},
  "destinationEntityId": "<string>",
  "destinationExternalId": "<string>",
  "destinationName": "<string>",
  "destinationCountry": "<string>",
  "destinationDetails": {},
  "channel": "<string>",
  "reason": "<string>",
  "locationDetails": {},
  "deviceDetails": {},
  "description": "<string>",
  "category": "<string>",
  "metadata": {},
  "transactedAt": "<string>",
  "executeRules": true
}
'
{
  "transaction": {},
  "rulesResult": {},
  "rulesExecutionSummary": {}
}

Referencia canónica del endpoint

La referencia oficial del endpoint POST /transactions (estructura de respuesta, errores, campos) está en: Crear transacción (API Reference → Transacciones) En esa página encontrarás la respuesta actual: transaction es un objeto (la transacción creada) y rulesResult incluye executionTimeMs, auditId, isNewAudit y rulesExecutionSummary. Esta página añade contexto de uso para monitoreo: conversión de moneda, ejemplos por método de pago (PIX, tarjeta, multi-moneda) y campos detallados.

Endpoint: Crear Transacción

POST http://api.gu1.ai/transactions
Crea una nueva transacción. Los montos se convierten a USD cuando la moneda no es USD. Con executeRules: true (por defecto), se ejecuta el motor de reglas y la respuesta incluye rulesResult y rulesExecutionSummary.

Autenticación

Todas las solicitudes deben incluir una clave API en el encabezado Authorization:
Authorization: Bearer YOUR_API_KEY

Encabezados Requeridos

Content-Type: application/json
Authorization: Bearer YOUR_API_KEY

Cuerpo de la Solicitud

externalId
string
required
Tu identificador único para esta transacción en tu sistemaTipo: string (longitud mínima: 1)
type
string
required
Tipo de transacción. Opciones:
  • PAYMENT - Compra o pago a comerciante
  • TRANSFER - Transferencia entre cuentas/usuarios
  • WITHDRAWAL - Retiro de efectivo o débito de cuenta
  • DEPOSIT - Depósito o crédito de cuenta
  • REFUND - Reembolso de una transacción anterior
  • CHARGEBACK - Disputa de contracargo
  • REVERSAL - Reversión de transacción
  • FEE - Cargo de comisión o tarifa
  • ADJUSTMENT - Ajuste de saldo
  • OTHER - Otro tipo de transacción
Tipo: enum - 'PAYMENT' | 'TRANSFER' | 'WITHDRAWAL' | 'DEPOSIT' | 'REFUND' | 'CHARGEBACK' | 'REVERSAL' | 'FEE' | 'ADJUSTMENT' | 'OTHER'
status
string
default:"CREATED"
Estado de la transacción. Sigue un modelo de máquina de estados con estados abiertos y cerrados.Estados Abiertos (pueden transicionar a otros estados):
  • CREATED - Transacción creada (por defecto)
  • PROCESSING - Transacción en proceso
  • SUSPENDED - Transacción temporalmente suspendida
Estados Cerrados (finales, no pueden volver a estados abiertos):
  • SENT - Transacción enviada/transmitida
  • EXPIRED - Transacción expirada
  • DECLINED - Transacción rechazada/declinada
  • REFUNDED - Transacción reembolsada/reversada
  • SUCCESSFUL - Transacción completada exitosamente
Tipo: enum - 'CREATED' | 'PROCESSING' | 'SUSPENDED' | 'SENT' | 'EXPIRED' | 'DECLINED' | 'REFUNDED' | 'SUCCESSFUL' (por defecto: ‘CREATED’)Importante: Una vez que una transacción alcanza un estado cerrado, no puede volver a un estado abierto. Esto garantiza la integridad de la transacción y un rastro de auditoría apropiado.
amount
number
required
Monto de la transacción (debe ser positivo)Tipo: number (> 0)
currency
string
required
Código ISO 4217 de moneda (ej: “USD”, “BRL”, “EUR”)Tipo: string (longitud: 3)
paymentMethod
string
Método de pago utilizado para la transacciónTipo: string (enum, opcional)Valores Posibles:
  • CARD - Pago con tarjeta de crédito o débito
  • ACH - Automated Clearing House (transferencia bancaria US)
  • PIX - Sistema de pagos instantáneos de Brasil
  • TED - Transferencia bancaria brasileña (Transferência Eletrônica Disponível)
  • BOLETO - Boleto de pago brasileño
  • WALLET - Billetera digital (PayPal, Venmo, etc.)
  • SWIFT - Transferencia internacional SWIFT
  • IBAN - Transferencia bancaria basada en IBAN
  • CBU - Cuenta bancaria argentina (Clave Bancaria Uniforme)
  • CVU - Cuenta virtual argentina (Clave Virtual Uniforme)
  • DEBIN - Sistema de débito instantáneo argentino
  • GENERIC_BANK_ACCOUNT - Transferencia de cuenta bancaria genérica
  • MPESA - M-Pesa mobile money (Kenia)
  • UPI - Unified Payments Interface (India)
  • CHECK - Pago con cheque
  • ECHECK - Cheque electrónico
  • QR_CODE - Pago con código QR
  • ONLINE_PAYMENT - Pago online genérico
  • WITHDRAWAL_ORDER - Orden de retiro
Ejemplo: "PIX" o "CARD"
originEntityId
string
UUID de la entidad origen (remitente) en el sistema gu1Tipo: string (uuid, opcional)
originExternalId
string
Su ID externo para la entidad origenTipo: string (opcional)
originName
string
Nombre de la entidad origen (remitente)Tipo: string (longitud máxima: 500, opcional)
originCountry
string
Código de país ISO 3166-1 alpha-2 de la entidad origenTipo: string (longitud: 2, opcional)
originDetails
object
Información contextual sobre el origen de la transacción (dispositivo, geolocalización, cuenta, flags de seguridad). Estos campos coinciden con el schema de la API; también puedes enviar campos custom adicionales (ej. paymentDetails anidado u otras claves) y se almacenarán.Tipo: object (opcional, estructura validada; claves extra permitidas)Diferencia Clave:
  • originCountry (campo directo) = País de la entidad
  • originDetails.country = País del dispositivo/IP al momento de la transacción (puede diferir si está viajando)
Campos Soportados:Dispositivo/Técnico:
  • deviceId (string) - Identificador del dispositivo
  • deviceFingerprint (string) - Hash de huella digital del dispositivo
  • deviceType (enum) - mobile | desktop | tablet | pos | atm
  • userAgent (string) - User agent del navegador
  • ipAddress (string) - Dirección IP (formato validado)
Geolocalización:
  • country (string) - Código ISO de 2 letras
  • city (string) - Nombre de la ciudad
  • region (string) - Estado/provincia
  • latitude (number) - Latitud (-90 a 90)
  • longitude (number) - Longitud (-180 a 180)
  • timezone (string) - Identificador de zona horaria
Detalles de Pago (objeto anidado):
  • paymentDetails (object) - Información específica de pago para el origen. Puede enviar cualquier campo relacionado con el pago:
    • Detalles Bancarios/Cuenta:
      • accountNumber (string) - Número de cuenta
      • accountType (enum) - checking | savings | business | personal
      • bankCode (string) - Código del banco
      • bankName (string) - Nombre del banco
      • routingNumber (string) - Routing number (US)
      • swiftCode (string) - Código SWIFT/BIC
      • iban (string) - IBAN (International Bank Account Number)
    • Detalles PIX (Brasil):
      • pixKey (string) - Clave PIX
      • pixType (enum) - Tipo de clave PIX: email | phone | cpf | cnpj | random
    • Detalles de Tarjeta:
      • cardLast4 (string) - Últimos 4 dígitos de la tarjeta
      • cardBrand (string) - Marca de tarjeta (Visa, Mastercard, Amex, etc.)
      • cardholderName (string) - Nombre en la tarjeta
      • cardBin (string) - Primeros 6 dígitos de la tarjeta (BIN)
      • cardType (enum) - credit | debit | prepaid
      • cardCountry (string) - País emisor de la tarjeta (ISO 2 letras)
      • cardExpiry (string) - Fecha de vencimiento (MM/YY)
      • cardFingerprint (string) - Huella digital única de la tarjeta para seguimiento
    • Detalles Crypto:
      • walletAddress (string) - Dirección de wallet de criptomoneda
      • walletType (string) - Tipo de wallet (ej: “metamask”, “coinbase”)
      • blockchain (string) - Red blockchain (ej: “ethereum”, “bitcoin”)
      • tokenSymbol (string) - Símbolo del token (ej: “ETH”, “BTC”, “USDT”)
    • Wallet/Pago Digital:
      • walletId (string) - Identificador de wallet digital
      • walletProvider (string) - Proveedor de wallet (ej: “paypal”, “venmo”, “cashapp”)
      • walletEmail (string) - Email asociado con el wallet
    • Y cualquier otro campo relacionado con el pago que necesite
Referencia: Para estructuras sugeridas por método de pago (tarjeta, PIX, CBU/CVU, SPEI, PSE, DEBIN, cripto, wallet, efectivo, cheque, etc.) ver Payment Details Schema. Nada se exige; se permiten campos custom.Banderas de Seguridad:
  • isVpn (boolean) - VPN detectado
  • isTor (boolean) - Red Tor detectada
  • isProxy (boolean) - Proxy detectado
  • governmentAccount (boolean) - Bandera de cuenta gubernamental
Ejemplo:
{
  "deviceType": "mobile",
  "ipAddress": "189.123.45.67",
  "country": "BR",
  "city": "São Paulo",
  "isVpn": false,
  "paymentDetails": {
    "accountNumber": "12345",
    "accountType": "personal",
    "bankName": "Banco do Brasil",
    "pixKey": "user@email.com",
    "pixType": "email"
  }
}
Se permiten campos personalizados - el sistema validará los campos conocidos y preservará los personalizados.
destinationEntityId
string
UUID de la entidad destino (receptor) en el sistema gu1Tipo: string (uuid, opcional)
destinationExternalId
string
Su ID externo para la entidad destinoTipo: string (opcional)
destinationName
string
Nombre de la entidad destino (receptor)Tipo: string (longitud máxima: 500, opcional)
destinationCountry
string
Código de país ISO 3166-1 alpha-2 de la entidad destinoTipo: string (longitud: 2, opcional)
destinationDetails
object
Información contextual sobre el destino de la transacción (comerciante, dispositivo, geolocalización, cuenta, flags de riesgo). Estos campos coinciden con el schema de la API; también puedes enviar campos custom adicionales (ej. paymentDetails anidado u otras claves) y se almacenarán.Tipo: object (opcional, estructura validada; claves extra permitidas)Campos Soportados:Información de Comerciante:
  • mcc (string) - Merchant Category Code (4 dígitos, ISO 18245)
  • mccDescription (string) - Descripción del MCC (ej: “Restaurants”)
  • merchantId (string) - Identificador del comerciante
  • merchantName (string) - Nombre del comerciante
  • merchantType (string) - Tipo/categoría del comerciante
Dispositivo/Técnico:
  • deviceId (string) - Identificador del dispositivo
  • deviceType (enum) - pos | online | mobile | atm
  • ipAddress (string) - Dirección IP (formato validado)
Geolocalización:
  • country (string) - Código ISO de 2 letras
  • city (string) - Nombre de la ciudad
  • region (string) - Estado/provincia
Detalles de Pago (objeto anidado):
  • paymentDetails (object) - Información específica de pago para el destino. Puede enviar cualquier campo relacionado con el pago:
    • Detalles Bancarios/Cuenta:
      • accountNumber (string) - Número de cuenta destino
      • accountType (enum) - checking | savings | business | merchant
      • bankCode (string) - Código del banco
      • bankName (string) - Nombre del banco
      • routingNumber (string) - Routing number (US)
      • swiftCode (string) - Código SWIFT/BIC
      • iban (string) - IBAN (International Bank Account Number)
    • Detalles PIX (Brasil):
      • pixKey (string) - Clave PIX
      • pixType (enum) - Tipo de clave PIX: email | phone | cpf | cnpj | random
    • Detalles de Tarjeta:
      • cardLast4 (string) - Últimos 4 dígitos de la tarjeta
      • cardBrand (string) - Marca de tarjeta (Visa, Mastercard, Amex, etc.)
      • cardholderName (string) - Nombre en la tarjeta
      • cardBin (string) - Primeros 6 dígitos de la tarjeta (BIN)
      • cardType (enum) - credit | debit | prepaid
      • cardCountry (string) - País emisor de la tarjeta (ISO 2 letras)
      • cardExpiry (string) - Fecha de vencimiento (MM/YY)
      • cardFingerprint (string) - Huella digital única de la tarjeta para seguimiento
    • Detalles Crypto:
      • walletAddress (string) - Dirección de wallet de criptomoneda
      • walletType (string) - Tipo de wallet (ej: “metamask”, “coinbase”)
      • blockchain (string) - Red blockchain (ej: “ethereum”, “bitcoin”)
      • tokenSymbol (string) - Símbolo del token (ej: “ETH”, “BTC”, “USDT”)
    • Wallet/Pago Digital:
      • walletId (string) - Identificador de wallet digital
      • walletProvider (string) - Proveedor de wallet (ej: “paypal”, “venmo”, “cashapp”)
      • walletEmail (string) - Email asociado con el wallet
    • Y cualquier otro campo relacionado con el pago que necesite
Referencia: Para estructuras sugeridas por método de pago ver Payment Details Schema. Nada se exige; se permiten campos custom.Banderas de Riesgo:
  • cryptoExchange (boolean) - Es exchange de criptomonedas
  • highRisk (boolean) - Bandera de comerciante de alto riesgo
  • privateSector (boolean) - Bandera de sector privado
Ejemplo:
{
  "mcc": "5812",
  "mccDescription": "Restaurants",
  "merchantName": "Restaurant ABC",
  "country": "US",
  "highRisk": false,
  "paymentDetails": {
    "accountNumber": "98765",
    "accountType": "merchant",
    "bankName": "Bradesco"
  }
}
Se permiten campos personalizados - el sistema validará los campos conocidos y preservará los personalizados.
channel
string
El canal a través del cual se inició la transacción (máximo 50 caracteres).Tipo: string (longitud máxima: 50, opcional)Ejemplos Comunes:
  • mobile_app - Aplicación móvil
  • web_browser - Navegador web
  • pos_terminal - Terminal punto de venta
  • api - Integración API directa
  • atm - Cajero automático
  • phone_banking - Banca telefónica
  • branch - Sucursal física
  • call_center - Centro de llamadas
  • partner_api - Integración con partner
Caso de Uso: Ayuda a segmentar transacciones por canal de origen para análisis de riesgo, reportes e inteligencia de negocio.Ejemplo:
{
  "channel": "mobile_app"
}
reason
string
Razón opcional del resultado de la transacción (ej. rechazo, fallo, límite excedido). El cliente puede enviar cualquier valor del enum transaction_reason_type. Si se omite, el sistema usa WITHOUT_REASON. No es obligatorio — las integraciones actuales siguen siendo válidas.Tipo: string (enum, opcional, valor por defecto: WITHOUT_REASON)Valores comunes (el enum completo tiene 60+ valores):
  • WITHOUT_REASON - Sin razón específica (por defecto si se omite)
  • INSUFFICIENT_FUNDS - Fondos insuficientes
  • LIMIT_EXCEEDED, DAILY_LIMIT_EXCEEDED, MONTHLY_LIMIT_EXCEEDED, TRANSACTION_LIMIT_EXCEEDED
  • ACCOUNT_BLOCKED, ACCOUNT_FROZEN, ACCOUNT_CLOSED
  • CARD_EXPIRED, CARD_BLOCKED, CARD_LOST_OR_STOLEN, INVALID_CARD, INVALID_ACCOUNT
  • FRAUD_SUSPECTED, COMPLIANCE_BLOCK, SANCTIONS_MATCH, AML_ALERT, RISK_SCORE_THRESHOLD
  • MERCHANT_BLOCKED, COUNTRY_RESTRICTION, CURRENCY_NOT_SUPPORTED, CHANNEL_NOT_ALLOWED
  • SYSTEM_ERROR, TIMEOUT, INVALID_AMOUNT, KYC_PENDING, KYC_REJECTED
  • EXPIRED, CANCELLED_BY_USER, CANCELLED_BY_MERCHANT, REFUSED_BY_ISSUER, DO_NOT_HONOR
  • INVALID_PIN, PIN_TRIES_EXCEEDED, INSUFFICIENT_LIQUIDITY, VALIDATION_FAILED, OTHER
Lista completa: Ver Enum Razón de Transacción para los 60+ valores permitidos.Ejemplo:
{
  "reason": "INSUFFICIENT_FUNDS"
}
locationDetails
object
Información de ubicación geográfica donde ocurrió la transacción. Útil para detección de fraude, análisis de riesgo geográfico y reportes de cumplimiento.Tipo: object (opcional)Campos Soportados:Información de Dirección:
  • country (string) - Código de país ISO 3166-1 alpha-2 (ej: “US”, “BR”, “AR”)
  • countryName (string) - Nombre completo del país
  • city (string) - Nombre de la ciudad
  • region (string) - Estado o provincia
  • address (string) - Dirección completa
  • street (string) - Nombre de la calle
  • streetNumber (string) - Número de calle
  • postalCode (string) - Código postal
  • neighborhood (string) - Barrio o distrito
Coordenadas (para visualización en mapas):
  • latitude (number) - Coordenada de latitud (-90 a 90)
  • longitude (number) - Coordenada de longitud (-180 a 180)
Información Adicional:
  • timezone (string) - Zona horaria IANA (ej: “America/Sao_Paulo”)
  • placeId (string) - ID de Google Places o identificador similar
Ejemplo:
{
  "country": "BR",
  "countryName": "Brasil",
  "city": "São Paulo",
  "region": "SP",
  "address": "Av. Paulista, 1578",
  "street": "Av. Paulista",
  "streetNumber": "1578",
  "postalCode": "01310-200",
  "latitude": -23.5505,
  "longitude": -46.6333,
  "timezone": "America/Sao_Paulo"
}
Casos de Uso:
  • Detección de Fraude: Identificar transacciones desde ubicaciones inusuales o países de alto riesgo
  • Análisis Geográfico: Analizar patrones de transacciones por región
  • Cumplimiento: Rastrear transacciones transfronterizas para reportes regulatorios
  • Reglas de Velocidad: Detectar viajes imposibles (mismo usuario en diferentes ubicaciones en poco tiempo)
deviceDetails
object
Información del dispositivo para la transacción. Crítico para detección de fraude, fingerprinting de dispositivos y análisis de seguridad.Tipo: object (opcional)Campos Soportados:Identificación de Dispositivo:
  • deviceId (string) - Identificador único del dispositivo
  • externalId (string) - Su ID externo del dispositivo
Plataforma y Sistema Operativo:
  • platform (enum) - Plataforma del dispositivo: android, ios, web, desktop, mobile, tablet, pos, atm
  • osName (string) - Nombre del sistema operativo (ej: “Android”, “iOS”, “Windows”, “macOS”)
  • osVersion (string) - Versión del SO (ej: “13.0”, “16.4”)
Información del Dispositivo:
  • manufacturer (string) - Fabricante del dispositivo (ej: “Samsung”, “Apple”)
  • model (string) - Modelo del dispositivo (ej: “Galaxy S22”, “iPhone 14”)
  • brand (string) - Marca del dispositivo
  • deviceName (string) - Nombre asignado por el usuario al dispositivo
Información del Navegador (para plataforma web):
  • browser (string) - Nombre del navegador (ej: “Chrome”, “Safari”, “Firefox”)
  • browserVersion (string) - Versión del navegador
  • userAgent (string) - String completo del user agent
Banderas de Seguridad:
  • isEmulator (boolean) - Si el dispositivo es un emulador
  • isRooted (boolean) - Si el dispositivo está rooteado (Android)
  • isJailbroken (boolean) - Si el dispositivo está jailbreakeado (iOS)
Información de Red:
  • ipAddress (string) - Dirección IP (formato validado)
  • isVpn (boolean) - Si la conexión es a través de VPN
  • isTor (boolean) - Si la conexión es a través de Tor
  • isProxy (boolean) - Si la conexión es a través de proxy
Fingerprinting de Dispositivo:
  • deviceFingerprint (string) - Hash único de huella digital del dispositivo para rastreo
Detalles Adicionales:
  • screenResolution (string) - Resolución de pantalla (ej: “1920x1080”)
  • language (string) - Idioma del dispositivo
  • timezone (string) - Zona horaria del dispositivo
Ejemplo:
{
  "platform": "mobile",
  "osName": "Android",
  "osVersion": "13",
  "manufacturer": "Samsung",
  "model": "Galaxy S22",
  "brand": "Samsung",
  "ipAddress": "192.168.1.1",
  "isVpn": false,
  "isTor": false,
  "isEmulator": false,
  "isRooted": false,
  "deviceFingerprint": "abc123def456...",
  "screenResolution": "1080x2400",
  "language": "pt-BR",
  "timezone": "America/Sao_Paulo"
}
Casos de Uso:
  • Detección de Fraude: Identificar dispositivos sospechosos (emuladores, dispositivos rooteados, uso de VPN)
  • Fingerprinting de Dispositivo: Rastrear dispositivos únicos a través de transacciones para análisis de comportamiento
  • Análisis de Seguridad: Detectar anomalías en patrones de dispositivos (nuevo dispositivo, velocidad de dispositivo imposible)
  • Cumplimiento: Documentar información del dispositivo para rastros de auditoría
  • Experiencia de Usuario: Personalizar experiencia basada en tipo y capacidades del dispositivo
description
string
Descripción de la transacciónTipo: string (longitud máxima: 1000, opcional)
category
string
Categoría de transacción para agrupaciónTipo: string (longitud máxima: 100, opcional)
metadata
object
Metadatos personalizados para almacenar información adicional de la transacción.Tipo: object (opcional, estructura validada)Campos Estándar Soportados:

tags (object) - Sistema de Categorización Clave-Valor

El campo tags le permite agregar pares clave-valor personalizados para categorización flexible, filtrado y gestión de flujos de trabajo. Esto es particularmente útil para:
  • Filtrado personalizado en dashboards y reportes
  • Activar lógica de negocio específica
  • Seguimiento del estado de revisión
  • Categorización por nivel de riesgo o fuente
  • Estados de flujo de trabajo personalizados
Formato: { "clave1": "valor1", "clave2": "valor2" }Patrones Comunes de Tags:
  • risk_level (string) - “low”, “medium”, “high”, “critical”
  • source (string) - “api”, “web”, “mobile”, “batch”, “import”
  • channel (string) - “online”, “branch”, “atm”, “call_center”, “partner”
  • reviewed (boolean) - false (pendiente de revisión), true (revisado)
  • category (string) - “payroll”, “supplier”, “refund”, “investment”, “loan”, “bill_payment”
  • priority (string) - “low”, “normal”, “high”, “urgent”
  • team (string) - “compliance”, “fraud”, “support”, “operations”
  • campaign (string) - Identificador de campaña de marketing o negocio
  • approved_by (string) - Usuario o sistema que aprobó
  • requires_approval (boolean) - Requiere aprobación manual
  • customer_segment (string) - “vip”, “regular”, “new”, “dormant”
  • product_type (string) - “savings”, “investment”, “loan”, “transfer”
  • region (string) - “north”, “south”, “latam”, “emea”, “apac”
  • business_unit (string) - “retail”, “corporate”, “wealth”, “sme”
Ejemplos de Casos de Uso:Ejemplo 1: Flujo de trabajo basado en riesgo
{
  "tags": {
    "risk_level": "high",
    "reviewed": false,
    "requires_approval": true,
    "assigned_to": "fraud_team"
  }
}
Ejemplo 2: Categorización de negocio
{
  "tags": {
    "category": "payroll",
    "batch_id": "PAY_2025_01",
    "department": "engineering",
    "cost_center": "R&D"
  }
}
Ejemplo 3: Seguimiento multi-canal
{
  "tags": {
    "source": "mobile_app",
    "channel": "online",
    "campaign": "winter_2025",
    "referral_code": "FRIEND123",
    "first_transaction": true,
    "customer_segment": "new"
  }
}
Ejemplo 4: Operaciones bancarias
{
  "tags": {
    "channel": "branch",
    "business_unit": "retail",
    "product_type": "loan",
    "region": "latam",
    "requires_approval": true,
    "approved_by": "manager_john"
  }
}
Filtrar transacciones por tags: Posteriormente puede filtrar transacciones usando estos tags en endpoints de listado o dashboards.

Otros Campos de Metadata:

  • purpose (string) - Propósito de la transacción (ej: “salary”, “invoice_payment”)
  • frequency (string) - Frecuencia de la transacción (ej: “monthly”, “one-time”)
  • contract_number (string) - Número de contrato (para pagos empresariales)
  • enhanced_due_diligence (boolean) - Bandera de EDD
  • block_reason (string) - Razón de bloqueo
  • compliance_alert (boolean) - Bandera de alerta de cumplimiento
Ejemplo Completo:
{
  "tags": {
    "risk_level": "medium",
    "source": "api",
    "reviewed": false,
    "category": "invoice_payment"
  },
  "purpose": "supplier_payment",
  "frequency": "monthly",
  "contract_number": "CNT-2025-001",
  "enhanced_due_diligence": false
}
Se permiten campos personalizados más allá de los estándar y serán preservados.
transactedAt
string
Cuándo ocurrió la transacción (timestamp ISO 8601). Por defecto es la hora actual si no se proporciona.Tipo: string (datetime ISO 8601, opcional)
executeRules
boolean
default:"true"
Si ejecutar reglas de riesgo automáticamente después de crear la transacciónTipo: boolean (por defecto: true)

Métodos de Pago

  • CARD - Pago con tarjeta de crédito/débito
  • ACH - Transferencia ACH (EE.UU.)
  • PIX - Pago instantáneo brasileño
  • TED - Transferencia bancaria brasileña (TED)
  • BOLETO - Pago con boleto brasileño
  • WALLET - Pago con billetera digital
  • SWIFT - Transferencia internacional SWIFT
  • IBAN - Transferencia basada en IBAN
  • CBU - Cuenta bancaria argentina (CBU)
  • CVU - Billetera virtual argentina (CVU)
  • DEBIN - Débito directo argentino
  • GENERIC_BANK_ACCOUNT - Transferencia bancaria genérica
  • MPESA - Dinero móvil M-Pesa
  • UPI - Pago UPI de India
  • CHECK - Cheque físico
  • ECHECK - Cheque electrónico
  • QR_CODE - Pago con código QR
  • ONLINE_PAYMENT - Pago en línea genérico
  • WITHDRAWAL_ORDER - Orden de retiro

Tipos de Cuenta

  • PERSONAL - Cuenta personal
  • BUSINESS - Cuenta empresarial
  • MERCHANT - Cuenta de comerciante
  • SAVINGS - Cuenta de ahorros
  • CHECKING - Cuenta corriente
  • INVESTMENT - Cuenta de inversión
  • ESCROW - Cuenta en garantía
  • PREPAID - Cuenta prepago
  • OTHER - Otro tipo de cuenta

Códigos MCC

Los Merchant Category Codes (MCC) clasifican tipos de negocio:
{
  "mccCode": "5411"  // Supermercados
}
Ejemplos comunes:
  • 5411 - Supermercados
  • 5812 - Restaurantes
  • 5999 - Venta al por menor diversa
  • 6011 - ATM / Retiro de efectivo
  • 7995 - Juegos de azar

Tags y Metadata

{
  "tags": ["high_value", "first_transaction", "promotional"],
  "metadata": {
    "campaignId": "summer_2024",
    "referralCode": "FRIEND10",
    "customField": "any_value"
  }
}

Multi-Currency Support

gu1 proporciona conversión automática de moneda para todas las transacciones. Cada organización tiene una moneda base configurada (por defecto: USD), y todas las transacciones se convierten automáticamente a esta moneda base para una evaluación de reglas y reportes consistentes.

Cómo Funciona

  1. Detección Automática: Cuando la currency de una transacción difiere de la moneda base de tu organización, se activa la conversión automática
  2. Tasas en Tiempo Real: Las tasas de cambio se obtienen de nuestro servicio de monedas en tiempo real
  3. Almacenamiento Dual de Montos: Se almacenan tanto los montos originales como los convertidos
  4. Evaluación de Reglas: Las reglas pueden usar amount (original) o amountInUsd (convertido a USD)

Monedas Soportadas

Más de 150 monedas soportadas incluyendo:
  • Principales: USD, EUR, GBP, JPY, CHF, CAD, AUD
  • América Latina: BRL, ARS, MXN, COP, CLP, PEN, UYU
  • Asia: CNY, INR, KRW, SGD, HKD, THB, MYR
  • Crypto: BTC, ETH, USDT, USDC
  • Y muchas más (estándar ISO 4217)

Fuentes de Tasa de Cambio

FuenteDescripciónCuándo se Usa
ms-providerTasas en tiempo real del microservicio de monedasFuente primaria
cache-fallbackTasas en caché cuando el servicio no está disponibleFallback (< 1h de antigüedad)
no-conversionNo se necesita conversión (misma moneda)Igual a la base
client-providedTasa personalizada proporcionada por el clienteOverride opcional

Campos de respuesta

Los datos de conversión van en el objeto transaction:
  • transaction.amount, transaction.currency – monto y moneda originales
  • transaction.amountInUsd – monto convertido a USD (null si falló la conversión o no aplica)
  • transaction.exchangeRate, transaction.rateSource – tasa usada y fuente (ej. ms-provider)

Uso de Montos Convertidos en Reglas

Las reglas pueden referenciar ambos montos:
{
  "conditions": [
    {
      "field": "amount",
      "operator": "GREATER_THAN",
      "value": 1000
    }
  ]
}
O usar el monto convertido para umbrales consistentes:
{
  "conditions": [
    {
      "field": "amountInUsd",
      "operator": "GREATER_THAN",
      "value": 10000
    }
  ]
}
Mejor Práctica: Usar amountInUsd en reglas para asegurar umbrales consistentes independientemente de la moneda de la transacción.

Manejo de Errores

Si la conversión de moneda falla:
  • El procesamiento de la transacción continúa con el monto original
  • transaction.amountInUsd y transaction.exchangeRate serán null
  • Las reglas que usan amountInUsd usarán el amount original como fallback si la conversión falló
  • El error se registra pero no bloquea la transacción

Ejemplo: Transacción Multi-Moneda

{
  "transaction": {
    "externalId": "txn_euro_001",
    "type": "PAYMENT",
    "amount": 850.00,
    "currency": "EUR",
    "timestamp": "2024-10-28T15:00:00Z",
    "originEntityId": "customer_france_001",
    "destinationEntityId": "merchant_usa_001"
  }
}
Respuesta (la conversión va en transaction). Ver Crear transacción para la estructura completa.
{
  "transaction": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "externalId": "txn_euro_001",
    "type": "PAYMENT",
    "amount": "850.00",
    "currency": "EUR",
    "amountInUsd": "935.00",
    "exchangeRate": "1.10",
    "rateSource": "ms-provider",
    "status": "CREATED",
    "riskScore": "25",
    "flagged": false,
    "createdAt": "2024-10-28T15:00:01.000Z",
    "updatedAt": "2024-10-28T15:00:01.000Z"
  },
  "rulesResult": {
    "success": true,
    "executed": true,
    "rulesTriggered": 0,
    "executionTimeMs": 120,
    "rulesExecutionSummary": { "rulesHit": [], "rulesNoHit": [], "actionsExecuted": {}, "totalScore": 25 }
  },
  "rulesExecutionSummary": { "rulesHit": [], "rulesNoHit": [], "actionsExecuted": {}, "totalScore": 25 }
}

Complete Request Examples

PIX Transfer (Brazil)

curl -X POST http://api.gu1.ai/transactions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "externalId": "txn_pix_12345",
    "type": "TRANSFER",
    "status": "CREATED",
    "amount": 500.00,
    "currency": "BRL",
    "originEntityId": "customer_maria_001",
    "originName": "Maria Silva",
    "originCountry": "BR",
    "originDetails": {
      "deviceId": "device_123",
      "ipAddress": "189.123.45.67",
      "country": "BR",
      "city": "São Paulo",
      "paymentDetails": {
        "pixKey": "maria.silva@example.com",
        "pixType": "email",
        "bankName": "Banco do Brasil"
      }
    },
    "destinationEntityId": "merchant_loja_002",
    "destinationName": "Loja Online",
    "destinationCountry": "BR",
    "destinationDetails": {
      "merchantId": "MER_002",
      "mcc": "5411",
      "paymentDetails": {
        "accountNumber": "98765",
        "accountType": "merchant",
        "bankName": "Bradesco"
      }
    },
    "description": "Purchase at Online Store",
    "category": "retail",
    "metadata": {
      "storeId": "store_002",
      "orderId": "order_789"
    },
    "transactedAt": "2024-12-23T14:30:00Z",
    "executeRules": true
  }'

Card Payment

curl -X POST http://api.gu1.ai/transactions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "externalId": "txn_card_67890",
    "type": "PAYMENT",
    "amount": 1250.00,
    "currency": "USD",
    "originEntityId": "customer_john_003",
    "originName": "John Smith",
    "originCountry": "US",
    "originDetails": {
      "deviceId": "device_456",
      "deviceType": "desktop",
      "ipAddress": "198.51.100.42",
      "country": "US",
      "paymentDetails": {
        "cardLast4": "8765",
        "cardBrand": "Visa",
        "expiryMonth": "12",
        "expiryYear": "2027"
      }
    },
    "destinationEntityId": "merchant_electronics_001",
    "destinationName": "Electronics Store",
    "destinationCountry": "US",
    "destinationDetails": {
      "mcc": "5732",
      "merchantId": "MER_ELEC_001",
      "paymentDetails": {
        "accountNumber": "ACC123456",
        "accountType": "merchant"
      }
    },
    "description": "Laptop purchase",
    "category": "electronics",
    "metadata": {
      "sessionId": "sess_abc123",
      "isFirstTransaction": true
    },
    "executeRules": true
  }'

Multi-Currency Transfer

curl -X POST http://api.gu1.ai/transactions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "externalId": "txn_euro_001",
    "type": "TRANSFER",
    "amount": 750.50,
    "currency": "EUR",
    "originEntityId": "user_alice_001",
    "originName": "Alice Martinez",
    "originCountry": "ES",
    "originDetails": {
      "deviceId": "device_789",
      "ipAddress": "88.22.15.10",
      "country": "ES",
      "city": "Madrid",
      "paymentDetails": {
        "accountNumber": "ES1234567890123456789012",
        "bankName": "Banco Santander",
        "accountType": "personal"
      }
    },
    "destinationEntityId": "user_bob_002",
    "destinationName": "Bob Johnson",
    "destinationCountry": "DE",
    "destinationDetails": {
      "country": "DE",
      "paymentDetails": {
        "accountNumber": "DE89370400440532013000",
        "bankName": "Deutsche Bank",
        "accountType": "personal"
      }
    },
    "description": "International transfer",
    "category": "p2p",
    "executeRules": true
  }'

Response

Detalle completo en Crear transacción. La respuesta devuelve transaction como objeto (una sola transacción creada).

Success Response (201 Created)

{
  "transaction": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "externalId": "txn_pix_12345",
    "organizationId": "org_uuid",
    "type": "TRANSFER",
    "status": "CREATED",
    "amount": "500.00",
    "currency": "BRL",
    "amountInUsd": "100.00",
    "exchangeRate": "0.2000000000",
    "rateSource": "ms-provider",
    "rateTimestamp": "2024-12-23T14:30:00.000Z",
    "convertedAt": "2024-12-23T14:30:01.000Z",
    "originEntityId": "customer_maria_001",
    "originExternalId": null,
    "originName": "Maria Silva",
    "originCountry": "BR",
    "originDetails": { "deviceId": "device_123", "ipAddress": "189.123.45.67", "country": "BR", "city": "São Paulo", "paymentDetails": { "pixKey": "maria.silva@example.com", "pixType": "email", "bankName": "Banco do Brasil" } },
    "destinationEntityId": "merchant_loja_002",
    "destinationExternalId": null,
    "destinationName": "Loja Online",
    "destinationCountry": "BR",
    "destinationDetails": { "merchantId": "MER_002", "mcc": "5411", "paymentDetails": { "accountNumber": "98765", "accountType": "merchant", "bankName": "Bradesco" } },
    "riskScore": "25.50",
    "riskFactors": [],
    "flagged": false,
    "description": "Purchase at Online Store",
    "category": "retail",
    "metadata": { "storeId": "store_002", "orderId": "order_789" },
    "transactedAt": "2024-12-23T14:30:00.000Z",
    "createdAt": "2024-12-23T14:30:01.000Z",
    "updatedAt": "2024-12-23T14:30:01.000Z"
  },
  "rulesResult": {
    "success": true,
    "executed": true,
    "rulesTriggered": 3,
    "executionTimeMs": 162,
    "auditId": "52fa709f-88fe-473a-bc58-6efb5b0307f4",
    "isNewAudit": true,
    "rulesExecutionSummary": {
      "rulesHit": [],
      "rulesNoHit": [],
      "actionsExecuted": {},
      "totalScore": 25
    }
  },
  "rulesExecutionSummary": {
    "rulesHit": [],
    "rulesNoHit": [],
    "actionsExecuted": {},
    "totalScore": 25
  }
}

Response Fields (resumen)

transaction
object
La transacción creada. Incluye id, externalId, type, status, amount (string), currency, amountInUsd, exchangeRate, rateSource, riskScore (string), riskFactors, flagged, reason, originDetails, destinationDetails, processingTimeMs, processedAt, createdAt, updatedAt. Ver Crear transacción para la lista completa.
rulesResult
object
Solo si executeRules fue true. Incluye success, executed, result (opcional), rulesExecutionSummary, rulesTriggered, executionTimeMs, auditId, isNewAudit. Ver Crear transacción para el detalle.
rulesExecutionSummary
object
En la raíz de la respuesta. Mismo valor que rulesResult.rulesExecutionSummary. Solo presente cuando executeRules es true y se ejecutó el motor de reglas. Resumen de qué reglas hicieron match (hit) y cuáles no (no hit), acciones ejecutadas y puntuación total. No se incluye cuando executeRules es false. Estructura completa y ejemplo: Resumen de Ejecución de Reglas.
  • rulesHit (array) - Reglas cuyas condiciones se cumplieron. Cada ítem: name, description, score, priority, category, status (ej. active, shadow), conditions (array de { field, value, operator? }), actions (alerts, suggestion, status, assignedUser).
  • rulesNoHit (array) - Reglas evaluadas cuyas condiciones no se cumplieron. Misma estructura que rulesHit (incluye acciones configuradas, no ejecutadas).
  • actionsExecuted (object) - Acciones ejecutadas agregadas de todas las reglas que hicieron hit: alerts (array de { name?, type?, severity?, description? }), suggestion (BLOCK | SUSPEND | FLAG, la de mayor peso), status (estado de entidad aplicado, si hubo), assignedUser ({ userId }, si hubo), customKeys (array de strings, opcional) — claves de acciones personalizadas de las reglas que hicieron match (ej. require_kyc, flag_for_review). Presente cuando alguna regla que hizo match tiene una acción personalizada con clave; para integraciones/workflows.
  • totalScore (number) - Suma del score de todas las reglas que hicieron hit y no están en estado shadow.

Transaction Status Values

El estado de la transacción sigue un modelo de máquina de estados con estados abiertos y cerrados:

Estados Abiertos (Pueden Transicionar)

EstadoDescripciónPuede Transicionar A
CREATEDTransacción creada (estado inicial)PROCESSING, SUSPENDED, SENT, EXPIRED, DECLINED, SUCCESSFUL
PROCESSINGTransacción siendo procesadaSUSPENDED, SENT, EXPIRED, DECLINED, REFUNDED, SUCCESSFUL
SUSPENDEDTransacción temporalmente suspendidaPROCESSING, SENT, EXPIRED, DECLINED, REFUNDED, SUCCESSFUL

Estados Cerrados (Finales)

EstadoDescripciónNota
SENTTransacción enviada/transmitidaEstado final - no más transiciones
EXPIREDTransacción expiradaEstado final - no más transiciones
DECLINEDTransacción rechazada/declinadaEstado final - no más transiciones
REFUNDEDTransacción reembolsada/reversadaEstado final - no más transiciones
SUCCESSFULTransacción completada exitosamenteEstado final - no más transiciones
Importante: Una vez que una transacción alcanza un estado cerrado, no puede volver a un estado abierto. Esto asegura la integridad de la transacción y rastros de auditoría apropiados.

Risk Score Ranges

Puntuación de riesgo de 0 a 100 (almacenada con precisión de 2 decimales):
  • 0-30: Riesgo bajo (verde)
  • 31-60: Riesgo medio (amarillo)
  • 61-80: Riesgo alto (naranja)
  • 81-100: Riesgo crítico (rojo)

Currency Conversion Rate Sources

El campo rateSource indica cómo se obtuvo la tasa de cambio:
  • ms-provider: Tasa en tiempo real del microservicio de monedas (fuente primaria)
  • cache-fallback: Tasa en caché (< 1h de antigüedad) cuando el servicio no está disponible
  • no-conversion: No se necesita conversión (la moneda ya es USD)
  • null: La conversión falló o no aplica

Error Responses

400 Bad Request - Validation Error

Ejemplo 1: Missing required fields
{
  "error": "Validation failed",
  "details": [
    {
      "path": "externalId",
      "message": "Required",
      "code": "invalid_type"
    },
    {
      "path": "amount",
      "message": "Number must be greater than 0",
      "code": "too_small"
    }
  ]
}
Ejemplo 2: Invalid paymentDetails for card (nested in originDetails)
{
  "error": "Validation failed",
  "details": [
    {
      "path": "originDetails.paymentDetails.cardLast4",
      "message": "Card last 4 digits must be exactly 4 characters",
      "code": "invalid_length"
    },
    {
      "path": "originDetails.paymentDetails.cardBrand",
      "message": "Invalid card brand",
      "code": "invalid_string"
    }
  ]
}
Ejemplo 3: Invalid PIX details (nested in originDetails)
{
  "error": "Validation failed",
  "details": [
    {
      "path": "originDetails.paymentDetails.pixKey",
      "message": "Required",
      "code": "invalid_type"
    },
    {
      "path": "originDetails.paymentDetails.pixType",
      "message": "Invalid PIX type",
      "code": "invalid_enum_value"
    },
    {
      "path": "originDetails.paymentDetails.bankName",
      "message": "String must contain at least 1 character(s)",
      "code": "too_small"
    }
  ]
}
Ejemplo 4: Invalid IP address in originDetails
{
  "error": "Validation failed",
  "details": [
    {
      "path": "originDetails.ipAddress",
      "message": "Invalid IP address format",
      "code": "invalid_string"
    },
    {
      "path": "originDetails.country",
      "message": "Country must be ISO 2 letter code",
      "code": "invalid_length"
    }
  ]
}

400 Bad Request - Missing Organization

{
  "error": "Organization ID and User ID are required"
}

401 Unauthorized

{
  "error": "Unauthorized",
  "message": "Invalid or missing API key"
}

500 Internal Server Error

{
  "error": "Failed to create transaction",
  "details": "Database connection error"
}

Next Steps

Rules Configuration

Learn to create rules

Fraud Detection

Fraud detection examples

AML Monitoring

AML compliance rules

Overview

Back to overview