> ## 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.

# Aprovar resgate

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

Aprova o resgate e libera as transações não assinadas para o custodiante.
O status passa a `aguardando_assinatura`. `Idempotency-Key` é obrigatório.
Escopo: `admin`.


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


## OpenAPI

````yaml /api/openapi.yaml post /resgates/{id}/aprovar
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:
  /resgates/{id}/aprovar:
    post:
      tags:
        - Resgates
      summary: Aprovar resgate
      description: >
        Rascunho: especificação em definição. Endpoints e campos podem mudar.


        Aprova o resgate e libera as transações não assinadas para o
        custodiante.

        O status passa a `aguardando_assinatura`. `Idempotency-Key` é
        obrigatório.

        Escopo: `admin`.
      operationId: aprovarResgate
      parameters:
        - $ref: '#/components/parameters/IdResgate'
        - $ref: '#/components/parameters/IdempotencyKeyObrigatorio'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Decisao'
      responses:
        '200':
          description: Resgate aprovado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Resgate'
        '401':
          $ref: '#/components/responses/NaoAutenticado'
        '403':
          $ref: '#/components/responses/SemPermissao'
        '404':
          $ref: '#/components/responses/NaoEncontrado'
        '409':
          $ref: '#/components/responses/Conflito'
      security:
        - bearerAuth: []
        - bearerAuth: []
          tesaTimestamp: []
          tesaSignature: []
components:
  parameters:
    IdResgate:
      name: id
      in: path
      required: true
      description: Identificador do resgate, com prefixo `res_`.
      schema:
        type: string
        examples:
          - res_4t7x
    IdempotencyKeyObrigatorio:
      name: Idempotency-Key
      in: header
      required: true
      description: >-
        Obrigatório nesta operação. Uma falha de rede não deve gerar duas
        operações.
      schema:
        type: string
        format: uuid
  schemas:
    Decisao:
      type: object
      properties:
        comentario:
          type: string
          examples:
            - Aprovado pela tesouraria
    Resgate:
      type: object
      properties:
        id:
          type: string
          examples:
            - res_4t7x
        valor:
          $ref: '#/components/schemas/Valor'
        carteira_destino_id:
          type: string
        referencia_interna:
          type:
            - string
            - 'null'
        status:
          $ref: '#/components/schemas/StatusResgate'
        transacoes:
          type: array
          items:
            $ref: '#/components/schemas/Transacao'
        criado_em:
          type: string
          format: date-time
        concluido_em:
          type:
            - string
            - 'null'
          format: date-time
    Valor:
      type: string
      pattern: ^\d+\.\d{2}$
      description: Montante em USDC, string decimal com duas casas.
      examples:
        - '842110.00'
    StatusResgate:
      type: string
      enum:
        - pendente
        - aprovado
        - aguardando_assinatura
        - concluido
        - falhou
    Transacao:
      type: object
      description: >-
        Transação não assinada, entregue ao custodiante da empresa para
        assinatura.
      properties:
        id:
          type: string
          examples:
            - tx_01
        rede:
          $ref: '#/components/schemas/Rede'
        carteira_id:
          type: string
        status:
          type: string
          enum:
            - aguardando_assinatura
            - transmitida
            - confirmada
            - falhou
        payload_nao_assinado:
          type: string
          examples:
            - 0x02f8...
        tx_hash:
          type:
            - string
            - 'null'
    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
    Rede:
      type: string
      enum:
        - ethereum
        - solana
  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'
    NaoEncontrado:
      description: Recurso inexistente ou de outra organização.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Erro'
    Conflito:
      description: Conflito de idempotência ou ação incompatível com o status atual.
      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).

````