Erros técnicos devem mostrar códigos ao usuário?

Descubra quando um código de erro ajuda na recuperação e no suporte — e quando ele só confunde ou expõe detalhes internos.

Ilustração wireframe de uma mensagem de erro com código de referência secundário e botão de cópia
Nível de impácto
Médio
Status
Usar com atenção
Nível de evidênica
Evidência moderada

Contexto

Um código de erro é um identificador criado para diagnóstico, suporte ou rastreamento técnico. Ele não explica, por si só, o que a pessoa pode fazer. Por isso, a pergunta não é se códigos são bons ou ruins, mas se aquele código ajuda este público a recuperar-se ou a pedir ajuda.

Em uma interface para o público geral, a mensagem principal deve traduzir o impacto da falha e indicar o próximo passo. O código pode aparecer como referência secundária quando houver uma equipe de suporte, um incidente persistente ou uma necessidade real de localizar a ocorrência.

Comece pelo que a pessoa precisa saber: o que não aconteceu, se a operação foi concluída e qual ação é segura. Prefira “Não foi possível salvar o arquivo. Tente novamente” a “Erro 500”.

Mostre um código somente quando ele tiver uma função clara, como acelerar o atendimento ou localizar uma ocorrência persistente. Apresente-o depois da mensagem principal, com um rótulo compreensível — por exemplo, “Código de referência: 8F4K2” — e permita copiá-lo sem exigir que a pessoa o interprete.

Use identificadores curtos, estáveis e não sensíveis. Correlacione o código com logs, horário, conta e rastreamento no ambiente interno, sem revelar esses dados na interface. Se a operação puder ter sido concluída, informe como consultar o status antes de sugerir uma nova tentativa.

Separe a resposta para a interface do contrato técnico da API. Para integrações, um formato estruturado pode transportar tipo, título, status, detalhe seguro e identificador da ocorrência; a interface não precisa expor a resposta bruta, a stack trace ou a exceção interna.

Em autenticação, recuperação de conta e outros fluxos sensíveis, use mensagens genéricas quando detalhes diferentes puderem revelar a existência de uma conta, um recurso ou uma regra interna.

Mensagem de erro do Windows com código exibido como detalhe secundário
Exemplo real documentado: a orientação oficial da Microsoft mostra o código de erro como detalhe secundário, acessível por “Mostrar/Ocultar detalhes”, depois da descrição do problema. O código complementa a mensagem e não substitui a solução. Fonte: Microsoft Learn — Error Messages in Windows 7 — https://learn.microsoft.com/en-us/windows/win32/uxguide/mess-error.

Porque isso importa?

Códigos podem reduzir o tempo de suporte quando são usados como referência compartilhada, mas acrescentam pouco para quem só precisa concluir uma tarefa. Colocá-los no início da mensagem desloca a atenção para uma informação que a maioria das pessoas não sabe interpretar.

O W3C orienta identificar erros em texto e oferecer sugestões quando conhecidas. Isso exige uma explicação compreensível e uma saída, não apenas um número. A orientação do Adobe Spectrum converge com essa distinção: o código pode aparecer quando for útil e deve ficar no final da mensagem.

Detalhes técnicos também podem expor informações sobre a implementação ou ajudar ataques de enumeração. A recomendação, portanto, combina clareza para a pessoa, segurança na exposição e rastreabilidade para a equipe — sem transformar o usuário em depurador.

  • Quando o suporte precisa localizar a ocorrência.
  • Quando a falha persiste ou afeta muitas pessoas.
  • Quando há um canal de atendimento disponível.
  • Quando o código é curto e não revela dados.
  • Quando o público conhece o domínio técnico.
  • Quando a operação exige investigação posterior.
  • Em erros simples que a pessoa consegue corrigir.
  • Em validações de campos.
  • Quando o código não leva a nenhuma ação.
  • Quando expõe stack trace ou sistema interno.
  • Em autenticação com risco de enumeração.
  • Quando a mensagem desaparece antes de ser copiada.
Exemplo documentado de resposta Cloudflare com erro 522, código e identificador de rastreamento
Exemplo real documentado: a Cloudflare combina “Error 522” com explicação, orientação de ação, indicação de nova tentativa e Ray ID para localizar a ocorrência. O código está acompanhado de contexto operacional. Fonte: Cloudflare Fundamentals — Error responses — https://developers.cloudflare.com/fundamentals/reference/error-responses/.

Recomendações

Faça

Práticas recomendadas
  • Explique o impacto.
  • Indique o próximo passo.
  • Mostre o código depois.
  • Rotule a referência.
  • Permita copiar.
  • Registre o contexto internamente.
  • Preserve o estado da operação.
  • Teste com o suporte.
Wireframe de erro com explicação principal, ação de recuperação e código de referência secundário
Exemplo conceitual correto: a mensagem explica a falha e o código aparece como referência secundária copiável.

