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

# Obter agendamento por ID

> Um agendamento da clínica da chave. Id de outra clínica responde `404`, como se não existisse. Escopo: `scheduling:read`.



## OpenAPI

````yaml https://api.controleclinic.com.br/v1/openapi.json get /v1/scheduling/appointments/{id}
openapi: 3.0.0
info:
  title: Controle Clinic API
  version: v1
  description: >-
    API de automações e integrações externas do Controle Clinic. Conecte n8n,
    CRMs, ERPs e chatbots à sua clínica.


    ## Comece aqui

    1. Crie a chave em **Configurações → Clínica → Integrações → Tokens de
    API**. Marque só os escopos de que precisa e defina uma validade.

    2. Envie a chave no cabeçalho `X-API-Key` em toda chamada. Para testar por
    aqui, cole a chave no cartão **Sua chave**.

    3. Limite: **60 chamadas por minuto** por chave (plano pro). Os cabeçalhos
    `X-RateLimit-Limit`, `X-RateLimit-Remaining` e `X-RateLimit-Reset` mostram o
    saldo; acima do limite a resposta é `429`.

    4. Toda chamada fica registrada em **Logs de Auditoria**, na mesma tela dos
    tokens.


    ## Integração contínua × migração

    Esta API serve para um sistema externo criar e atualizar pacientes e
    agendamentos **daqui para a frente**.

    Para trazer o **histórico** de outro sistema (pacientes, prontuário, agenda
    passada, financeiro), use a **Central de Migração**, com o time de
    implantação: ela tem prévia, de-para e desfazer, que a API não tem.


    ## Erros comuns a todas as rotas

    - `400` corpo ou parâmetro inválido (o corpo diz qual campo)

    - `401` chave ausente, inválida, revogada ou vencida

    - `403` escopo insuficiente ou clínica com acesso suspenso

    - `429` limite de chamadas

    - `500` erro interno — tente de novo mais tarde; se repetir, abra chamado
    informando o horário


    ⚠️ As rotas `POST`, `PATCH` e `DELETE` gravam **de verdade** na clínica dona
    da chave, inclusive pelo botão de teste desta página.
servers:
  - url: https://api.controleclinic.com.br
    description: Produção
security: []
tags:
  - name: Agendamentos
    description: >-
      **Para agendar um paciente:**

      1. `GET /v1/scheduling/professionals`, `/procedures`, `/rooms` e
      `/technologies` — pegue os `id` (eles não mudam; guarde no seu sistema).

      2. `POST /v1/scheduling/patients` com nome, CPF e telefone. Se voltar
      `409`, o paciente já existe: use `existing.id`.

      3. `POST /v1/scheduling/appointments` com `patient_id`, `professional_id`,
      `start_at` e `end_at`.

      4. Para confirmar, cancelar ou remarcar: `PATCH
      /v1/scheduling/appointments/{id}`.


      Datas em ISO 8601 **com fuso**: `2026-11-10T14:00:00-03:00`. Sem fuso, o
      horário é lido como UTC e aparece 3 horas adiantado na agenda.
  - name: Lookup
    description: >-
      Cadastros da clínica que um agendamento referencia: profissionais,
      procedimentos, salas e tecnologias. Só leitura; traz apenas os ativos.
  - name: Sistema
    description: >-
      Conferência da conexão (`/health`, sem chave) e da chave em uso (`/me`:
      escopos, validade e clínica).
  - name: Pacientes
    description: >-
      Cadastro de pacientes da clínica da chave. A API não apaga paciente. Sem
      `sensitive:read`, CPF, telefone, e-mail e nascimento saem mascarados.
  - name: Financeiro
    description: >-
      Leitura do financeiro da clínica dona da chave (escopo `financial:read`).
      **Nenhuma rota escreve.**


      Toda resposta traz `regime` (`competencia`, `caixa`, `vencimento` ou
      `saldo`): somar números de regimes diferentes dá um total sem sentido
      (ex.: entradas de caixa não são faturamento).


      Nome, CPF, `patient_id` e descrições só existem na resposta com o escopo
      `sensitive:read` (sem ele, o campo não vem, nem como `null`). O nome do
      fornecedor das despesas sai com `sensitive:read` ou `financial:suppliers`.


      Não há rotas de escrita no financeiro. Para trazer receitas e despesas de
      outro sistema, use a **Central de Migração** ou o importador de receitas,
      com o time de implantação.
paths:
  /v1/scheduling/appointments/{id}:
    get:
      tags:
        - Agendamentos
      summary: Obter agendamento por ID
      description: >-
        Um agendamento da clínica da chave. Id de outra clínica responde `404`,
        como se não existisse. Escopo: `scheduling:read`.
      parameters:
        - schema:
            type: string
            format: uuid
          required: true
          name: id
          in: path
      responses:
        '200':
          description: Agendamento encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                  clinic_id:
                    type: string
                    format: uuid
                  patient_id:
                    type: string
                    format: uuid
                  professional_id:
                    type: string
                    nullable: true
                    format: uuid
                  procedure_id:
                    type: string
                    nullable: true
                    format: uuid
                  start_at:
                    type: string
                  end_at:
                    type: string
                  status:
                    type: string
                    enum:
                      - scheduled
                      - confirmed
                      - completed
                      - cancelled
                      - no_show
                  notes:
                    type: string
                    nullable: true
                  room_id:
                    type: string
                    nullable: true
                    format: uuid
                  technology_id:
                    type: string
                    nullable: true
                    format: uuid
                  session_id:
                    type: string
                    nullable: true
                    format: uuid
                  origem:
                    type: string
                    nullable: true
                    enum:
                      - importacao
                  created_at:
                    type: string
                  updated_at:
                    type: string
                required:
                  - id
                  - clinic_id
                  - patient_id
                  - professional_id
                  - procedure_id
                  - start_at
                  - end_at
                  - status
                  - notes
                  - room_id
                  - technology_id
                  - session_id
                  - origem
                  - created_at
                  - updated_at
        '403':
          description: Escopo insuficiente
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                      - Insufficient scope
                required:
                  - error
        '404':
          description: Não encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                      - Not found
                required:
                  - error
        '500':
          description: Erro interno
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                  - error
      security:
        - ApiKeyAuth: []
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        Token de API no formato cc_live_<64 chars hex>. Obtido em Minha Clínica
        → Integrações.

````

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