getedgehq/http-error-triage

Execute antes de concluir algo a partir de um erro HTTP em uma API de terceiros. Separa um problema real de credencial/entitlement de um bloqueio de CDN ou WAF, um endpoint errado ou uma proibição por assinatura do cliente. Use sempre que uma API retornar 401/403/402/429 e você estiver prestes a dizer "a chave morreu", "os créditos acabaram", "o plano não tem acesso" ou "estamos com limite de taxa".

O que é http-error-triage?

Esta skill, **HTTP Error Triage**, orienta engenheiros de software a não tirarem conclusões precipitadas ao se depararem com erros HTTP (401, 403, 402, 429) ao consumir APIs de terceiros. Ela foi criada a partir de um incidente real onde um erro 403 foi incorretamente interpretado como problema de credencial ou cota, quando na verdade era um bloqueio de CDN causado por um User-Agent ausente. A skill fornece três controles práticos para diagnosticar a causa raiz: o teste de credencial inválida (comparando chave real, chave lixo e vazia), o teste de caminho sem sentido (verificando se o erro persiste em URLs inexistentes ou no site de marketing) e a inspeção de cabeçalhos de resposta (como `server: cloudflare` ou `cf-ray`) que revelam bloqueios de infraestrutura. Útil para desenvolvedores trabalhando com APIs REST, CI/CD, agentes de IA (Claude Code, Cursor) e automações, ela ajuda a evitar workarounds desnecessários, economizando tempo e recursos. A skill também inclui uma tabela de assinaturas conhecidas (como 403 + server cloudflare indicando bloqueio de assinatura do cliente) e recomenda cabeçalhos padrão para chamadas server-side, além de orientações para medir custo real de chamadas de API.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/getedgehq/skills/tree/main/http-error-triage

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Triagem de erro HTTP

Um erro HTTP informa que uma requisição falhou. Geralmente, não diz o porquê. Concluir que "a chave morreu" a partir de um 403 é um palpite disfarçado de número.

Nascido de um incidente real (2026-07-30): uma API de enriquecimento de contatos de terceiros retornou 403 error code: 1010 para todas as chamadas por seis dias. Foi interpretado como "chave não autorizada", "créditos esgotados", "cota mensal atingida". Uma solução alternativa de automação de navegador com 756 linhas foi construída com base nessa crença, e um cliente quase foi solicitado a verificar um plano que estava correto. A causa real era um User-Agent ausente, então o CDN baniu o cliente na borda. Um cabeçalho resolveu: 200 OK, dados completos, e o saldo de créditos estava lá o tempo todo.

Execute estes três controles antes de diagnosticar

1. O controle de credencial inválida. Envie a mesma requisição com uma credencial deliberadamente inválida, e novamente sem nenhuma.

for label, key in [("real", REAL_KEY), ("garbage", "0"*36), ("empty", "")]:
    ...  # mesma URL, mesmo método, mesmos cabeçalhos

Se todas as três retornarem o mesmo status e corpo, o erro não é sobre sua credencial. Ele não carrega nenhuma informação sobre autorização, cota ou validade. Pare de raciocinar sobre a chave.

2. O controle de caminho sem sentido. Solicite um caminho que certamente não existe, e a raiz do site.

GET https://api.example.com/definitely-not-a-real-path-12345
GET https://api.example.com/
GET https://www.example.com/          # site de marketing deles

Se o erro da API também vier do site de marketing, você está sendo bloqueado na frente da origem. Nada sobre a chamada da API ajudará.

3. Leia os cabeçalhos da resposta, não apenas o corpo.

except urllib.error.HTTPError as e:
    print(e.code, e.headers.get("server"), e.read()[:200])

server: cloudflare em um erro de "auth" é a pista. Assim como cf-ray, x-amzn-waf, akamai. Isso é infraestrutura, não a API.

Assinaturas conhecidas

SintomaCausa realCorreção
403 + corpo error code: 1010, server: cloudflareCloudflare baniu a assinatura do clienteEnvie um User-Agent de navegador real
Mesmo erro para todo caminho, inclusive /Bloqueio de borda/WAF ou banimento de IPMude UA, depois IP/proxy
402Realmente sem créditos: a requisição autenticouRecarregue; a chave está boa
429 logo após um sucessoLimite de taxa realPaceie requisições, adicione backoff
400 com uma mensagem de campoVocê chegou à API e a autenticação passouCorrija o payload; isso é uma boa notícia

Um erro de validação 400 é um sinal de sucesso para triagem: prova que a autenticação foi aceita.

Cabeçalhos padrão para qualquer chamada de API server-side

O urllib do Python envia User-Agent: Python-urllib/3.x, que muitos WAFs banem diretamente. Sempre defina:

headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0 Safari/537.36",
    "Accept": "application/json",
    "Content-Type": "application/json",
}

Então meça o custo antes de qualquer varredura

Assim que funcionar, não estime gastos. Leia o uso antes e depois de uma chamada, e leia o próprio campo de faturamento do provedor na resposta.

before = usage(); result = call(); after = usage()
print("charged:", result.get("billing"), "| measured:", before - after)

