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

# Propor nova política

> Rascunho: especificação em definição. Endpoints e campos podem mudar.

Propõe uma nova versão da política. A soma dos percentuais deve fechar em 100
e só aceita ativos suportados. A versão nova vale para depósitos futuros e
serve de referência para propostas de rebalanceamento. Escopo: `admin`.


<Warning>Rascunho: especificação em definição. Endpoints e campos podem mudar.</Warning>


## OpenAPI

````yaml /api/openapi.yaml put /politica-de-alocacao
openapi: 3.1.0
info:
  title: API da TESA
  version: 0.1.0-rascunho
  description: >
    **Rascunho: especificação em definição. Endpoints e campos podem mudar.**


    API de infraestrutura de tesouraria B2B da TESA. USDC entra pelo CCTP da
    Circle

    (Ethereum e Solana) e é alocado em Treasuries tokenizados (USDY e BUIDL).

    A API é non-custodial: nunca recebe chave privada nem transação assinada.
    Ela

    devolve transações não assinadas e solicitações de aprovação, e quem assina
    é

    a empresa ou o seu custodiante.


    Montantes são strings decimais em USDC com duas casas, datas estão em ISO
    8601

    UTC e listas usam paginação por cursor (`limite` e `apos`). Todos os valores
    de

    exemplo são ilustrativos.
  contact:
    name: TESA
    email: contact@t3sa.com
    url: https://t3sa.com
servers:
  - url: https://api.t3sa.com/v1
    description: Produção (URL proposta, ainda não ativa)
  - url: https://sandbox.api.t3sa.com/v1
    description: Sandbox (URL proposta, ainda não ativa)
security:
  - bearerAuth: []
tags:
  - name: Organização
    description: A empresa cliente, dona de todas as chaves e recursos.
  - name: Carteiras
    description: >-
      Carteiras da empresa vinculadas por endereço público. Nenhuma chave passa
      pela API.
  - name: Posições
    description: O retrato do caixa, igual ao do painel.
  - name: Política de alocação
    description: Ativos aprovados pela empresa e a proporção entre eles.
  - name: Propostas
    description: >-
      Toda movimentação de alocação nasce como proposta e só executa com
      aprovação.
  - name: Resgates
    description: Devolução de saldo em USDC para uma carteira vinculada da empresa.
  - name: Registros
    description: Trilha de auditoria on-chain, com o hash de cada transação.
  - name: Rendimento e cobranças
    description: Yield apurado por período e a taxa cobrada sobre ele.
  - name: Webhooks
    description: Destinos que recebem os eventos da TESA.
paths:
  /politica-de-alocacao:
    put:
      tags:
        - Política de alocação
      summary: Propor nova política
      description: >
        Rascunho: especificação em definição. Endpoints e campos podem mudar.


        Propõe uma nova versão da política. A soma dos percentuais deve fechar
        em 100

        e só aceita ativos suportados. A versão nova vale para depósitos futuros
        e

        serve de referência para propostas de rebalanceamento. Escopo: `admin`.
      operationId: atualizarPolitica
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PoliticaAtualizar'
      responses:
        '200':
          description: Nova versão registrada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PoliticaDeAlocacao'
        '401':
          $ref: '#/components/responses/NaoAutenticado'
        '403':
          $ref: '#/components/responses/SemPermissao'
        '422':
          $ref: '#/components/responses/NaoProcessavel'
      security:
        - bearerAuth: []
        - bearerAuth: []
          tesaTimestamp: []
          tesaSignature: []
components:
  schemas:
    PoliticaAtualizar:
      type: object
      required:
        - alocacao
      properties:
        alocacao:
          type: array
          description: A soma dos percentuais deve fechar em 100.
          items:
            $ref: '#/components/schemas/AtivoPercentual'
        comentario:
          type: string
    PoliticaDeAlocacao:
      type: object
      properties:
        versao:
          type: integer
          examples:
            - 3
        alocacao:
          type: array
          items:
            $ref: '#/components/schemas/AtivoPercentual'
        status:
          type: string
          enum:
            - vigente
            - pendente
        aprovada_por:
          type:
            - string
            - 'null'
        vigente_desde:
          type:
            - string
            - 'null'
          format: date-time
    AtivoPercentual:
      type: object
      required:
        - ativo
        - percentual
      properties:
        ativo:
          $ref: '#/components/schemas/Ativo'
        percentual:
          type: number
          examples:
            - 60
    Erro:
      type: object
      properties:
        erro:
          type: object
          properties:
            codigo:
              type: string
              examples:
                - saldo_insuficiente
            mensagem:
              type: string
            campo:
              type:
                - string
                - 'null'
            requisicao_id:
              type: string
              examples:
                - req_9d8c7b
    Ativo:
      type: string
      enum:
        - USDY
        - BUIDL
  responses:
    NaoAutenticado:
      description: Chave ausente, inválida ou revogada, ou assinatura HMAC inválida.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Erro'
    SemPermissao:
      description: Escopo insuficiente ou IP fora da allowlist.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Erro'
    NaoProcessavel:
      description: Regra de negócio violada, como saldo insuficiente ou política inválida.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Erro'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Chave de API da organização (`tesa_live_...` em produção,
        `tesa_test_...` em sandbox).
    tesaTimestamp:
      type: apiKey
      in: header
      name: Tesa-Timestamp
      description: >-
        Opcional na proposta atual. Momento da requisição em segundos Unix,
        usado na assinatura HMAC.
    tesaSignature:
      type: apiKey
      in: header
      name: Tesa-Signature
      description: >-
        Opcional na proposta atual. HMAC-SHA256 em hexadecimal da mensagem
        canônica (timestamp, método, caminho e corpo bruto).

````