Referência API

Visão Geral da API

URL base, autenticação, formato de erro e referência completa de códigos de erro

URL base

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

Autenticação

Todos os endpoints usam HTTP Bearer (API Key):

Authorization: Bearer YOUR_API_KEY

Pegue sua chave no Painel Thunderbit. As chaves são revogáveis e por ambiente — nunca embuta uma chave de produção em código do lado do cliente.

Estrutura de erro

Todas as respostas de erro compartilham o mesmo envelope. Por padrão (formato LEGACY):

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

Note: Anteriormente era documentado um envelope alternativo GOOGLE_RPC em que code e status trocavam de tipos (string ↔ number). Está descontinuado e não recomendado — clientes com tipagem forte (OpenAPI codegen, Pydantic, serde, encoding/json) falharão na desserialização. Use o formato LEGACY acima; futuras atualizações manterão code: string e status: number estáveis. O campo details pode trazer contexto estruturado — por exemplo, erros de validação por campo como pares { field: message } retornados em INVALID_PARAMETER.

Códigos de erro canônicos

HTTPCodeSignificado
400INVALID_URLFormato de URL inválido
400INVALID_SCHEMAJSON Schema inválido
400INVALID_PARAMETERUm ou mais parâmetros da requisição falharam na validação
400SCHEMA_OR_PROMPT_REQUIREDschema (ou prompt) é obrigatório para extração
400SCHEMA_AND_PROMPT_EXCLUSIVEschema e prompt não podem ser fornecidos juntos
400BATCH_SIZE_EXCEEDEDRequisição em lote excede o limite de 100 URLs
400MALFORMED_REQUEST_BODYCorpo da requisição não é JSON válido
401API_KEY_MISSINGCabeçalho Authorization ausente
401API_KEY_INVALID_FORMATFormato da API Key é inválido
401API_KEY_NOT_FOUNDAPI Key não encontrada no sistema
401API_KEY_REVOKEDAPI Key revogada
401API_KEY_DISABLEDAPI Key desabilitada
401API_KEY_EXPIREDAPI Key expirada
401INVALID_API_KEY(obsoleto, use os códigos API_KEY_* específicos acima)
402INSUFFICIENT_CREDITSCréditos insuficientes na conta
404JOB_NOT_FOUNDTarefa em lote não encontrada
404RESOURCE_NOT_FOUNDRecurso não encontrado
408REQUEST_TIMEOUTTempo limite da requisição API esgotado
408SCRAPE_TIMEOUTPágina alvo demorou demais para responder
422SCRAPE_SSL_ERRORProblemas de SSL/TLS no site alvo
422SCRAPE_DNS_RESOLUTION_ERRORNão foi possível resolver o hostname alvo
422SCRAPE_SITE_ERRORSite alvo retornou erro
422SCRAPE_EMPTY_CONTENTPágina alvo retornou conteúdo vazio
422SCRAPE_CONTENT_TOO_LARGEPágina alvo excede limites de tamanho
422SCRAPE_TARGET_FORBIDDENSite alvo recusou acesso (403)
422SCRAPE_TARGET_NOT_FOUNDURL alvo retornou 404
422SCRAPE_UNSUPPORTED_FILETipo de arquivo alvo não suportado
429RATE_LIMIT_EXCEEDEDRate limit da conta acionado
429SCRAPE_TARGET_RATE_LIMITEDSite alvo aplicou rate limit à nossa requisição
500INTERNAL_ERRORErro interno genérico
500DISTILL_FAILEDPipeline de destilação falhou
500EXTRACT_FAILEDPipeline de extração falhou
500PIPELINE_ERRORUm passo do pipeline reportou falha
500AI_EXTRACTION_FAILEDPasso de extração com IA falhou
500MARKDOWN_CONVERSION_FAILEDConversão HTML para Markdown falhou
502SCRAPE_ALL_PROVIDERS_FAILEDTodos os provedores de scraping falharam
502UPSTREAM_BAD_GATEWAYUpstream retornou resposta inválida
503SCRAPE_PROVIDER_UNAVAILABLEProvedor de scraping indisponível
503AI_SERVICE_UNAVAILABLEServiço de IA indisponível
503DOWNSTREAM_SERVICE_UNAVAILABLEUm serviço downstream está temporariamente indisponível
504UPSTREAM_TIMEOUTTempo limite do gateway upstream esgotado
504AI_TIMEOUTTempo limite da chamada ao serviço de IA esgotado

Referência de estratégia de retry

Classe de erroRetry?Como
4xx (sua entrada)❌ NãoCorrija a requisição e tente novamente
401 (auth)❌ NãoRotacione / reemita a API Key
402 (créditos)❌ NãoRecarregue
408 / 504 (timeout)✅ SimBackoff exponencial, máx. 3 tentativas
429 (rate-limit)✅ SimAguarde até X-RateLimit-Reset — veja Rate Limits
5xx (servidor)✅ SimBackoff exponencial, máx. 3 tentativas
SCRAPE_TARGET_* (site alvo)⚠️ TalvezTente novamente uma vez com renderMode elevado