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

# Reenviar anamnese

> Gera link novo (o anterior deixa de valer) e manda pelo canal escolhido; o rascunho da paciente fica.

**Escopo do app:** `anamneses:write`. Pelo OAuth, vale o perfil da pessoa.



## OpenAPI

````yaml /api-reference/openapi.json post /v1/anamneses/{id}/resend
openapi: 3.1.0
info:
  title: API da Westhetics
  version: 1.0.0
  description: >-
    A API pública da Westhetics: pacientes, anamneses, contratos e assinaturas
    da clínica, com eventos por webhook. Autentique com a chave do app
    (`Authorization: Bearer wx_…`), criada pela gestora em Integrações, ou com o
    token OAuth da pessoa. Respostas em JSON, mensagens em pt-BR. Guias em
    https://docs.westhetics.io.
  contact:
    name: Westhetics
    url: https://docs.westhetics.io
    email: suporte@westhetics.com.br
servers:
  - url: https://api.westhetics.io
    description: Produção
security:
  - apiKey: []
  - oauth2: []
tags:
  - name: Conta
    description: Quem chama e a clínica.
  - name: Pacientes
    description: O cadastro da paciente.
  - name: Anamneses
    description: Enviar, acompanhar e ler a anamnese.
  - name: Catálogo
    description: Procedimentos, prestadores e modelos.
  - name: Contratos e assinaturas
    description: Gerar o contrato e os termos e enviar para assinatura.
  - name: Eventos
    description: O que aconteceu na clínica, por consulta ou por webhook.
  - name: Webhooks
    description: Os endereços que recebem os eventos do app.
