Tratamento de erros
Todo erro tem o mesmo formato. Trate pelo código estável em error.code, mostre error.message e guarde o requestId.
Formato do erro
Campos do objeto error (esquema Error do contrato):
errorobjectObrigatóriocodestringObrigatórioerror.codeCódigo estável para tratamento programático.
messagestringObrigatórioerror.messageMensagem em pt-BR para exibição.
detailsobject[]Opcionalerror.detailsfieldstringObrigatórioerror.details[].fieldmessagestringObrigatórioerror.details[].messagecodestringObrigatórioerror.details[].coderequestIdstringObrigatórioerror.requestIdId da requisição (também no cabeçalho X-Request-Id). Informe ao suporte.
Erros de validação
Corpo, consulta ou caminho fora do esquema devolvem 422 com um item em details por problema. A mensagem de cada item vem do validador e hoje sai em inglês; use field e code para montar o texto na sua interface.
{ "error": { "code": "validation_error", "message": "A validação da requisição falhou.", "details": [ { "field": "name", "message": "must have required property 'name'", "code": "required" } ], "requestId": "req_3f9c1a7b2d4e6f8a0b1c" }}Status HTTP
Códigos de erro
Lista extraída do código da API (71 códigos). “Mensagem específica da operação” indica que o texto muda conforme o caso.
- 400
bad_requestRequisição inválida.
- 400
invalid_clinic_idX-Clinic-Id inválido.
- 400
invalid_jsonCorpo JSON malformado.
- 400
preflight_untrusted_fieldCampo não permitido no preflight.
- 400
tenant_context_requiredInforme a clínica ativa no cabeçalho X-Clinic-Id (você tem acesso a mais de uma clínica).
- 401
invalid_tokenToken ausente, inválido ou expirado.
- 401
unauthorizedAutenticação necessária.
- 402
trial_expiredO teste grátis terminou. O painel está em modo somente leitura até a ativação do plano.
- 403
agent_context_mismatchAgente divergente do contexto autenticado.
- 403
agent_mismatchUm agente só registra execuções/estado próprios.
- 403
agent_not_enabledAgente não habilitado para esta clínica.
- 403
agent_only_fieldsPontuação e qualificação são definidas pelos agentes.
- 403
clinic_access_deniedVocê não tem acesso ativo a esta clínica.
- 403
clinic_inactiveA clínica está com status SUSPENDED e não aceita operações.
- 403
clinical_forbiddenCampos clínicos exigem permissão de prontuário.
- 403
cron_forbiddenSegredo do agendador inválido.
- 403
email_not_verifiedConfirme seu e-mail para continuar. Enviamos um link de verificação para a sua caixa de entrada.
- 403
forbiddenSeu perfil não tem permissão para esta ação.
- 403
invitation_email_mismatchEste convite foi enviado para outro e-mail.
- 403
no_clinic_membershipVocê ainda não tem acesso ativo a nenhuma clínica.
- 403
platform_onlySomente a equipe da plataforma.
- 403
preview_no_handoffConversas de Agent Preview não podem ser assumidas nem devolvidas.
- 403
preview_record_onlyRegistro sem envio permitido apenas em conversas de Agent Preview, e conversas de prévia só aceitam recordOnly do agente.
- 403
service_onlySessões de prévia só aceitam escrita do agente dono (token de serviço).
- 403
signup_not_allowedO autocadastro é feito pela conta do dono da clínica.
- 404
not_foundRecurso não encontrado.
- 404
route_not_foundRota … … não existe.
- 409
already_activeEsta automação já está ativa.
- 409
already_connectedIntegração já conectada. Desconecte antes de conectar outra conta.
- 409
already_convertedEste lead já virou paciente.
- 409
already_emittedEste atendimento já tem nota … (…).
- 409
already_memberEsta pessoa já tem acesso ou convite pendente nesta clínica.
- 409
cannot_change_own_accessVocê não pode alterar o próprio acesso.
- 409
concurrent_updateA assinatura foi criada por outra requisição. Tente de novo.
- 409
conflictMensagem específica da operação.
- 409
draft_existsEste serviço já tem um rascunho aberto: edite-o ou descarte antes.
- 409
duplicateJá existe um serviço com a chave "…".
- 409
idempotency_key_reusedEsta Idempotency-Key já foi usada com outro conteúdo.
- 409
ignoredCandidato marcado como "não emitir": restaure antes de revisar.
- 409
in_batchCandidato reservado num lote em rascunho: descarte o lote para revisar.
- 409
invalid_state_transitionMensagem específica da operação.
- 409
invitation_expiredConvite expirado. Peça um novo convite ao administrador.
- 409
invitation_not_pendingEste convite já foi usado ou cancelado.
- 409
label_limitA clínica já tem … etiquetas. Exclua uma antes de criar outra.
- 409
last_adminA clínica precisa de pelo menos um administrador ativo.
- 409
leave_production_firstEm Produção os dados fiscais não podem mudar. Volte para Homologação, altere e registre de novo a aprovação.
- 409
preview_identity_linkedSessão de prévia contém vínculo de contato ou atendimento humano.
- 409
same_planA clínica já está neste plano.
- 409
schedule_conflictConflito de agenda: o profissional já tem atendimento das … às ….
- 409
signup_conflictNão foi possível concluir o cadastro. Fale com o suporte.
- 409
trial_not_cancellableDurante o teste grátis não há cobrança para cancelar: se não quiser continuar, basta não ativar o plano.
- 409
trial_unavailableO teste grátis já foi usado para esta automação.
- 413
payload_too_largeCorpo ou arquivo acima do limite.
- 415
unsupported_media_typeContent-Type não suportado.
- 422
config_incompleteNão dá para aprovar uma configuração incompleta. Falta: ….
- 422
email_requiredA conta precisa ter um e-mail para criar a clínica.
- 422
plan_requires_salesEste plano é sob consulta e não está disponível no autocadastro. Fale com o time comercial.
- 422
production_confirmation_requiredPara ativar Produção digite exatamente: …
- 422
rule_incompleteRegra incompleta para aprovar: ….
- 422
unknown_planPlano inexistente.
- 422
unknown_professionalProfissional não encontrado nesta clínica.
- 422
unprocessable_entityMensagem específica da operação.
- 422
unsafe_svgSVG com scripts ou conteúdo ativo não é aceito.
- 422
unsupported_file_typeFormato não suportado. Use PNG, JPEG, WEBP ou SVG.
- 422
use_convertPara "Virou paciente" use POST /leads/{id}/convert (cria o cadastro do paciente).
- 422
validation_errorA validação da requisição falhou.
- 429
rate_limit_exceededLimite de requisições excedido. Tente novamente em … segundos.
- 500
internal_errorErro interno. Informe o requestId ao suporte.
- 502
upstream_errorUm serviço externo falhou.
- 503
backend_unavailableO armazenamento de dados da plataforma não está configurado ou não respondeu.
- 503
signup_disabledO cadastro de novas clínicas ainda não está aberto. Fale com a equipe do My Clinic.
Como tratar
- Decida pelo status e por error.code; o texto de message pode mudar.
- 401: renove o token e repita uma única vez. 403: não repita — falta permissão ou vínculo.
- 429 e 503: espere o Retry-After antes de tentar de novo.
- 409: releia o recurso; o estado mudou desde a sua última leitura.
- Registre o requestId (também no cabeçalho X-Request-Id) e envie ao suporte quando precisar de ajuda.