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/v1Authentification
Tous les endpoints utilisent HTTP Bearer (API Key) :
Authorization: Bearer YOUR_API_KEYRé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ùcodeetstatuspermutaient 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 conserverontcode: stringetstatus: numberstables. Le champdetailspeut transporter un contexte structuré — par exemple, des erreurs de validation au niveau des champs sous forme de paires{ field: message }renvoyées avecINVALID_PARAMETER.
Codes d'erreur canoniques
| HTTP | Code | Signification |
|---|---|---|
| 400 | INVALID_URL | Format de l'URL invalide |
| 400 | INVALID_SCHEMA | JSON Schema invalide |
| 400 | INVALID_PARAMETER | Un ou plusieurs paramètres de la requête ont échoué à la validation |
| 400 | SCHEMA_OR_PROMPT_REQUIRED | schema (ou prompt) est requis pour l'extraction |
| 400 | SCHEMA_AND_PROMPT_EXCLUSIVE | schema et prompt ne peuvent pas être fournis ensemble |
| 400 | BATCH_SIZE_EXCEEDED | La requête en lot dépasse la limite de 100 URLs |
| 400 | MALFORMED_REQUEST_BODY | Le corps de la requête n'est pas du JSON valide |
| 401 | API_KEY_MISSING | En-tête Authorization manquant |
| 401 | API_KEY_INVALID_FORMAT | Format de l'API Key invalide |
| 401 | API_KEY_NOT_FOUND | API Key introuvable dans le système |
| 401 | API_KEY_REVOKED | API Key révoquée |
| 401 | API_KEY_DISABLED | API Key désactivée |
| 401 | API_KEY_EXPIRED | API Key expirée |
| 401 | INVALID_API_KEY | (obsolète, utilise les codes API_KEY_* spécifiques ci-dessus) |
| 402 | INSUFFICIENT_CREDITS | Crédits insuffisants sur le compte |
| 404 | JOB_NOT_FOUND | Tâche en lot introuvable |
| 404 | RESOURCE_NOT_FOUND | Ressource introuvable |
| 408 | REQUEST_TIMEOUT | La requête API a expiré |
| 408 | SCRAPE_TIMEOUT | La page cible a mis trop de temps à répondre |
| 422 | SCRAPE_SSL_ERROR | Problèmes SSL/TLS sur le site cible |
| 422 | SCRAPE_DNS_RESOLUTION_ERROR | Impossible de résoudre le hostname cible |
| 422 | SCRAPE_SITE_ERROR | Le site cible a renvoyé une erreur |
| 422 | SCRAPE_EMPTY_CONTENT | La page cible a renvoyé un contenu vide |
| 422 | SCRAPE_CONTENT_TOO_LARGE | La page cible dépasse les limites de taille |
| 422 | SCRAPE_TARGET_FORBIDDEN | Le site cible a refusé l'accès (403) |
| 422 | SCRAPE_TARGET_NOT_FOUND | L'URL cible a renvoyé 404 |
| 422 | SCRAPE_UNSUPPORTED_FILE | Type de fichier cible non supporté |
| 429 | RATE_LIMIT_EXCEEDED | Limite de débit du compte déclenchée |
| 429 | SCRAPE_TARGET_RATE_LIMITED | Le site cible a limité notre requête |
| 500 | INTERNAL_ERROR | Erreur interne générique |
| 500 | DISTILL_FAILED | Le pipeline de distillation a échoué |
| 500 | EXTRACT_FAILED | Le pipeline d'extraction a échoué |
| 500 | PIPELINE_ERROR | Une étape du pipeline a signalé un échec |
| 500 | AI_EXTRACTION_FAILED | L'étape d'extraction IA a échoué |
| 500 | MARKDOWN_CONVERSION_FAILED | La conversion HTML vers Markdown a échoué |
| 502 | SCRAPE_ALL_PROVIDERS_FAILED | Tous les providers de scraping ont échoué |
| 502 | UPSTREAM_BAD_GATEWAY | L'upstream a renvoyé une réponse invalide |
| 503 | SCRAPE_PROVIDER_UNAVAILABLE | Provider de scraping indisponible |
| 503 | AI_SERVICE_UNAVAILABLE | Service IA indisponible |
| 503 | DOWNSTREAM_SERVICE_UNAVAILABLE | Un service downstream est temporairement indisponible |
| 504 | UPSTREAM_TIMEOUT | La passerelle upstream a expiré |
| 504 | AI_TIMEOUT | L'appel au service IA a expiré |
Référence de stratégie de réessai
| Classe d'erreur | Réessayer ? | Comment |
|---|---|---|
4xx (ton entrée) | ❌ Non | Corrige la requête et réessaie |
401 (auth) | ❌ Non | Tourne / réémets l'API Key |
402 (crédits) | ❌ Non | Recharge |
408 / 504 (timeout) | ✅ Oui | Backoff exponentiel, max 3 tentatives |
429 (rate-limit) | ✅ Oui | Attends jusqu'à X-RateLimit-Reset — voir Limites de débit |
5xx (serveur) | ✅ Oui | Backoff exponentiel, max 3 tentatives |
SCRAPE_TARGET_* (site cible) | ⚠️ Peut-être | Réessaie une fois avec renderMode augmenté |