Référence API

Aperçu de l'API

URL de base, authentification, format d'erreur et référence complète des codes d'erreur

URL de base

https://openapi.thunderbit.com/openapi/v1

Authentification

Tous les endpoints utilisent HTTP Bearer (API Key) :

Authorization: Bearer YOUR_API_KEY

Récupère ta clé depuis le Dashboard Thunderbit. Les clés sont révocables et propres à chaque environnement — n'intègre jamais une clé de production dans du code côté client.

Enveloppe d'erreur

Toutes les réponses d'erreur partagent la même enveloppe. Par défaut (format LEGACY) :

{
  "success": false,
  "error": {
    "code":    "INVALID_URL",
    "status":  400,
    "message": "The provided URL is not valid",
    "details": null
  }
}

Note: Une enveloppe alternative GOOGLE_RPC était auparavant documentée, où code et status permutaient leurs types (string ↔ number). Elle est dépréciée et non recommandée — les clients fortement typés (OpenAPI codegen, Pydantic, serde, encoding/json) échoueront à désérialiser. Utilisez le format LEGACY ci-dessus ; les futures mises à jour conserveront code: string et status: number stables. Le champ details peut transporter un contexte structuré — par exemple, des erreurs de validation au niveau des champs sous forme de paires { field: message } renvoyées avec INVALID_PARAMETER.

Codes d'erreur canoniques

HTTPCodeSignification
400INVALID_URLFormat de l'URL invalide
400INVALID_SCHEMAJSON Schema invalide
400INVALID_PARAMETERUn ou plusieurs paramètres de la requête ont échoué à la validation
400SCHEMA_OR_PROMPT_REQUIREDschema (ou prompt) est requis pour l'extraction
400SCHEMA_AND_PROMPT_EXCLUSIVEschema et prompt ne peuvent pas être fournis ensemble
400BATCH_SIZE_EXCEEDEDLa requête en lot dépasse la limite de 100 URLs
400MALFORMED_REQUEST_BODYLe corps de la requête n'est pas du JSON valide
401API_KEY_MISSINGEn-tête Authorization manquant
401API_KEY_INVALID_FORMATFormat de l'API Key invalide
401API_KEY_NOT_FOUNDAPI Key introuvable dans le système
401API_KEY_REVOKEDAPI Key révoquée
401API_KEY_DISABLEDAPI Key désactivée
401API_KEY_EXPIREDAPI Key expirée
401INVALID_API_KEY(obsolète, utilise les codes API_KEY_* spécifiques ci-dessus)
402INSUFFICIENT_CREDITSCrédits insuffisants sur le compte
404JOB_NOT_FOUNDTâche en lot introuvable
404RESOURCE_NOT_FOUNDRessource introuvable
408REQUEST_TIMEOUTLa requête API a expiré
408SCRAPE_TIMEOUTLa page cible a mis trop de temps à répondre
422SCRAPE_SSL_ERRORProblèmes SSL/TLS sur le site cible
422SCRAPE_DNS_RESOLUTION_ERRORImpossible de résoudre le hostname cible
422SCRAPE_SITE_ERRORLe site cible a renvoyé une erreur
422SCRAPE_EMPTY_CONTENTLa page cible a renvoyé un contenu vide
422SCRAPE_CONTENT_TOO_LARGELa page cible dépasse les limites de taille
422SCRAPE_TARGET_FORBIDDENLe site cible a refusé l'accès (403)
422SCRAPE_TARGET_NOT_FOUNDL'URL cible a renvoyé 404
422SCRAPE_UNSUPPORTED_FILEType de fichier cible non supporté
429RATE_LIMIT_EXCEEDEDLimite de débit du compte déclenchée
429SCRAPE_TARGET_RATE_LIMITEDLe site cible a limité notre requête
500INTERNAL_ERRORErreur interne générique
500DISTILL_FAILEDLe pipeline de distillation a échoué
500EXTRACT_FAILEDLe pipeline d'extraction a échoué
500PIPELINE_ERRORUne étape du pipeline a signalé un échec
500AI_EXTRACTION_FAILEDL'étape d'extraction IA a échoué
500MARKDOWN_CONVERSION_FAILEDLa conversion HTML vers Markdown a échoué
502SCRAPE_ALL_PROVIDERS_FAILEDTous les providers de scraping ont échoué
502UPSTREAM_BAD_GATEWAYL'upstream a renvoyé une réponse invalide
503SCRAPE_PROVIDER_UNAVAILABLEProvider de scraping indisponible
503AI_SERVICE_UNAVAILABLEService IA indisponible
503DOWNSTREAM_SERVICE_UNAVAILABLEUn service downstream est temporairement indisponible
504UPSTREAM_TIMEOUTLa passerelle upstream a expiré
504AI_TIMEOUTL'appel au service IA a expiré

Référence de stratégie de réessai

Classe d'erreurRéessayer ?Comment
4xx (ton entrée)❌ NonCorrige la requête et réessaie
401 (auth)❌ NonTourne / réémets l'API Key
402 (crédits)❌ NonRecharge
408 / 504 (timeout)✅ OuiBackoff exponentiel, max 3 tentatives
429 (rate-limit)✅ OuiAttends jusqu'à X-RateLimit-Reset — voir Limites de débit
5xx (serveur)✅ OuiBackoff exponentiel, max 3 tentatives
SCRAPE_TARGET_* (site cible)⚠️ Peut-êtreRéessaie une fois avec renderMode augmenté