Skip to main content
POST
http://api.gu1.ai
/
transactions
Criar Transação
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": {},
  "description": "<string>",
  "category": "<string>",
  "metadata": {},
  "transactedAt": "<string>",
  "executeRules": true
}
'
{
  "transaction": {},
  "rulesResult": {}
}

Endpoints

Criar Transação

POST http://api.gu1.ai/transactions
Cria uma nova transação com conversão automática de moeda para USD e execução opcional de regras para avaliação de risco em tempo real. Recursos:
  • Conversão automática de moeda usando taxas de câmbio em tempo real
  • Cache com TTL de 1 minuto para desempenho
  • Padrão circuit breaker para resiliência
  • Execução automática de regras opcional (padrão: true)
  • Suporte multi-moeda (mais de 150 moedas)
  • Informações de pagamento flexíveis dentro de origin e destination details

Autenticação

Todas as requisições devem incluir uma chave API no cabeçalho Authorization:
Authorization: Bearer YOUR_API_KEY

Cabeçalhos Obrigatórios

Content-Type: application/json
Authorization: Bearer YOUR_API_KEY

Corpo da Requisição

externalId
string
required
Seu identificador único para esta transação no seu sistemaTipo: string (comprimento mínimo: 1)
type
string
required
Tipo de transação. Opções:
  • PAYMENT - Compra ou pagamento a comerciante
  • TRANSFER - Transferência entre contas/usuários
  • WITHDRAWAL - Saque ou débito de conta
  • DEPOSIT - Depósito ou crédito de conta
  • REFUND - Reembolso de transação anterior
  • CHARGEBACK - Disputa de estorno
  • REVERSAL - Reversão de transação
  • FEE - Cobrança de taxa ou comissão
  • ADJUSTMENT - Ajuste de saldo
  • OTHER - Outro tipo de transação
Tipo: enum - 'PAYMENT' | 'TRANSFER' | 'WITHDRAWAL' | 'DEPOSIT' | 'REFUND' | 'CHARGEBACK' | 'REVERSAL' | 'FEE' | 'ADJUSTMENT' | 'OTHER'
status
string
default:"CREATED"
Status da transação. Segue um modelo de máquina de estados com estados abertos e fechados.Estados Abertos (podem transitar para outros estados):
  • CREATED - Transação criada (padrão)
  • PROCESSING - Transação em processamento
  • SUSPENDED - Transação temporariamente suspensa
Estados Fechados (finais, não podem voltar a estados abertos):
  • SENT - Transação enviada/transmitida
  • EXPIRED - Transação expirada
  • DECLINED - Transação recusada/declinada
  • REFUNDED - Transação reembolsada/revertida
  • SUCCESSFUL - Transação concluída com sucesso
Tipo: enum - 'CREATED' | 'PROCESSING' | 'SUSPENDED' | 'SENT' | 'EXPIRED' | 'DECLINED' | 'REFUNDED' | 'SUCCESSFUL' (padrão: ‘CREATED’)Importante: Uma vez que uma transação atinge um estado fechado, não pode voltar a um estado aberto. Isso garante a integridade da transação e um rastro de auditoria apropriado.
amount
number
required
Valor da transação (deve ser positivo)Tipo: number (> 0)
currency
string
required
Código ISO 4217 de moeda (ex: “USD”, “BRL”, “EUR”)Tipo: string (comprimento: 3)
paymentMethod
string
Método de pagamento utilizado para a transaçãoTipo: string (enum, opcional)Valores Possíveis:
  • CARD - Pagamento com cartão de crédito ou débito
  • ACH - Automated Clearing House (transferência bancária US)
  • PIX - Sistema de pagamentos instantâneos do Brasil
  • TED - Transferência bancária brasileira (Transferência Eletrônica Disponível)
  • BOLETO - Boleto de pagamento brasileiro
  • WALLET - Carteira digital (PayPal, Venmo, etc.)
  • SWIFT - Transferência internacional SWIFT
  • IBAN - Transferência bancária baseada em IBAN
  • CBU - Conta bancária argentina (Clave Bancaria Uniforme)
  • CVU - Conta virtual argentina (Clave Virtual Uniforme)
  • DEBIN - Sistema de débito instantâneo argentino
  • GENERIC_BANK_ACCOUNT - Transferência de conta bancária genérica
  • MPESA - M-Pesa mobile money (Quênia)
  • UPI - Unified Payments Interface (Índia)
  • CHECK - Pagamento com cheque
  • ECHECK - Cheque eletrônico
  • QR_CODE - Pagamento com código QR
  • ONLINE_PAYMENT - Pagamento online genérico
  • WITHDRAWAL_ORDER - Ordem de saque
