> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Criar um Limite

> Use este endpoint para criar um limite de gastos com array de escopos. Os limites são criados com status DRAFT. Use o endpoint de ativação para iniciar a aplicação. Após a criação, limitType e currency não podem ser alterados.



## OpenAPI

````yaml pt/openapi/v3-current/tracer.yaml post /v1/limits
openapi: 3.1.0
info:
  title: API Tracer
  description: >-
    Referência completa da API para os serviços do Tracer, incluindo validação
    de transações, gerenciamento de regras, limites de gastos e eventos de
    auditoria para conformidade SOX/GLBA.
  version: 1.0.1
servers:
  - url: https://tracer.sandbox.lerian.net
security:
  - ApiKeyAuth: []
  - BearerAuth: []
tags:
  - name: Health API
    description: >-
      Endpoints de verificação de integridade para sondas de vivacidade e
      prontidão. Estes endpoints não requerem autenticação.
  - name: Validations API
    description: >-
      Endpoints de validação de transações. A meta de desempenho é inferior a
      80ms (p99). As validações são idempotentes por `requestId` — uma
      requisição duplicada retorna o resultado em cache com HTTP 200, enquanto
      uma requisição nova retorna HTTP 201. Nenhum header de idempotência é
      necessário.
  - name: Rules API
    description: >-
      Endpoints de gerenciamento de regras de validação. As regras utilizam
      expressões CEL (Common Expression Language).
  - name: Limits API
    description: >-
      Endpoints de gerenciamento de limites de gastos. Os limites controlam os
      valores das transações por escopo e período.
  - name: Reservations API
    description: >-
      Endpoints de reserva de capacidade de transação em duas fases. Uma reserva
      retém capacidade contra os limites de gastos; uma confirmação a consolida
      e uma liberação a devolve. Confirmar e liberar são idempotentes.
  - name: Audit Events API
    description: >-
      Endpoints de trilha de auditoria para conformidade SOX/GLBA. Todas as
      decisões de validação e alterações de configuração são registradas.
paths:
  /v1/limits:
    post:
      tags:
        - Limits API
      summary: Criar um Limite
      description: >-
        Use este endpoint para criar um limite de gastos com array de escopos.
        Os limites são criados com status DRAFT. Use o endpoint de ativação para
        iniciar a aplicação. Após a criação, limitType e currency não podem ser
        alterados.
      operationId: createLimit
      parameters:
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/XApiKey'
        - $ref: '#/components/parameters/XRequestId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateLimitInput'
            example:
              name: Daily Corporate Limit
              description: Daily spending limit for corporate segment
              limitType: DAILY
              maxAmount: '50000.00'
              currency: BRL
              scopes:
                - segmentId: 019c96a0-0b4e-7079-8be0-ab6bdccf975f
                  transactionType: CARD
      responses:
        '201':
          description: Indica que o limite foi criado com sucesso com status DRAFT.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Limit'
              example:
                limitId: 019c96a0-0c0d-7915-84b9-e497bfee9916
                name: Daily Corporate Limit
                description: Daily spending limit for corporate segment
                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: Não Autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                ErrorUnauthenticated:
                  $ref: '#/components/examples/ErrorUnauthenticated'
        '409':
          description: Conflito
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0121:
                  $ref: '#/components/examples/Error0121'
        '500':
          description: Erro Interno do Servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorFormat'
              examples:
                Error0004:
                  $ref: '#/components/examples/Error0004'
