Mandar erros do seu sistema pra fila de chamados (API de Bugs)
Atualizado em
A API de Bugs recebe um erro do seu sistema e abre um chamado com ele. Você manda a mensagem do erro, o stack trace e um pouco de contexto; o supme cria o chamado no canal "API de Bugs", com o stack já formatado. Erros iguais que chegam na mesma hora entram no mesmo chamado, então um loop de falha não vira mil chamados.
Gerar a chave
Vá em Configuração > API.
Clique em "Nova chave", dê um nome (por exemplo, "Produção") e salve.
Copie a chave que aparece. Ela só aparece uma vez: depois o supme guarda só o começo dela, e não dá pra recuperar o resto. Se perder, gere outra.
Guarde a chave numa variável de ambiente (por exemplo, SUPME_API_KEY). Não escreva ela no código nem suba pro repositório. É um segredo, e quem tiver ela pode abrir chamados no seu espaço.
O endpointPOST https://supme.io/api/integrations/bugs, com headers X-API-Key e Content-Type: application/json.
Campos do corpo
error_message(obrigatório): mensagem do erro. Vira o assunto do chamado (primeiros 80 caracteres).stack_trace: o stack em texto. Aparece num bloco de código no chamado.environment: objeto livre com dados do ambiente (versão, ambiente, host).user_context: objeto livre com quem estava usando (id do usuário, rota, plano).occurred_at: quando aconteceu (ISO 8601). Sem isso, vale a hora da chamada.
Exemplo de corpo:
{ "error_message": "TypeError: cannot read property x of undefined",
"stack_trace": "at handler (/app/src/index.js:42:11)",
"environment": { "env": "production", "release": "1.4.2" },
"user_context": { "user_id": "abc123" }
}
Resposta: { "ticket_id": "5f0b...", "ticket_number": 42, "deduped": false }. deduped: true quer dizer que o erro caiu num chamado que já existia.
Ligar no seu error handler
O lugar de chamar a API é o tratador de erros global do seu sistema, não cada try/catch. Assim todo erro não tratado é reportado sem você lembrar. Exemplo em Node:
async function reportBug(err, extra = {}) { try {
await fetch("https://supme.io/api/integrations/bugs", {
method: "POST",
headers: {
"X-API-Key": process.env.SUPME_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
error_message: err.message,
stack_trace: err.stack,
environment: { env: process.env.NODE_ENV, release: process.env.RELEASE },
user_context: extra,
}),
});
} catch (_) {
// o reporter nunca pode derrubar o app
}
}
process.on("uncaughtException", (e) => reportBug(e));
process.on("unhandledRejection", (e) => reportBug(e));
O card "Quick start" da tela de API tem exemplos prontos pra Node, Python, PHP, Java e Go.
O que o supme faz com o erro
Esconde segredos: antes de gravar, troca por [REDACTED] os valores de campos que parecem segredo (password, token, secret, authorization, api_key), inclusive em objetos aninhados. No stack, apaga Bearer ... e sk-.... Pode mandar o contexto inteiro sem limpar antes.
Agrupa erro repetido: mesmo erro (mesma mensagem e primeira linha do stack) dentro de uma hora, com o chamado ainda aberto, não abre outro — registra mais uma ocorrência no mesmo. Se o chamado já foi resolvido/fechado, uma ocorrência nova abre um chamado novo.
Limita o volume: cada chave aceita 60 chamadas por minuto. Acima, resposta 429. Se o volume for maior, junte ou espace as chamadas no seu lado.
Erros comuns
401 invalid_api_key: chave errada, inativa, ou fora do formatosup_<prefixo>_<segredo>.402 feature_not_available: seu plano não inclui a API de Bugs (Configuração > Assinatura).429 too_many_requests: passou de 60 chamadas por minuto naquela chave.