Exemplo: "PIX" ou "CARD"
originEntityId
string
UUID da entidade de origem (remetente) no sistema gu1Tipo: string (uuid, opcional)
originExternalId
string
Seu ID externo para a entidade de origemTipo: string (opcional)
originName
string
Nome da entidade de origem (remetente)Tipo: string (comprimento máximo: 500, opcional)
originCountry
string
Código de país ISO 3166-1 alpha-2 da entidade de origemTipo: string (comprimento: 2, opcional)
originDetails
object
Informações contextuais sobre a origem da transação (dispositivo, geolocalização e detalhes de pagamento).Tipo: object (opcional, estrutura validada)Diferença Importante:
  • originCountry (campo direto) = País da entidade
  • originDetails.country = País do dispositivo/IP no momento da transação (pode diferir se estiver viajando)
Campos Suportados:Dispositivo/Técnico:
  • deviceId (string) - Identificador do dispositivo
  • deviceFingerprint (string) - Hash de impressão digital do dispositivo
  • deviceType (enum) - mobile | desktop | tablet | pos | atm
  • userAgent (string) - User agent do navegador
  • ipAddress (string) - Endereço IP (formato validado)
Geolocalização:
  • country (string) - Código ISO de 2 letras
  • city (string) - Nome da cidade
  • region (string) - Estado/província
  • latitude (number) - Latitude (-90 a 90)
  • longitude (number) - Longitude (-180 a 180)
  • timezone (string) - Identificador de fuso horário
Detalhes de Pagamento (objeto aninhado):
  • paymentDetails (object) - Informações específicas de pagamento para a origem. Você pode enviar qualquer campo relacionado a pagamento:
    • Detalhes Bancários/Conta:
      • accountNumber (string) - Número da conta
      • accountType (enum) - checking | savings | business | personal
      • bankCode (string) - Código do banco
      • bankName (string) - Nome do banco
      • routingNumber (string) - Routing number (US)
      • swiftCode (string) - Código SWIFT/BIC
      • iban (string) - IBAN (International Bank Account Number)
    • Detalhes PIX (Brasil):
      • pixKey (string) - Chave PIX
      • pixType (enum) - Tipo de chave PIX: email | phone | cpf | cnpj | random
      • endToEndId (string) - ID único end-to-end do PIX
    • Detalhes de Cartão:
      • cardLast4 (string) - Últimos 4 dígitos do cartão
      • cardBrand (string) - Bandeira do cartão (Visa, Mastercard, Amex, etc.)
      • cardholderName (string) - Nome no cartão
      • cardBin (string) - Primeiros 6 dígitos do cartão (BIN)
      • cardType (enum) - credit | debit | prepaid
      • cardCountry (string) - País emissor do cartão (ISO 2 letras)
      • cardExpiry (string) - Data de vencimento (MM/AA)
      • cardFingerprint (string) - Impressão digital única do cartão para rastreamento
    • Detalhes Crypto:
      • walletAddress (string) - Endereço de carteira de criptomoeda
      • walletType (string) - Tipo de carteira (ex: “metamask”, “coinbase”)
      • blockchain (string) - Rede blockchain (ex: “ethereum”, “bitcoin”)
      • tokenSymbol (string) - Símbolo do token (ex: “ETH”, “BTC”, “USDT”)
      • txHash (string) - Hash da transação blockchain
      • confirmations (number) - Número de confirmações blockchain
    • Carteira/Pagamento Digital:
      • walletId (string) - Identificador de carteira digital
      • walletProvider (string) - Provedor de carteira (ex: “paypal”, “venmo”, “mercadopago”)
      • walletEmail (string) - Email associado à carteira
    • Campos Argentina (CBU/CVU):
      • cbu (string) - CBU argentino (22 dígitos)
      • cvu (string) - CVU argentino (22 dígitos)
      • alias (string) - Alias do CBU/CVU
    • Campos México (SPEI):
      • clabe (string) - Número CLABE (México, 18 dígitos)
      • trackingKey (string) - Chave de rastreamento SPEI
    • Campos Dinheiro/Cheque:
      • checkNumber (string) - Número do cheque
      • receiptNumber (string) - Número do recibo
      • location (string) - Localização do pagamento (dinheiro)
    • E quaisquer outros campos relacionados a pagamento que você precisar
