getedgehq/http-error-triage

Exécutez ceci avant de conclure quoi que ce soit à partir d'une erreur HTTP d'une API tierce. Sépare un véritable problème de crédential/droits d'accès d'un blocage CDN ou WAF, d'un mauvais endpoint ou d'un bannissement par signature client. À utiliser lorsqu'une API renvoie 401/403/402/429 et que vous êtes sur le point de dire « la clé est morte », « les crédits sont épuisés », « le plan n'a pas accès » ou « nous sommes limités en débit ».

Qu'est-ce que http-error-triage ?

Cette compétence fournit une approche systématique pour diagnostiquer les erreurs HTTP provenant d'API tierces, en particulier les codes 401, 403, 402 et 429. Elle aide les développeurs à éviter les conclusions erronées courantes, comme déclarer une clé API « morte » ou des crédits « épuisés », alors que le problème réel peut être un blocage au niveau du réseau de diffusion de contenu (CDN), d'un pare-feu applicatif web (WAF), d'une signature client interdite, ou d'un endpoint invalide. La compétence propose trois contrôles simples : tester avec des identifiants invalides ou nuls, requêter un chemin absurde pour identifier un blocage en amont du serveur, et inspecter les en-têtes de réponse (comme `server: cloudflare`). Elle inclut également un tableau de signatures connues, des recommandations d'en-têtes HTTP par défaut (comme un User-Agent de navigateur pour éviter les blocages WAF), et une procédure pour mesurer le coût réel d'un appel API. Développée à partir d'un incident réel où une API a renvoyé une erreur 403 pendant six jours à cause d'un User-Agent manquant, cette compétence est conçue pour les environnements d'agents IA, notamment Claude Code, Cursor et Codex, afin de réduire les fausses suppositions et accélérer le débogage.

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

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Tri des erreurs HTTP

Une erreur HTTP vous indique qu'une requête a échoué. Elle ne vous dit généralement pas pourquoi. Conclure « la clé est morte » à partir d'un 403 est une supposition déguisée en chiffre.

Né d'un incident réel (2026-07-30) : une API tierce d'enrichissement de contacts renvoyait 403 error code: 1010 à chaque appel pendant six jours. Cela a été interprété comme « clé non autorisée », « crédits épuisés », « quota mensuel atteint ». Une solution de contournement automatisée par navigateur de 756 lignes a été construite sur cette croyance, et un client a failli être invité à vérifier un plan qui était pourtant en règle. La cause réelle était un User-Agent manquant, donc le CDN a banni le client à la périphérie. Un seul en-tête a tout réglé : 200 OK, toutes les données, et le solde de crédits était là depuis le début.

Exécutez ces trois contrôles avant de diagnostiquer

1. Le contrôle d'identifiant invalide. Envoyez la même requête avec un identifiant délibérément invalide, puis sans aucun identifiant.

for label, key in [("réel", CLE_REAL), ("invalide", "0"*36), ("vide", "")]:
    ...  # même URL, même méthode, mêmes en-têtes

Si les trois renvoient le même statut et le même corps, l'erreur ne concerne pas votre identifiant. Elle ne porte aucune information sur les droits, le quota ou la validité. Arrêtez de raisonner sur la clé.

2. Le contrôle de chemin absurde. Faites une requête vers un chemin qui n'existe certainement pas, et vers la racine du site.

GET https://api.example.com/absolument-pas-un-chemin-réel-12345
GET https://api.example.com/
GET https://www.example.com/          # leur site marketing

Si l'erreur de l'API revient aussi depuis le site marketing, vous êtes bloqué en amont de l'origine. Rien concernant l'appel API ne vous aidera.

3. Lisez les en-têtes de réponse, pas seulement le corps.

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

server: cloudflare sur une erreur « auth » est le révélateur. De même pour cf-ray, x-amzn-waf, akamai. Ce sont des infrastructures, pas l'API.

Signatures connues

SymptômeCause réelleCorrectif
403 + corps error code: 1010, server: cloudflareCloudflare a banni la signature du clientEnvoyer un vrai User-Agent de navigateur
Même erreur pour chaque chemin, y compris /Blocage Edge/WAF ou bannissement IPChanger User-Agent, puis IP/proxy
402Crédits réellement épuisés : la requête s'est authentifiéeRecharger ; la clé est bonne
429 juste après un succèsVraie limite de débitEspacer les requêtes, ajouter un backoff
400 avec un message de champVous avez atteint l'API et l'auth a réussiCorriger le payload ; c'est une bonne nouvelle

Une erreur de validation 400 est un signal de succès pour le tri : elle prouve que l'authentification a été acceptée.

En-têtes par défaut pour tout appel d'API côté serveur

Le urllib de Python envoie User-Agent: Python-urllib/3.x, que de nombreux WAF bannissent carrément. Toujours définir :

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",
}

Ensuite, mesurez le coût avant toute action générale

Une fois que cela fonctionne, n'estimez pas la dépense. Lisez l'utilisation avant et après un appel, et lisez le champ de facturation propre au fournisseur dans la réponse.

avant = usage(); resultat = appel(); apres = usage()
print("facturé :", resultat.get("billing"), "| mesuré :", avant - apres)

Que rapporter

Indiquez ce que vous avez testé et ce qui reste inconnu. « Les deux clés renvoient 403 » n'est pas une conclusion si une clé vide renvoie le même 403. Dites plutôt : « Le 403 n'est pas informatif ici, un identifiant nul le renvoie aussi ; la cause est en amont de l'auth. »

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

Skills associés