Thunderbit Open API
Comenzar
Thunderbit Open API ofrece potentes capacidades de destilación web y extracción inteligente de datos, convirtiendo cualquier contenido web en formatos listos para LLM.
Características Principales
🔥 Destilación Web - Convierte páginas web en formato Markdown limpio, perfecto para aplicaciones de IA
🧠 Extracción con IA - Extrae datos estructurados usando esquemas o prompts en lenguaje natural
⚡ Procesamiento por Lotes - Procesa múltiples URLs simultáneamente con gestión asíncrona de trabajos
🛡️ Listo para Empresas - Maneja automáticamente renderizado JavaScript, medidas anti-bot, proxies y contenido dinámico
Lo Que Manejamos Por Ti
- Contenido Dinámico: Páginas renderizadas con JavaScript, SPAs y contenido cargado con AJAX
- Protección Anti-Bot: Manejo automático de CAPTCHAs y sistemas de detección de bots
- Procesamiento de Contenido: Limpieza y formateo inteligente para consumo óptimo por IA
- Extracción de Metadatos: Extracción automática de títulos, descripciones y metadatos estructurados
Autenticación
Todas las solicitudes API requieren una API Key en el Header:
Authorization: Bearer <TU_API_KEY>
Obtén tu API key desde el Panel de Thunderbit.
Límites de Tasa
| Plan | Límite de Solicitudes | Concurrencia | Ideal Para |
|---|
| Gratis | 10 solicitudes/min | 2 concurrentes | Pruebas y prototipos |
| Pro | 100 solicitudes/min | 10 concurrentes | Apps en producción |
| Empresa | 1000 solicitudes/min | 50 concurrentes | Operaciones a gran escala |
Formatos de Salida
- Markdown: Formato markdown limpio, optimizado para LLM
- Datos Estructurados: Salida JSON basada en tu esquema
- Metadatos: Extracción automática de metadatos de página
Base URL
https://open.thunderbit.com/v1 — Servidor de producción
Authentication
Type: HTTP Bearer (JWT). Header format: Authorization: Bearer YOUR_API_KEY
Ingresa tu API key del Panel de Thunderbit. El formato del header será: `Authorization: Bearer TU_API_KEY`
Error Responses
BadRequest
Parámetros de solicitud inválidos
Unauthorized
Autenticación fallida, API Key inválida
RateLimited
Demasiadas solicitudes, límite de tasa activado
- X-RateLimit-Limit: Límite máximo de tasa
- X-RateLimit-Remaining: Solicitudes restantes
- X-RateLimit-Reset: Marca de tiempo de reinicio
Schemas
Error
Formato de respuesta de error estándar
- success (boolean):
- error (object):
- code (string): Códigos de error:
- INVALID_URL: Formato de URL inválido
- URL_NOT_ACCESSIBLE: No se puede acceder a la URL de destino
- TIMEOUT: Tiempo de espera de solicitud agotado
- QUOTA_EXCEEDED: Cuota agotada
- RATE_LIMITED: Límite de tasa activado
- INVALID_SCHEMA: Formato de Schema inválido
- EXTRACTION_FAILED: Extracción de IA fallida
- BATCH_SIZE_EXCEEDED: Cantidad de solicitudes por lotes excede el límite
- INVALID_WEBHOOK_URL: Formato de URL de Webhook inválido o no es HTTPS
- WEBHOOK_DELIVERY_FAILED: Entrega de callback de Webhook fallida
- message (string): Mensaje de descripción del error
Metadata
Metadatos de página extraídos de etiquetas meta HTML, Open Graph y Twitter Cards
DistillResult
Resultado de destilar una página web a formato Markdown limpio
ExtractResult
Resultado de extracción de datos estructurados impulsada por IA
BatchJob
Estado y resultados de un trabajo de procesamiento por lotes
Destilar
Convierte páginas web en formato Markdown limpio, listo para LLM. Maneja automáticamente renderizado JavaScript, contenido dinámico y protección anti-bot.
POST /distill — Destilar Página Individual
Convierte una página web en formato Markdown limpio, listo para LLM.
Casos de Uso:
- Preparar contenido web para RAG (Generación Aumentada por Recuperación)
- Extraer contenido de artículos para procesamiento con IA
- Convertir páginas de documentación a markdown
- Procesar aplicaciones web dinámicas
Qué Incluye:
- Contenido markdown limpio con estructura preservada
- Eliminación automática de anuncios, navegación y contenido repetitivo
- Extracción de metadatos (título, descripción, idioma)
- Renderizado JavaScript para contenido dinámico
- Manejo automático de medidas anti-bot
Formato de Salida:
Devuelve markdown optimizado para consumo por LLM con mínimo ruido y máxima señal.
Request Body
- url (string) *required: La URL de la página web a destilar
- timeout (number): Tiempo de espera de solicitud en milisegundos (predeterminado: 30000, máx: 60000)
- waitFor (number): Tiempo de espera (en milisegundos) después de cargar la página para que el contenido dinámico se renderice antes de extraer contenido
- includeTags (string[]): Solo incluir contenido de estas etiquetas HTML (ej., ['article', 'main', 'div.content'])
- excludeTags (string[]): Excluir contenido de estas etiquetas HTML (ej., ['nav', 'footer', 'aside'])
- headers (object): Headers HTTP personalizados para enviar con la solicitud
Response (200): Respuesta exitosa
- success (boolean):
- data (object):
- url (string): La URL que fue destilada
- markdown (string): Contenido markdown limpio extraído de la página
- html (string): Contenido HTML sin procesar (opcional, solo si se solicita)
- metadata (object):
- title (string): Título de página extraído de la etiqueta <title> o Open Graph
- description (string): Meta descripción o extracto
- language (string): Código de idioma detectado (ISO 639-1)
- author (string): Autor del artículo si está disponible
- publishedDate (string): Fecha de publicación si está disponible
- image (string): URL de imagen destacada de Open Graph o Twitter Card
- sourceURL (string): URL original (puede diferir de la URL solicitada debido a redirecciones)
- statusCode (integer): Código de estado HTTP de la respuesta
- contentLength (integer): Longitud del contenido markdown en caracteres
- links (object[]): Enlaces encontrados en el contenido
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 — Destilar Múltiples Páginas por Lotes
Destila múltiples páginas web simultáneamente con procesamiento asíncrono.
Casos de Uso:
- Procesar secciones o categorías completas de sitios web
- Importar contenido por lotes a tu base de conocimientos
- Migración de contenido a gran escala
- Actualizaciones periódicas de contenido desde múltiples fuentes
Cómo Funciona:
Envía un trabajo por lotes con hasta 100 URLs
Recibe un ID de trabajo inmediatamente
Consulta el endpoint de estado o recibe notificación por webhook
Recupera todos los resultados cuando esté completo
Características:
- Procesamiento asíncrono para alto rendimiento
- Reintento automático en fallos
- Notificaciones por webhook cuando está completo
- Informe detallado de estado y errores por URL
Request Body
- urls (string[]) *required: Lista de URLs a destilar, máximo 100
- timeout (number): Tiempo de espera por solicitud en milisegundos, predeterminado 30000
- webhook (object): Configuración de callback webhook, notifica cuando la tarea se completa
- url (string): URL de callback webhook, debe ser HTTPS
- headers (object): Headers de callback personalizados, pueden usarse para autenticación
Response (200): Respuesta exitosa
- success (boolean):
- data (object):
- id (string): ID de tarea por lotes
- 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} — Obtener Estado del Trabajo de Destilación por Lotes
Verifica el estado y recupera los resultados de un trabajo de destilación por lotes.
Estados de Respuesta:
processing: El trabajo está ejecutándose actualmente
completed: Todas las URLs han sido procesadas
failed: El trabajo encontró un error fatal
Mejores Prácticas de Consulta:
- Consulta cada 5-10 segundos para trabajos con <10 URLs
- Consulta cada 30-60 segundos para trabajos más grandes
- Usa webhooks para mejor eficiencia
Resultados Parciales:
Puedes recuperar resultados completados mientras el trabajo aún está procesando. El array results contendrá todas las URLs procesadas hasta el momento.
Parameters
- id (string) *required: ID de tarea por lotes
Response (200): Respuesta exitosa
- 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"
}
}
]
}
}
Extraer
Extracción de datos estructurados impulsada por IA. Define tu estructura de datos deseada usando JSON Schema o prompts en lenguaje natural, y deja que nuestra IA extraiga la información por ti.
POST /extract — Extracción Estructurada con IA
Extrae datos estructurados de páginas web usando IA. Define tu estructura de salida deseada con JSON Schema, y nuestra IA extraerá la información inteligentemente.
Casos de Uso:
- Extraer información de productos de páginas de comercio electrónico
- Parsear listados de empleo a formato estructurado
- Extraer información de contacto y detalles de negocios
- Convertir artículos de noticias a datos estructurados
- Extraer tablas de precios y especificaciones
Cómo Funciona:
Proporciona una URL y un JSON Schema definiendo tu estructura deseada
Nuestra IA analiza el contenido de la página
Extrae datos que coinciden con tu esquema
Devuelve salida JSON validada
Definición de Schema:
Usa JSON Schema para definir tu estructura de salida deseada:
- Tipos de campo: string, number, boolean, array, object
- Descripciones de campo: Ayudan a la IA a entender qué extraer
- Campos requeridos: Marca campos críticos como requeridos
- Estructuras anidadas: Soporte para datos complejos y anidados
Ejemplo de Schema:
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Nombre o título del producto"
},
"price": {
"type": "number",
"description": "Precio actual en USD"
},
"availability": {
"type": "boolean",
"description": "Si el producto está en stock"
},
"features": {
"type": "array",
"items": {"type": "string"},
"description": "Lista de características principales del producto"
}
},
"required": ["title", "price"]
}
Request Body
- url (string) *required: La URL de la página web de la cual extraer datos
- schema (object) *required: Definición de estructura de datos en formato JSON Schema
- timeout (number): Tiempo de espera de solicitud en milisegundos, predeterminado 30000
Response (200): Respuesta exitosa
- success (boolean):
- data (object):
- url (string):
- extract (object): Datos estructurados extraídos que coinciden con tu esquema
- metadata (object):
- sourceURL (string):
- statusCode (integer):
- extractedAt (string):
- confidence (number): Puntuación de confianza de IA (0-1) para la calidad de extracción
- processingTime (integer): Tiempo de procesamiento en milisegundos
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 — Extraer Múltiples Páginas por Lotes
Extrae datos estructurados de múltiples URLs simultáneamente usando IA.
Casos de Uso:
- Extraer catálogos de productos de múltiples páginas
- Extraer datos de páginas de resultados de búsqueda
- Procesar por lotes listados o páginas de directorios
- Recopilar inteligencia competitiva a escala
Cómo Funciona:
Envía hasta 50 URLs con un solo esquema
Obtén respuesta inmediata con ID de trabajo
Todas las URLs se extraen usando el mismo esquema
Consulta el estado o recibe notificación por webhook
Recupera todos los resultados estructurados de una vez
Características:
- Mismo esquema aplicado a todas las URLs
- Procesamiento paralelo para velocidad
- Manejo de errores individual por URL
- Notificaciones por webhook disponibles
Request Body
- urls (string[]) *required: Lista de URLs de las cuales extraer datos, máximo 50
- schema (object) *required: Definición de estructura de datos en formato JSON Schema
- timeout (number): Tiempo de espera por solicitud en milisegundos, predeterminado 30000
- webhook (object): Configuración de callback webhook, notifica cuando la tarea se completa
- url (string): URL de callback webhook, debe ser HTTPS
- headers (object):
Response (200): Respuesta exitosa
- 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} — Obtener Estado del Trabajo de Extracción por Lotes
Verifica el estado y recupera los datos extraídos de un trabajo de extracción por lotes.
Estados de Respuesta:
processing: Extracción en progreso
completed: Todas las extracciones finalizadas
failed: El trabajo falló (ver detalles del error)
Formato de Resultados:
Cada URL en el array de resultados contiene:
- Datos extraídos que coinciden con tu esquema
- Estado de éxito/fallo
- Mensajes de error individuales si aplica
- Puntuaciones de confianza para calidad de extracción
Parameters
- id (string) *required: ID de tarea por lotes
Response (200): Respuesta exitosa
- 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"
}
}
]
}
}