Evite

Práticas a evitar
  • Não comece pelo número.
  • Não mostre stack trace.
  • Não exiba dados internos.
  • Não use código sem suporte.
  • Não culpe a pessoa.
  • Não dependa de cor.
  • Não revele contas válidas.
  • Não peça interpretação técnica.
Wireframe de erro que apresenta detalhes técnicos em excesso e esconde a orientação para a pessoa
Exemplo conceitual incorreto: detalhes técnicos dominam o alerta e a mensagem útil fica secundária.
Documentação da Stripe explicando o identificador Request-Id para rastrear uma requisição
Exemplo real documentado de API: a Stripe usa o Request-Id para localizar a requisição nos logs do Dashboard e recomenda informá-lo ao suporte. É uma referência para investigação técnica, não um texto que a pessoa precisa interpretar. Fonte: Stripe Docs — Request IDs — https://docs.stripe.com/api/request_ids.

Acessibilidade

O código precisa estar em texto selecionável, com rótulo explícito e contraste suficiente. Não dependa apenas de cor, ícone ou posição para comunicar que se trata de uma referência técnica. Se houver “Copiar código”, use um botão com nome acessível, foco visível e confirmação textual do resultado.

Para uma mensagem dinâmica, mantenha uma região apropriada no DOM e escolha o anúncio conforme a urgência. Uma falha informativa pode usar uma região de status sem mover o foco; uma situação que exige decisão imediata pode exigir um alerta ou diálogo bem estruturado. Não interrompa a pessoa com códigos que não mudam sua ação.

Se o erro estiver ligado a um campo ou formulário, identifique o item afetado e associe a mensagem a ele. A referência técnica deve complementar a explicação, nunca substituí-la. Verifique a leitura por teclado, leitor de tela, zoom e alto contraste.

Checklist

  • A mensagem explica o que aconteceu?
  • A pessoa sabe qual ação é segura?
  • O código tem uma função real?
  • O código aparece depois da mensagem principal?
  • O rótulo deixa claro que é uma referência?
  • O código é copiável por teclado?
  • O identificador evita dados sensíveis?
  • Os detalhes técnicos ficam nos logs?
  • O suporte consegue localizar a ocorrência?
  • O erro não depende só de cor ou ícone?
  • O estado da operação está claro?
  • A mensagem foi testada com tecnologia assistiva?

Referências

  • W3C — WCAG 2.2, critérios 3.3.1 e 3.3.3. Exige que erros detectados sejam identificados e descritos em texto e que sugestões conhecidas sejam oferecidas, salvo quando isso comprometer a segurança ou o propósito do conteúdo. Dá a base normativa para priorizar explicação e recuperação em vez de exibir apenas um código. Consultar o critério 3.3.1 e o critério 3.3.3.
  • OWASP — Error Handling Cheat Sheet. Recomenda mensagens sem detalhes de implementação para reduzir exposição de informação e diferencia respostas de erro para clientes de informações de diagnóstico para a equipe. Apoia manter stack traces, detalhes internos e dados sensíveis fora da interface. Consultar a orientação.
  • OWASP — Improper Error Handling. Identifica como problema a exibição de stack traces, dumps de banco e códigos internos, e recomenda uma separação entre mensagem significativa para a pessoa e informação diagnóstica para quem mantém o sistema. Consultar o material.
  • IETF — RFC 9457, Problem Details for HTTP APIs. Define uma estrutura para erros de API com tipo, título, status, detalhe e identificador da ocorrência. O documento orienta que o detalhe humano ajude a corrigir o problema, em vez de funcionar como informação de depuração, e alerta para riscos de expor internals. É referência técnica para separar contrato de API e apresentação da interface. Consultar a RFC.
  • Adobe Spectrum — Writing for errors. Recomenda incluir códigos apenas quando forem úteis e relevantes para o público, colocando-os ao final da mensagem para não sobrecarregar a leitura inicial. O exemplo mostra o código como referência para contato com suporte, não como explicação principal. É uma recomendação de Design System, não uma evidência universal isolada. Consultar a orientação.
  • IBM Carbon — Notification. Recomenda títulos curtos, corpo conciso e uma ação de resolução para mensagens de erro; diferencia notificações inline, acionáveis e toast conforme contexto e persistência. Ajuda a decidir onde uma referência técnica pode acompanhar a mensagem sem substituir o próximo passo. Consultar o componente.
  • Atlassian Design System — Error messages. Orienta explicar o que aconteceu, oferecer uma solução alternativa e revelar informações adicionais gradualmente, com linguagem simples e escaneável. É referência contextual de conteúdo e não deve ser tratada isoladamente como regra universal. Consultar a orientação.
Veja também

Esta recomendação foi útil para você?