Autenticação
Toda chamada em /v1 exige um token no cabeçalho Authorization. O servidor resolve a clínica e as permissões a partir dele.
Dois jeitos de autenticar
Usuário do painel
Authorization: Bearer <JWT> X-Clinic-Id se tiver mais de uma clínicaPermissõesAs do perfil do usuário na clínica (vínculo ativo).
Integração servidor a servidor
Authorization: Bearer <SERVICE_TOKEN> X-Clinic-Id obrigatórioX-Agent-Key obrigatórioPermissõesAs de agente, só se o agente estiver habilitado na clínica.
Token de usuário (JWT)
O aplicativo autentica o usuário no provedor de identidade da plataforma e recebe um token de acesso (JWT) de curta duração (15 min — renove antes de expirar). É o token de sessão do My Clinic: o painel o obtém logo após o login e o renova antes de expirar.
Envie Authorization: Bearer <TOKEN> em toda chamada /v1.
Authorization: Bearer <TOKEN>Clínica ativa
Se o usuário tiver acesso a mais de uma clínica, envie X-Clinic-Id: <clinic_id> (lista em GET /v1/me/memberships). O servidor valida o vínculo — o clinic_id nunca é aceito no corpo.
Authorization: Bearer <TOKEN>X-Clinic-Id: <clinic_id>Com um único vínculo ativo o cabeçalho é opcional: a API usa essa clínica. Veja GET /v1/me/memberships.
Token de serviço
Integrações servidor-a-servidor (automações/agentes): Authorization: Bearer <SERVICE_TOKEN> + X-Clinic-Id + X-Agent-Key (o agente precisa estar habilitado na clínica).
Authorization: Bearer <SERVICE_TOKEN>X-Clinic-Id: <clinic_id>X-Agent-Key: <agent_key>Emitido pela equipe do My Clinic
Tokens de serviço são criados pela equipe da plataforma, podem ser restritos a clínicas específicas e ainda estão em implantação junto com as automações. Para solicitar, escreva para suporte@myclinic.app. Use-os só no servidor, nunca no navegador ou em aplicativo móvel.Rotas públicas
Além do Swagger e do contrato (/docs, /openapi.json), só a verificação de saúde responde sem token:
Erros de autenticação
Códigos devolvidos em error.code quando o token ou a clínica não passam. Lista completa em Tratamento de erros.
- 401
invalid_tokenToken ausente, inválido ou expirado.
- 400
tenant_context_requiredInforme a clínica ativa no cabeçalho X-Clinic-Id (você tem acesso a mais de uma clínica).
- 400
invalid_clinic_idX-Clinic-Id inválido.
- 403
clinic_access_deniedVocê não tem acesso ativo a esta clínica.
- 403
no_clinic_membershipVocê ainda não tem acesso ativo a nenhuma clínica.
- 403
clinic_inactiveA clínica está com status SUSPENDED e não aceita operações.
- 403
agent_not_enabledAgente não habilitado para esta clínica.
- 403
forbiddenSeu perfil não tem permissão para esta ação.