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

# Vincular carteira

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

Vincula uma carteira da empresa pelo endereço público. A TESA guarda apenas o
endereço e os metadados. Escopo: `admin`.


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


## OpenAPI

````yaml /api/openapi.yaml post /carteiras
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:
  /carteiras:
    post:
      tags:
        - Carteiras
      summary: Vincular carteira
      description: >
        Rascunho: especificação em definição. Endpoints e campos podem mudar.


        Vincula uma carteira da empresa pelo endereço público. A TESA guarda
        apenas o

        endereço e os metadados. Escopo: `admin`.
      operationId: vincularCarteira
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CarteiraCriar'
      responses:
        '201':
          description: Carteira vinculada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Carteira'
        '400':
          $ref: '#/components/responses/RequisicaoInvalida'
        '401':
          $ref: '#/components/responses/NaoAutenticado'
        '403':
          $ref: '#/components/responses/SemPermissao'
        '409':
          $ref: '#/components/responses/Conflito'
        '429':
          $ref: '#/components/responses/LimiteExcedido'
      security:
        - bearerAuth: []
        - bearerAuth: []
          tesaTimestamp: []
          tesaSignature: []
components:
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      description: >-
        Valor único gerado pela integração. Repetir a chave com o mesmo corpo
        devolve a resposta original.
      schema:
        type: string
        format: uuid
  schemas:
    CarteiraCriar:
      type: object
      required:
        - rotulo
        - rede
        - endereco
        - tipo_custodia
      properties:
        rotulo:
          type: string
        rede:
          $ref: '#/components/schemas/Rede'
        endereco:
          type: string
        tipo_custodia:
          type: string
          enum:
            - self_custody
            - custodiante_qualificado
        custodiante:
          type: string
    Carteira:
      type: object
      properties:
        id:
          type: string
          examples:
            - cart_3k9d
        rotulo:
          type: string
          examples:
            - Caixa operacional
        rede:
          $ref: '#/components/schemas/Rede'
        endereco:
          type: string
          description: Endereço público da carteira.
        tipo_custodia:
          type: string
          enum:
            - self_custody
            - custodiante_qualificado
        custodiante:
          type:
            - string
            - 'null'
        status:
          type: string
          enum:
            - ativa
            - desvinculada
    Rede:
      type: string
      enum:
        - ethereum
        - solana
    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
  responses:
    RequisicaoInvalida:
      description: Corpo malformado ou parâmetro ausente (`requisicao_invalida`).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Erro'
    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'
    Conflito:
      description: Conflito de idempotência ou ação incompatível com o status atual.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Erro'
    LimiteExcedido:
      description: Limite de taxa atingido. Respeite o cabeçalho `Retry-After`.
      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).

````