Rustine docs
Démarrer

Erreurs

Le format des erreurs, quand réessayer, et chaque code que l'API peut renvoyer.

Ouvrir dans ClaudeOuvrir dans ChatGPT

Une erreur a toujours la même forme, quel que soit l’appel :

{
  "error": {
    "type": "invalid_request",
    "code": "parameter_invalid",
    "message": "Paramètre invalide : limit.",
    "param": "limit",
    "doc_url": "https://docs.rustine.io/api/errors#parameter_invalid"
  }
}
  • type : la catégorie, pour savoir qui doit agir (toi, ton offre, ou Rustine).
  • code : le cas précis. C’est lui qu’il faut tester dans ton code.
  • message : une phrase pour un humain, dans la langue du propriétaire de la clé. Journalise-la, ne la teste pas : sa formulation peut changer.
  • param : avec invalid_request, le paramètre en cause.
  • doc_url : la ligne de cette page qui explique le code.
  • upgrade_url : avec plan_limit, où changer d’offre ou acheter un pack.

Chaque réponse porte aussi un en-tête Request-Id : donne-le au support si une erreur revient.

Quand réessayer

  • 429 : oui, après le nombre de secondes de l’en-tête Retry-After.
  • 500, 502 et 503 : oui, un peu plus tard. Pour une écriture, renvoie la même Idempotency-Key : l’action ne sera pas faite deux fois.
  • 409 idempotency_in_progress : oui, dans un instant.
  • Les autres 4xx : non. La même requête recevra la même réponse ; corrige-la d’abord, ou change d’offre pour un 402.

Tous les codes

error.codeHTTPCe que ça veut dire
body_invalid400Le corps de la requête n'est pas du JSON valable. Vérifie l'en-tête Content-Type: application/json.
cursor_invalid400starting_after n'est l'identifiant d'aucun élément de cette liste.
idempotency_key_invalid400L'en-tête Idempotency-Key doit faire de 1 à 255 caractères imprimables.
parameter_invalid400Un paramètre manque ou n'est pas valable ; param le nomme.
reason_required400Marquer un faux positif ou un risque accepté demande une raison, de 10 à 500 caractères.
target_kind_invalid400Le type de scan ne va pas avec la cible : repository pour un dépôt GitHub, quick ou audit pour un site.
url_invalid400L'adresse n'est pas l'URL valable d'un site public.
url_private400Rustine ne scanne que des sites publics, jamais une adresse locale ou privée.
authentication_required401Aucune clé dans la requête. Passe-la dans l'en-tête Authorization: Bearer rst_…, jamais dans l'adresse.
invalid_api_key401La clé ou le jeton OAuth est faux, révoqué ou expiré. Vérifie qu'il est copié en entier, ou crée une nouvelle clé.
address_limit_reached402Le projet suit déjà autant d'adresses que ton offre le permet.
api_plan_required402L'espace est sur l'offre Gratuite. L'API vient avec Pro, ou à l'essai 14 jours sur Solo.
api_trial_ended402L'essai de 14 jours de Solo est terminé. Passe à Pro : tes clés remarchent aussitôt.
audit_not_in_plan402L'offre Gratuite ne fait que des scans rapides ; l'audit complet vient avec Solo et Pro.
audit_quota_exceeded402Les audits complets de la période sont épuisés, et il ne reste aucun crédit de pack.
domain_taken402Sur l'offre Gratuite, un domaine déjà suivi par un autre compte gratuit ne peut être ni ajouté ni scanné.
fix_quota_exceeded402Les correctifs de la période sont épuisés, et il ne reste aucun crédit de pack. Un correctif déjà débloqué reste lisible.
plan_limit402Ton offre ne comprend pas cette action. upgrade_url mène à l'offre qui la permet.
project_limit_reached402Tous les projets de ton offre sont pris. Ajoute un projet en plus ou change d'offre.
project_paused402Le projet est en pause : ton offre couvre moins de projets que ton espace n'en a. Ses problèmes restent lisibles, mais rien de nouveau ne tourne.
repositories_not_in_plan402L'analyse des dépôts GitHub vient avec Solo et Pro.
scan_quota_exceeded402Les scans rapides de la période sont épuisés, et il ne reste aucun crédit de pack.
scope_missing403Le jeton OAuth n'a pas la permission que demande cette route (indiquée sur sa page). Reconnecte l'agent pour l'accorder. Une clé d'API a toutes les permissions.
fix_locked404Le correctif de ce problème n'est pas encore débloqué : POST /issues/{issue_id}/fix le débloque.
resource_not_found404Rien avec cet identifiant dans l'espace de la clé. Un objet d'un autre espace répond pareil : son existence n'est jamais révélée.
route_not_found404Cette route n'existe pas. Vérifie la méthode et le chemin dans la référence.
conflict409La requête ne va pas avec l'état actuel de l'objet. Relis-le, puis réessaie.
github_unavailable409L'analyse des dépôts GitHub n'est pas disponible pour le moment.
idempotency_conflict409Cette Idempotency-Key a déjà servi pour une autre requête (méthode, chemin ou corps). Une nouvelle action prend une nouvelle clé.
idempotency_in_progress409Une requête avec cette Idempotency-Key est encore en cours. Réessaie dans un instant.
issue_already_fixed409Le problème est corrigé : il n'y a rien à marquer.
proof_required409Le site doit d'abord être prouvé comme le tien (audit complet, correctif, marquage). Prouve-le dans l'app : DNS, fichier ou balise meta.
site_excluded409Le propriétaire de ce site a demandé à ne pas être scanné. Rustine ne le scannera pas.
target_exists409Le projet suit déjà cette adresse.
rate_limited429Trop de requêtes pour cette clé (120 par minute). Attends Retry-After secondes.
recheck_limit_reached429Trop de revérifications sur ce projet aujourd'hui (60 par jour). Réessaie demain.
repository_analyses_limit_reached429L'espace a lancé beaucoup d'analyses de dépôt ces dernières 24 heures. Réessaie plus tard.
internal_error500Une erreur de notre côté, signalée automatiquement. Réessaie plus tard ; donne le Request-Id au support si elle revient.
recheck_failed502La revérification n'a pas pu aller au bout (site injoignable ?). Vérifie que le site répond, puis réessaie.
platform_busy503Rustine ne lance pas de nouveau scan pendant quelques minutes. Réessaie plus tard ; rien n'a été décompté.
service_unavailable503Rustine est indisponible un instant. Réessaie avec la même Idempotency-Key.

Les types

Teste type pour décider quoi faire, code pour savoir exactement ce qui s'est passé.

error.typeCe que ça veut dire
invalid_requestLa requête elle-même est à corriger.
authenticationLa clé ou le jeton ne passe pas, ou n'a pas la permission.
plan_limitL'offre ou le quota ne le permet pas ; upgrade_url dit quoi faire.
not_foundL'objet ou la route n'existe pas pour cette clé.
rate_limitedTrop de requêtes, ou un plafond atteint : attends un peu.
conflictL'action ne va pas avec l'état actuel (site non prouvé, clé déjà servie…).
api_errorUn souci côté Rustine : réessaie.

↵ Entrée pour ouvrir, Échap pour fermer