O que relatar

Declare o que você testou e o que permanece desconhecido. "Ambas as chaves 403" não é uma descoberta se uma chave vazia retorna o mesmo 403. Diga, em vez disso: "403 é não informativo aqui, uma credencial nula também o retorna; a causa está a montante da autenticação."

Individual skills in this repo

This repo contains 18 individual skills — each has its own dedicated page.

getedgehq/agent-evals

Build evals for an AI agent that already does real work. Use when someone asks "how do I know my agent is right", wants to test an agent before trusting it, compare models on cost versus quality, or turn production failures into tests. Walks from first tasks and yes/no verifiers, to isolated environments, to a trace-driven improvement loop.

getedgehq/cli-ux-review

Audit a command-line tool for user-friendliness — clear situation / next-step / options in every output, colour-highlighted runnable commands, no raw jargon, no silent hangs. Invoke for "CLI UX audit", "review my CLI", "is this CLI intuitive", or before any CLI release.

getedgehq/generate-image

Generate images with OpenAI GPT Image 2 via the Codex CLI, billed through the user's ChatGPT Plus subscription (no OpenAI API key, no per-image API cost). Use when the user asks to create, generate, or make an image, picture, illustration, icon, hero graphic, or concept art from a text prompt.

getedgehq/harness-first

Diagnose and fix an unreliable, expensive, or unsafe LLM agent by auditing its harness (golden set, judge, cost caps, data layer, action approvals, tracing) before blaming or swapping the model. Use when someone says an agent is "burning tokens", "hallucinating", "brittle", gives inconsistent answers, asks whether to switch to a cheaper/better model, or wants to ship an agent or prompt change to customers.

getedgehq/linkedin-media-prep

Convert, crop, resize, and compress images and videos for optimal LinkedIn upload quality and file size. Use when the user wants to prepare a photo, image, or video for LinkedIn (profile picture, cover photo, post image, article featured image, post video, or video ad), optimize file size for LinkedIn, crop and resize for LinkedIn dimensions, convert HEIC/RAW/PNG/MOV to LinkedIn-ready JPEG or MP4, or mentions LinkedIn media requirements, specs, or limits.

getedgehq/monid

>-

getedgehq/opendraft

An 18-agent pipeline that turns one topic line into a drafted

getedgehq/people-search

Find and rank professional people for recruiting, partnerships, sales, or research from user-provided data, public web sources, an authenticated search session, or a connected provider. Use for people discovery, LinkedIn or Sales Navigator search design, profile-list ranking, or provider filter translation.

getedgehq/rocketlist

Turn a CV into a shortlist of live startup roles from Rocketlist's public job board, including adjacent job titles the person would never have searched for, each with its published salary, the evidence for the fit, and a direct apply link. Use for "find roles I would be a strong fit for", career pivots, remote or VC-backed job hunts, and salary-visible role discovery.

getedgehq/security-audit-checklist

Run a comprehensive security audit across application code, cloud infrastructure, containers, CI/CD pipelines, and infrastructure-as-code. Covers privacy compliance, OWASP basics, secret leakage, API security, IAM misconfigurations, storage exposure, Kubernetes hardening, and network security. Use when the user asks to audit, review, or harden app or cloud security, check for secrets, scan for XSS/SQLi, verify security headers, review Terraform/CloudFormation, audit AWS/GCP/Azure configs, or perform any security-focused review.

getedgehq/shadcn-first

>-

getedgehq/skills

Develop or review a branded long-form YouTube channel using Simon Kaiser's public creator-led approach: audience fit, recurring formats, natural brand integration, Time with Brand, and an organic, paid, and Shorts strategy. Use for channel strategy, format briefs, and pilots.

getedgehq/skills

Build a YouTube strategy, evidence-backed idea slate, and title plus thumbnail package using Paddy Galloway's public method. Use when planning a channel, choosing concepts, or preparing a video before filming.

getedgehq/skills

Build or review a buyer-centered strategic narrative using Andy Raskin's public method. Use for sales or investor deck stories, homepage positioning, keynotes, launch narratives, and why-now messaging.

getedgehq/skills

Turn a product URL, launch brief, or approved script into a production-ready launch video. Use for product reveals, feature announcements, SaaS launches, and narrated product films; not for generic explainers or editing existing footage.

getedgehq/strip-image-ai-metadata

Strip C2PA and AI-generation metadata from images (PNG, JPEG, WebP) to remove "Generated by AI" / "ChatGPT" / "DALL-E" labels that platforms like LinkedIn, Instagram, and X display. Use when the user wants to clean AI-generated images before posting, remove AI attribution from photos, strip C2PA manifests, sanitize image metadata for professional use, or verify whether an image contains C2PA data.

getedgehq/top-down-comms

>-

getedgehq/workplan

Create, update, or close work plans for multi-step tasks. Use when starting refactors, bug lists, feature work, migrations, or any task with 2+ steps. Also use after auto-compaction to re-orient. Triggers: "workplan", "work plan", "create a plan", "what's the plan", "where was I", or when Claude detects

Habilidades Relacionadas