# Listar atribuições de pacientes ## OpenAPI Specification ```yaml openapi: 3.0.1 info: title: '' description: '' version: 1.0.0 paths: /rest/v1/patient_assignments: get: summary: Listar atribuições de pacientes deprecated: false description: '' tags: - Atribuições - Atribuições parameters: - name: apikey in: header description: Chave da API Supabase required: true example: '' schema: type: string responses: '200': description: Lista de atribuições content: application/json: schema: type: array items: $ref: '#/components/schemas/PatientAssignment' headers: {} x-apidog-name: OK security: - bearer: [] x-apidog-folder: Atribuições x-apidog-status: released x-run-in-apidog: https://app.apidog.com/web/project/1053378/apis/api-21940525-run components: schemas: PatientAssignment: type: object properties: id: type: string format: uuid examples: - 12345678-1234-1234-1234-123456789012 patient_id: type: string format: uuid examples: - 12345678-1234-1234-1234-123456789012 user_id: type: string format: uuid examples: - 12345678-1234-1234-1234-123456789012 role: type: string enum: - medico - enfermeiro examples: - medico created_at: type: string format: date-time examples: - '2024-01-15T10:30:00Z' created_by: type: string format: uuid examples: - 12345678-1234-1234-1234-123456789012 x-apidog-orders: - id - patient_id - user_id - role - created_at - created_by x-apidog-ignore-properties: [] x-apidog-folder: '' securitySchemes: bearerAuth: type: jwt scheme: bearer bearerFormat: JWT description: Token JWT obtido no login bearer: type: http scheme: bearer servers: - url: https://yuanqfswhberkoevtmfr.supabase.co description: Prod Env - url: '' description: Cloud Mock security: - bearer: [] ``` # Criar nova atribuição ## OpenAPI Specification ```yaml openapi: 3.0.1 info: title: '' description: '' version: 1.0.0 paths: /rest/v1/patient_assignments: post: summary: Criar nova atribuição deprecated: false description: '' tags: - Atribuições - Atribuições parameters: - name: apikey in: header description: Chave da API Supabase required: true example: '' schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/PatientAssignmentInput' responses: '201': description: Atribuição criada content: application/json: schema: $ref: '#/components/schemas/PatientAssignment' headers: {} x-apidog-name: Created security: - bearer: [] x-apidog-folder: Atribuições x-apidog-status: released x-run-in-apidog: https://app.apidog.com/web/project/1053378/apis/api-21940526-run components: schemas: PatientAssignmentInput: type: object required: - patient_id - user_id - role properties: patient_id: type: string format: uuid user_id: type: string format: uuid role: type: string enum: - medico - enfermeiro x-apidog-orders: - patient_id - user_id - role x-apidog-ignore-properties: [] x-apidog-folder: '' PatientAssignment: type: object properties: id: type: string format: uuid examples: - 12345678-1234-1234-1234-123456789012 patient_id: type: string format: uuid examples: - 12345678-1234-1234-1234-123456789012 user_id: type: string format: uuid examples: - 12345678-1234-1234-1234-123456789012 role: type: string enum: - medico - enfermeiro examples: - medico created_at: type: string format: date-time examples: - '2024-01-15T10:30:00Z' created_by: type: string format: uuid examples: - 12345678-1234-1234-1234-123456789012 x-apidog-orders: - id - patient_id - user_id - role - created_at - created_by x-apidog-ignore-properties: [] x-apidog-folder: '' securitySchemes: bearerAuth: type: jwt scheme: bearer bearerFormat: JWT description: Token JWT obtido no login bearer: type: http scheme: bearer servers: - url: https://yuanqfswhberkoevtmfr.supabase.co description: Prod Env - url: '' description: Cloud Mock security: - bearer: [] ``` # Listar roles de usuários ## OpenAPI Specification ```yaml openapi: 3.0.1 info: title: '' description: '' version: 1.0.0 paths: /rest/v1/user_roles: get: summary: Listar roles de usuários deprecated: false description: '' tags: - Usuários - Usuários parameters: [] responses: '200': description: Lista de roles content: application/json: schema: type: array items: $ref: '#/components/schemas/UserRole' headers: {} x-apidog-name: OK security: - bearer: [] x-apidog-folder: Usuários x-apidog-status: released x-run-in-apidog: https://app.apidog.com/web/project/1053378/apis/api-21940524-run components: schemas: UserRole: type: object properties: id: type: string format: uuid examples: - 12345678-1234-1234-1234-123456789012 user_id: type: string format: uuid examples: - 12345678-1234-1234-1234-123456789012 role: type: string enum: - admin - gestor - medico examples: - medico created_at: type: string format: date-time examples: - '2024-01-15T10:30:00Z' x-apidog-orders: - id - user_id - role - created_at x-apidog-ignore-properties: [] x-apidog-folder: '' securitySchemes: bearerAuth: type: jwt scheme: bearer bearerFormat: JWT description: Token JWT obtido no login bearer: type: http scheme: bearer servers: - url: https://yuanqfswhberkoevtmfr.supabase.co description: Prod Env - url: '' description: Cloud Mock security: - bearer: [] ``` # Obter informações completas do usuário ## OpenAPI Specification ```yaml openapi: 3.0.1 info: title: '' description: '' version: 1.0.0 paths: /functions/v1/user-info: get: summary: Obter informações completas do usuário deprecated: false description: >- Retorna dados consolidados do usuário autenticado, incluindo perfil e roles para controle de permissões. tags: - Usuários parameters: [] responses: '200': description: Informações do usuário retornadas com sucesso content: application/json: schema: $ref: '#/components/schemas/UserInfoResponse' headers: {} x-apidog-name: OK '401': description: Token inválido ou expirado content: application/json: schema: &ref_0 $ref: '#/components/schemas/Error' headers: {} x-apidog-name: Unauthorized '500': description: Erro interno do servidor content: application/json: schema: *ref_0 headers: {} x-apidog-name: Internal Server Error security: [] x-apidog-folder: Usuários x-apidog-status: released x-run-in-apidog: https://app.apidog.com/web/project/1053378/apis/api-21952675-run components: schemas: UserInfoResponse: type: object properties: user: $ref: '#/components/schemas/User' profile: $ref: '#/components/schemas/Profile' roles: type: array items: type: string enum: - admin - gestor - medico - secretaria - user examples: - - medico - admin permissions: $ref: '#/components/schemas/Permissions' x-apidog-orders: - user - profile - roles - permissions x-apidog-ignore-properties: [] x-apidog-folder: '' Permissions: type: object properties: isAdmin: type: boolean description: Se o usuário tem role de admin examples: - true isManager: type: boolean description: Se o usuário tem role de gestor examples: - false isDoctor: type: boolean description: Se o usuário tem role de médico examples: - true isSecretary: type: boolean description: Se o usuário tem role de secretária examples: - false isAdminOrManager: type: boolean description: Se o usuário é admin ou gestor (para controle de permissões) examples: - true x-apidog-orders: - isAdmin - isManager - isDoctor - isSecretary - isAdminOrManager x-apidog-ignore-properties: [] x-apidog-folder: '' Profile: type: object properties: id: type: string format: uuid full_name: type: string examples: - Dr. João Silva nullable: true email: type: string format: email nullable: true phone: type: string examples: - '+5511999999999' nullable: true avatar_url: type: string format: uri nullable: true disabled: type: boolean examples: - false created_at: type: string format: date-time updated_at: type: string format: date-time x-apidog-orders: - id - full_name - email - phone - avatar_url - disabled - created_at - updated_at x-apidog-ignore-properties: [] nullable: true x-apidog-folder: '' User: type: object properties: id: type: string format: uuid examples: - 550e8400-e29b-41d4-a716-446655440000 email: type: string format: email examples: - usuario@exemplo.com email_confirmed_at: type: string format: date-time examples: - '2024-01-01T10:00:00Z' nullable: true created_at: type: string format: date-time examples: - '2024-01-01T00:00:00Z' last_sign_in_at: type: string format: date-time examples: - '2024-01-15T09:30:00Z' nullable: true x-apidog-orders: - id - email - email_confirmed_at - created_at - last_sign_in_at x-apidog-ignore-properties: [] x-apidog-folder: '' Error: type: object properties: error: type: string message: type: string code: type: string x-apidog-orders: - error - message - code x-apidog-ignore-properties: [] x-apidog-folder: '' securitySchemes: bearerAuth: type: jwt scheme: bearer bearerFormat: JWT description: Token JWT obtido no login bearer: type: http scheme: bearer servers: - url: https://yuanqfswhberkoevtmfr.supabase.co description: Prod Env - url: '' description: Cloud Mock security: - bearer: [] ``` # Criar novo usuário ## OpenAPI Specification ```yaml openapi: 3.0.1 info: title: '' description: '' version: 1.0.0 paths: /functions/v1/create-user: post: summary: Criar novo usuário deprecated: false description: >- Cria um novo usuário no sistema com papel específico. Apenas usuários com papel de admin, gestor ou secretaria podem criar novos usuários. operationId: createUser tags: - Usuários - Usuários parameters: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateUserRequest' examples: admin_user: value: email: admin@mediconnect.com password: senha123! full_name: João Silva phone: (11) 99999-9999 role: admin summary: Criar administrador doctor_user: value: email: dr.maria@mediconnect.com password: senha123! full_name: Dra. Maria Santos phone: (11) 98888-8888 role: medico summary: Criar médico secretary_user: value: email: secretaria@mediconnect.com password: senha123! full_name: Ana Costa phone: (11) 97777-7777 role: secretaria summary: Criar secretária responses: '200': description: Usuário criado com sucesso content: application/json: schema: $ref: '#/components/schemas/CreateUserResponse' example: success: true user: id: 123e4567-e89b-12d3-a456-426614174000 email: novo.usuario@mediconnect.com full_name: Novo Usuário phone: (11) 99999-9999 role: medico headers: {} x-apidog-name: OK '400': description: Dados inválidos ou erro de validação content: application/json: schema: type: object properties: {} x-apidog-ignore-properties: [] x-apidog-orders: [] examples: '2': summary: Campos obrigatórios faltando value: error: 'Missing required fields: email, password, full_name, role' '3': summary: Papel inválido value: error: Invalid role '4': summary: Email já existe value: error: User with this email already registered headers: {} x-apidog-name: Bad Request '401': description: Token de autenticação inválido ou ausente content: application/json: schema: type: object properties: {} x-apidog-ignore-properties: [] x-apidog-orders: [] example: error: Unauthorized headers: {} x-apidog-name: Unauthorized '403': description: Permissões insuficientes content: application/json: schema: type: object properties: {} x-apidog-ignore-properties: [] x-apidog-orders: [] example: error: Insufficient permissions headers: {} x-apidog-name: Forbidden '500': description: Erro interno do servidor content: application/json: schema: type: object properties: {} x-apidog-ignore-properties: [] x-apidog-orders: [] example: error: Internal server error headers: {} x-apidog-name: Internal Server Error security: [] x-apidog-folder: Usuários x-apidog-status: released x-run-in-apidog: https://app.apidog.com/web/project/1053378/apis/api-21953135-run components: schemas: CreateUserRequest: type: object required: - email - full_name - role properties: email: type: string format: email description: >- Email do usuário (deve ser único). Um magic link será enviado para este email. examples: - usuario@mediconnect.com full_name: type: string minLength: 1 description: Nome completo do usuário examples: - João da Silva phone: type: string description: Telefone do usuário (opcional) examples: - (11) 99999-9999 nullable: true role: type: string enum: - admin - gestor - medico - secretaria - user - paciente description: Papel do usuário no sistema examples: - medico roles: type: array items: type: string enum: - admin - gestor - medico - secretaria - user - paciente description: Múltiplos papéis do usuário (opcional, alternativa ao campo 'role') examples: - - medico - gestor redirect_url: type: string format: uri description: >- URL de redirecionamento após clicar no Magic Link (opcional). Permite que aplicativos externos redirecionem para suas próprias URLs. examples: - https://app.exemplo.com/dashboard nullable: true x-apidog-orders: - email - full_name - phone - role - roles - redirect_url x-apidog-ignore-properties: [] x-apidog-folder: '' CreateUserResponse: type: object properties: success: type: boolean description: Indica se a operação foi bem-sucedida examples: - true message: type: string description: Mensagem de confirmação incluindo informação sobre o magic link examples: - >- Usuário criado com sucesso. Magic link enviado para usuario@mediconnect.com user: type: object properties: id: type: string format: uuid description: ID único do usuário criado examples: - 123e4567-e89b-12d3-a456-426614174000 email: type: string format: email description: Email do usuário examples: - usuario@mediconnect.com full_name: type: string description: Nome completo do usuário examples: - João da Silva phone: type: string description: Telefone do usuário examples: - (11) 99999-9999 nullable: true roles: type: array items: type: string description: Papéis atribuídos ao usuário examples: - - medico x-apidog-orders: - id - email - full_name - phone - roles x-apidog-ignore-properties: [] x-apidog-orders: - success - message - user x-apidog-ignore-properties: [] x-apidog-folder: '' securitySchemes: bearerAuth: type: jwt scheme: bearer bearerFormat: JWT description: Token JWT obtido no login servers: - url: https://yuanqfswhberkoevtmfr.supabase.co description: Prod Env - url: '' description: Cloud Mock security: [] ``` # Criar novo usuário ## OpenAPI Specification ```yaml openapi: 3.0.1 info: title: '' description: '' version: 1.0.0 paths: /create-user: post: summary: Criar novo usuário deprecated: false description: > Cria um novo usuário no sistema com papel específico. Apenas usuários com papel de admin, gestor ou secretaria podem criar novos usuários. Um magic link será enviado automaticamente para o email do novo usuário. O parâmetro redirect_url permite que aplicativos externos redirecionem para suas próprias URLs. operationId: createUser tags: - Usuários - Usuários parameters: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateUserRequest' examples: admin_user: value: email: admin@mediconnect.com full_name: João Silva phone: (11) 99999-9999 role: admin summary: Criar administrador doctor_user: value: email: dr.maria@mediconnect.com full_name: Dra. Maria Santos phone: (11) 98888-8888 role: medico summary: Criar médico secretary_user: value: email: secretaria@mediconnect.com full_name: Ana Costa phone: (11) 97777-7777 role: secretaria summary: Criar secretária patient_user: value: email: paciente@email.com full_name: João Paciente phone: (11) 98888-8888 role: paciente summary: Criar paciente external_app: value: email: usuario@externo.com full_name: Usuário Externo phone: (11) 99999-9999 role: paciente redirect_url: https://app-parceiro.com/auth/callback summary: Criação via app externo com redirect personalizado responses: '200': description: Usuário criado com sucesso content: application/json: schema: $ref: '#/components/schemas/CreateUserResponse' example: success: true user: id: 123e4567-e89b-12d3-a456-426614174000 email: novo.usuario@mediconnect.com full_name: Novo Usuário phone: (11) 99999-9999 roles: - medico message: >- Usuário criado com sucesso. Magic link enviado para novo.usuario@mediconnect.com headers: {} x-apidog-name: OK '400': description: Dados inválidos ou erro de validação content: application/json: schema: &ref_0 $ref: '#/components/schemas/ErrorResponse' examples: '2': summary: Campos obrigatórios faltando value: error: 'Missing required fields: email, full_name, role' '3': summary: Papel inválido value: error: >- Invalid role: must be one of admin, gestor, medico, secretaria, user, paciente '4': summary: URL de redirect inválida value: error: redirect_url inválido '5': summary: Email já existe value: error: User with this email already registered headers: {} x-apidog-name: Bad Request '401': description: Token de autenticação inválido ou ausente content: application/json: schema: *ref_0 example: error: Unauthorized headers: {} x-apidog-name: Unauthorized '403': description: Permissões insuficientes content: application/json: schema: *ref_0 example: error: Insufficient permissions headers: {} x-apidog-name: Forbidden '500': description: Erro interno do servidor content: application/json: schema: *ref_0 example: error: Internal server error headers: {} x-apidog-name: Internal Server Error security: [] x-apidog-folder: Usuários x-apidog-status: released x-run-in-apidog: https://app.apidog.com/web/project/1053378/apis/api-22659572-run components: schemas: CreateUserRequest: type: object required: - email - full_name - role properties: email: type: string format: email description: >- Email do usuário (deve ser único). Um magic link será enviado para este email. examples: - usuario@mediconnect.com full_name: type: string minLength: 1 description: Nome completo do usuário examples: - João da Silva phone: type: string description: Telefone do usuário (opcional) examples: - (11) 99999-9999 nullable: true role: type: string enum: - admin - gestor - medico - secretaria - user - paciente description: Papel do usuário no sistema examples: - medico roles: type: array items: type: string enum: - admin - gestor - medico - secretaria - user - paciente description: Múltiplos papéis do usuário (opcional, alternativa ao campo 'role') examples: - - medico - gestor redirect_url: type: string format: uri description: >- URL de redirecionamento após clicar no Magic Link (opcional). Permite que aplicativos externos redirecionem para suas próprias URLs. examples: - https://app.exemplo.com/dashboard nullable: true x-apidog-orders: - email - full_name - phone - role - roles - redirect_url x-apidog-ignore-properties: [] x-apidog-folder: '' CreateUserResponse: type: object properties: success: type: boolean description: Indica se a operação foi bem-sucedida examples: - true message: type: string description: Mensagem de confirmação incluindo informação sobre o magic link examples: - >- Usuário criado com sucesso. Magic link enviado para usuario@mediconnect.com user: type: object properties: id: type: string format: uuid description: ID único do usuário criado examples: - 123e4567-e89b-12d3-a456-426614174000 email: type: string format: email description: Email do usuário examples: - usuario@mediconnect.com full_name: type: string description: Nome completo do usuário examples: - João da Silva phone: type: string description: Telefone do usuário examples: - (11) 99999-9999 nullable: true roles: type: array items: type: string description: Papéis atribuídos ao usuário examples: - - medico x-apidog-orders: - id - email - full_name - phone - roles x-apidog-ignore-properties: [] x-apidog-orders: - success - message - user x-apidog-ignore-properties: [] x-apidog-folder: '' ErrorResponse: type: object properties: error: type: string description: Mensagem de erro descritiva examples: - 'Missing required fields: email, full_name, role' x-apidog-orders: - error x-apidog-ignore-properties: [] x-apidog-folder: '' securitySchemes: bearerAuth: type: jwt scheme: bearer bearerFormat: JWT description: Token JWT obtido no login servers: - url: https://yuanqfswhberkoevtmfr.supabase.co description: Prod Env - url: '' description: Cloud Mock security: [] ``` # Obter dados do usuário atual ## OpenAPI Specification ```yaml openapi: 3.0.1 info: title: '' description: '' version: 1.0.0 paths: /auth/v1/user: get: summary: Obter dados do usuário atual deprecated: false description: Retorna informações do usuário autenticado tags: - Usuários - Authentication parameters: [] responses: '200': description: Dados do usuário content: application/json: schema: $ref: '#/components/schemas/User' headers: {} x-apidog-name: OK '401': description: Token inválido content: application/json: schema: $ref: '#/components/schemas/Error' headers: {} x-apidog-name: Unauthorized security: - bearer: [] x-apidog-folder: Usuários x-apidog-status: released x-run-in-apidog: https://app.apidog.com/web/project/1053378/apis/api-21940512-run components: schemas: User: type: object properties: id: type: string format: uuid examples: - 550e8400-e29b-41d4-a716-446655440000 email: type: string format: email examples: - usuario@exemplo.com email_confirmed_at: type: string format: date-time examples: - '2024-01-01T10:00:00Z' nullable: true created_at: type: string format: date-time examples: - '2024-01-01T00:00:00Z' last_sign_in_at: type: string format: date-time examples: - '2024-01-15T09:30:00Z' nullable: true x-apidog-orders: - id - email - email_confirmed_at - created_at - last_sign_in_at x-apidog-ignore-properties: [] x-apidog-folder: '' Error: type: object properties: error: type: string message: type: string code: type: string x-apidog-orders: - error - message - code x-apidog-ignore-properties: [] x-apidog-folder: '' securitySchemes: bearerAuth: type: jwt scheme: bearer bearerFormat: JWT description: Token JWT obtido no login bearer: type: http scheme: bearer servers: - url: https://yuanqfswhberkoevtmfr.supabase.co description: Prod Env - url: '' description: Cloud Mock security: - bearer: [] ``` # Fazer login e obter token JWT ## OpenAPI Specification ```yaml openapi: 3.0.1 info: title: '' description: '' version: 1.0.0 paths: /auth/v1/token: post: summary: Fazer login e obter token JWT deprecated: false description: >- Autentica o usuário e retorna um token JWT para usar em outras requisições. tags: - Authentication parameters: - name: grant_type in: query description: '' required: true schema: type: string enum: - password requestBody: content: application/json: schema: $ref: '#/components/schemas/LoginRequest' examples: {} responses: '200': description: Login realizado com sucesso content: application/json: schema: $ref: '#/components/schemas/LoginResponse' headers: {} x-apidog-name: OK '400': description: Credenciais inválidas content: application/json: schema: &ref_0 $ref: '#/components/schemas/Error' headers: {} x-apidog-name: Bad Request '401': description: Email ou senha incorretos content: application/json: schema: *ref_0 headers: {} x-apidog-name: Unauthorized security: - bearer: [] x-apidog-folder: Authentication x-apidog-status: released x-run-in-apidog: https://app.apidog.com/web/project/1053378/apis/api-21940510-run components: schemas: LoginRequest: type: object required: - email - password properties: email: type: string format: email examples: - usuario@exemplo.com password: type: string minLength: 6 examples: - senha123 x-apidog-orders: - email - password x-apidog-ignore-properties: [] x-apidog-folder: '' LoginResponse: type: object properties: access_token: type: string description: Token JWT para autenticação examples: - eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... token_type: type: string examples: - bearer expires_in: type: integer description: Tempo de expiração do token em segundos examples: - 3600 refresh_token: type: string description: Token para renovar o access_token user: $ref: '#/components/schemas/AuthUser' x-apidog-orders: - access_token - token_type - expires_in - refresh_token - user x-apidog-ignore-properties: [] x-apidog-folder: '' AuthUser: type: object properties: id: type: string format: uuid email: type: string format: email email_confirmed_at: type: string format: date-time nullable: true created_at: type: string format: date-time x-apidog-orders: - id - email - email_confirmed_at - created_at x-apidog-ignore-properties: [] x-apidog-folder: '' Error: type: object properties: error: type: string message: type: string code: type: string x-apidog-orders: - error - message - code x-apidog-ignore-properties: [] x-apidog-folder: '' securitySchemes: bearerAuth: type: jwt scheme: bearer bearerFormat: JWT description: Token JWT obtido no login bearer: type: http scheme: bearer servers: - url: https://yuanqfswhberkoevtmfr.supabase.co description: Prod Env - url: '' description: Cloud Mock security: - bearer: [] ``` # Logout do usuário ## OpenAPI Specification ```yaml openapi: 3.0.1 info: title: '' description: '' version: 1.0.0 paths: /auth/v1/logout: post: summary: Logout do usuário deprecated: false description: Encerrar sessão do usuário tags: - Authentication - Authentication parameters: [] responses: '204': description: Logout realizado com sucesso headers: {} x-apidog-name: No Content '401': description: Token inválido content: application/json: schema: $ref: '#/components/schemas/Error' headers: {} x-apidog-name: Unauthorized security: - bearer: [] x-apidog-folder: Authentication x-apidog-status: released x-run-in-apidog: https://app.apidog.com/web/project/1053378/apis/api-21940511-run components: schemas: Error: type: object properties: error: type: string message: type: string code: type: string x-apidog-orders: - error - message - code x-apidog-ignore-properties: [] x-apidog-folder: '' securitySchemes: bearerAuth: type: jwt scheme: bearer bearerFormat: JWT description: Token JWT obtido no login bearer: type: http scheme: bearer servers: - url: https://yuanqfswhberkoevtmfr.supabase.co description: Prod Env - url: '' description: Cloud Mock security: - bearer: [] ``` # Listar perfis de usuários ## OpenAPI Specification ```yaml openapi: 3.0.1 info: title: '' description: '' version: 1.0.0 paths: /rest/v1/profiles: get: summary: Listar perfis de usuários deprecated: false description: '' tags: - Perfis - Perfis parameters: - name: apikey in: header description: Chave da API Supabase required: true example: '' schema: type: string responses: '200': description: Lista de perfis content: application/json: schema: type: array items: $ref: '#/components/schemas/Profile' headers: {} x-apidog-name: OK security: - bearer: [] x-apidog-folder: Perfis x-apidog-status: released x-run-in-apidog: https://app.apidog.com/web/project/1053378/apis/api-21940522-run components: schemas: Profile: type: object properties: id: type: string format: uuid full_name: type: string examples: - Dr. João Silva nullable: true email: type: string format: email nullable: true phone: type: string examples: - '+5511999999999' nullable: true avatar_url: type: string format: uri nullable: true disabled: type: boolean examples: - false created_at: type: string format: date-time updated_at: type: string format: date-time x-apidog-orders: - id - full_name - email - phone - avatar_url - disabled - created_at - updated_at x-apidog-ignore-properties: [] nullable: true x-apidog-folder: '' securitySchemes: bearerAuth: type: jwt scheme: bearer bearerFormat: JWT description: Token JWT obtido no login bearer: type: http scheme: bearer servers: - url: https://yuanqfswhberkoevtmfr.supabase.co description: Prod Env - url: '' description: Cloud Mock security: - bearer: [] ``` # Atualizar perfil do usuário ## OpenAPI Specification ```yaml openapi: 3.0.1 info: title: '' description: '' version: 1.0.0 paths: /rest/v1/profiles: patch: summary: Atualizar perfil do usuário deprecated: false description: '' tags: - Perfis - Perfis parameters: - name: apikey in: header description: Chave da API Supabase required: true example: '' schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ProfileInput' responses: '200': description: Perfil atualizado content: application/json: schema: $ref: '#/components/schemas/Profile' headers: {} x-apidog-name: OK security: - bearer: [] x-apidog-folder: Perfis x-apidog-status: released x-run-in-apidog: https://app.apidog.com/web/project/1053378/apis/api-21940523-run components: schemas: ProfileInput: type: object properties: full_name: type: string avatar_url: type: string phone: type: string x-apidog-orders: - full_name - avatar_url - phone x-apidog-ignore-properties: [] x-apidog-folder: '' Profile: type: object properties: id: type: string format: uuid full_name: type: string examples: - Dr. João Silva nullable: true email: type: string format: email nullable: true phone: type: string examples: - '+5511999999999' nullable: true avatar_url: type: string format: uri nullable: true disabled: type: boolean examples: - false created_at: type: string format: date-time updated_at: type: string format: date-time x-apidog-orders: - id - full_name - email - phone - avatar_url - disabled - created_at - updated_at x-apidog-ignore-properties: [] nullable: true x-apidog-folder: '' securitySchemes: bearerAuth: type: jwt scheme: bearer bearerFormat: JWT description: Token JWT obtido no login bearer: type: http scheme: bearer servers: - url: https://yuanqfswhberkoevtmfr.supabase.co description: Prod Env - url: '' description: Cloud Mock security: - bearer: [] ``` # Obter paciente por ID ## OpenAPI Specification ```yaml openapi: 3.0.1 info: title: '' description: '' version: 1.0.0 paths: /rest/v1/patients/{id}: get: summary: Obter paciente por ID deprecated: false description: Retorna dados de um paciente específico tags: - Pacientes - Pacientes parameters: - name: id in: path description: ID do paciente required: true example: '' schema: type: string format: uuid - name: apikey in: header description: Chave da API Supabase required: true example: '' schema: type: string responses: '200': description: Dados do paciente content: application/json: schema: $ref: '#/components/schemas/Patient' headers: {} x-apidog-name: OK '401': description: Não autorizado content: application/json: schema: &ref_0 $ref: '#/components/schemas/Error' headers: {} x-apidog-name: Unauthorized '404': description: Paciente não encontrado content: application/json: schema: *ref_0 headers: {} x-apidog-name: Not Found security: - bearer: [] x-apidog-folder: Pacientes x-apidog-status: released x-run-in-apidog: https://app.apidog.com/web/project/1053378/apis/api-21940515-run components: schemas: Patient: type: object properties: id: type: string format: uuid examples: - 12345678-1234-1234-1234-123456789012 full_name: type: string examples: - Maria Santos Silva cpf: type: string examples: - '12345678901' email: type: string format: email examples: - maria@email.com phone_mobile: type: string examples: - (11) 99999-9999 birth_date: type: string format: date examples: - '1980-01-15' social_name: type: string examples: - Maria Santos sex: type: string examples: - F blood_type: type: string examples: - A+ weight_kg: type: number examples: - 65.5 height_m: type: number examples: - 1.65 bmi: type: number examples: - 24.1 street: type: string examples: - Rua das Flores, 123 number: type: string examples: - '123' complement: type: string examples: - Apt 45 neighborhood: type: string examples: - Centro city: type: string examples: - São Paulo state: type: string examples: - SP cep: type: string examples: - 01234-567 created_at: type: string format: date-time examples: - '2024-01-15T10:30:00Z' updated_at: type: string format: date-time examples: - '2024-01-15T10:30:00Z' created_by: type: string format: uuid examples: - 12345678-1234-1234-1234-123456789012 x-apidog-orders: - id - full_name - cpf - email - phone_mobile - birth_date - social_name - sex - blood_type - weight_kg - height_m - bmi - street - number - complement - neighborhood - city - state - cep - created_at - updated_at - created_by x-apidog-ignore-properties: [] x-apidog-folder: '' Error: type: object properties: error: type: string message: type: string code: type: string x-apidog-orders: - error - message - code x-apidog-ignore-properties: [] x-apidog-folder: '' securitySchemes: bearerAuth: type: jwt scheme: bearer bearerFormat: JWT description: Token JWT obtido no login bearer: type: http scheme: bearer servers: - url: https://yuanqfswhberkoevtmfr.supabase.co description: Prod Env - url: '' description: Cloud Mock security: - bearer: [] ``` # Atualizar paciente ## OpenAPI Specification ```yaml openapi: 3.0.1 info: title: '' description: '' version: 1.0.0 paths: /rest/v1/patients/{id}: patch: summary: Atualizar paciente deprecated: false description: Atualizar dados de um paciente existente tags: - Pacientes - Pacientes parameters: - name: id in: path description: ID do paciente required: true example: '' schema: type: string format: uuid - name: apikey in: header description: Chave da API Supabase required: true example: '' schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/PatientInput' responses: '200': description: Paciente atualizado com sucesso content: application/json: schema: $ref: '#/components/schemas/Patient' headers: {} x-apidog-name: OK '401': description: Não autorizado content: application/json: schema: &ref_0 $ref: '#/components/schemas/Error' headers: {} x-apidog-name: Unauthorized '404': description: Paciente não encontrado content: application/json: schema: *ref_0 headers: {} x-apidog-name: Not Found security: - bearer: [] x-apidog-folder: Pacientes x-apidog-status: released x-run-in-apidog: https://app.apidog.com/web/project/1053378/apis/api-21940516-run components: schemas: PatientInput: type: object required: - full_name - cpf - email - phone_mobile properties: full_name: type: string examples: - Maria Santos Silva cpf: type: string examples: - '12345678901' email: type: string format: email examples: - maria@email.com phone_mobile: type: string examples: - (11) 99999-9999 birth_date: type: string format: date examples: - '1980-01-15' social_name: type: string sex: type: string examples: - F blood_type: type: string weight_kg: type: number height_m: type: number street: type: string number: type: string complement: type: string neighborhood: type: string city: type: string state: type: string cep: type: string x-apidog-orders: - full_name - cpf - email - phone_mobile - birth_date - social_name - sex - blood_type - weight_kg - height_m - street - number - complement - neighborhood - city - state - cep x-apidog-ignore-properties: [] x-apidog-folder: '' Patient: type: object properties: id: type: string format: uuid examples: - 12345678-1234-1234-1234-123456789012 full_name: type: string examples: - Maria Santos Silva cpf: type: string examples: - '12345678901' email: type: string format: email examples: - maria@email.com phone_mobile: type: string examples: - (11) 99999-9999 birth_date: type: string format: date examples: - '1980-01-15' social_name: type: string examples: - Maria Santos sex: type: string examples: - F blood_type: type: string examples: - A+ weight_kg: type: number examples: - 65.5 height_m: type: number examples: - 1.65 bmi: type: number examples: - 24.1 street: type: string examples: - Rua das Flores, 123 number: type: string examples: - '123' complement: type: string examples: - Apt 45 neighborhood: type: string examples: - Centro city: type: string examples: - São Paulo state: type: string examples: - SP cep: type: string examples: - 01234-567 created_at: type: string format: date-time examples: - '2024-01-15T10:30:00Z' updated_at: type: string format: date-time examples: - '2024-01-15T10:30:00Z' created_by: type: string format: uuid examples: - 12345678-1234-1234-1234-123456789012 x-apidog-orders: - id - full_name - cpf - email - phone_mobile - birth_date - social_name - sex - blood_type - weight_kg - height_m - bmi - street - number - complement - neighborhood - city - state - cep - created_at - updated_at - created_by x-apidog-ignore-properties: [] x-apidog-folder: '' Error: type: object properties: error: type: string message: type: string code: type: string x-apidog-orders: - error - message - code x-apidog-ignore-properties: [] x-apidog-folder: '' securitySchemes: bearerAuth: type: jwt scheme: bearer bearerFormat: JWT description: Token JWT obtido no login bearer: type: http scheme: bearer servers: - url: https://yuanqfswhberkoevtmfr.supabase.co description: Prod Env - url: '' description: Cloud Mock security: - bearer: [] ``` # Deletar paciente ## OpenAPI Specification ```yaml openapi: 3.0.1 info: title: '' description: '' version: 1.0.0 paths: /rest/v1/patients/{id}: delete: summary: Deletar paciente deprecated: false description: Remover um paciente do sistema (apenas admins/gestores) tags: - Pacientes - Pacientes parameters: - name: id in: path description: ID do paciente required: true example: '' schema: type: string format: uuid - name: apikey in: header description: Chave da API Supabase required: true example: '' schema: type: string responses: '204': description: Paciente deletado com sucesso headers: {} x-apidog-name: No Content '401': description: Não autorizado content: application/json: schema: &ref_0 $ref: '#/components/schemas/Error' headers: {} x-apidog-name: Unauthorized '403': description: Sem permissão content: application/json: schema: *ref_0 headers: {} x-apidog-name: Forbidden '404': description: Paciente não encontrado content: application/json: schema: *ref_0 headers: {} x-apidog-name: Not Found security: - bearer: [] x-apidog-folder: Pacientes x-apidog-status: released x-run-in-apidog: https://app.apidog.com/web/project/1053378/apis/api-21940517-run components: schemas: Error: type: object properties: error: type: string message: type: string code: type: string x-apidog-orders: - error - message - code x-apidog-ignore-properties: [] x-apidog-folder: '' securitySchemes: bearerAuth: type: jwt scheme: bearer bearerFormat: JWT description: Token JWT obtido no login bearer: type: http scheme: bearer servers: - url: https://yuanqfswhberkoevtmfr.supabase.co description: Prod Env - url: '' description: Cloud Mock security: - bearer: [] ``` # Criar novo paciente ## OpenAPI Specification ```yaml openapi: 3.0.1 info: title: '' description: '' version: 1.0.0 paths: /rest/v1/patients: post: summary: Criar novo paciente deprecated: false description: Cadastrar um novo paciente no sistema tags: - Pacientes - Pacientes parameters: - name: apikey in: header description: Chave da API Supabase required: true example: '{{API_KEY}}' schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/PatientInput' example: full_name: Maria Santos cpf: '12345678901' email: maria@email.com phone_mobile: (11) 99999-9999 birth_date: '1980-01-15' responses: '201': description: Paciente criado com sucesso content: application/json: schema: $ref: '#/components/schemas/Patient' headers: {} x-apidog-name: Created '400': description: Dados inválidos content: application/json: schema: &ref_0 $ref: '#/components/schemas/Error' headers: {} x-apidog-name: Bad Request '401': description: Não autorizado content: application/json: schema: *ref_0 headers: {} x-apidog-name: Unauthorized security: - bearer: [] x-apidog-folder: Pacientes x-apidog-status: released x-run-in-apidog: https://app.apidog.com/web/project/1053378/apis/api-21940514-run components: schemas: PatientInput: type: object required: - full_name - cpf - email - phone_mobile properties: full_name: type: string examples: - Maria Santos Silva cpf: type: string examples: - '12345678901' email: type: string format: email examples: - maria@email.com phone_mobile: type: string examples: - (11) 99999-9999 birth_date: type: string format: date examples: - '1980-01-15' social_name: type: string sex: type: string examples: - F blood_type: type: string weight_kg: type: number height_m: type: number street: type: string number: type: string complement: type: string neighborhood: type: string city: type: string state: type: string cep: type: string x-apidog-orders: - full_name - cpf - email - phone_mobile - birth_date - social_name - sex - blood_type - weight_kg - height_m - street - number - complement - neighborhood - city - state - cep x-apidog-ignore-properties: [] x-apidog-folder: '' Patient: type: object properties: id: type: string format: uuid examples: - 12345678-1234-1234-1234-123456789012 full_name: type: string examples: - Maria Santos Silva cpf: type: string examples: - '12345678901' email: type: string format: email examples: - maria@email.com phone_mobile: type: string examples: - (11) 99999-9999 birth_date: type: string format: date examples: - '1980-01-15' social_name: type: string examples: - Maria Santos sex: type: string examples: - F blood_type: type: string examples: - A+ weight_kg: type: number examples: - 65.5 height_m: type: number examples: - 1.65 bmi: type: number examples: - 24.1 street: type: string examples: - Rua das Flores, 123 number: type: string examples: - '123' complement: type: string examples: - Apt 45 neighborhood: type: string examples: - Centro city: type: string examples: - São Paulo state: type: string examples: - SP cep: type: string examples: - 01234-567 created_at: type: string format: date-time examples: - '2024-01-15T10:30:00Z' updated_at: type: string format: date-time examples: - '2024-01-15T10:30:00Z' created_by: type: string format: uuid examples: - 12345678-1234-1234-1234-123456789012 x-apidog-orders: - id - full_name - cpf - email - phone_mobile - birth_date - social_name - sex - blood_type - weight_kg - height_m - bmi - street - number - complement - neighborhood - city - state - cep - created_at - updated_at - created_by x-apidog-ignore-properties: [] x-apidog-folder: '' Error: type: object properties: error: type: string message: type: string code: type: string x-apidog-orders: - error - message - code x-apidog-ignore-properties: [] x-apidog-folder: '' securitySchemes: bearerAuth: type: jwt scheme: bearer bearerFormat: JWT description: Token JWT obtido no login bearer: type: http scheme: bearer servers: - url: https://yuanqfswhberkoevtmfr.supabase.co description: Prod Env - url: '' description: Cloud Mock security: - bearer: [] ``` # Listar pacientes ## OpenAPI Specification ```yaml openapi: 3.0.1 info: title: '' description: '' version: 1.0.0 paths: /rest/v1/patients: get: summary: Listar pacientes deprecated: false description: Retorna lista de pacientes com base nas permissões do usuário tags: - Pacientes - Pacientes parameters: - name: apikey in: header description: '' required: false example: '{{apikey}}' schema: type: string responses: '200': description: Lista de pacientes content: application/json: schema: type: array items: $ref: '#/components/schemas/Patient' headers: {} x-apidog-name: OK '401': description: Não autorizado content: application/json: schema: $ref: '#/components/schemas/Error' headers: {} x-apidog-name: Unauthorized security: - bearer: [] x-apidog-folder: Pacientes x-apidog-status: released x-run-in-apidog: https://app.apidog.com/web/project/1053378/apis/api-21940513-run components: schemas: Patient: type: object properties: id: type: string format: uuid examples: - 12345678-1234-1234-1234-123456789012 full_name: type: string examples: - Maria Santos Silva cpf: type: string examples: - '12345678901' email: type: string format: email examples: - maria@email.com phone_mobile: type: string examples: - (11) 99999-9999 birth_date: type: string format: date examples: - '1980-01-15' social_name: type: string examples: - Maria Santos sex: type: string examples: - F blood_type: type: string examples: - A+ weight_kg: type: number examples: - 65.5 height_m: type: number examples: - 1.65 bmi: type: number examples: - 24.1 street: type: string examples: - Rua das Flores, 123 number: type: string examples: - '123' complement: type: string examples: - Apt 45 neighborhood: type: string examples: - Centro city: type: string examples: - São Paulo state: type: string examples: - SP cep: type: string examples: - 01234-567 created_at: type: string format: date-time examples: - '2024-01-15T10:30:00Z' updated_at: type: string format: date-time examples: - '2024-01-15T10:30:00Z' created_by: type: string format: uuid examples: - 12345678-1234-1234-1234-123456789012 x-apidog-orders: - id - full_name - cpf - email - phone_mobile - birth_date - social_name - sex - blood_type - weight_kg - height_m - bmi - street - number - complement - neighborhood - city - state - cep - created_at - updated_at - created_by x-apidog-ignore-properties: [] x-apidog-folder: '' Error: type: object properties: error: type: string message: type: string code: type: string x-apidog-orders: - error - message - code x-apidog-ignore-properties: [] x-apidog-folder: '' securitySchemes: bearerAuth: type: jwt scheme: bearer bearerFormat: JWT description: Token JWT obtido no login bearer: type: http scheme: bearer servers: - url: https://yuanqfswhberkoevtmfr.supabase.co description: Prod Env - url: '' description: Cloud Mock security: - bearer: [] ``` # Login do usuário ## OpenAPI Specification ```yaml openapi: 3.0.1 info: title: '' description: '' version: 1.0.0 paths: /auth/v1/signin: post: summary: Login do usuário deprecated: false description: Autentica o usuário e retorna token JWT operationId: loginUser tags: - Autenticação - Autenticação parameters: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/LoginRequest' example: email: hugo@popcode.com.br password: hdoria responses: '200': description: Login realizado com sucesso content: application/json: schema: $ref: '#/components/schemas/LoginResponse' example: access_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... token_type: bearer expires_in: 3600 refresh_token: refreshtoken123 user: id: 724bbb13-2d70-42e7-b05a-8ed6cc499800 email: hugo@popcode.com.br email_confirmed_at: '2025-09-26T08:43:05.005937Z' headers: {} x-apidog-name: OK '400': description: Credenciais inválidas content: application/json: schema: &ref_0 $ref: '#/components/schemas/ErrorResponse' example: error: Invalid login credentials headers: {} x-apidog-name: Bad Request '422': description: Dados inválidos content: application/json: schema: *ref_0 example: error: Invalid email or password format headers: {} x-apidog-name: Unprocessable Entity security: [] x-apidog-folder: Autenticação x-apidog-status: released x-run-in-apidog: https://app.apidog.com/web/project/1053378/apis/api-22659547-run components: schemas: LoginRequest: type: object required: - email - password properties: email: type: string format: email description: Email do usuário examples: - hugo@popcode.com.br password: type: string description: Senha do usuário examples: - hdoria x-apidog-orders: - email - password x-apidog-ignore-properties: [] x-apidog-folder: '' LoginResponse: type: object properties: access_token: type: string description: Token JWT de acesso examples: - eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... token_type: type: string description: Tipo do token examples: - bearer expires_in: type: integer description: Tempo de expiração em segundos examples: - 3600 refresh_token: type: string description: Token para renovação examples: - refreshtoken123 user: type: object properties: id: type: string format: uuid description: ID do usuário examples: - 724bbb13-2d70-42e7-b05a-8ed6cc499800 email: type: string format: email description: Email do usuário examples: - hugo@popcode.com.br email_confirmed_at: type: string format: date-time description: Data de confirmação do email examples: - '2025-09-26T08:43:05.005937Z' x-apidog-orders: - id - email - email_confirmed_at x-apidog-ignore-properties: [] x-apidog-orders: - access_token - token_type - expires_in - refresh_token - user x-apidog-ignore-properties: [] x-apidog-folder: '' ErrorResponse: type: object properties: error: type: string description: Mensagem de erro descritiva examples: - 'Missing required fields: email, full_name, role' x-apidog-orders: - error x-apidog-ignore-properties: [] x-apidog-folder: '' securitySchemes: bearerAuth: type: jwt scheme: bearer bearerFormat: JWT description: Token JWT obtido no login servers: - url: https://yuanqfswhberkoevtmfr.supabase.co description: Prod Env - url: '' description: Cloud Mock security: [] ``` # Enviar Magic Link ## OpenAPI Specification ```yaml openapi: 3.0.1 info: title: '' description: '' version: 1.0.0 paths: /auth/v1/otp: post: summary: Enviar Magic Link deprecated: false description: Envia um link de autenticação sem senha por email operationId: sendMagicLink tags: - Autenticação - Autenticação parameters: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/MagicLinkRequest' example: email: usuario@clinica.com responses: '200': description: Magic link enviado com sucesso content: application/json: schema: type: object x-apidog-orders: [] properties: {} x-apidog-ignore-properties: [] example: message: Magic link sent successfully headers: {} x-apidog-name: OK '400': description: Email inválido content: application/json: schema: &ref_0 $ref: '#/components/schemas/ErrorResponse' example: error: Invalid email format headers: {} x-apidog-name: Bad Request '429': description: Muitas tentativas content: application/json: schema: *ref_0 example: error: Email rate limit exceeded headers: {} x-apidog-name: Too Many Requests security: [] x-apidog-folder: Autenticação x-apidog-status: released x-run-in-apidog: https://app.apidog.com/web/project/1053378/apis/api-22659548-run components: schemas: MagicLinkRequest: type: object required: - email properties: email: type: string format: email description: Email do usuário para receber o magic link examples: - usuario@clinica.com x-apidog-orders: - email x-apidog-ignore-properties: [] x-apidog-folder: '' ErrorResponse: type: object properties: error: type: string description: Mensagem de erro descritiva examples: - 'Missing required fields: email, full_name, role' x-apidog-orders: - error x-apidog-ignore-properties: [] x-apidog-folder: '' securitySchemes: bearerAuth: type: jwt scheme: bearer bearerFormat: JWT description: Token JWT obtido no login servers: - url: https://yuanqfswhberkoevtmfr.supabase.co description: Prod Env - url: '' description: Cloud Mock security: [] ```