Riferimento API

Panoramica API

URL base, autenticazione, formato degli errori e riferimento completo dei codici di errore

URL base

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

Autenticazione

Tutti gli endpoint usano HTTP Bearer (API Key):

Authorization: Bearer YOUR_API_KEY

Ottieni la tua chiave dalla Dashboard Thunderbit. Le chiavi sono revocabili e per ambiente — non incorporare mai una chiave di produzione nel codice client-side.

Struttura degli errori

Tutte le risposte di errore condividono la stessa envelope. Per impostazione predefinita (formato LEGACY):

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

Note: In precedenza era documentata una busta alternativa GOOGLE_RPC in cui code e status invertivano i tipi (string ↔ number). È deprecata e sconsigliata — i client tipizzati (OpenAPI codegen, Pydantic, serde, encoding/json) falliranno la deserializzazione. Usa il formato LEGACY sopra; gli aggiornamenti futuri manterranno code: string e status: number stabili. Il campo details può contenere contesto strutturato — ad esempio, errori di validazione a livello di campo come coppie { field: message } restituite con INVALID_PARAMETER.

Codici di errore canonici

HTTPCodeSignificato
400INVALID_URLFormato URL non valido
400INVALID_SCHEMAJSON Schema non valido
400INVALID_PARAMETERUno o più parametri della richiesta hanno fallito la validazione
400SCHEMA_OR_PROMPT_REQUIREDschema (o prompt) richiesto per l'estrazione
400SCHEMA_AND_PROMPT_EXCLUSIVEschema e prompt non possono essere forniti insieme
400BATCH_SIZE_EXCEEDEDLa richiesta batch supera il limite di 100 URL
400MALFORMED_REQUEST_BODYIl body della richiesta non è JSON valido
401API_KEY_MISSINGHeader Authorization mancante
401API_KEY_INVALID_FORMATFormato API Key non valido
401API_KEY_NOT_FOUNDAPI Key non trovata nel sistema
401API_KEY_REVOKEDAPI Key revocata
401API_KEY_DISABLEDAPI Key disabilitata
401API_KEY_EXPIREDAPI Key scaduta
401INVALID_API_KEY(deprecato, usa i codici API_KEY_* specifici sopra)
402INSUFFICIENT_CREDITSCredito insufficiente sull'account
404JOB_NOT_FOUNDJob batch non trovato
404RESOURCE_NOT_FOUNDRisorsa non trovata
408REQUEST_TIMEOUTTimeout della richiesta API
408SCRAPE_TIMEOUTLa pagina di destinazione ha impiegato troppo tempo
422SCRAPE_SSL_ERRORProblemi SSL/TLS sul sito di destinazione
422SCRAPE_DNS_RESOLUTION_ERRORImpossibile risolvere l'hostname di destinazione
422SCRAPE_SITE_ERRORIl sito di destinazione ha restituito un errore
422SCRAPE_EMPTY_CONTENTLa pagina di destinazione ha restituito contenuto vuoto
422SCRAPE_CONTENT_TOO_LARGELa pagina di destinazione supera i limiti di dimensione
422SCRAPE_TARGET_FORBIDDENIl sito di destinazione ha negato l'accesso (403)
422SCRAPE_TARGET_NOT_FOUNDURL di destinazione ha restituito 404
422SCRAPE_UNSUPPORTED_FILETipo di file di destinazione non supportato
429RATE_LIMIT_EXCEEDEDRate limit dell'account attivato
429SCRAPE_TARGET_RATE_LIMITEDIl sito di destinazione ha limitato la nostra richiesta
500INTERNAL_ERRORErrore interno generico
500DISTILL_FAILEDLa pipeline di distillazione è fallita
500EXTRACT_FAILEDLa pipeline di estrazione è fallita
500PIPELINE_ERRORUno step della pipeline ha segnalato un errore
500AI_EXTRACTION_FAILEDLo step di estrazione AI è fallito
500MARKDOWN_CONVERSION_FAILEDConversione HTML-to-Markdown fallita
502SCRAPE_ALL_PROVIDERS_FAILEDTutti i provider di scraping sono falliti
502UPSTREAM_BAD_GATEWAYL'upstream ha restituito una risposta non valida
503SCRAPE_PROVIDER_UNAVAILABLEProvider di scraping non disponibile
503AI_SERVICE_UNAVAILABLEServizio AI non disponibile
503DOWNSTREAM_SERVICE_UNAVAILABLEUn servizio downstream è temporaneamente non disponibile
504UPSTREAM_TIMEOUTTimeout del gateway upstream
504AI_TIMEOUTTimeout della chiamata al servizio AI

Riferimento strategia di retry

Classe di erroreRetry?Come
4xx (input tuo)❌ NoCorreggi la richiesta e riprova
401 (auth)❌ NoRuota / riemetti l'API Key
402 (crediti)❌ NoRicarica
408 / 504 (timeout)✅ SìBackoff esponenziale, max 3 tentativi
429 (rate-limit)✅ SìAttendi fino a X-RateLimit-Reset — vedi Rate Limits
5xx (server)✅ SìBackoff esponenziale, max 3 tentativi
SCRAPE_TARGET_* (sito di destinazione)⚠️ ForseRiprova una volta aumentando renderMode