Thunderbit Open API
Começar
A Thunderbit Open API fornece poderosas capacidades de destilação web e extração inteligente de dados, transformando qualquer conteúdo web em formatos prontos para LLM.
Principais Recursos
🔥 Destilação Web - Converta páginas web em formato Markdown limpo, perfeito para aplicações de IA
🧠 Extração com IA - Extraia dados estruturados usando esquemas ou prompts em linguagem natural
⚡ Processamento em Lote - Processe múltiplas URLs simultaneamente com gerenciamento assíncrono de tarefas
🛡️ Pronto para Empresas - Lida automaticamente com renderização JavaScript, medidas anti-bot, proxies e conteúdo dinâmico
O Que Cuidamos Para Você
- Conteúdo Dinâmico: Páginas renderizadas com JavaScript, SPAs e conteúdo carregado via AJAX
- Proteção Anti-Bot: Tratamento automático de CAPTCHAs e sistemas de detecção de bots
- Processamento de Conteúdo: Limpeza e formatação inteligente para consumo ideal por IA
- Extração de Metadados: Extração automática de títulos, descrições e metadados estruturados
Autenticação
Todas as requisições da API requerem uma Chave de API no Cabeçalho:
Authorization: Bearer <SUA_CHAVE_API>
Obtenha sua chave de API no Painel Thunderbit.
Limites de Taxa
| Plano | Limite de Requisições | Concorrência | Ideal Para |
|---|
| Gratuito | 10 requisições/min | 2 concorrentes | Testes e prototipagem |
| Pro | 100 requisições/min | 10 concorrentes | Apps em produção |
| Empresarial | 1000 requisições/min | 50 concorrentes | Operações em larga escala |
Formatos de Saída
- Markdown: Formato markdown limpo, otimizado para LLM
- Dados Estruturados: Saída JSON baseada no seu esquema
- Metadados: Extração automática de metadados da página
Base URL
https://open.thunderbit.com/v1 — Servidor de produção
Authentication
Type: HTTP Bearer (JWT). Header format: Authorization: Bearer YOUR_API_KEY
Insira sua chave de API do Painel Thunderbit. O formato do cabeçalho será: `Authorization: Bearer SUA_CHAVE_API`
Error Responses
BadRequest
Parâmetros de requisição inválidos
Unauthorized
Autenticação falhou, Chave de API inválida
RateLimited
Muitas requisições, limite de taxa atingido
- X-RateLimit-Limit: Teto do limite de taxa
- X-RateLimit-Remaining: Requisições restantes
- X-RateLimit-Reset: Timestamp de reinício
Schemas
Error
Formato de resposta de erro padrão
- success (boolean):
- error (object):
- code (string): Códigos de erro:
- INVALID_URL: Formato de URL inválido
- URL_NOT_ACCESSIBLE: Não foi possível acessar a URL de destino
- TIMEOUT: Tempo limite da requisição esgotado
- QUOTA_EXCEEDED: Cota esgotada
- RATE_LIMITED: Limite de taxa atingido
- INVALID_SCHEMA: Formato de Schema inválido
- EXTRACTION_FAILED: Extração por IA falhou
- BATCH_SIZE_EXCEEDED: Contagem de requisições em lote excedeu o limite
- INVALID_WEBHOOK_URL: Formato de URL do Webhook inválido ou não é HTTPS
- WEBHOOK_DELIVERY_FAILED: Falha na entrega do callback do webhook
- message (string): Mensagem de descrição do erro
Metadata
Metadados da página extraídos de tags meta HTML, Open Graph e Twitter Cards
DistillResult
Resultado da destilação de uma página web para formato Markdown limpo
ExtractResult
Resultado da extração de dados estruturados com IA
BatchJob
Status e resultados de uma tarefa de processamento em lote
Destilar
Converta páginas web em formato Markdown limpo, pronto para LLM. Lida automaticamente com renderização JavaScript, conteúdo dinâmico e proteção anti-bot.
POST /distill — Destilar Página Única
Converta uma página web em formato Markdown limpo, pronto para LLM.
Casos de Uso:
- Preparar conteúdo web para RAG (Geração Aumentada por Recuperação)
- Extrair conteúdo de artigos para processamento por IA
- Converter páginas de documentação para markdown
- Processar aplicações web dinâmicas
O Que Está Incluído:
- Conteúdo markdown limpo com estrutura preservada
- Remoção automática de anúncios, navegação e elementos repetitivos
- Extração de metadados (título, descrição, idioma)
- Renderização JavaScript para conteúdo dinâmico
- Tratamento automático de medidas anti-bot
Formato de Saída:
Retorna markdown otimizado para consumo por LLM com mínimo ruído e máximo sinal.
Request Body
- url (string) *required: A URL da página web a ser destilada
- timeout (number): Tempo limite da requisição em milissegundos (padrão: 30000, máx: 60000)
- waitFor (number): Tempo de espera (em milissegundos) após o carregamento da página para o conteúdo dinâmico renderizar antes de extrair o conteúdo
- includeTags (string[]): Incluir apenas conteúdo destas tags HTML (ex.: ['article', 'main', 'div.content'])
- excludeTags (string[]): Excluir conteúdo destas tags HTML (ex.: ['nav', 'footer', 'aside'])
- headers (object): Cabeçalhos HTTP personalizados para enviar com a requisição
Response (200): Resposta de sucesso
- success (boolean):
- data (object):
- url (string): A URL que foi destilada
- markdown (string): Conteúdo markdown limpo extraído da página
- html (string): Conteúdo HTML bruto (opcional, apenas se solicitado)
- metadata (object):
- title (string): Título da página extraído da tag <title> ou Open Graph
- description (string): Meta descrição ou resumo
- language (string): Código de idioma detectado (ISO 639-1)
- author (string): Autor do artigo, se disponível
- publishedDate (string): Data de publicação, se disponível
- image (string): URL da imagem destacada do Open Graph ou Twitter Card
- sourceURL (string): URL original (pode diferir da URL solicitada devido a redirecionamentos)
- statusCode (integer): Código de status HTTP da resposta
- contentLength (integer): Tamanho do conteúdo markdown em caracteres
- links (object[]): Links encontrados no conteúdo
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últiplas Páginas em Lote
Destile múltiplas páginas web simultaneamente com processamento assíncrono.
Casos de Uso:
- Processar seções ou categorias inteiras de sites
- Importar conteúdo em lote para sua base de conhecimento
- Migração de conteúdo em larga escala
- Atualizações periódicas de conteúdo de múltiplas fontes
Como Funciona:
Envie uma tarefa em lote com até 100 URLs
Receba um ID de tarefa imediatamente
Consulte o endpoint de status ou receba notificação via webhook
Recupere todos os resultados quando concluído
Recursos:
- Processamento assíncrono para alto throughput
- Retry automático em falhas
- Notificações via webhook quando concluído
- Relatório detalhado de status e erros por URL
Request Body
- urls (string[]) *required: Lista de URLs para destilar, máximo 100
- timeout (number): Tempo limite por requisição em milissegundos, padrão 30000
- webhook (object): Configuração de callback webhook, notifica quando a tarefa é concluída
- url (string): URL de callback do webhook, deve ser HTTPS
- headers (object): Cabeçalhos de callback personalizados, podem ser usados para autenticação
Response (200): Resposta de sucesso
- success (boolean):
- data (object):
- id (string): ID da tarefa em lote
- 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} — Obter Status da Tarefa de Destilação em Lote
Verifique o status e recupere os resultados de uma tarefa de destilação em lote.
Estados da Resposta:
processing: A tarefa está em execução
completed: Todas as URLs foram processadas
failed: A tarefa encontrou um erro fatal
Melhores Práticas de Consulta:
- Consulte a cada 5-10 segundos para tarefas com <10 URLs
- Consulte a cada 30-60 segundos para tarefas maiores
- Use webhooks para maior eficiência
Resultados Parciais:
Você pode recuperar resultados concluídos enquanto a tarefa ainda está em processamento. O array results conterá todas as URLs processadas até o momento.
Parameters
- id (string) *required: ID da tarefa em lote
Response (200): Resposta de sucesso
- 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"
}
}
]
}
}
Extrair
Extração de dados estruturados com IA. Defina a estrutura de dados desejada usando JSON Schema ou prompts em linguagem natural, e deixe nossa IA extrair as informações para você.
POST /extract — Extração Estruturada com IA
Extraia dados estruturados de páginas web usando IA. Defina a estrutura de saída desejada com JSON Schema, e nossa IA extrairá as informações de forma inteligente.
Casos de Uso:
- Extrair informações de produtos de páginas de e-commerce
- Analisar listagens de empregos em formato estruturado
- Extrair informações de contato e detalhes comerciais
- Converter artigos de notícias em dados estruturados
- Coletar tabelas de preços e especificações
Como Funciona:
Forneça uma URL e um JSON Schema definindo a estrutura desejada
Nossa IA analisa o conteúdo da página
Extrai dados correspondentes ao seu esquema
Retorna saída JSON validada
Definição de Esquema:
Use JSON Schema para definir a estrutura de saída desejada:
- Tipos de campo: string, number, boolean, array, object
- Descrições de campo: Ajudam a IA a entender o que extrair
- Campos obrigatórios: Marque campos críticos como obrigatórios
- Estruturas aninhadas: Suporte para dados complexos e aninhados
Exemplo de Esquema:
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Nome ou título do produto"
},
"price": {
"type": "number",
"description": "Preço atual em USD"
},
"availability": {
"type": "boolean",
"description": "Se o produto está em estoque"
},
"features": {
"type": "array",
"items": {"type": "string"},
"description": "Lista de principais características do produto"
}
},
"required": ["title", "price"]
}
Request Body
- url (string) *required: A URL da página web da qual extrair dados
- schema (object) *required: Definição da estrutura de dados em formato JSON Schema
- timeout (number): Tempo limite da requisição em milissegundos, padrão 30000
Response (200): Resposta de sucesso
- success (boolean):
- data (object):
- url (string):
- extract (object): Dados estruturados extraídos correspondentes ao seu esquema
- metadata (object):
- sourceURL (string):
- statusCode (integer):
- extractedAt (string):
- confidence (number): Pontuação de confiança da IA (0-1) para a qualidade da extração
- processingTime (integer): Tempo de processamento em milissegundos
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 — Extrair Múltiplas Páginas em Lote
Extraia dados estruturados de múltiplas URLs simultaneamente usando IA.
Casos de Uso:
- Coletar catálogos de produtos de múltiplas páginas
- Extrair dados de páginas de resultados de busca
- Processar em lote listagens ou páginas de diretórios
- Coletar inteligência competitiva em escala
Como Funciona:
Envie até 50 URLs com um único esquema
Receba resposta imediata com ID da tarefa
Todas as URLs são extraídas usando o mesmo esquema
Consulte o status ou receba notificação via webhook
Recupere todos os resultados estruturados de uma vez
Recursos:
- Mesmo esquema aplicado a todas as URLs
- Processamento paralelo para velocidade
- Tratamento individual de erros por URL
- Notificações via webhook disponíveis
Request Body
- urls (string[]) *required: Lista de URLs das quais extrair dados, máximo 50
- schema (object) *required: Definição da estrutura de dados em formato JSON Schema
- timeout (number): Tempo limite por requisição em milissegundos, padrão 30000
- webhook (object): Configuração de callback webhook, notifica quando a tarefa é concluída
- url (string): URL de callback do webhook, deve ser HTTPS
- headers (object):
Response (200): Resposta de sucesso
- 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} — Obter Status da Tarefa de Extração em Lote
Verifique o status e recupere os dados extraídos de uma tarefa de extração em lote.
Estados da Resposta:
processing: Extração em progresso
completed: Todas as extrações concluídas
failed: Tarefa falhou (verifique detalhes do erro)
Formato dos Resultados:
Cada URL no array de resultados contém:
- Dados extraídos correspondentes ao seu esquema
- Status de sucesso/falha
- Mensagens de erro individuais, se aplicável
- Pontuações de confiança para qualidade da extração
Parameters
- id (string) *required: ID da tarefa em lote
Response (200): Resposta de sucesso
- 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"
}
}
]
}
}