Flags de Segurança:
  • isVpn (boolean) - VPN detectada
  • isTor (boolean) - Rede Tor detectada
  • isProxy (boolean) - Proxy detectado
  • governmentAccount (boolean) - Flag de conta governamental
Exemplo:
{
  "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"
  }
}
Campos personalizados são permitidos - o sistema validará campos conhecidos e preservará os personalizados.
destinationEntityId
string
UUID da entidade de destino (destinatário) no sistema gu1Tipo: string (uuid, opcional)
destinationExternalId
string
Seu ID externo para a entidade de destinoTipo: string (opcional)
destinationName
string
Nome da entidade de destino (destinatário)Tipo: string (comprimento máximo: 500, opcional)
destinationCountry
string
Código de país ISO 3166-1 alpha-2 da entidade de destinoTipo: string (comprimento: 2, opcional)
destinationDetails
object
Informações contextuais sobre o destino da transação (informações de comerciante, dispositivo e detalhes de pagamento).Tipo: object (opcional, estrutura validada)Campos Suportados:Informações de Comerciante:
  • mcc (string) - Merchant Category Code (4 dígitos, ISO 18245)
  • mccDescription (string) - Descrição do MCC (ex: “Restaurants”)
  • merchantId (string) - Identificador do comerciante
  • merchantName (string) - Nome do comerciante
  • merchantType (string) - Tipo/categoria do comerciante
Dispositivo/Técnico:
  • deviceId (string) - Identificador do dispositivo
  • deviceType (enum) - pos | online | mobile | atm
  • ipAddress (string) - Endereço IP (formato validado)
Geolocalização:
  • country (string) - Código ISO de 2 letras
  • city (string) - Nome da cidade
  • region (string) - Estado/província
Detalhes de Pagamento (objeto aninhado):
  • paymentDetails (object) - Informações específicas de pagamento para o destino. Você pode enviar qualquer campo relacionado a pagamento:
    • Detalhes Bancários/Conta:
      • accountNumber (string) - Número da conta de destino
      • accountType (enum) - checking | savings | business | merchant
      • bankCode (string) - Código do banco
      • bankName (string) - Nome do banco
      • routingNumber (string) - Routing number (US)
      • swiftCode (string) - Código SWIFT/BIC
      • iban (string) - IBAN (International Bank Account Number)
    • Detalhes PIX (Brasil):
      • pixKey (string) - Chave PIX
      • pixType (enum) - Tipo de chave PIX: email | phone | cpf | cnpj | random
      • endToEndId (string) - ID único end-to-end do PIX
    • Detalhes de Cartão:
      • cardLast4 (string) - Últimos 4 dígitos do cartão
      • cardBrand (string) - Bandeira do cartão (Visa, Mastercard, Amex, etc.)
      • cardholderName (string) - Nome no cartão
      • cardBin (string) - Primeiros 6 dígitos do cartão (BIN)
      • cardType (enum) - credit | debit | prepaid
      • cardCountry (string) - País emissor do cartão (ISO 2 letras)
      • cardExpiry (string) - Data de vencimento (MM/AA)
      • cardFingerprint (string) - Impressão digital única do cartão para rastreamento
    • Detalhes Crypto:
      • walletAddress (string) - Endereço de carteira de criptomoeda
      • walletType (string) - Tipo de carteira (ex: “metamask”, “coinbase”)
      • blockchain (string) - Rede blockchain (ex: “ethereum”, “bitcoin”)
      • tokenSymbol (string) - Símbolo do token (ex: “ETH”, “BTC”, “USDT”)
      • txHash (string) - Hash da transação blockchain
      • confirmations (number) - Número de confirmações blockchain
    • Carteira/Pagamento Digital:
      • walletId (string) - Identificador de carteira digital
      • walletProvider (string) - Provedor de carteira (ex: “paypal”, “venmo”, “mercadopago”)
      • walletEmail (string) - Email associado à carteira
    • Campos Argentina (CBU/CVU):
      • cbu (string) - CBU argentino (22 dígitos)
      • cvu (string) - CVU argentino (22 dígitos)
      • alias (string) - Alias do CBU/CVU
    • Campos México (SPEI):
      • clabe (string) - Número CLABE (México, 18 dígitos)
      • trackingKey (string) - Chave de rastreamento SPEI
    • Campos Dinheiro/Cheque:
      • checkNumber (string) - Número do cheque
      • receiptNumber (string) - Número do recibo
      • location (string) - Localização do pagamento (dinheiro)
    • E quaisquer outros campos relacionados a pagamento que você precisar
