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

# Cadastrar destino de webhook

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

Cadastra um destino de webhook. O segredo usado para verificar a assinatura
aparece uma única vez, nesta resposta. Escopo: `admin`.


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


## OpenAPI

````yaml /api/openapi.yaml post /webhooks
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:
  /webhooks:
    post:
      tags:
        - Webhooks
      summary: Cadastrar destino de webhook
      description: >
        Rascunho: especificação em definição. Endpoints e campos podem mudar.


        Cadastra um destino de webhook. O segredo usado para verificar a
        assinatura

        aparece uma única vez, nesta resposta. Escopo: `admin`.
      operationId: criarWebhook
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookCriar'
      responses:
        '201':
          description: Destino cadastrado.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/Webhook'
                  - type: object
                    properties:
                      segredo:
                        type: string
                        description: Segredo HMAC do destino. Mostrado apenas na criação.
                        examples:
                          - whsec_...
        '400':
          $ref: '#/components/responses/RequisicaoInvalida'
        '401':
          $ref: '#/components/responses/NaoAutenticado'
        '403':
          $ref: '#/components/responses/SemPermissao'
      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:
    WebhookCriar:
      type: object
      required:
        - url
      properties:
        url:
          type: string
          format: uri
        eventos:
          type: array
          items:
            $ref: '#/components/schemas/EventoWebhook'
    Webhook:
      type: object
      properties:
        id:
          type: string
          examples:
            - wh_6r3n
        url:
          type: string
          format: uri
        eventos:
          type: array
          description: Lista vazia assina todos os eventos.
          items:
            $ref: '#/components/schemas/EventoWebhook'
        status:
          type: string
          enum:
            - ativo
            - pausado
        criado_em:
          type: string
          format: date-time
    EventoWebhook:
      type: string
      enum:
        - deposito.confirmado
        - alocacao.proposta
        - alocacao.aprovada
        - resgate.concluido
        - rendimento.apurado
        - cobranca.emitida
    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'
  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).

````