openapi: 3.1.0
info:
  title: API de Tracer
  description: >-
    Referencia completa de la API para los servicios de Tracer, incluyendo
    validacion de transacciones, gestion de reglas, limites de gasto y eventos
    de auditoria para cumplimiento SOX/GLBA.
  version: 1.0.1
servers:
  - url: https://tracer.sandbox.lerian.net
tags:
  - name: Health API
    description: >-
      Endpoints de verificacion de salud para sondas de vida y preparacion.
      Estos endpoints no requieren autenticacion.
  - name: Validations API
    description: >-
      Endpoints de validación de transacciones. El objetivo de rendimiento es
      inferior a 80ms (p99). Las validaciones son idempotentes por `requestId` —
      una solicitud duplicada devuelve el resultado en caché con HTTP 200,
      mientras que una solicitud nueva devuelve HTTP 201. No se requiere
      encabezado de idempotencia.
  - name: Rules API
    description: >-
      Endpoints de gestion de reglas de validacion. Las reglas utilizan
      expresiones CEL (Common Expression Language).
  - name: Limits API
    description: >-
      Endpoints de gestion de limites de gasto. Los limites controlan los montos
      de transacciones por alcance y periodo.
  - name: Audit Events API
    description: >-
      Endpoints de rastro de auditoria para cumplimiento SOX/GLBA. Todas las
      decisiones de validacion y cambios de configuracion son registrados.
security:
  - ApiKeyAuth: []
  - BearerAuth: []