Flags de Risco:
  • cryptoExchange (boolean) - É uma exchange de criptomoedas
  • highRisk (boolean) - Flag de comerciante de alto risco
  • privateSector (boolean) - Flag de setor privado
Exemplo:
{
  "mcc": "5812",
  "mccDescription": "Restaurants",
  "merchantName": "Restaurant ABC",
  "country": "US",
  "highRisk": false,
  "paymentDetails": {
    "accountNumber": "98765",
    "accountType": "merchant",
    "bankName": "Bradesco"
  }
}
Campos personalizados são permitidos - o sistema validará campos conhecidos e preservará os personalizados.
description
string
Descrição da transaçãoTipo: string (comprimento máximo: 1000, opcional)
category
string
Categoria da transação para agrupamentoTipo: string (comprimento máximo: 100, opcional)
metadata
object
Metadados personalizados para armazenar informações adicionais da transação.Tipo: object (opcional, estrutura validada)Campos Padrão Suportados:

tags (object) - Sistema de Categorização Chave-Valor

O campo tags permite adicionar pares chave-valor personalizados para categorização flexível, filtragem e gerenciamento de fluxos de trabalho. Isso é particularmente útil para:
  • Filtragem personalizada em dashboards e relatórios
  • Ativar lógica de negócio específica
  • Acompanhamento do status de revisão
  • Categorização por nível de risco ou fonte
  • Estados de fluxo de trabalho personalizados
Formato: { "chave1": "valor1", "chave2": "valor2" }Padrões Comuns 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 (pendente de revisão), 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 campanha de marketing ou negócio
  • approved_by (string) - Usuário ou sistema que aprovou
  • requires_approval (boolean) - Requer aprovação 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”
Exemplos de Casos de Uso:Exemplo 1: Fluxo de trabalho baseado em risco
{
  "tags": {
    "risk_level": "high",
    "reviewed": false,
    "requires_approval": true,
    "assigned_to": "fraud_team"
  }
}
Exemplo 2: Categorização de negócio
{
  "tags": {
    "category": "payroll",
    "batch_id": "PAY_2025_01",
    "department": "engineering",
    "cost_center": "R&D"
  }
}
Exemplo 3: Rastreamento multi-canal
{
  "tags": {
    "source": "mobile_app",
    "channel": "online",
    "campaign": "winter_2025",
    "referral_code": "FRIEND123",
    "first_transaction": true,
    "customer_segment": "new"
  }
}
Exemplo 4: Operações bancárias
{
  "tags": {
    "channel": "branch",
    "business_unit": "retail",
    "product_type": "loan",
    "region": "latam",
    "requires_approval": true,
    "approved_by": "manager_john"
  }
}
Filtrar transações por tags: Posteriormente você pode filtrar transações usando essas tags em endpoints de listagem ou dashboards.

