API Ouverte Thunderbit
Commencer
L'API Ouverte Thunderbit offre de puissantes capacités de distillation web et d'extraction intelligente de données, transformant n'importe quel contenu web en formats prêts pour les LLM.
Fonctionnalités Clés
🔥 Distillation Web - Convertissez les pages web en format Markdown propre, parfait pour les applications IA
🧠 Extraction par IA - Extrayez des données structurées en utilisant des schémas ou des prompts en langage naturel
⚡ Traitement par Lots - Traitez plusieurs URLs simultanément avec une gestion asynchrone des tâches
🛡️ Prêt pour l'Entreprise - Gère automatiquement le rendu JavaScript, les mesures anti-bot, les proxies et le contenu dynamique
Ce Que Nous Gérons Pour Vous
- Contenu Dynamique : Pages rendues en JavaScript, SPAs et contenu chargé par AJAX
- Protection Anti-Bot : Gestion automatique des CAPTCHAs et systèmes de détection de bots
- Traitement du Contenu : Nettoyage et formatage intelligents pour une consommation optimale par l'IA
- Extraction de Métadonnées : Extraction automatique des titres, descriptions et métadonnées structurées
Authentification
Toutes les requêtes API nécessitent une clé API dans l'en-tête :
Authorization: Bearer <VOTRE_CLÉ_API>
Obtenez votre clé API depuis le Tableau de Bord Thunderbit.
Limites de Débit
| Plan | Limite de Requêtes | Concurrence | Idéal Pour |
|---|
| Gratuit | 10 requêtes/min | 2 simultanées | Tests et prototypage |
| Pro | 100 requêtes/min | 10 simultanées | Applications en production |
| Entreprise | 1000 requêtes/min | 50 simultanées | Opérations à grande échelle |
Formats de Sortie
- Markdown : Format markdown propre, optimisé pour les LLM
- Données Structurées : Sortie JSON basée sur votre schéma
- Métadonnées : Extraction automatique des métadonnées de la page
Base URL
https://open.thunderbit.com/v1 — Serveur de production
Authentication
Type: HTTP Bearer (JWT). Header format: Authorization: Bearer YOUR_API_KEY
Entrez votre clé API depuis le Tableau de Bord Thunderbit. Le format de l'en-tête sera : `Authorization: Bearer VOTRE_CLÉ_API`
Error Responses
BadRequest
Paramètres de requête invalides
Unauthorized
Échec de l'authentification, clé API invalide
RateLimited
Trop de requêtes, limite de débit atteinte
- X-RateLimit-Limit: Plafond de la limite de débit
- X-RateLimit-Remaining: Requêtes restantes
- X-RateLimit-Reset: Horodatage de réinitialisation
Schemas
Error
Format de réponse d'erreur standard
- success (boolean):
- error (object):
- code (string): Codes d'erreur :
- INVALID_URL : Format d'URL invalide
- URL_NOT_ACCESSIBLE : Impossible d'accéder à l'URL cible
- TIMEOUT : Délai d'expiration de la requête
- QUOTA_EXCEEDED : Quota épuisé
- RATE_LIMITED : Limite de débit atteinte
- INVALID_SCHEMA : Format de schéma invalide
- EXTRACTION_FAILED : Échec de l'extraction par IA
- BATCH_SIZE_EXCEEDED : Nombre de requêtes par lots dépassé
- INVALID_WEBHOOK_URL : Format d'URL webhook invalide ou non HTTPS
- WEBHOOK_DELIVERY_FAILED : Échec de la livraison du callback webhook
- message (string): Message de description de l'erreur
Metadata
Métadonnées de page extraites des balises meta HTML, Open Graph et Twitter Cards
DistillResult
Résultat de la distillation d'une page web en format Markdown propre
ExtractResult
Résultat de l'extraction de données structurées par IA
BatchJob
Statut et résultats d'une tâche de traitement par lots
Distiller
Convertissez les pages web en format Markdown propre et prêt pour les LLM. Gère automatiquement le rendu JavaScript, le contenu dynamique et la protection anti-bot.
POST /distill — Distiller une Page Unique
Convertissez une page web en format Markdown propre et prêt pour les LLM.
Cas d'Utilisation :
- Préparer le contenu web pour le RAG (Génération Augmentée par Récupération)
- Extraire le contenu d'articles pour le traitement par IA
- Convertir des pages de documentation en markdown
- Traiter des applications web dynamiques
Ce Qui Est Inclus :
- Contenu markdown propre avec structure préservée
- Suppression automatique des publicités, navigation et contenu superflu
- Extraction de métadonnées (titre, description, langue)
- Rendu JavaScript pour le contenu dynamique
- Gestion automatique des mesures anti-bot
Format de Sortie :
Retourne du markdown optimisé pour la consommation par les LLM avec un minimum de bruit et un maximum de signal.
Request Body
- url (string) *required: L'URL de la page web à distiller
- timeout (number): Délai d'expiration de la requête en millisecondes (par défaut : 30000, max : 60000)
- waitFor (number): Temps d'attente (en millisecondes) après le chargement de la page pour que le contenu dynamique soit rendu avant l'extraction du contenu
- includeTags (string[]): Inclure uniquement le contenu de ces balises HTML (ex. : ['article', 'main', 'div.content'])
- excludeTags (string[]): Exclure le contenu de ces balises HTML (ex. : ['nav', 'footer', 'aside'])
- headers (object): En-têtes HTTP personnalisés à envoyer avec la requête
Response (200): Réponse de succès
- success (boolean):
- data (object):
- url (string): L'URL qui a été distillée
- markdown (string): Contenu markdown propre extrait de la page
- html (string): Contenu HTML brut (optionnel, uniquement si demandé)
- metadata (object):
- title (string): Titre de la page extrait de la balise <title> ou Open Graph
- description (string): Méta-description ou extrait
- language (string): Code de langue détecté (ISO 639-1)
- author (string): Auteur de l'article si disponible
- publishedDate (string): Date de publication si disponible
- image (string): URL de l'image mise en avant depuis Open Graph ou Twitter Card
- sourceURL (string): URL d'origine (peut différer de l'URL demandée en raison de redirections)
- statusCode (integer): Code de statut HTTP de la réponse
- contentLength (integer): Longueur du contenu markdown en caractères
- links (object[]): Liens trouvés dans le contenu
Example Request
curl 'https://open.thunderbit.com/v1/distill' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--header 'Content-Type: application/json' \
--data '{"url":"https://example.com/article","timeout":30000,"waitFor":2000,"includeTags":["article","main"],"excludeTags":["nav","footer","aside"],"headers":{"User-Agent":"MyBot/1.0"}}'
Example Response
{
"success": true,
"data": {
"url": "https://example.com/article",
"markdown": "# Article Title\n\nContent...",
"html": "<article>...</article>",
"metadata": {
"title": "string",
"description": "string",
"language": "string",
"author": "string",
"publishedDate": "2025-01-01T00:00:00Z",
"image": "string",
"sourceURL": "string",
"statusCode": 1,
"contentLength": 1
},
"links": [
{
"text": "string",
"href": "string"
}
]
}
}
POST /batch/distill — Distillation par Lots de Plusieurs Pages
Distillez plusieurs pages web simultanément avec un traitement asynchrone.
Cas d'Utilisation :
- Traiter des sections ou catégories entières de sites web
- Importer du contenu en masse dans votre base de connaissances
- Migration de contenu à grande échelle
- Mises à jour périodiques de contenu depuis plusieurs sources
Comment Ça Fonctionne :
Soumettez une tâche par lots avec jusqu'à 100 URLs
Recevez immédiatement un ID de tâche
Interrogez l'endpoint de statut ou recevez une notification webhook
Récupérez tous les résultats une fois terminé
Fonctionnalités :
- Traitement asynchrone pour un haut débit
- Réessai automatique en cas d'échec
- Notifications webhook à la fin
- Rapports détaillés de statut et d'erreurs par URL
Request Body
- urls (string[]) *required: Liste des URLs à distiller, maximum 100
- timeout (number): Délai d'expiration par requête en millisecondes, par défaut 30000
- webhook (object): Configuration du callback webhook, notifie lorsque la tâche est terminée
- url (string): URL de callback webhook, doit être HTTPS
- headers (object): En-têtes de callback personnalisés, peuvent être utilisés pour l'authentification
Response (200): Réponse de succès
- success (boolean):
- data (object):
- id (string): ID de la tâche par lots
- status (string):
- total (integer):
- completed (integer):
- creditsUsed (integer):
Example Request
curl 'https://open.thunderbit.com/v1/batch/distill' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--header 'Content-Type: application/json' \
--data '{"urls":["https://example.com/page1","https://example.com/page2"],"timeout":1,"webhook":{"url":"string","headers":{}}}'
Example Response
{
"success": true,
"data": {
"id": "batch_abc123",
"status": "processing",
"total": 3,
"completed": 0,
"creditsUsed": 0
}
}
GET /batch/distill/{id} — Obtenir le Statut de la Tâche de Distillation par Lots
Vérifiez le statut et récupérez les résultats d'une tâche de distillation par lots.
États de Réponse :
processing : La tâche est en cours d'exécution
completed : Toutes les URLs ont été traitées
failed : La tâche a rencontré une erreur fatale
Bonnes Pratiques d'Interrogation :
- Interrogez toutes les 5-10 secondes pour les tâches avec <10 URLs
- Interrogez toutes les 30-60 secondes pour les tâches plus importantes
- Utilisez les webhooks pour une meilleure efficacité
Résultats Partiels :
Vous pouvez récupérer les résultats terminés pendant que la tâche est encore en cours de traitement. Le tableau results contiendra toutes les URLs traitées jusqu'à présent.
Parameters
- id (string) *required: ID de la tâche par lots
Response (200): Réponse de succès
- success (boolean):
- data (object):
- id (string):
- status (string):
- total (integer):
- completed (integer):
- creditsUsed (integer):
- results (object[]):
Example Request
curl 'https://open.thunderbit.com/v1/batch/distill/{id}' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Example Response
{
"success": true,
"data": {
"id": "batch_abc123",
"status": "string",
"total": 1,
"completed": 1,
"creditsUsed": 1,
"results": [
{
"url": "string",
"success": true,
"markdown": "string",
"error": {
"code": "string",
"message": "string"
}
}
]
}
}
Extraire
Extraction de données structurées alimentée par l'IA. Définissez la structure de données souhaitée en utilisant le schéma JSON ou des prompts en langage naturel, et laissez notre IA extraire les informations pour vous.
POST /extract — Extraction Structurée par IA
Extrayez des données structurées à partir de pages web en utilisant l'IA. Définissez la structure de sortie souhaitée avec le schéma JSON, et notre IA extraira intelligemment les informations.
Cas d'Utilisation :
- Extraire des informations de produits depuis des pages e-commerce
- Parser des offres d'emploi en format structuré
- Extraire des informations de contact et des détails d'entreprise
- Convertir des articles de presse en données structurées
- Scraper des tableaux de prix et des spécifications
Comment Ça Fonctionne :
Fournissez une URL et un schéma JSON définissant la structure souhaitée
Notre IA analyse le contenu de la page
Extrait les données correspondant à votre schéma
Retourne une sortie JSON validée
Définition du Schéma :
Utilisez le schéma JSON pour définir la structure de sortie souhaitée :
- Types de champs : string, number, boolean, array, object
- Descriptions des champs : Aidez l'IA à comprendre ce qu'il faut extraire
- Champs requis : Marquez les champs critiques comme requis
- Structures imbriquées : Support pour des données complexes et imbriquées
Exemple de Schéma :
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Nom ou titre du produit"
},
"price": {
"type": "number",
"description": "Prix actuel en USD"
},
"availability": {
"type": "boolean",
"description": "Si le produit est en stock"
},
"features": {
"type": "array",
"items": {"type": "string"},
"description": "Liste des caractéristiques clés du produit"
}
},
"required": ["title", "price"]
}
Request Body
- url (string) *required: L'URL de la page web à partir de laquelle extraire les données
- schema (object) *required: Définition de la structure de données au format schéma JSON
- timeout (number): Délai d'expiration de la requête en millisecondes, par défaut 30000
Response (200): Réponse de succès
- success (boolean):
- data (object):
- url (string):
- extract (object): Données structurées extraites correspondant à votre schéma
- metadata (object):
- sourceURL (string):
- statusCode (integer):
- extractedAt (string):
- confidence (number): Score de confiance de l'IA (0-1) pour la qualité de l'extraction
- processingTime (integer): Temps de traitement en millisecondes
Example Request
curl 'https://open.thunderbit.com/v1/extract' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--header 'Content-Type: application/json' \
--data '{"url":"https://example.com/product","schema":{"type":"object","properties":{"name":{"type":"string"},"price":{"type":"number"}},"required":["name","price"]},"timeout":1}'
Example Response
{
"success": true,
"data": {
"url": "https://example.com/product",
"extract": {
"name": "iPhone 15 Pro",
"price": 999,
"currency": "USD"
},
"metadata": {
"sourceURL": "string",
"statusCode": 1,
"extractedAt": "2025-01-01T00:00:00Z",
"confidence": 1,
"processingTime": 1
}
}
}
POST /extract/batch — Extraction par Lots de Plusieurs Pages
Extrayez des données structurées à partir de plusieurs URLs simultanément en utilisant l'IA.
Cas d'Utilisation :
- Scraper des catalogues de produits depuis plusieurs pages
- Extraire des données depuis des pages de résultats de recherche
- Traiter par lots des listings ou pages d'annuaire
- Collecter de la veille concurrentielle à grande échelle
Comment Ça Fonctionne :
Soumettez jusqu'à 50 URLs avec un schéma unique
Obtenez une réponse immédiate avec l'ID de tâche
Toutes les URLs sont extraites en utilisant le même schéma
Interrogez le statut ou recevez une notification webhook
Récupérez tous les résultats structurés en une fois
Fonctionnalités :
- Même schéma appliqué à toutes les URLs
- Traitement parallèle pour la rapidité
- Gestion individuelle des erreurs par URL
- Notifications webhook disponibles
Request Body
- urls (string[]) *required: Liste des URLs à partir desquelles extraire les données, maximum 50
- schema (object) *required: Définition de la structure de données au format schéma JSON
- timeout (number): Délai d'expiration par requête en millisecondes, par défaut 30000
- webhook (object): Configuration du callback webhook, notifie lorsque la tâche est terminée
- url (string): URL de callback webhook, doit être HTTPS
- headers (object):
Response (200): Réponse de succès
- success (boolean):
- data (object):
- id (string):
- status (string):
- total (integer):
- completed (integer):
Example Request
curl 'https://open.thunderbit.com/v1/extract/batch' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--header 'Content-Type: application/json' \
--data '{"urls":["string"],"schema":{},"timeout":1,"webhook":{"url":"string","headers":{}}}'
Example Response
{
"success": true,
"data": {
"id": "batch_ext_xyz789",
"status": "string",
"total": 1,
"completed": 1
}
}
GET /extract/batch/{id} — Obtenir le Statut de la Tâche d'Extraction par Lots
Vérifiez le statut et récupérez les données extraites d'une tâche d'extraction par lots.
États de Réponse :
processing : Extraction en cours
completed : Toutes les extractions terminées
failed : La tâche a échoué (vérifiez les détails de l'erreur)
Format des Résultats :
Chaque URL dans le tableau des résultats contient :
- Données extraites correspondant à votre schéma
- Statut de succès/échec
- Messages d'erreur individuels le cas échéant
- Scores de confiance pour la qualité de l'extraction
Parameters
- id (string) *required: ID de la tâche par lots
Response (200): Réponse de succès
- success (boolean):
- data (object):
- id (string):
- status (string):
- total (integer):
- completed (integer):
- creditsUsed (integer):
- results (object[]):
Example Request
curl 'https://open.thunderbit.com/v1/extract/batch/{id}' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Example Response
{
"success": true,
"data": {
"id": "string",
"status": "string",
"total": 1,
"completed": 1,
"creditsUsed": 1,
"results": [
{
"url": "string",
"success": true,
"extract": {},
"error": {
"code": "string",
"message": "string"
}
}
]
}
}