components:
  parameters:
    ContentType:
      name: Content-Type
      in: header
      description: O tipo de mídia do recurso. Deve ser `application/json`.
      required: true
      example: application/json
      schema:
        type: string
    XApiKey:
      name: X-API-Key
      in: header
      description: >-
        A chave de API para autenticação. **Este header é obrigatório para todos
        os endpoints, exceto verificações de integridade**.
      required: true
      schema:
        type: string
    XRequestId:
      name: X-Request-Id
      in: header
      description: Um identificador único usado para rastrear cada requisição.
      required: false
      example: 019c96a0-10ce-75fc-a273-dc799079a99c
      schema:
        type: string
        format: uuid
  schemas:
    CreateLimitInput:
      type: object
      description: Entrada para criar um novo limite de gastos.
      required:
        - name
        - limitType
        - maxAmount
        - currency
        - scopes
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 255
          description: Nome legível do limite.
        description:
          type: string
          maxLength: 1000
        limitType:
          type: string
          enum:
            - DAILY
            - WEEKLY
            - MONTHLY
            - CUSTOM
            - PER_TRANSACTION
          description: Tipo de limite (não pode ser alterado após a criação).
        maxAmount:
          type: string
          pattern: ^(?:[1-9]\d*(?:\.\d{1,2})?|0\.(?:0[1-9]|[1-9]\d))$
          example: '1000.00'
          description: Valor decimal máximo.
        currency:
          type: string
          minLength: 3
          maxLength: 3
          description: Código de moeda ISO 4217 (não pode ser alterado após a criação).
        scopes:
          type: array
          minItems: 1
          maxItems: 100
          items:
            $ref: '#/components/schemas/Scope'
          description: Pelo menos um escopo é obrigatório.
        activeTimeStart:
          type: string
          pattern: ^([01]\d|2[0-3]):[0-5]\d$
          example: '09:00'
          description: Início da janela diária ativa no formato HH:mm.
        activeTimeEnd:
          type: string
          pattern: ^([01]\d|2[0-3]):[0-5]\d$
          example: '17:00'
          description: Fim da janela diária ativa no formato HH:mm.
        customStartDate:
          type: string
          format: date-time
          description: >-
            Data inicial para limites CUSTOM. Obrigatória quando limitType é
            CUSTOM.
        customEndDate:
          type: string
          format: date-time
          description: >-
            Data final para limites CUSTOM. Obrigatória quando limitType é
            CUSTOM.
      allOf:
        - if:
            properties:
              limitType:
                const: CUSTOM
          then:
            required:
              - customStartDate
              - customEndDate
    Limit:
      type: object
      description: Limite de gastos.
      properties:
        limitId:
          type: string
          format: uuid
          description: Identificador único do limite.
        name:
          type: string
          description: Nome legível do limite.
          maxLength: 255
        description:
          type: string
          maxLength: 1000
          description: Propósito e explicação de uso do limite.
        limitType:
          type: string
          enum:
            - DAILY
            - WEEKLY
            - MONTHLY
            - CUSTOM
            - PER_TRANSACTION
          description: Tipo de limite (imutável após a criação).
        maxAmount:
          type: string
          pattern: ^(?:[1-9]\d*(?:\.\d{1,2})?|0\.(?:0[1-9]|[1-9]\d))$
          example: '1000.00'
          description: Valor decimal máximo.
        currency:
          type: string
          minLength: 3
          maxLength: 3
          description: Código de moeda ISO 4217 (imutável após a criação).
        scopes:
          type: array
          items:
            $ref: '#/components/schemas/Scope'
          description: Escopos que determinam a quais transações este limite se aplica.
        status:
          type: string
          enum:
            - DRAFT
            - ACTIVE
            - INACTIVE
            - DELETED
          description: Status do ciclo de vida do limite.
        activeTimeStart:
          type: string
          pattern: ^([01]\d|2[0-3]):[0-5]\d$
          example: '09:00'
          description: >-
            Início da janela diária ativa no formato HH:mm. Omitido quando o
            limite fica ativo o dia inteiro.
        activeTimeEnd:
          type: string
          pattern: ^([01]\d|2[0-3]):[0-5]\d$
          example: '17:00'
          description: >-
            Fim da janela diária ativa no formato HH:mm. Omitido quando o limite
            fica ativo o dia inteiro.
        customStartDate:
          type: string
          format: date-time
          description: Data inicial para limites CUSTOM.
        customEndDate:
          type: string
          format: date-time
          description: Data final para limites CUSTOM.
        resetAt:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Quando o contador do limite é reiniciado. Nulo para limites
            PER_TRANSACTION.
        createdAt:
          type: string
          format: date-time
          description: Quando o limite foi criado.
        updatedAt:
          type: string
          format: date-time
          description: Quando o limite foi modificado pela última vez.
        deletedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: Quando o limite foi excluído (nulo se não excluído).
    ErrorFormat:
      type: object
      description: A mensagem de erro da resposta.
      required:
        - code
        - title
        - message
      properties:
        code:
          type: string
          description: Um identificador único e estável para o erro.
        title:
          type: string
          description: Um breve resumo do problema.
        message:
          type: string
          description: Orientação detalhada para resolver o erro.
        fields:
          type: object
          additionalProperties: true
          description: Informações adicionais sobre os campos que causaram o erro.
    Scope:
      type: object
      description: >-
        Definição de escopo para regras e limites. Pelo menos um campo deve ser
        definido.
      properties:
        segmentId:
          type: string
          format: uuid
          description: Aplicar a transações deste segmento.
        portfolioId:
          type: string
          format: uuid
          description: Aplicar a transações deste portfólio.
        accountId:
          type: string
          format: uuid
          description: Aplicar a transações desta conta específica.
        merchantId:
          type: string
          format: uuid
          description: Aplicar a transações para este estabelecimento específico.
        transactionType:
          type: string
          enum:
            - CARD
            - WIRE
            - PIX
            - CRYPTO
          description: Aplicar apenas a este tipo de transação.
        subType:
          type: string
          maxLength: 50
          description: Aplicar apenas a este subtipo de transação.
  examples:
    Error0001:
      summary: Generic Validation Error
      value:
        code: TRC-0001
        title: Validation Error
        message: >-
          Field validation failed. Please verify the provided data 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.
    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.
    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.
    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.
    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.
    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.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        Autenticação por API Key. Usada por implantações single-tenant
        (`MULTI_TENANT_ENABLED=false`). Enviada em todas as requisições `/v1/*`.
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Autenticação JWT bearer. Usada por implantações multi-tenant
        (`MULTI_TENANT_ENABLED=true`). O JWT é emitido pelo Access Manager e
        deve conter o claim `tenantId` — o Tracer resolve o tenant a partir do
        token, não de qualquer cabeçalho ou campo do corpo.

````