Outros Campos de Metadata:

  • purpose (string) - Propósito da transação (ex: “salary”, “invoice_payment”)
  • frequency (string) - Frequência da transação (ex: “monthly”, “one-time”)
  • contract_number (string) - Número de contrato (para pagamentos empresariais)
  • enhanced_due_diligence (boolean) - Flag de EDD
  • block_reason (string) - Razão do bloqueio
  • compliance_alert (boolean) - Flag de alerta de compliance
Exemplo 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
}
Campos personalizados além dos padrão são permitidos e serão preservados.
transactedAt
string
Quando a transação ocorreu (timestamp ISO 8601). Padrão para o horário atual se não for fornecido.Tipo: string (datetime ISO 8601, opcional)
executeRules
boolean
default:"true"
Se deve executar regras de risco automaticamente após criar a transaçãoTipo: boolean (padrão: true)

Métodos de Pagamento

  • CARD - Pagamento com cartão de crédito/débito
  • ACH - Transferência ACH (EUA)
  • PIX - Pagamento instantâneo brasileiro
  • TED - Transferência bancária brasileira (TED)
  • BOLETO - Pagamento com boleto brasileiro
  • WALLET - Pagamento com carteira digital
  • SWIFT - Transferência internacional SWIFT
  • IBAN - Transferência baseada em IBAN
  • CBU - Conta bancária argentina (CBU)
  • CVU - Carteira virtual argentina (CVU)
  • DEBIN - Débito direto argentino
  • GENERIC_BANK_ACCOUNT - Transferência bancária genérica
  • MPESA - Dinheiro móvel M-Pesa
  • UPI - Pagamento UPI da Índia
  • CHECK - Cheque físico
  • ECHECK - Cheque eletrônico
  • QR_CODE - Pagamento com código QR
  • ONLINE_PAYMENT - Pagamento online genérico
  • WITHDRAWAL_ORDER - Ordem de saque

Tipos de Conta

  • PERSONAL - Conta pessoal
  • BUSINESS - Conta empresarial
  • MERCHANT - Conta de comerciante
  • SAVINGS - Conta poupança
  • CHECKING - Conta corrente
  • INVESTMENT - Conta de investimento
  • ESCROW - Conta escrow
  • PREPAID - Conta pré-paga
  • OTHER - Outro tipo de conta

Códigos MCC

Merchant Category Codes (MCC) classificam tipos de negócios:
{
  "mccCode": "5411"  // Supermercados
}
Exemplos comuns:
  • 5411 - Supermercados
  • 5812 - Restaurantes
  • 5999 - Varejo Diversos
  • 6011 - Caixa Eletrônico/Saque
  • 7995 - Jogos de Azar

Tags e Metadata

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

Suporte Multi-Moeda

O gu1 oferece conversão automática de moeda para todas as transações. Cada organização tem uma moeda base configurada (padrão: USD), e todas as transações são automaticamente convertidas para esta moeda base para avaliação consistente de regras e relatórios.

Como Funciona

  1. Detecção Automática: Quando a currency de uma transação difere da moeda base da sua organização, a conversão automática é acionada
  2. Taxas em Tempo Real: Taxas de câmbio são obtidas do nosso serviço de moeda em tempo real
  3. Armazenamento de Valor Duplo: Ambos os valores original e convertido são armazenados
  4. Avaliação de Regras: Regras podem usar tanto amount (original) quanto amountBaseCurrency (convertido)

Moedas Suportadas

Mais de 150 moedas suportadas incluindo:
  • Principais: USD, EUR, GBP, JPY, CHF, CAD, AUD
  • América Latina: BRL, ARS, MXN, COP, CLP, PEN, UYU
  • Ásia: CNY, INR, KRW, SGD, HKD, THB, MYR
  • Cripto: BTC, ETH, USDT, USDC
  • E muitas mais (padrão ISO 4217)

Fontes de Taxa de Câmbio