paths:
  /v1/anamneses/{id}/resend:
    post:
      tags:
        - Anamneses
      summary: Reenviar anamnese
      description: >-
        Gera link novo (o anterior deixa de valer) e manda pelo canal escolhido;
        o rascunho da paciente fica.


        **Escopo do app:** `anamneses:write`. Pelo OAuth, vale o perfil da
        pessoa.
      operationId: resendAnamnesis
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: Idempotency-Key
          in: header
          required: false
          description: >-
            Um uuid. A mesma chave nas 24 horas devolve a mesma resposta, sem
            repetir o efeito; com outro corpo, ou enquanto a primeira chamada
            ainda roda, 409. A resposta repetida não traz o segredo do webhook.
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                channel:
                  anyOf:
                    - type: string
                      enum:
                        - whatsapp
                        - email
                        - both
                        - link
                    - type: 'null'
            example:
              channel: whatsapp
      responses:
        '200':
          description: Sucesso.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/SentAnamnesis'
                required:
                  - data
              example:
                data:
                  id: 5e1d2c3b-4a59-4687-b6a5-948372615049
                  patientId: f47ac10b-58cc-4372-a567-0e02b2c3d479
                  status: issued
                  channel: link
                  procedure:
                    id: b8e2c4d6-1f3a-4b5c-8d7e-9f0a1b2c3d4e
                    name: Preenchimento labial
                  practitioner:
                    id: 7c1d9e2f-3a4b-4c5d-8e6f-7a8b9c0d1e2f
                    name: Ana Oliveira
                  link:
                    url: >-
                      https://app.westhetics.io/anamnesis?t=eyJraW5kIjoiYW5hbW5lc2lzIn0.c2lnbmF0dXJl
                    issuedAt: '2026-10-15T14:30:00Z'
                    expiresAt: '2026-10-22T14:30:00Z'
                    resendCount: 0
                  startedAt: null
                  completedAt: null
                  protocolNumber: null
                  contentHash: null
                  canceledAt: null
                  cancellationReason: null
                  isImported: false
                  createdAt: '2026-10-15T14:30:00Z'
                  updatedAt: '2026-10-15T14:30:00Z'
                  delivery: []
                  message: Link da anamnese de Amanda Ribeiro Costa pronto para enviar.
        '400':
          description: O corpo não é JSON, ou falta o que a rota precisa.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Sem chave, chave que não confere, revogada ou token vencido.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: O app não tem o escopo, ou a pessoa não pode pelo perfil.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Não existe nesta clínica.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: >-
            Conflito com o estado atual (já existe, já enviado, outra alteração
            chegou antes, ou a mesma Idempotency-Key ainda em andamento).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Dado que não passa na regra; `fields` traz a mensagem de cada campo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Passou de 100 chamadas por minuto; veja `Retry-After`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: >-
            Um provedor (e-mail, PDF, assinatura) está fora; nada foi perdido,
            tente de novo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    SentAnamnesis:
      type: object
      properties:
        id:
          type: string
        patientId:
          type: string
        status:
          type: string
          enum:
            - issued
            - in_progress
            - completed
            - canceled
            - expired
        channel:
          anyOf:
            - type: string
              enum:
                - whatsapp
                - email
                - both
                - link
            - type: 'null'
        procedure:
          anyOf:
            - type: object
              properties:
                id:
                  anyOf:
                    - type: string
                    - type: 'null'
                name:
                  anyOf:
                    - type: string
                    - type: 'null'
              required:
                - id
                - name
              additionalProperties: false
            - type: 'null'
        practitioner:
          anyOf:
            - type: object
              properties:
                id:
                  anyOf:
                    - type: string
                    - type: 'null'
                name:
                  anyOf:
                    - type: string
                    - type: 'null'
              required:
                - id
                - name
              additionalProperties: false
            - type: 'null'
        link:
          type: object
          properties:
            url:
              type: string
            issuedAt:
              type: string
              description: Data e hora ISO 8601, em UTC.
            expiresAt:
              type: string
              description: Data e hora ISO 8601, em UTC.
            resendCount:
              type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
          required:
            - url
            - issuedAt
            - expiresAt
            - resendCount
          additionalProperties: false
        startedAt:
          anyOf:
            - type: string
              description: Data e hora ISO 8601, em UTC.
            - type: 'null'
        completedAt:
          anyOf:
            - type: string
              description: Data e hora ISO 8601, em UTC.
            - type: 'null'
        protocolNumber:
          anyOf:
            - type: string
            - type: 'null'
        contentHash:
          anyOf:
            - type: string
            - type: 'null'
        canceledAt:
          anyOf:
            - type: string
              description: Data e hora ISO 8601, em UTC.
            - type: 'null'
        cancellationReason:
          anyOf:
            - type: string
            - type: 'null'
        isImported:
          type: boolean
        createdAt:
          type: string
          description: Data e hora ISO 8601, em UTC.
        updatedAt:
          type: string
          description: Data e hora ISO 8601, em UTC.
        delivery:
          type: array
          items:
            type: object
            properties:
              channel:
                type: string
                enum:
                  - whatsapp
                  - email
              event:
                type: string
                enum:
                  - sent
                  - failed
              at:
                type: string
                description: Data e hora ISO 8601, em UTC.
              detail:
                type: string
            required:
              - channel
              - event
              - at
            additionalProperties: false
        message:
          type: string
          description: A frase pronta do que aconteceu, em pt-BR.
      required:
        - id
        - patientId
        - status
        - channel
        - procedure
        - practitioner
        - link
        - startedAt
        - completedAt
        - protocolNumber
        - contentHash
        - canceledAt
        - cancellationReason
        - isImported
        - createdAt
        - updatedAt
        - delivery
        - message
      additionalProperties: false
      description: >-
        A anamnese enviada, com a URL do link (só nesta resposta) e o resultado
        de cada canal.
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - bad_request
                - unauthenticated
                - forbidden
                - not_found
                - conflict
                - validation_failed
                - rate_limited
                - unavailable
                - internal_error
            message:
              type: string
              description: A causa e o caminho, em pt-BR.
            fields:
              description: 'No 422: a mensagem de cada campo.'
              type: object
              propertyNames:
                type: string
              additionalProperties:
                type: string
            requestId:
              type: string
          required:
            - code
            - message
            - requestId
          additionalProperties: false
      required:
        - error
      additionalProperties: false
      description: O envelope de erro.
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      bearerFormat: wx_<64 hex>
      description: >-
        A chave do app de integração, criada em Integrações. Escopos:
        `patients:read` (Listar, buscar e ler pacientes; os eventos patient.*.);
        `patients:write` (Criar e editar pacientes. Inclui ler.);
        `anamneses:read` (Listar e ler anamneses, sem as respostas; os eventos
        anamnesis.*.); `anamneses:write` (Enviar, reenviar e cancelar anamnese.
        Inclui ler.); `anamneses:answers` (Ler as respostas da anamnese
        preenchida. É dado de saúde.); `documents:read` (Atendimentos,
        documentos, status da assinatura e o PDF; os eventos appointment.* e
        signature_request.*.); `documents:write` (Gerar contrato e termos e
        enviar para assinatura, reenviar e cancelar. Inclui ler.);
        `catalog:read` (Procedimentos, prestadores e modelos de documento da
        clínica.); `webhooks:write` (Criar, alterar e remover os webhooks do
        próprio app pela API.)
    oauth2:
      type: oauth2
      description: >-
        Token OAuth 2.1 da pessoa (código com PKCE), emitido a um aplicativo
        conectado. Vale o perfil da pessoa na clínica da conexão, por 12 horas.
      flows:
        authorizationCode:
          authorizationUrl: https://zosqwpksgewzphikvgfz.supabase.co/auth/v1/oauth/authorize
          tokenUrl: https://zosqwpksgewzphikvgfz.supabase.co/auth/v1/oauth/token
          refreshUrl: https://zosqwpksgewzphikvgfz.supabase.co/auth/v1/oauth/token
          scopes:
            openid: Identidade.
            email: O e-mail.
            profile: O nome.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.