paths:
  /v1/validations:
    get:
      summary: Listar Validaciones de Transacciones
      description: >-
        Use este endpoint para listar registros de validacion de transacciones
        con paginacion basada en cursor y filtros. Util para reportes de
        cumplimiento y analisis de tendencias.
      operationId: listValidations
      tags:
        - Validations API
      parameters:
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
        - name: limit
          in: query
          description: >-
            El numero maximo de elementos a incluir en la respuesta.
            Predeterminado: 100, Maximo: 1000
          required: false
          example: 100
          schema:
            type: integer
            minimum: 1
            maximum: 1000
            default: 100
        - name: cursor
          in: query
          description: >-
            Cursor de paginacion de la respuesta anterior. Al usar cursor,
            sortBy y sortOrder no pueden ser cambiados.
          required: false
          schema:
            type: string
        - name: sort_by
          in: query
          description: El campo usado para ordenar los resultados.
          required: false
          example: created_at
          schema:
            type: string
            enum:
              - created_at
              - processing_time_ms
            default: created_at
        - name: sort_order
          in: query
          description: El orden usado para ordenar los resultados.
          required: false
          example: DESC
          schema:
            type: string
            enum:
              - ASC
              - DESC
            default: DESC
        - name: start_date
          in: query
          description: >-
            Filtrar desde esta fecha (inclusivo). Debe estar en formato RFC3339
            con zona horaria. Por defecto 90 dias antes de la hora actual.
          required: false
          example: '2026-01-01T00:00:00Z'
          schema:
            type: string
            format: date-time
        - name: end_date
          in: query
          description: >-
            Filtrar hasta esta fecha (exclusivo). Debe estar en formato RFC3339
            con zona horaria. Por defecto la hora actual.
          required: false
          example: '2026-01-31T23:59:59Z'
          schema:
            type: string
            format: date-time
        - name: decision
          in: query
          description: Filtrar por decision (ALLOW, DENY, REVIEW).
          required: false
          schema:
            type: string
            enum:
              - ALLOW
              - DENY
              - REVIEW
        - name: account_id
          in: query
          description: Filtrar por ID de cuenta (UUID).
          required: false
          schema:
            type: string
            format: uuid
        - name: matched_rule_id
          in: query
          description: Filtrar por ID de regla coincidente (UUID).
          required: false
          schema:
            type: string
            format: uuid
        - name: exceeded_limit_id
          in: query
          description: Filtrar por ID de limite excedido (UUID).
          required: false
          schema:
            type: string
            format: uuid
        - name: segment_id
          in: query
          description: Filtrar por ID de segmento (UUID).
          required: false
          schema:
            type: string
            format: uuid
        - name: portfolio_id
          in: query
          description: Filtrar por ID de portafolio (UUID).
          required: false
          schema:
            type: string
            format: uuid
        - name: transaction_type
          in: query
          description: Filtrar por tipo de transaccion.
          required: false
          schema:
            type: string
            enum:
              - CARD
              - WIRE
              - PIX
              - CRYPTO
      responses:
        '200':
          description: >-
            Indica que la solicitud fue exitosa y la respuesta contiene los
            datos esperados.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListValidationsResponse'
              example:
                transactionValidations:
                  - validationId: 019c96a0-10d2-7193-8841-0d7347efd09a
                    accountId: 019c96a0-0c0c-7221-8cf3-13313fb60081
                    segmentId: 019c96a0-0b4e-7079-8be0-ab6bdccf975f
                    transactionType: CARD
                    amount: '1500.00'
                    currency: BRL
                    decision: ALLOW
                    reason: Transaccion aprobada
                    matchedRuleIds: []
                    exceededLimitIds: []
                    processingTimeMs: 23
                    createdAt: '2026-01-30T10:30:00Z'
                hasMore: true
                nextCursor: eyJpZCI6IjEyMzQifQ==
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0006:
                  $ref: '#/components/examples/Error0006'
                Error0020:
                  $ref: '#/components/examples/Error0020'
                Error0044:
                  $ref: '#/components/examples/Error0044'
                Error0045:
                  $ref: '#/components/examples/Error0045'
                Error0250:
                  $ref: '#/components/examples/Error0250'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
        '504':
          description: >-
            Gateway Timeout — emitido solo cuando la consulta excede su deadline
            del lado del servidor (típicamente solo bajo fault injection o
            latencia extrema de base de datos; no es común verlo en operación
            normal).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0252:
                  $ref: '#/components/examples/Error0252'
    post:
      summary: Validar una Transaccion
      description: >-
        Use este endpoint para validar una transaccion contra reglas y limites
        configurados en tiempo real. Devuelve una decision (ALLOW, DENY o
        REVIEW) junto con detalles sobre que reglas coincidieron y uso de
        limites. El objetivo de rendimiento es inferior a 80ms (p99).
      operationId: validateTransaction
      tags:
        - Validations API
      parameters:
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ValidationRequest'
            example:
              requestId: 019c96a0-10ce-75fc-a273-dc799079a99c
              transactionType: CARD
              subType: debit
              amount: '1500.00'
              currency: BRL
              transactionTimestamp: '2026-01-30T10:30:00Z'
              account:
                accountId: 019c96a0-0c0c-7221-8cf3-13313fb60081
                type: checking
                status: active
              segment:
                segmentId: 019c96a0-0b4e-7079-8be0-ab6bdccf975f
                name: corporate
              merchant:
                merchantId: 019c96a0-4f70-7678-e1f2-7b8c9d0e1f2a
                name: Store ABC
                category: '5411'
                country: BR
              metadata:
                channel: MOBILE_APP
                deviceId: device-abc123
      responses:
        '200':
          description: >-
            Solicitud duplicada detectada (replay idempotente). Retorna el
            resultado de validación en caché de la solicitud original. El cuerpo
            de respuesta es idéntico al de la respuesta 201 original.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationResponse'
              example:
                requestId: 019c96a0-10ce-75fc-a273-dc799079a99c
                validationId: 019c96a0-10d2-7193-8841-0d7347efd09a
                decision: ALLOW
                reason: Transacción aprobada
                matchedRuleIds: []
                evaluatedRuleIds:
                  - 019c96a0-1071-7a0d-9916-a831221de252
                  - 019c96a0-4b30-7234-a1b2-3d4e5f6a7b8c
                limitUsageDetails:
                  - limitId: 019c96a0-0c0d-7915-84b9-e497bfee9916
                    limitAmount: '50000.00'
                    currentUsage: '16500.00'
                    exceeded: false
                    period: DAILY
                processingTimeMs: 23
        '201':
          description: >-
            Validación procesada exitosamente. Retornado para nuevas solicitudes
            de validación (requestId único).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationResponse'
              example:
                requestId: 019c96a0-10ce-75fc-a273-dc799079a99c
                validationId: 019c96a0-10d2-7193-8841-0d7347efd09a
                decision: ALLOW
                reason: Transacción aprobada
                matchedRuleIds: []
                evaluatedRuleIds:
                  - 019c96a0-1071-7a0d-9916-a831221de252
                  - 019c96a0-4b30-7234-a1b2-3d4e5f6a7b8c
                limitUsageDetails:
                  - limitId: 019c96a0-0c0d-7915-84b9-e497bfee9916
                    limitAmount: '50000.00'
                    currentUsage: '16500.00'
                    exceeded: false
                    period: DAILY
                processingTimeMs: 23
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0001:
                  $ref: '#/components/examples/Error0001'
                Error0003:
                  $ref: '#/components/examples/Error0003'
                Error0060:
                  $ref: '#/components/examples/Error0060'
                Error0063:
                  $ref: '#/components/examples/Error0063'
                Error0064:
                  $ref: '#/components/examples/Error0064'
                Error0089:
                  $ref: '#/components/examples/Error0089'
                Error0220:
                  $ref: '#/components/examples/Error0220'
                Error0221:
                  $ref: '#/components/examples/Error0221'
                Error0222:
                  $ref: '#/components/examples/Error0222'
                Error0223:
                  $ref: '#/components/examples/Error0223'
                Error0224:
                  $ref: '#/components/examples/Error0224'
                Error0225:
                  $ref: '#/components/examples/Error0225'
                Error0226:
                  $ref: '#/components/examples/Error0226'
                Error0227:
                  $ref: '#/components/examples/Error0227'
                Error0228:
                  $ref: '#/components/examples/Error0228'
                Error0230:
                  $ref: '#/components/examples/Error0230'
                Error0231:
                  $ref: '#/components/examples/Error0231'
                Error0232:
                  $ref: '#/components/examples/Error0232'
                Error0233:
                  $ref: '#/components/examples/Error0233'
                Error0234:
                  $ref: '#/components/examples/Error0234'
                Error0235:
                  $ref: '#/components/examples/Error0235'
                Error0236:
                  $ref: '#/components/examples/Error0236'
                Error0237:
                  $ref: '#/components/examples/Error0237'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '413':
          description: Carga util demasiado grande
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0011:
                  $ref: '#/components/examples/Error0011'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
                Error0103:
                  $ref: '#/components/examples/Error0103'
                Error0136:
                  $ref: '#/components/examples/Error0136'
        '503':
          description: Servicio no disponible
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0012:
                  $ref: '#/components/examples/Error0012'
        '504':
          description: Tiempo de espera de puerta de enlace agotado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0229:
                  $ref: '#/components/examples/Error0229'
  /v1/validations/{id}:
    get:
      summary: Recuperar una Validacion de Transaccion
      description: >-
        Use este endpoint para recuperar un registro de validacion de
        transaccion por su identificador unico. Util para auditoria y depuracion
        de decisiones de validacion.
      operationId: getValidation
      tags:
        - Validations API
      parameters:
        - $ref: '#/components/parameters/ValidationId'
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
      responses:
        '200':
          description: >-
            Indica que la solicitud fue exitosa y la respuesta contiene los
            datos esperados.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionValidation'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0007:
                  $ref: '#/components/examples/Error0007'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '404':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0251:
                  $ref: '#/components/examples/Error0251'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
  /v1/rules:
    get:
      summary: Listar Reglas
      description: >-
        Use este endpoint para listar reglas de validacion con paginacion basada
        en cursor y filtros opcionales. Las reglas DELETED no se devuelven en
        los listados.
      operationId: listRules
      tags:
        - Rules API
      parameters:
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
        - name: limit
          in: query
          description: >-
            El numero maximo de elementos a incluir en la respuesta.
            Predeterminado: 10, Maximo: 100
          required: false
          example: 10
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 10
        - name: cursor
          in: query
          description: Cursor de paginacion de la respuesta anterior.
          required: false
          schema:
            type: string
        - name: name
          in: query
          description: >-
            Filtrar por nombre (coincidencia parcial sin distincion de
            mayusculas/minusculas).
          required: false
          schema:
            type: string
            maxLength: 255
        - name: status
          in: query
          description: >-
            Filtrar por estado (DRAFT, ACTIVE, INACTIVE). Las reglas DELETED no
            son listables.
          required: false
          schema:
            type: string
            enum:
              - DRAFT
              - ACTIVE
              - INACTIVE
        - name: action
          in: query
          description: Filtrar por accion (ALLOW, DENY, REVIEW).
          required: false
          schema:
            type: string
            enum:
              - ALLOW
              - DENY
              - REVIEW
        - name: account_id
          in: query
          description: Filtrar por ID de cuenta (UUID).
          required: false
          schema:
            type: string
            format: uuid
        - name: segment_id
          in: query
          description: Filtrar por ID de segmento (UUID).
          required: false
          schema:
            type: string
            format: uuid
        - name: portfolio_id
          in: query
          description: Filtrar por ID de portafolio (UUID).
          required: false
          schema:
            type: string
            format: uuid
        - name: merchant_id
          in: query
          description: Filtrar por ID de comerciante (UUID).
          required: false
          schema:
            type: string
            format: uuid
        - name: transaction_type
          in: query
          description: Filtrar por tipo de transacción.
          required: false
          schema:
            type: string
            enum:
              - CARD
              - WIRE
              - PIX
              - CRYPTO
        - name: sub_type
          in: query
          description: >-
            Filtrar por subtipo de transacción (p. ej., débito, crédito,
            prepago).
          required: false
          schema:
            type: string
            maxLength: 50
        - name: sort_by
          in: query
          description: El campo usado para ordenar los resultados.
          required: false
          schema:
            type: string
            enum:
              - created_at
              - updated_at
              - name
              - status
            default: created_at
        - name: sort_order
          in: query
          description: El orden usado para ordenar los resultados.
          required: false
          schema:
            type: string
            enum:
              - ASC
              - DESC
            default: DESC
      responses:
        '200':
          description: >-
            Indica que la solicitud fue exitosa y la respuesta contiene los
            datos esperados.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListRulesResponse'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0001:
                  $ref: '#/components/examples/Error0001'
                Error0006:
                  $ref: '#/components/examples/Error0006'
                Error0040:
                  $ref: '#/components/examples/Error0040'
                Error0041:
                  $ref: '#/components/examples/Error0041'
                Error0042:
                  $ref: '#/components/examples/Error0042'
                Error0043:
                  $ref: '#/components/examples/Error0043'
                Error0044:
                  $ref: '#/components/examples/Error0044'
                Error0045:
                  $ref: '#/components/examples/Error0045'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
    post:
      summary: Crear una Regla
      description: >-
        Use este endpoint para crear una regla de validacion con una expresion
        CEL y matriz de alcances. Las reglas siempre se crean en estado DRAFT.
        Use el endpoint de activacion para iniciar la evaluacion.
      operationId: createRule
      tags:
        - Rules API
      parameters:
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateRuleInput'
            example:
              name: Bloquear transacciones de alto valor
              description: >-
                Denegar transacciones superiores a BRL 10,000 para pagos con
                tarjeta
              expression: amount > 1000000
              action: DENY
              scopes:
                - transactionType: CARD
      responses:
        '201':
          description: Indica que la regla fue creada exitosamente en estado DRAFT.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rule'
              example:
                ruleId: 019c96a0-1071-7a0d-9916-a831221de252
                name: Bloquear transacciones de alto valor
                description: >-
                  Denegar transacciones superiores a BRL 10,000 para pagos con
                  tarjeta
                expression: amount > 1000000
                action: DENY
                scopes:
                  - transactionType: CARD
                status: DRAFT
                createdAt: '2026-01-30T10:00:00Z'
                updatedAt: '2026-01-30T10:00:00Z'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0003:
                  $ref: '#/components/examples/Error0003'
                Error0083:
                  $ref: '#/components/examples/Error0083'
                Error0084:
                  $ref: '#/components/examples/Error0084'
                Error0085:
                  $ref: '#/components/examples/Error0085'
                Error0106:
                  $ref: '#/components/examples/Error0106'
                Error0107:
                  $ref: '#/components/examples/Error0107'
                Error0108:
                  $ref: '#/components/examples/Error0108'
                Error0109:
                  $ref: '#/components/examples/Error0109'
                Error0110:
                  $ref: '#/components/examples/Error0110'
                Error0111:
                  $ref: '#/components/examples/Error0111'
                Error0112:
                  $ref: '#/components/examples/Error0112'
                Error0113:
                  $ref: '#/components/examples/Error0113'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '409':
          description: Conflicto
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0101:
                  $ref: '#/components/examples/Error0101'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
  /v1/rules/{id}:
    get:
      summary: Recuperar una Regla
      description: Use este endpoint para recuperar una regla por su identificador unico.
      operationId: getRule
      tags:
        - Rules API
      parameters:
        - $ref: '#/components/parameters/RuleId'
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
      responses:
        '200':
          description: >-
            Indica que la solicitud fue exitosa y la respuesta contiene los
            datos esperados.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rule'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0007:
                  $ref: '#/components/examples/Error0007'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '404':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0100:
                  $ref: '#/components/examples/Error0100'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
    patch:
      summary: Actualizar una Regla
      description: >-
        Use este endpoint para actualizar parcialmente una regla. Solo los
        campos proporcionados son actualizados. La expresion solo puede ser
        modificada cuando la regla esta en estado DRAFT.
      operationId: updateRule
      tags:
        - Rules API
      parameters:
        - $ref: '#/components/parameters/RuleId'
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateRuleInput'
            example:
              name: Nombre de regla actualizado
              description: Descripcion actualizada
      responses:
        '200':
          description: Indica que la regla fue actualizada exitosamente.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rule'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0001:
                  $ref: '#/components/examples/Error0001'
                Error0002:
                  $ref: '#/components/examples/Error0002'
                Error0003:
                  $ref: '#/components/examples/Error0003'
                Error0007:
                  $ref: '#/components/examples/Error0007'
                Error0083:
                  $ref: '#/components/examples/Error0083'
                Error0084:
                  $ref: '#/components/examples/Error0084'
                Error0085:
                  $ref: '#/components/examples/Error0085'
                Error0104:
                  $ref: '#/components/examples/Error0104'
                Error0107:
                  $ref: '#/components/examples/Error0107'
                Error0109:
                  $ref: '#/components/examples/Error0109'
                Error0111:
                  $ref: '#/components/examples/Error0111'
                Error0112:
                  $ref: '#/components/examples/Error0112'
                Error0113:
                  $ref: '#/components/examples/Error0113'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '404':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0100:
                  $ref: '#/components/examples/Error0100'
        '409':
          description: Conflicto
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0101:
                  $ref: '#/components/examples/Error0101'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
    delete:
      summary: Eliminar una Regla
      description: >-
        Use este endpoint para eliminar logicamente una regla. Solo las reglas
        DRAFT e INACTIVE pueden ser eliminadas. Las reglas ACTIVE deben
        desactivarse primero. La regla se preserva en el rastro de auditoria.
      operationId: deleteRule
      tags:
        - Rules API
      parameters:
        - $ref: '#/components/parameters/RuleId'
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
      responses:
        '204':
          description: Indica que la regla fue eliminada exitosamente.
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0007:
                  $ref: '#/components/examples/Error0007'
                Error0102:
                  $ref: '#/components/examples/Error0102'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '404':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0100:
                  $ref: '#/components/examples/Error0100'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
  /v1/rules/{id}/activate:
    post:
      summary: Activar una Regla
      description: >-
        Use este endpoint para activar una regla. Activa la regla para
        evaluacion en validaciones. Las transiciones validas son DRAFT a ACTIVE
        e INACTIVE a ACTIVE.
      operationId: activateRule
      tags:
        - Rules API
      parameters:
        - $ref: '#/components/parameters/RuleId'
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
      responses:
        '200':
          description: Indica que la regla fue activada exitosamente.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rule'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0007:
                  $ref: '#/components/examples/Error0007'
                Error0083:
                  $ref: '#/components/examples/Error0083'
                Error0102:
                  $ref: '#/components/examples/Error0102'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '404':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0100:
                  $ref: '#/components/examples/Error0100'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
  /v1/rules/{id}/deactivate:
    post:
      summary: Desactivar una Regla
      description: >-
        Use este endpoint para desactivar una regla. Pausa la regla de ser
        evaluada en validaciones. Las transiciones validas son ACTIVE a INACTIVE
        y DRAFT a INACTIVE.
      operationId: deactivateRule
      tags:
        - Rules API
      parameters:
        - $ref: '#/components/parameters/RuleId'
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
      responses:
        '200':
          description: Indica que la regla fue desactivada exitosamente.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rule'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0007:
                  $ref: '#/components/examples/Error0007'
                Error0102:
                  $ref: '#/components/examples/Error0102'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '404':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0100:
                  $ref: '#/components/examples/Error0100'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
  /v1/rules/{id}/draft:
    post:
      summary: Marcar una Regla como DRAFT
      description: >-
        Use este endpoint para transicionar una regla de INACTIVE de vuelta a
        DRAFT. Permite reeditar una regla previamente desactivada antes de
        reactivarla.
      operationId: draftRule
      tags:
        - Rules API
      parameters:
        - $ref: '#/components/parameters/RuleId'
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
      responses:
        '200':
          description: Indica que la regla fue transicionada a DRAFT exitosamente.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rule'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0007:
                  $ref: '#/components/examples/Error0007'
                Error0102:
                  $ref: '#/components/examples/Error0102'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '404':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0100:
                  $ref: '#/components/examples/Error0100'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
  /v1/limits:
    get:
      summary: Listar Limites
      description: >-
        Use este endpoint para listar limites de gasto con paginacion basada en
        cursor y filtros opcionales. Los limites DELETED no se devuelven en los
        listados.
      operationId: listLimits
      tags:
        - Limits API
      parameters:
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
        - name: limit
          in: query
          description: >-
            El numero maximo de elementos a incluir en la respuesta.
            Predeterminado: 10, Maximo: 100
          required: false
          example: 10
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 10
        - name: cursor
          in: query
          description: Cursor de paginacion de la respuesta anterior.
          required: false
          schema:
            type: string
        - name: name
          in: query
          description: Filtrar por nombre de límite (coincidencia exacta).
          required: false
          schema:
            type: string
        - name: status
          in: query
          description: >-
            Filtrar por estado (DRAFT, ACTIVE, INACTIVE). Los limites DELETED no
            son listables.
          required: false
          schema:
            type: string
            enum:
              - DRAFT
              - ACTIVE
              - INACTIVE
        - name: limit_type
          in: query
          description: Filtrar por tipo de limite.
          required: false
          schema:
            type: string
            enum:
              - DAILY
              - WEEKLY
              - MONTHLY
              - CUSTOM
              - PER_TRANSACTION
        - name: account_id
          in: query
          description: Filtrar por ID de cuenta (UUID).
          required: false
          schema:
            type: string
            format: uuid
        - name: segment_id
          in: query
          description: Filtrar por ID de segmento (UUID).
          required: false
          schema:
            type: string
            format: uuid
        - name: portfolio_id
          in: query
          description: Filtrar por ID de portafolio (UUID).
          required: false
          schema:
            type: string
            format: uuid
        - name: merchant_id
          in: query
          description: Filtrar por ID de comerciante (UUID).
          required: false
          schema:
            type: string
            format: uuid
        - name: transaction_type
          in: query
          description: Filtrar por tipo de transacción.
          required: false
          schema:
            type: string
            enum:
              - CARD
              - WIRE
              - PIX
              - CRYPTO
        - name: sub_type
          in: query
          description: >-
            Filtrar por subtipo de transacción (p. ej., débito, crédito,
            prepago).
          required: false
          schema:
            type: string
            maxLength: 50
        - name: sort_by
          in: query
          description: El campo utilizado para ordenar los resultados.
          required: false
          schema:
            type: string
            enum:
              - created_at
              - updated_at
              - name
              - max_amount
            default: created_at
        - name: sort_order
          in: query
          description: El orden utilizado para ordenar los resultados.
          required: false
          schema:
            type: string
            enum:
              - ASC
              - DESC
            default: DESC
      responses:
        '200':
          description: >-
            Indica que la solicitud fue exitosa y la respuesta contiene los
            datos esperados.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListLimitsResponse'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0001:
                  $ref: '#/components/examples/Error0001'
                Error0006:
                  $ref: '#/components/examples/Error0006'
                Error0040:
                  $ref: '#/components/examples/Error0040'
                Error0041:
                  $ref: '#/components/examples/Error0041'
                Error0044:
                  $ref: '#/components/examples/Error0044'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
    post:
      summary: Crear un Limite
      description: >-
        Use este endpoint para crear un limite de gasto con matriz de alcances.
        Los limites se crean en estado DRAFT. Use el endpoint de activacion para
        iniciar la aplicacion. Despues de la creacion, limitType y currency no
        pueden ser cambiados.
      operationId: createLimit
      tags:
        - Limits API
      parameters:
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateLimitInput'
            example:
              name: Limite Corporativo Diario
              description: Limite de gasto diario para segmento corporativo
              limitType: DAILY
              maxAmount: '50000.00'
              currency: BRL
              scopes:
                - segmentId: 019c96a0-0b4e-7079-8be0-ab6bdccf975f
                  transactionType: CARD
      responses:
        '201':
          description: Indica que el limite fue creado exitosamente en estado DRAFT.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Limit'
              example:
                limitId: 019c96a0-0c0d-7915-84b9-e497bfee9916
                name: Limite Corporativo Diario
                description: Limite de gasto diario para segmento corporativo
                limitType: DAILY
                maxAmount: '50000.00'
                currency: BRL
                scopes:
                  - segmentId: 019c96a0-0b4e-7079-8be0-ab6bdccf975f
                    transactionType: CARD
                status: DRAFT
                resetAt: '2026-01-31T00:00:00Z'
                createdAt: '2026-01-30T10:00:00Z'
                updatedAt: '2026-01-30T10:00:00Z'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0001:
                  $ref: '#/components/examples/Error0001'
                Error0003:
                  $ref: '#/components/examples/Error0003'
                Error0122:
                  $ref: '#/components/examples/Error0122'
                Error0123:
                  $ref: '#/components/examples/Error0123'
                Error0124:
                  $ref: '#/components/examples/Error0124'
                Error0125:
                  $ref: '#/components/examples/Error0125'
                Error0126:
                  $ref: '#/components/examples/Error0126'
                Error0127:
                  $ref: '#/components/examples/Error0127'
                Error0129:
                  $ref: '#/components/examples/Error0129'
                Error0130:
                  $ref: '#/components/examples/Error0130'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '409':
          description: Conflicto
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0121:
                  $ref: '#/components/examples/Error0121'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
  /v1/limits/{id}:
    get:
      summary: Recuperar un Limite
      description: >-
        Use este endpoint para recuperar un limite de gasto por su identificador
        unico.
      operationId: getLimit
      tags:
        - Limits API
      parameters:
        - $ref: '#/components/parameters/LimitId'
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
      responses:
        '200':
          description: >-
            Indica que la solicitud fue exitosa y la respuesta contiene los
            datos esperados.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Limit'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0007:
                  $ref: '#/components/examples/Error0007'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '404':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0120:
                  $ref: '#/components/examples/Error0120'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
    patch:
      summary: Actualizar un Limite
      description: >-
        Use este endpoint para actualizar parcialmente un limite de gasto. Solo
        los campos proporcionados son actualizados. limitType y currency son
        inmutables y no pueden ser cambiados.
      operationId: updateLimit
      tags:
        - Limits API
      parameters:
        - $ref: '#/components/parameters/LimitId'
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateLimitInput'
            example:
              maxAmount: '75000.00'
      responses:
        '200':
          description: Indica que el limite fue actualizado exitosamente.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Limit'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0001:
                  $ref: '#/components/examples/Error0001'
                Error0002:
                  $ref: '#/components/examples/Error0002'
                Error0003:
                  $ref: '#/components/examples/Error0003'
                Error0007:
                  $ref: '#/components/examples/Error0007'
                Error0123:
                  $ref: '#/components/examples/Error0123'
                Error0124:
                  $ref: '#/components/examples/Error0124'
                Error0125:
                  $ref: '#/components/examples/Error0125'
                Error0126:
                  $ref: '#/components/examples/Error0126'
                Error0127:
                  $ref: '#/components/examples/Error0127'
                Error0129:
                  $ref: '#/components/examples/Error0129'
                Error0130:
                  $ref: '#/components/examples/Error0130'
                Error0131:
                  $ref: '#/components/examples/Error0131'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '404':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0120:
                  $ref: '#/components/examples/Error0120'
        '409':
          description: Conflicto de nombre de límite
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0304:
                  $ref: '#/components/examples/Error0304'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
    delete:
      summary: Eliminar un Limite
      description: >-
        Use este endpoint para eliminar logicamente un limite de gasto. Solo los
        limites DRAFT e INACTIVE pueden ser eliminados. Los limites ACTIVE deben
        desactivarse primero. El limite se preserva en el rastro de auditoria.
      operationId: deleteLimit
      tags:
        - Limits API
      parameters:
        - $ref: '#/components/parameters/LimitId'
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
      responses:
        '204':
          description: Indica que el limite fue eliminado exitosamente.
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0007:
                  $ref: '#/components/examples/Error0007'
                Error0121:
                  $ref: '#/components/examples/Error0121'
                Error0128:
                  $ref: '#/components/examples/Error0128'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '404':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0120:
                  $ref: '#/components/examples/Error0120'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
  /v1/limits/{id}/activate:
    post:
      summary: Activar un Limite
      description: >-
        Use este endpoint para activar un limite de gasto. Activa el limite para
        aplicacion en validaciones.
      operationId: activateLimit
      tags:
        - Limits API
      parameters:
        - $ref: '#/components/parameters/LimitId'
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
      responses:
        '200':
          description: Indica que el limite fue activado exitosamente.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Limit'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0007:
                  $ref: '#/components/examples/Error0007'
                Error0121:
                  $ref: '#/components/examples/Error0121'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '404':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0120:
                  $ref: '#/components/examples/Error0120'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
  /v1/limits/{id}/deactivate:
    post:
      summary: Desactivar un Limite
      description: >-
        Use este endpoint para desactivar un limite de gasto. Pausa el limite de
        ser aplicado en validaciones.
      operationId: deactivateLimit
      tags:
        - Limits API
      parameters:
        - $ref: '#/components/parameters/LimitId'
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
      responses:
        '200':
          description: Indica que el limite fue desactivado exitosamente.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Limit'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0007:
                  $ref: '#/components/examples/Error0007'
                Error0121:
                  $ref: '#/components/examples/Error0121'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '404':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0120:
                  $ref: '#/components/examples/Error0120'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
  /v1/limits/{id}/draft:
    post:
      summary: Marcar un Limite como DRAFT
      description: >-
        Use este endpoint para transicionar un limite de INACTIVE de vuelta a
        DRAFT. Permite reeditar un limite previamente desactivado antes de
        reactivarlo.
      operationId: draftLimit
      tags:
        - Limits API
      parameters:
        - $ref: '#/components/parameters/LimitId'
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
      responses:
        '200':
          description: Indica que el limite fue transicionado a DRAFT exitosamente.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Limit'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0007:
                  $ref: '#/components/examples/Error0007'
                Error0102:
                  $ref: '#/components/examples/Error0102'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '404':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0100:
                  $ref: '#/components/examples/Error0100'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
  /v1/limits/{id}/usage:
    get:
      summary: Recuperar Uso del Limite
      description: >-
        Use este endpoint para recuperar la instantanea de uso actual de un
        limite de gasto.
      operationId: getLimitUsage
      tags:
        - Limits API
      parameters:
        - $ref: '#/components/parameters/LimitId'
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
      responses:
        '200':
          description: >-
            Indica que la solicitud fue exitosa y la respuesta contiene los
            datos esperados.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UsageSnapshot'
              example:
                limitId: 019c96a0-0c0d-7915-84b9-e497bfee9916
                limitAmount: '50000.00'
                currentUsage: '15000.00'
                utilizationPercent: 30
                nearLimit: false
                resetAt: '2026-01-31T00:00:00Z'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0007:
                  $ref: '#/components/examples/Error0007'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '404':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0120:
                  $ref: '#/components/examples/Error0120'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
  /v1/audit-events:
    get:
      summary: Listar Eventos de Auditoria
      description: >-
        Use este endpoint para listar eventos de auditoria con filtros y
        paginacion basada en cursor. Disenado para reportes de cumplimiento
        SOX/GLBA.
      operationId: listAuditEvents
      tags:
        - Audit Events API
      parameters:
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
        - name: limit
          in: query
          description: >-
            El numero maximo de elementos a incluir en la respuesta.
            Predeterminado: 100, Maximo: 1000
          required: false
          example: 100
          schema:
            type: integer
            minimum: 1
            maximum: 1000
            default: 100
        - name: cursor
          in: query
          description: Cursor de paginacion de la respuesta anterior.
          required: false
          schema:
            type: string
        - name: start_date
          in: query
          description: >-
            Fecha de inicio (formato RFC3339 con zona horaria, inclusivo). Por
            defecto 90 dias antes de la hora actual.
          required: false
          schema:
            type: string
            format: date-time
        - name: end_date
          in: query
          description: >-
            Fecha de fin (formato RFC3339 con zona horaria, exclusivo). Por
            defecto la hora actual.
          required: false
          schema:
            type: string
            format: date-time
        - name: event_type
          in: query
          description: Filtrar por tipo de evento.
          required: false
          schema:
            type: string
            enum:
              - TRANSACTION_VALIDATED
              - RULE_CREATED
              - RULE_UPDATED
              - RULE_ACTIVATED
              - RULE_DEACTIVATED
              - RULE_DRAFTED
              - RULE_DELETED
              - LIMIT_CREATED
              - LIMIT_UPDATED
              - LIMIT_ACTIVATED
              - LIMIT_DEACTIVATED
              - LIMIT_DRAFTED
              - LIMIT_DELETED
        - name: action
          in: query
          description: Filtrar por accion.
          required: false
          schema:
            type: string
            enum:
              - VALIDATE
              - CREATE
              - UPDATE
              - DELETE
              - ACTIVATE
              - DEACTIVATE
              - DRAFT
        - name: result
          in: query
          description: Filtrar por resultado.
          required: false
          schema:
            type: string
            enum:
              - SUCCESS
              - FAILED
              - ALLOW
              - DENY
              - REVIEW
        - name: resource_type
          in: query
          description: Filtrar por tipo de recurso.
          required: false
          schema:
            type: string
            enum:
              - transaction
              - rule
              - limit
        - name: resource_id
          in: query
          description: Filtrar por ID de recurso (UUID).
          required: false
          schema:
            type: string
            format: uuid
        - name: actor_type
          in: query
          description: Filtrar por tipo de actor.
          required: false
          schema:
            type: string
            enum:
              - user
              - system
        - name: actor_id
          in: query
          description: Filtrar por ID de actor.
          required: false
          schema:
            type: string
        - name: account_id
          in: query
          description: Filtrar por ID de cuenta (consulta context.request.account.id).
          required: false
          schema:
            type: string
            format: uuid
        - name: segment_id
          in: query
          description: Filtrar por ID de segmento.
          required: false
          schema:
            type: string
            format: uuid
        - name: portfolio_id
          in: query
          description: Filtrar por ID de portafolio.
          required: false
          schema:
            type: string
            format: uuid
        - name: transaction_type
          in: query
          description: Filtrar por tipo de transaccion.
          required: false
          schema:
            type: string
        - name: matched_rule_id
          in: query
          description: >-
            Filtrar por ID de regla coincidente (consulta de contenido de
            matriz).
          required: false
          schema:
            type: string
            format: uuid
        - name: sort_by
          in: query
          description: El campo usado para ordenar los resultados.
          required: false
          schema:
            type: string
            enum:
              - created_at
              - event_type
            default: created_at
        - name: sort_order
          in: query
          description: El orden usado para ordenar los resultados.
          required: false
          schema:
            type: string
            enum:
              - ASC
              - DESC
            default: DESC
      responses:
        '200':
          description: >-
            Indica que la solicitud fue exitosa y la respuesta contiene los
            datos esperados.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListAuditEventsResponse'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0006:
                  $ref: '#/components/examples/Error0006'
                Error0020:
                  $ref: '#/components/examples/Error0020'
                Error0044:
                  $ref: '#/components/examples/Error0044'
                Error0141:
                  $ref: '#/components/examples/Error0141'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
  /v1/audit-events/{id}:
    get:
      summary: Recuperar un Evento de Auditoria
      description: >-
        Use este endpoint para recuperar un evento de auditoria individual por
        su identificador unico. Disenado para cumplimiento SOX/GLBA.
      operationId: getAuditEvent
      tags:
        - Audit Events API
      parameters:
        - $ref: '#/components/parameters/AuditEventId'
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
      responses:
        '200':
          description: >-
            Indica que la solicitud fue exitosa y la respuesta contiene los
            datos esperados.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuditEvent'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0007:
                  $ref: '#/components/examples/Error0007'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '404':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0140:
                  $ref: '#/components/examples/Error0140'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
  /v1/audit-events/{id}/verify:
    get:
      summary: Verificar Cadena de Hash de Evento de Auditoria
      description: >-
        Use este endpoint para verificar la integridad de la cadena de hash de
        eventos de auditoria hasta un evento especifico. Detecta intentos de
        manipulacion. Disenado para cumplimiento SOX/GLBA.
      operationId: verifyAuditEvent
      tags:
        - Audit Events API
      parameters:
        - $ref: '#/components/parameters/AuditEventId'
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
      responses:
        '200':
          description: >-
            Indica que la verificacion de la cadena de hash fue completada
            exitosamente.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HashChainVerificationResult'
              example:
                isValid: true
                totalChecked: 1234
                message: Integridad de la cadena de hash verificada exitosamente
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0007:
                  $ref: '#/components/examples/Error0007'
        '401':
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '404':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0140:
                  $ref: '#/components/examples/Error0140'
        '500':
          description: Error Interno del Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        Autenticación por API Key. Utilizada por los despliegues de inquilino
        único (`MULTI_TENANT_ENABLED=false`). Se envía en cada solicitud
        `/v1/*`.
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Autenticación JWT bearer. Utilizada por los despliegues multiinquilino
        (`MULTI_TENANT_ENABLED=true`). El JWT es emitido por Access Manager y
        debe incluir el claim `tenantId` — Tracer resuelve el inquilino a partir
        del token, no de ningún encabezado o campo del cuerpo.
  parameters:
    XApiKey:
      name: X-API-Key
      in: header
      description: >-
        La clave API para autenticacion. **Este encabezado es requerido para
        todos los endpoints excepto verificaciones de salud**.
      required: true
      schema:
        type: string
    ContentType:
      name: Content-Type
      in: header
      description: El tipo de medio del recurso. Debe ser `application/json`.
      required: true
      example: application/json
      schema:
        type: string
    XRequestId:
      name: X-Request-Id
      in: header
      description: Un identificador unico usado para rastrear y seguir cada solicitud.
      required: false
      example: 019c96a0-10ce-75fc-a273-dc799079a99c
      schema:
        type: string
        format: uuid
    ValidationId:
      name: id
      in: path
      description: >-
        El identificador unico de la validacion de transaccion que desea
        recuperar.
      required: true
      example: 019c96a0-10d2-7193-8841-0d7347efd09a
      schema:
        type: string
        format: uuid
    RuleId:
      name: id
      in: path
      description: >-
        El identificador unico de la regla que desea recuperar, actualizar o
        eliminar.
      required: true
      example: 019c96a0-1071-7a0d-9916-a831221de252
      schema:
        type: string
        format: uuid
    LimitId:
      name: id
      in: path
      description: >-
        El identificador unico del limite que desea recuperar, actualizar o
        eliminar.
      required: true
      example: 019c96a0-0c0d-7915-84b9-e497bfee9916
      schema:
        type: string
        format: uuid
    AuditEventId:
      name: id
      in: path
      description: >-
        El identificador unico del evento de auditoria que desea recuperar o
        verificar.
      required: true
      example: 019c96a0-10d2-7134-ba5f-664142ee7052
      schema:
        type: string
        format: uuid
  schemas:
    ErrorFormat:
      type: object
      description: El mensaje de error de respuesta.
      required:
        - code
        - title
        - message
      properties:
        code:
          type: string
          description: Un identificador unico y estable para el error.
        title:
          type: string
          description: Un breve resumen del problema.
        message:
          type: string
          description: Orientacion detallada para resolver el error.
        fields:
          type: object
          additionalProperties: true
          description: Informacion adicional sobre los campos que causaron el error.
    ValidationSummary:
      type: object
      description: >-
        Representación plana y optimizada para listado de una validación de
        transacción. Devuelta por `GET /v1/validations` y contiene un
        subconjunto de los campos de `TransactionValidation` — el payload de la
        solicitud y los detalles de auditoría (`requestId`, `metadata`,
        `evaluatedRuleIds`, `limitUsageDetails`) están disponibles solo vía `GET
        /v1/validations/{id}`.
      properties:
        validationId:
          type: string
          format: uuid
          description: Identificador único de esta validación.
        decision:
          type: string
          enum:
            - ALLOW
            - DENY
            - REVIEW
          description: La decisión devuelta para la transacción validada.
        reason:
          type: string
          description: >-
            Explicación legible de la decisión. Para validaciones sin
            coincidencia de reglas, el valor literal es `No matching rules
            found`.
        amount:
          type: string
          description: 'Monto de la transacción como cadena decimal (ej.: `"1500.00"`).'
        currency:
          type: string
          description: Código de moneda ISO 4217 (en mayúsculas).
        transactionType:
          type: string
          enum:
            - CARD
            - WIRE
            - PIX
            - CRYPTO
          description: Tipo de la transacción.
        accountId:
          type: string
          format: uuid
          description: La cuenta que originó la transacción. Campo plano, no anidado.
        segmentId:
          type:
            - string
            - 'null'
          format: uuid
          description: >-
            Alcance de segmento de la transacción, si aplica. Omitido cuando es
            nulo.
        portfolioId:
          type:
            - string
            - 'null'
          format: uuid
          description: >-
            Alcance de portafolio de la transacción, si aplica. Omitido cuando
            es nulo.
        matchedRuleIds:
          type: array
          items:
            type: string
            format: uuid
          description: IDs de las reglas que coincidieron y contribuyeron a la decisión.
        exceededLimitIds:
          type: array
          items:
            type: string
            format: uuid
          description: IDs de los límites que fueron excedidos.
        processingTimeMs:
          type: number
          format: double
          description: Tiempo de procesamiento en milisegundos.
        createdAt:
          type: string
          format: date-time
          description: Cuándo se creó el registro de validación.
    ValidationRequest:
      type: object
      description: >-
        Solicitud de validacion de transaccion. Todo el contexto requerido para
        la validacion debe ser incluido (Patron Payload-Complete).
      required:
        - requestId
        - transactionType
        - amount
        - currency
        - transactionTimestamp
        - account
      properties:
        requestId:
          type: string
          format: uuid
          description: >-
            ID unico generado por el cliente para idempotencia y correlacion de
            rastro de auditoria.
        transactionType:
          type: string
          enum:
            - CARD
            - WIRE
            - PIX
            - CRYPTO
          description: Tipo de transaccion (metodo de pago).
        subType:
          type: string
          maxLength: 50
          description: >-
            Subtipo de transaccion para contexto adicional (ej., debito,
            credito, prepago).
        amount:
          type: string
          description: >-
            Monto de la transacción como cadena decimal (ej., "1500.00"). Debe
            ser un valor decimal positivo.
        currency:
          type: string
          minLength: 3
          maxLength: 3
          description: >-
            Codigo de moneda ISO 4217 (mayusculas). Los codigos en minusculas
            son rechazados.
        transactionTimestamp:
          type: string
          format: date-time
          description: >-
            Marca de tiempo de la transaccion en formato RFC3339 con zona
            horaria.
        account:
          $ref: '#/components/schemas/AccountContext'
        segment:
          $ref: '#/components/schemas/SegmentContext'
        portfolio:
          $ref: '#/components/schemas/PortfolioContext'
        merchant:
          $ref: '#/components/schemas/MerchantContext'
        metadata:
          type: object
          additionalProperties: true
          description: Pares clave-valor personalizados para expresiones de reglas.
    ValidationResponse:
      type: object
      description: Resultado de validacion de transaccion.
      properties:
        requestId:
          type: string
          format: uuid
          description: Eco del identificador de solicitud proporcionado por el cliente.
        validationId:
          type: string
          format: uuid
          description: >-
            Identificador unico generado por el servidor para este registro de
            validacion.
        decision:
          type: string
          enum:
            - ALLOW
            - DENY
            - REVIEW
          description: Decision de validacion (ALLOW, DENY o REVIEW).
        reason:
          type: string
          description: Razon legible para humanos de la decision.
        matchedRuleIds:
          type: array
          items:
            type: string
            format: uuid
          description: IDs de reglas que coincidieron y activaron la decision.
        evaluatedRuleIds:
          type: array
          items:
            type: string
            format: uuid
          description: IDs de todas las reglas que fueron evaluadas.
        limitUsageDetails:
          type: array
          items:
            $ref: '#/components/schemas/LimitUsageDetail'
          description: Detalles sobre cada limite verificado durante la validacion.
        processingTimeMs:
          type: number
          format: double
          description: Tiempo de procesamiento en milisegundos (objetivo < 80ms p99).
        evaluatedAt:
          type: string
          format: date-time
          description: >-
            Marca de tiempo del servidor cuando comenzó la evaluación, en
            formato RFC3339.
        totalRulesLoaded:
          type: integer
          description: Número total de reglas cargadas para evaluación.
        truncated:
          type: boolean
          description: Si la respuesta fue truncada debido a límites de tamaño.
    ListValidationsResponse:
      type: object
      description: >-
        Lista paginada de validaciones de transacciones (devuelve
        `ValidationSummary` — una forma plana y optimizada para listado, con
        menos campos que `TransactionValidation`).
      properties:
        transactionValidations:
          type: array
          items:
            $ref: '#/components/schemas/ValidationSummary'
          description: Lista de registros de validacion de transacciones.
        hasMore:
          type: boolean
          description: Si hay mas resultados disponibles.
        nextCursor:
          type:
            - string
            - 'null'
          description: >-
            Cursor para obtener la siguiente pagina. Null si no hay mas
            resultados.
    TransactionValidation:
      type: object
      description: Registro completo de validacion de transaccion.
      properties:
        validationId:
          type: string
          format: uuid
          description: >-
            Identificador unico generado por el servidor para este registro de
            validacion.
        requestId:
          type: string
          format: uuid
          description: >-
            Identificador de solicitud proporcionado por el cliente para
            correlacion.
        transactionType:
          type: string
          enum:
            - CARD
            - WIRE
            - PIX
            - CRYPTO
          description: Tipo de transaccion (metodo de pago).
        subType:
          type: string
          description: Subtipo de transaccion para contexto adicional.
        amount:
          type: string
          description: Monto de la transacción como cadena decimal (ej., "1500.00").
        currency:
          type: string
          description: Codigo de moneda ISO 4217.
        transactionTimestamp:
          type: string
          format: date-time
          description: Cuando ocurrio la transaccion.
        decision:
          type: string
          enum:
            - ALLOW
            - DENY
            - REVIEW
          description: Decision de validacion.
        reason:
          type: string
          description: Razon legible para humanos de la decision.
        account:
          $ref: '#/components/schemas/AccountContext'
        segment:
          $ref: '#/components/schemas/SegmentContext'
        portfolio:
          $ref: '#/components/schemas/PortfolioContext'
        merchant:
          $ref: '#/components/schemas/MerchantContext'
        metadata:
          type: object
          additionalProperties: true
          description: Pares clave-valor personalizados proporcionados en la solicitud.
        matchedRuleIds:
          type: array
          items:
            type: string
            format: uuid
          description: IDs de reglas que coincidieron y activaron la decision.
        evaluatedRuleIds:
          type: array
          items:
            type: string
            format: uuid
          description: IDs de todas las reglas que fueron evaluadas.
        limitUsageDetails:
          type: array
          items:
            $ref: '#/components/schemas/LimitUsageDetail'
          description: Detalles sobre cada limite verificado durante la validacion.
        processingTimeMs:
          type: number
          format: double
          description: Tiempo de procesamiento en milisegundos.
        totalRulesLoaded:
          type: integer
          description: Numero total de reglas cargadas para evaluacion.
        truncated:
          type: boolean
          description: Si la respuesta fue truncada debido a limites de tamano.
        createdAt:
          type: string
          format: date-time
          description: Cuando se creo el registro de validacion.
    AccountContext:
      type: object
      description: Contexto de cuenta para validacion.
      required:
        - accountId
      properties:
        accountId:
          type: string
          format: uuid
          description: Identificador de cuenta (requerido).
        type:
          type: string
          description: Tipo de cuenta.
          enum:
            - checking
            - savings
            - credit
        status:
          type: string
          description: Estado de la cuenta.
          enum:
            - active
            - suspended
            - closed
        metadata:
          type: object
          additionalProperties: true
          description: Atributos adicionales de cuenta para evaluacion de reglas.
    SegmentContext:
      type: object
      description: >-
        Contexto de segmento (opcional). Si se proporciona, segmentId es
        requerido.
      properties:
        segmentId:
          type: string
          format: uuid
          description: >-
            Identificador de segmento (requerido si se proporciona objeto
            segment).
        name:
          type: string
          description: Nombre del segmento para expresiones de reglas.
        metadata:
          type: object
          additionalProperties: true
          description: Atributos adicionales del segmento para evaluacion de reglas.
    PortfolioContext:
      type: object
      description: >-
        Contexto de portafolio (opcional). Si se proporciona, portfolioId es
        requerido.
      properties:
        portfolioId:
          type: string
          format: uuid
          description: >-
            Identificador de portafolio (requerido si se proporciona objeto
            portfolio).
        name:
          type: string
          description: Nombre del portafolio para expresiones de reglas.
        metadata:
          type: object
          additionalProperties: true
          description: Atributos adicionales del portafolio para evaluacion de reglas.
    MerchantContext:
      type: object
      description: >-
        Contexto de comerciante (opcional, recomendado para transacciones con
        tarjeta). Si se proporciona, merchantId es requerido.
      properties:
        merchantId:
          type: string
          format: uuid
          description: >-
            Identificador de comerciante (requerido si se proporciona objeto
            merchant).
        name:
          type: string
          description: Nombre del comerciante.
        category:
          type: string
          description: >-
            Codigo de Categoria de Comerciante (MCC). Debe ser un codigo de 4
            digitos segun ISO 18245.
          pattern: ^[0-9]{4}$
        country:
          type: string
          description: >-
            Pais del comerciante. Debe ser codigo ISO 3166-1 alpha-2 (2 letras
            mayusculas).
          pattern: ^[A-Z]{2}$
        metadata:
          type: object
          additionalProperties: true
          description: Atributos adicionales del comerciante para evaluacion de reglas.
    LimitUsageDetail:
      type: object
      description: Detalles sobre una verificacion de limite durante la validacion.
      properties:
        limitId:
          type: string
          format: uuid
          description: El limite que fue verificado.
        limitAmount:
          type: string
          description: Monto total del límite como cadena decimal (ej., "50000.00").
        currentUsage:
          type: string
          description: >-
            Uso proyectado despues de aplicar la transaccion. Cuando se excede,
            muestra cual seria el uso si se permitiera.
        exceeded:
          type: boolean
          description: >-
            Si el limite fue excedido. Cuando es verdadero, el contador no fue
            incrementado.
        period:
          type: string
          description: Tipo de periodo del limite.
          enum:
            - DAILY
            - WEEKLY
            - MONTHLY
            - CUSTOM
            - PER_TRANSACTION
        scope:
          type: string
          description: >-
            Alcance legible para humanos (ej., "account:uuid", "segment:uuid", o
            "global").
        attemptedAmount:
          type: string
          description: Monto de la transacción siendo validado, como cadena decimal.
        skipped:
          type: boolean
          description: >-
            Si este límite fue omitido durante la evaluación (no aplicado).
            Cuando es true, el contador no fue incrementado y `exceeded` es
            siempre false. Omitido cuando es false.
        skipReason:
          type: string
          enum:
            - outside_time_window
            - outside_custom_period
          description: >-
            Razón por la que el límite fue omitido. Solo presente cuando
            `skipped` es true.
    Rule:
      type: object
      description: Regla de validacion.
      properties:
        ruleId:
          type: string
          format: uuid
          description: Identificador unico de la regla.
        name:
          type: string
          description: Nombre de regla legible para humanos (globalmente unico).
          maxLength: 255
        description:
          type: string
          description: Proposito y explicacion de la logica de la regla.
          maxLength: 1000
        expression:
          type: string
          description: Expresion CEL que debe evaluar a booleano.
          maxLength: 5000
        action:
          type: string
          enum:
            - ALLOW
            - DENY
            - REVIEW
          description: Accion tomada cuando la expresion de la regla evalua a verdadero.
        scopes:
          type: array
          items:
            $ref: '#/components/schemas/Scope'
          description: Alcances que determinan a que transacciones aplica esta regla.
        status:
          type: string
          enum:
            - DRAFT
            - ACTIVE
            - INACTIVE
            - DELETED
          description: Estado del ciclo de vida de la regla.
        createdAt:
          type: string
          format: date-time
          description: Cuando se creo la regla.
        updatedAt:
          type: string
          format: date-time
          description: Cuando se modifico la regla por ultima vez.
        activatedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Cuando la regla fue activada por ultima vez (null si nunca fue
            activada).
        deactivatedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Cuando la regla fue desactivada por ultima vez (null si nunca fue
            desactivada).
        deletedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: Cuando la regla fue eliminada (null si no fue eliminada).
    CreateRuleInput:
      type: object
      description: Entrada para crear una nueva regla.
      required:
        - name
        - expression
        - action
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 255
          description: Nombre de regla legible para humanos (debe ser globalmente unico).
        description:
          type: string
          maxLength: 1000
          description: Proposito y explicacion de la logica de la regla.
        expression:
          type: string
          minLength: 1
          maxLength: 5000
          description: Expresion CEL que debe evaluar a booleano.
        action:
          type: string
          enum:
            - ALLOW
            - DENY
            - REVIEW
          description: Accion tomada cuando la expresion de la regla evalua a verdadero.
        scopes:
          type: array
          maxItems: 100
          items:
            $ref: '#/components/schemas/Scope'
          description: Alcances que determinan a que transacciones aplica esta regla.
    UpdateRuleInput:
      type: object
      description: >-
        Entrada para actualizar una regla. Al menos un campo debe ser
        proporcionado.
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 255
        description:
          type: string
          maxLength: 1000
        expression:
          type: string
          minLength: 1
          maxLength: 5000
          description: Expresion CEL (solo modificable para reglas DRAFT).
        action:
          type: string
          enum:
            - ALLOW
            - DENY
            - REVIEW
        scopes:
          type: array
          maxItems: 100
          items:
            $ref: '#/components/schemas/Scope'
    ListRulesResponse:
      type: object
      description: Lista paginada de reglas.
      properties:
        rules:
          type: array
          items:
            $ref: '#/components/schemas/Rule'
          description: Lista de registros de reglas.
        hasMore:
          type: boolean
          description: Si hay mas resultados disponibles.
        nextCursor:
          type:
            - string
            - 'null'
          description: >-
            Cursor para obtener la siguiente pagina. Null si no hay mas
            resultados.
    Limit:
      type: object
      description: Limite de gasto.
      properties:
        limitId:
          type: string
          format: uuid
          description: Identificador unico del limite.
        name:
          type: string
          description: Nombre de limite legible para humanos.
          maxLength: 255
        description:
          type: string
          maxLength: 1000
          description: Proposito y explicacion de uso del limite.
        limitType:
          type: string
          enum:
            - DAILY
            - WEEKLY
            - MONTHLY
            - CUSTOM
            - PER_TRANSACTION
          description: Tipo de limite (inmutable despues de la creacion).
        maxAmount:
          type: string
          pattern: ^(?:[1-9]\d*(?:\.\d{1,2})?|0\.(?:0[1-9]|[1-9]\d))$
          example: '1000.00'
          description: Monto decimal maximo.
        currency:
          type: string
          minLength: 3
          maxLength: 3
          description: Codigo de moneda ISO 4217 (inmutable despues de la creacion).
        scopes:
          type: array
          items:
            $ref: '#/components/schemas/Scope'
          description: Alcances que determinan a que transacciones aplica este limite.
        status:
          type: string
          enum:
            - DRAFT
            - ACTIVE
            - INACTIVE
            - DELETED
          description: Estado del ciclo de vida del limite.
        activeTimeStart:
          type: string
          pattern: ^([01]\d|2[0-3]):[0-5]\d$
          example: '09:00'
          description: >-
            Inicio de la ventana diaria activa en formato HH:mm. Omitido cuando
            el limite esta activo todo el dia.
        activeTimeEnd:
          type: string
          pattern: ^([01]\d|2[0-3]):[0-5]\d$
          example: '17:00'
          description: >-
            Fin de la ventana diaria activa en formato HH:mm. Omitido cuando el
            limite esta activo todo el dia.
        customStartDate:
          type: string
          format: date-time
          description: Fecha inicial para limites CUSTOM.
        customEndDate:
          type: string
          format: date-time
          description: Fecha final para limites CUSTOM.
        resetAt:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Cuando el contador del limite se reinicia. Null para limites
            PER_TRANSACTION.
        createdAt:
          type: string
          format: date-time
          description: Cuando se creo el limite.
        updatedAt:
          type: string
          format: date-time
          description: Cuando se modifico el limite por ultima vez.
        deletedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: Cuando se elimino el limite (null si no fue eliminado).
    CreateLimitInput:
      type: object
      description: Entrada para crear un nuevo limite de gasto.
      required:
        - name
        - limitType
        - maxAmount
        - currency
        - scopes
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 255
          description: Nombre de limite legible para humanos.
        description:
          type: string
          maxLength: 1000
        limitType:
          type: string
          enum:
            - DAILY
            - WEEKLY
            - MONTHLY
            - CUSTOM
            - PER_TRANSACTION
          description: Tipo de limite (no puede ser cambiado despues de la creacion).
        maxAmount:
          type: string
          pattern: ^(?:[1-9]\d*(?:\.\d{1,2})?|0\.(?:0[1-9]|[1-9]\d))$
          example: '1000.00'
          description: Monto decimal maximo.
        currency:
          type: string
          minLength: 3
          maxLength: 3
          description: >-
            Codigo de moneda ISO 4217 (no puede ser cambiado despues de la
            creacion).
        scopes:
          type: array
          minItems: 1
          maxItems: 100
          items:
            $ref: '#/components/schemas/Scope'
          description: Al menos un alcance es requerido.
        activeTimeStart:
          type: string
          pattern: ^([01]\d|2[0-3]):[0-5]\d$
          example: '09:00'
          description: Inicio de la ventana diaria activa en formato HH:mm.
        activeTimeEnd:
          type: string
          pattern: ^([01]\d|2[0-3]):[0-5]\d$
          example: '17:00'
          description: Fin de la ventana diaria activa en formato HH:mm.
        customStartDate:
          type: string
          format: date-time
          description: >-
            Fecha inicial para limites CUSTOM. Requerida cuando limitType es
            CUSTOM.
        customEndDate:
          type: string
          format: date-time
          description: >-
            Fecha final para limites CUSTOM. Requerida cuando limitType es
            CUSTOM.
      allOf:
        - if:
            properties:
              limitType:
                const: CUSTOM
          then:
            required:
              - customStartDate
              - customEndDate
    UpdateLimitInput:
      type: object
      description: >-
        Entrada para actualizar un limite. Al menos un campo debe ser
        proporcionado. limitType y currency son inmutables.
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 255
        description:
          type: string
          maxLength: 1000
        maxAmount:
          type: string
          pattern: ^(?:[1-9]\d*(?:\.\d{1,2})?|0\.(?:0[1-9]|[1-9]\d))$
          example: '1000.00'
          description: Nuevo monto decimal maximo.
        scopes:
          type: array
          minItems: 1
          maxItems: 100
          items:
            $ref: '#/components/schemas/Scope'
        activeTimeStart:
          type: string
          pattern: ^([01]\d|2[0-3]):[0-5]\d$
          example: '09:00'
          description: Nuevo inicio de la ventana diaria activa en formato HH:mm.
        activeTimeEnd:
          type: string
          pattern: ^([01]\d|2[0-3]):[0-5]\d$
          example: '17:00'
          description: Nuevo fin de la ventana diaria activa en formato HH:mm.
        customStartDate:
          type: string
          format: date-time
          description: Nueva fecha inicial para limites CUSTOM.
        customEndDate:
          type: string
          format: date-time
          description: Nueva fecha final para limites CUSTOM.
    ListLimitsResponse:
      type: object
      description: Lista paginada de limites de gasto.
      properties:
        limits:
          type: array
          items:
            $ref: '#/components/schemas/Limit'
          description: Lista de registros de limites.
        hasMore:
          type: boolean
          description: Si hay mas resultados disponibles.
        nextCursor:
          type:
            - string
            - 'null'
          description: >-
            Cursor para obtener la siguiente pagina. Null si no hay mas
            resultados.
    UsageSnapshot:
      type: object
      description: Instantanea de uso actual para un limite.
      properties:
        limitId:
          type: string
          format: uuid
          description: El identificador del limite.
        limitAmount:
          type: string
          description: Monto total del límite como cadena decimal (ej., "50000.00").
        currentUsage:
          type: string
          description: >-
            Monto de uso actual como cadena decimal (suma de todas las
            transacciones en el período). Retorna `"0"` para límites
            PER_TRANSACTION, que no rastrean uso persistente.
        utilizationPercent:
          type: number
          format: float
          description: Porcentaje de uso (currentUsage / limitAmount * 100).
        nearLimit:
          type: boolean
          description: Verdadero si el uso excede el 80% del limite.
        resetAt:
          type:
            - string
            - 'null'
          format: date-time
          description: Cuando el contador se reinicia. Null para limites PER_TRANSACTION.
    Scope:
      type: object
      description: >-
        Definicion de alcance para reglas y limites. Al menos un campo debe ser
        establecido.
      properties:
        segmentId:
          type: string
          format: uuid
          description: Aplicar a transacciones de este segmento.
        portfolioId:
          type: string
          format: uuid
          description: Aplicar a transacciones de este portafolio.
        accountId:
          type: string
          format: uuid
          description: Aplicar a transacciones de esta cuenta especifica.
        merchantId:
          type: string
          format: uuid
          description: Aplicar a transacciones a este comerciante especifico.
        transactionType:
          type: string
          enum:
            - CARD
            - WIRE
            - PIX
            - CRYPTO
          description: Aplicar solo a este tipo de transaccion.
        subType:
          type: string
          maxLength: 50
          description: Aplicar solo a este subTipo de transaccion.
    AuditEvent:
      type: object
      description: Evento de rastro de auditoria para cumplimiento SOX/GLBA.
      properties:
        eventId:
          type: string
          format: uuid
          description: Identificador unico del evento de auditoria.
        eventType:
          type: string
          enum:
            - TRANSACTION_VALIDATED
            - RULE_CREATED
            - RULE_UPDATED
            - RULE_ACTIVATED
            - RULE_DEACTIVATED
            - RULE_DRAFTED
            - RULE_DELETED
            - LIMIT_CREATED
            - LIMIT_UPDATED
            - LIMIT_ACTIVATED
            - LIMIT_DEACTIVATED
            - LIMIT_DRAFTED
            - LIMIT_DELETED
          description: Tipo de evento que ocurrio.
        resourceType:
          type: string
          enum:
            - transaction
            - rule
            - limit
          description: Tipo de recurso afectado por el evento.
        resourceId:
          type: string
          description: ID del recurso afectado.
        action:
          type: string
          enum:
            - VALIDATE
            - CREATE
            - UPDATE
            - DELETE
            - ACTIVATE
            - DEACTIVATE
            - DRAFT
          description: Acción realizada sobre el recurso.
        result:
          type: string
          enum:
            - SUCCESS
            - FAILED
            - ALLOW
            - DENY
            - REVIEW
          description: >-
            Resultado de la acción. ALLOW/DENY/REVIEW para validaciones;
            SUCCESS/FAILED para operaciones CRUD.
        actor:
          $ref: '#/components/schemas/Actor'
        context:
          type: object
          additionalProperties: true
          description: >-
            Contexto del evento. Para validaciones incluye solicitud y
            respuesta. Para CRUD incluye estados antes y despues.
        metadata:
          type: object
          additionalProperties: true
          description: Informacion adicional (ticketId, correlationId, etc.).
        hash:
          type: string
          description: >-
            Hash SHA-256 del contenido del evento para deteccion de
            manipulacion.
        previousHash:
          type: string
          description: Hash del evento anterior en la cadena (forma cadena inmutable).
        createdAt:
          type: string
          format: date-time
          description: Cuando ocurrio el evento.
    Actor:
      type: object
      description: Actor que realizo la accion.
      properties:
        id:
          type: string
          description: Identificador del actor.
        actorType:
          type: string
          enum:
            - user
            - system
          description: Tipo de actor.
        name:
          type: string
          description: Nombre del actor (si esta disponible).
        role:
          type: string
          description: Rol del actor (si esta disponible).
        ipAddress:
          type: string
          description: Direccion IP (si esta disponible).
    ListAuditEventsResponse:
      type: object
      description: Lista paginada de eventos de auditoria para cumplimiento SOX/GLBA.
      properties:
        auditEvents:
          type: array
          maxItems: 1000
          items:
            $ref: '#/components/schemas/AuditEvent'
          description: Lista de registros de eventos de auditoria.
        hasMore:
          type: boolean
          description: Si hay mas resultados disponibles.
        nextCursor:
          type:
            - string
            - 'null'
          description: >-
            Cursor para obtener la siguiente pagina. Null si no hay mas
            resultados.
    HashChainVerificationResult:
      type: object
      description: Resultado de la verificacion de integridad de la cadena de hash.
      properties:
        isValid:
          type: boolean
          description: Si la cadena de hash esta intacta.
        totalChecked:
          type: integer
          description: Numero de eventos verificados en la cadena.
        firstInvalidId:
          type: integer
          description: ID del primer evento invalido (solo presente si isValid es falso).
        message:
          type: string
          description: Resultado de verificacion legible para humanos.
  examples:
    Error0002:
      summary: At Least One Field Required
      value:
        code: TRC-0002
        title: At Least One Field Required
        message: >-
          At least one field must be provided for update. Please include at
          least one field and try again.
    Error0003:
      summary: Invalid Request Body
      value:
        code: TRC-0003
        title: Invalid Request Body
        message: >-
          The request body is invalid or malformed. Please verify the JSON
          format and try again.
    Error0004:
      summary: Internal Server Error
      value:
        code: TRC-0004
        title: Internal Server Error
        message: >-
          An unexpected error occurred. Please try again later or contact
          support if the issue persists.
    Error0006:
      summary: Invalid Query Parameters
      value:
        code: TRC-0006
        title: Invalid Query Parameters
        message: >-
          One or more query parameters are invalid. Please verify the parameters
          and try again.
    Error0007:
      summary: Invalid Path Parameter
      value:
        code: TRC-0007
        title: Invalid Path Parameter
        message: >-
          The provided ID is not a valid UUID format. Please verify the ID and
          try again.
    Error0010:
      summary: Parent ID Not Found
      value:
        code: TRC-0010
        title: Parent ID Not Found
        message: >-
          The referenced parent resource ID does not exist. Please verify the ID
          and try again.
    Error0011:
      summary: Payload Too Large
      value:
        code: TRC-0011
        title: Payload Too Large
        message: >-
          The request payload exceeds the maximum size limit of 100KB. Please
          reduce the payload size and try again.
    Error0012:
      summary: Service Unavailable
      value:
        code: TRC-0012
        title: Service Unavailable
        message: >-
          The service is temporarily unavailable or the request was cancelled.
          Please try again later.
    ErrorUnauthenticated:
      summary: Unauthorized
      value:
        code: Unauthenticated
        title: Unauthorized
        message: >-
          API Key missing or invalid. Provide a valid API Key in the X-API-Key
          header.
    Error0020:
      summary: Invalid Date Format
      value:
        code: TRC-0020
        title: Invalid Date Format
        message: >-
          The date must be in RFC3339 format with timezone (e.g.,
          2026-01-28T10:30:00Z). Date-only format is not accepted.
    Error0040:
      summary: Limit Exceeds Maximum
      value:
        code: TRC-0040
        title: Limit Exceeds Maximum
        message: >-
          The limit parameter exceeds the maximum allowed value. Please reduce
          the limit and try again.
    Error0041:
      summary: Limit Below Minimum
      value:
        code: TRC-0041
        title: Limit Below Minimum
        message: >-
          The limit parameter must be at least 1. Please provide a valid limit
          and try again.
    Error0044:
      summary: Invalid Pagination Cursor
      value:
        code: TRC-0044
        title: Invalid Pagination Cursor
        message: >-
          The provided pagination cursor is invalid or expired. Please start a
          new query without a cursor.
    Error0045:
      summary: Sort Parameters Locked
      value:
        code: TRC-0045
        title: Sort Parameters Locked
        message: >-
          Cannot change sortBy or sortOrder when using a pagination cursor.
          Please start a new query to change sort parameters.
    Error0083:
      summary: Invalid CEL Expression Syntax
      value:
        code: TRC-0083
        title: Expression Syntax Error
        message: >-
          The CEL expression contains a syntax error. Please verify the
          expression syntax and try again.
    Error0084:
      summary: Expression Must Return Boolean
      value:
        code: TRC-0084
        title: Expression Type Error
        message: >-
          The CEL expression must evaluate to a boolean value. Please modify the
          expression to return true or false.
    Error0100:
      summary: Rule Not Found
      value:
        code: TRC-0100
        title: Rule Not Found
        message: >-
          The requested rule does not exist. Please verify the rule ID and try
          again.
    Error0101:
      summary: Rule Name Conflict
      value:
        code: TRC-0101
        title: Rule Name Conflict
        message: >-
          A rule with this name already exists. Please choose a different name
          and try again.
    Error0102:
      summary: Invalid Rule Status Transition
      value:
        code: TRC-0102
        title: Invalid Status Transition
        message: >-
          The requested status transition is not allowed. Please check the
          current rule status and valid transitions.
    Error0106:
      summary: Rule Name Required
      value:
        code: TRC-0106
        title: Missing Required Field
        message: >-
          The name field is required. Please provide a name for the rule and try
          again.
    Error0108:
      summary: Rule Expression Required
      value:
        code: TRC-0108
        title: Missing Required Field
        message: >-
          The expression field is required. Please provide a CEL expression for
          the rule and try again.
    Error0104:
      summary: Expression Not Modifiable
      value:
        code: TRC-0104
        title: Expression Not Modifiable
        message: >-
          The expression can only be modified when the rule is in DRAFT status.
          Please deactivate the rule first.
    Error0120:
      summary: Limit Not Found
      value:
        code: TRC-0120
        title: Limit Not Found
        message: >-
          The requested limit does not exist. Please verify the limit ID and try
          again.
    Error0121:
      summary: Invalid Limit Status Transition
      value:
        code: TRC-0121
        title: Invalid Status Transition
        message: >-
          The requested status transition is not allowed. Please check the
          current limit status and valid transitions.
    Error0122:
      summary: Invalid Limit Type
      value:
        code: TRC-0122
        title: Invalid Limit Type
        message: >-
          The limitType must be one of DAILY, WEEKLY, MONTHLY, CUSTOM, or
          PER_TRANSACTION. Please provide a valid limit type.
    Error0123:
      summary: Amount Must Be Positive
      value:
        code: TRC-0123
        title: Invalid Amount
        message: >-
          The maxAmount must be a positive decimal string. Please provide a
          valid decimal amount.
    Error0124:
      summary: Invalid Currency Code
      value:
        code: TRC-0124
        title: Invalid Currency Code
        message: >-
          The currency must be a valid 3-letter ISO 4217 code (e.g., BRL, USD).
          Please provide a valid currency code.
    Error0125:
      summary: Scopes Required
      value:
        code: TRC-0125
        title: Missing Required Field
        message: >-
          At least one scope is required for limits. Please provide at least one
          scope and try again.
    Error0126:
      summary: Limit Name Required
      value:
        code: TRC-0126
        title: Missing Required Field
        message: >-
          The name field is required. Please provide a name for the limit and
          try again.
    Error0128:
      summary: Cannot Modify Deleted Limit
      value:
        code: TRC-0128
        title: Cannot Modify Deleted Limit
        message: >-
          The limit has been deleted and cannot be modified. Please create a new
          limit if needed.
    Error0131:
      summary: Immutable Field
      value:
        code: TRC-0131
        title: Immutable Field
        message: >-
          The limitType and currency fields cannot be modified after creation.
          Please create a new limit if you need different values.
    Error0140:
      summary: Audit Event Not Found
      value:
        code: TRC-0140
        title: Audit Event Not Found
        message: >-
          The requested audit event does not exist. Please verify the event ID
          and try again.
    Error0141:
      summary: Invalid Audit Event Filters
      value:
        code: TRC-0141
        title: Invalid Audit Event Filters
        message: >-
          One or more audit event filters are invalid. Please verify the filter
          values and try again.
    Error0220:
      summary: Request ID Required
      value:
        code: TRC-0220
        title: Missing Required Field
        message: >-
          The requestId field is required. Please provide a unique UUID for the
          request.
    Error0221:
      summary: Invalid Transaction Type
      value:
        code: TRC-0221
        title: Invalid Transaction Type
        message: >-
          The transactionType must be one of CARD, WIRE, PIX, or CRYPTO. Please
          provide a valid transaction type.
    Error0222:
      summary: Amount Must Be Positive
      value:
        code: TRC-0222
        title: Invalid Amount
        message: >-
          The amount must be a positive decimal value (e.g., "1500.00"). Please
          provide a valid amount.
    Error0224:
      summary: Invalid Currency
      value:
        code: TRC-0224
        title: Invalid Currency
        message: >-
          The currency must be a valid uppercase ISO 4217 code (e.g., BRL, USD).
          Lowercase codes are not accepted.
    Error0226:
      summary: Future Timestamp Not Allowed
      value:
        code: TRC-0226
        title: Future Timestamp Not Allowed
        message: >-
          The transactionTimestamp cannot be in the future. Please provide a
          valid timestamp.
    Error0227:
      summary: Account Required
      value:
        code: TRC-0227
        title: Missing Required Field
        message: >-
          The account field is required. Please provide account context for the
          validation.
    Error0228:
      summary: Past Timestamp Not Allowed
      value:
        code: TRC-0228
        title: Past Timestamp Not Allowed
        message: >-
          The transactionTimestamp is too far in the past. Please provide a more
          recent timestamp.
    Error0304:
      summary: Limit Name Conflict
      value:
        code: TRC-0304
        title: Limit Name Conflict
        message: A limit with this name already exists. Please choose a different name.
    Error0229:
      summary: Validation Timeout
      value:
        code: TRC-0229
        title: Gateway Timeout
        message: >-
          The validation processing exceeded the 80ms budget. Please try again
          or contact support if the issue persists.
    Error0251:
      summary: Transaction Validation Not Found
      value:
        code: TRC-0251
        title: Transaction Validation Not Found
        message: >-
          The requested transaction validation does not exist. Please verify the
          validation ID and try again.
    Error0001:
      summary: Generic Validation Error
      value:
        code: TRC-0001
        title: Validation Error
        message: >-
          Field validation failed. Please verify the provided data and try
          again.
    Error0042:
      summary: Invalid Sort Order
      value:
        code: TRC-0042
        title: Invalid Sort Order
        message: Sort order must be ASC or DESC. Please provide a valid value.
    Error0043:
      summary: Invalid Sort Column
      value:
        code: TRC-0043
        title: Invalid Sort Column
        message: >-
          The specified sort column is not supported. Please check the allowed
          fields.
    Error0060:
      summary: Metadata Key Too Long
      value:
        code: TRC-0060
        title: Metadata Key Too Long
        message: >-
          The metadata key exceeds the maximum length of 64 characters. Please
          reduce the key size.
    Error0063:
      summary: Metadata Exceeds Maximum Entries
      value:
        code: TRC-0063
        title: Metadata Exceeds Maximum Entries
        message: >-
          The metadata exceeds the maximum of 50 entries. Please reduce the
          number of entries.
    Error0064:
      summary: Metadata Key Contains Invalid Characters
      value:
        code: TRC-0064
        title: Invalid Metadata Key
        message: >-
          The metadata key contains invalid characters. Only alphanumeric
          characters and underscore are allowed.
    Error0085:
      summary: Expression Cost Exceeded
      value:
        code: TRC-0085
        title: Expression Cost Exceeded
        message: >-
          The CEL expression computational cost exceeds the allowed limit.
          Please simplify the expression.
    Error0089:
      summary: Amount Exceeds CEL Precision
      value:
        code: TRC-0089
        title: Amount Exceeds CEL Precision
        message: >-
          The amount exceeds the safe precision for CEL evaluation (maximum
          ±2^53). Please reduce the amount.
    Error0103:
      summary: Rule Evaluation Failed
      value:
        code: TRC-0103
        title: Internal Server Error
        message: Rule evaluation failed. Please try again or contact support.
    Error0107:
      summary: Rule Name Exceeds Maximum Length
      value:
        code: TRC-0107
        title: Name Too Long
        message: >-
          The name exceeds the maximum length of 255 characters. Please reduce
          the name size.
    Error0109:
      summary: Expression Exceeds Maximum Length
      value:
        code: TRC-0109
        title: Expression Too Long
        message: >-
          The expression exceeds the maximum length of 5000 characters. Please
          reduce the expression size.
    Error0110:
      summary: Invalid Rule Action
      value:
        code: TRC-0110
        title: Invalid Action
        message: >-
          The action must be one of ALLOW, DENY, or REVIEW. Please provide a
          valid action.
    Error0111:
      summary: Scope Must Have At Least One Field
      value:
        code: TRC-0111
        title: Invalid Scope
        message: >-
          Each scope must have at least one field set. Please provide at least
          one field in the scope.
    Error0112:
      summary: Description Exceeds Maximum Length
      value:
        code: TRC-0112
        title: Description Too Long
        message: >-
          The description exceeds the maximum length of 1000 characters. Please
          reduce the description size.
    Error0113:
      summary: Scopes Exceed Maximum Entries
      value:
        code: TRC-0113
        title: Scopes Exceed Maximum
        message: >-
          The scopes exceed the maximum of 100 entries. Please reduce the number
          of scopes.
    Error0127:
      summary: Limit Name Exceeds Maximum Length
      value:
        code: TRC-0127
        title: Name Too Long
        message: >-
          The limit name exceeds the maximum allowed length. Please reduce the
          name size.
    Error0129:
      summary: Name Contains Invalid Characters
      value:
        code: TRC-0129
        title: Invalid Name
        message: >-
          The name contains invalid characters. Please use only allowed
          characters.
    Error0130:
      summary: Description Contains Invalid Characters
      value:
        code: TRC-0130
        title: Invalid Description
        message: >-
          The description contains invalid characters. Please use only allowed
          characters.
    Error0136:
      summary: Limit Check Failed
      value:
        code: TRC-0136
        title: Internal Server Error
        message: Limit check failed. Please try again or contact support.
    Error0223:
      summary: Currency Required
      value:
        code: TRC-0223
        title: Missing Required Field
        message: >-
          The currency field is required. Please provide a valid ISO 4217
          currency code.
    Error0225:
      summary: Transaction Timestamp Required
      value:
        code: TRC-0225
        title: Missing Required Field
        message: >-
          The transactionTimestamp field is required. Please provide a timestamp
          in RFC3339 format.
    Error0230:
      summary: Segment ID Required
      value:
        code: TRC-0230
        title: Missing Required Field
        message: >-
          The segment.id field is required when the segment object is provided.
          Please provide the segment ID.
    Error0231:
      summary: Portfolio ID Required
      value:
        code: TRC-0231
        title: Missing Required Field
        message: >-
          The portfolio.id field is required when the portfolio object is
          provided. Please provide the portfolio ID.
    Error0232:
      summary: SubType Exceeds Maximum Length
      value:
        code: TRC-0232
        title: SubType Too Long
        message: >-
          The subType field exceeds the maximum length of 50 characters. Please
          reduce the size.
    Error0233:
      summary: Invalid Account Type
      value:
        code: TRC-0233
        title: Invalid Account Type
        message: >-
          The account.type must be one of checking, savings, or credit. Please
          provide a valid type.
    Error0234:
      summary: Invalid Account Status
      value:
        code: TRC-0234
        title: Invalid Account Status
        message: >-
          The account.status must be one of active, suspended, or closed. Please
          provide a valid status.
    Error0235:
      summary: Invalid Merchant Category
      value:
        code: TRC-0235
        title: Invalid Merchant Category
        message: >-
          The merchant.category must be a 4-digit MCC code. Please provide a
          valid category.
    Error0236:
      summary: Invalid Merchant Country
      value:
        code: TRC-0236
        title: Invalid Merchant Country
        message: >-
          The merchant.country must be an ISO 3166-1 alpha-2 code (e.g., BR,
          US). Please provide a valid country code.
    Error0237:
      summary: Merchant ID Required
      value:
        code: TRC-0237
        title: Missing Required Field
        message: >-
          The merchant.id field is required when the merchant object is
          provided. Please provide the merchant ID.
    Error0250:
      summary: Invalid Transaction Validation Filters
      value:
        code: TRC-0250
        title: Invalid Filters
        message: >-
          One or more transaction validation filters are invalid. Please verify
          the filter values and try again.
    Error0252:
      summary: Query Timeout
      value:
        code: TRC-0252
        title: Gateway Timeout
        message: >-
          The query exceeded the allowed timeout. Please refine the filters to
          reduce the query scope.