FonteDescriçãoQuando Usado
ms-providerTaxas em tempo real do microserviço de moedaFonte primária
cache-fallbackTaxas em cache quando serviço indisponívelFallback (< 1h)
no-conversionConversão não necessária (mesma moeda)Igual à base
client-providedTaxa personalizada fornecida pelo clienteOverride opcional

Campos de Resposta

Quando ocorre conversão de moeda, a resposta inclui:
{
  "currencyConversion": {
    "originalAmount": 500.00,
    "originalCurrency": "BRL",
    "convertedAmount": 100.00,
    "baseCurrency": "USD",
    "exchangeRate": 0.20,
    "rateSource": "ms-provider",
    "convertedAt": "2024-10-28T14:30:00Z"
  }
}

Usando Valores Convertidos em Regras

Regras podem referenciar ambos os valores:
{
  "conditions": [
    {
      "field": "amount",
      "operator": "GREATER_THAN",
      "value": 1000
    }
  ]
}
Ou use o valor convertido para limites consistentes:
{
  "conditions": [
    {
      "field": "amountBaseCurrency",
      "operator": "GREATER_THAN",
      "value": 10000
    }
  ]
}
Melhor Prática: Use amountBaseCurrency em regras para garantir limites consistentes independentemente da moeda da transação.

Tratamento de Erros

Se a conversão de moeda falhar:
  • O processamento da transação continua com o valor original
  • O campo currencyConversion será omitido da resposta
  • Regras usando amountBaseCurrency usarão o amount original como fallback
  • O erro é registrado mas não bloqueia a transação

Exemplo: Transação Multi-Moeda

{
  "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"
  }
}
Resposta inclui conversão:
{
  "success": true,
  "transaction": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "state": "APPROVE"
  },
  "currencyConversion": {
    "originalAmount": 850.00,
    "originalCurrency": "EUR",
    "convertedAmount": 935.00,
    "baseCurrency": "USD",
    "exchangeRate": 1.10,
    "rateSource": "ms-provider",
    "convertedAt": "2024-10-28T15:00:01Z"
  }
}

Exemplos Completos de Requisição

Transferência PIX (Brasil)

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
  }'

Pagamento com Cartão

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
  }'

Transferência Multi-Moeda

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
  }'

Resposta

Resposta de Sucesso (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": [
      {
        "factor": "velocity_check",
        "score": 15,
        "description": "3 transactions in the last hour"
      }
    ],
    "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,
    "rulesTriggered": 3,
    "alerts": [
      {
        "id": "alert_001",
        "severity": "low",
        "type": "velocity_check",
        "message": "User has 3 transactions in the last hour"
      }
    ],
    "riskScore": 25.50,
    "decision": "APPROVE"
  }
}

Campos de Resposta

transaction
object
A transação criada com todos os seus dados incluindo:
  • id (string) - UUID interno do gu1
  • externalId (string) - Seu ID externo
  • type (enum) - Tipo de transação
  • status (enum) - Status da transação
  • amount (string) - Valor original (string numérica)
  • currency (string) - Código de moeda original (ISO 4217)
  • amountInUsd (string | null) - Valor convertido em USD
  • exchangeRate (string | null) - Taxa de câmbio usada (precisão: 10 decimais)
  • rateSource (string | null) - Fonte da taxa de câmbio
  • riskScore (string | null) - Pontuação de risco 0-100 (precisão: 2 decimais) se regras foram executadas
  • riskFactors (array) - Array de fatores de risco identificados
  • flagged (boolean) - Se a transação foi sinalizada para revisão
rulesResult
object
Resultado da execução de regras (presente apenas se executeRules foi true), incluindo:
  • success (boolean) - Se as regras foram executadas com sucesso
  • rulesTriggered (number) - Número de regras que foram acionadas
  • alerts (array) - Alertas gerados pelas regras
  • riskScore (number) - Pontuação de risco final calculada
  • decision (string) - Decisão final (APPROVE, REJECT, HOLD, REVIEW_REQUIRED)

Valores de Status da Transação

O status da transação segue um modelo de máquina de estados com estados abertos e fechados:

Estados Abertos (Podem Transitar)

StatusDescriçãoPode Transitar Para
CREATEDTransação criada (estado inicial)PROCESSING, SUSPENDED, SENT, EXPIRED, DECLINED, SUCCESSFUL
PROCESSINGTransação em processamentoSUSPENDED, SENT, EXPIRED, DECLINED, REFUNDED, SUCCESSFUL
SUSPENDEDTransação temporariamente suspensaPROCESSING, SENT, EXPIRED, DECLINED, REFUNDED, SUCCESSFUL

Estados Fechados (Finais)

StatusDescriçãoNota
SENTTransação enviada/transmitidaEstado final - sem mais transições
EXPIREDTransação expiradaEstado final - sem mais transições
DECLINEDTransação recusada/declinadaEstado final - sem mais transições
REFUNDEDTransação reembolsada/revertidaEstado final - sem mais transições
SUCCESSFULTransação concluída com sucessoEstado final - sem mais transições
Importante: Uma vez que uma transação atinge um estado fechado, não pode transitar de volta para um estado aberto. Isso garante a integridade da transação e trilhas de auditoria adequadas.

Faixas de Pontuação de Risco

Pontuação de risco de 0 a 100 (armazenada com 2 decimais de precisão):
  • 0-30: Risco baixo (verde)
  • 31-60: Risco médio (amarelo)
  • 61-80: Risco alto (laranja)
  • 81-100: Risco crítico (vermelho)

Fontes de Taxa de Conversão de Moeda

O campo rateSource indica como a taxa de câmbio foi obtida:
  • ms-provider: Taxa em tempo real do microserviço de moeda (fonte primária)
  • cache-fallback: Taxa em cache (< 1h) quando serviço indisponível
  • no-conversion: Conversão não necessária (moeda já é USD)
  • null: Conversão falhou ou não é aplicável

Respostas de Erro

400 Bad Request - Erro de Validação

Exemplo 1: Campos obrigatórios faltando
{
  "error": "Validation failed",
  "details": [
    {
      "path": "externalId",
      "message": "Required",
      "code": "invalid_type"
    },
    {
      "path": "amount",
      "message": "Number must be greater than 0",
      "code": "too_small"
    }
  ]
}
Exemplo 2: paymentDetails inválidos para cartão (aninhado em 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"
    }
  ]
}
Exemplo 3: Detalhes PIX inválidos (aninhado em 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"
    }
  ]
}
Exemplo 4: Endereço IP inválido em 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 - Organização Faltando

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

401 Unauthorized

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

404 Not Found - Entidade Não Encontrada

{
  "error": "Entity not found",
  "message": "Origin entity with ID 'customer_001' not found"
}

500 Internal Server Error

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

Melhores Práticas

  1. Use IDs externos consistentes - Seu externalId deve ser único em todo o seu sistema para prevenir duplicatas e permitir rastreamento adequado
  2. Inclua referências de entidade - Vincule transações a entidades (originEntityId, destinationEntityId) para melhor avaliação de risco e análise de relacionamentos
  3. Forneça metadados abrangentes - Inclua contexto de negócio relevante no campo metadata para regras personalizadas e análise futura
  4. Defina transactedAt com precisão - Sempre forneça o timestamp real da transação, não confie no padrão (horário atual)
  5. Trate conversão de moeda com elegância - Esteja ciente de que a conversão de moeda pode falhar; verifique amountInUsd e exchangeRate na resposta
  6. Execute regras estrategicamente - Use executeRules: false para importações em massa ou quando quiser adiar a avaliação de risco
  7. Monitore pontuações de risco - Configure alertas para transações com pontuações de risco altas ou status flagged
  8. Implemente tratamento de erros - Trate erros de validação e retenha falhas transitórias com backoff exponencial
  9. Use detalhes de pagamento - Forneça informações detalhadas de pagamento dentro de originDetails.paymentDetails e destinationDetails.paymentDetails para melhor detecção de fraude e contexto de transação

Próximos Passos