API-Übersicht
Basis-URL, Authentifizierung, Fehlerformat und vollständige Fehlercode-Referenz
Basis-URL
https://openapi.thunderbit.com/openapi/v1Authentifizierung
Alle Endpunkte verwenden HTTP Bearer (API Key):
Authorization: Bearer YOUR_API_KEYHol dir deinen Key im Thunderbit Dashboard. Keys sind widerrufbar und pro Umgebung getrennt — bette niemals einen Produktions-Key in Client-Code ein.
Fehler-Envelope
Alle Fehlerantworten teilen sich denselben Envelope. Standardmäßig (LEGACY-Format):
{
"success": false,
"error": {
"code": "INVALID_URL",
"status": 400,
"message": "The provided URL is not valid",
"details": null
}
}Note: Zuvor wurde ein alternatives
GOOGLE_RPC-Envelope dokumentiert, bei demcodeundstatusihre Typen tauschten (string ↔ number). Es ist veraltet und nicht empfohlen — stark typisierte Clients (OpenAPI codegen, Pydantic,serde,encoding/json) scheitern beim Deserialisieren. Nutzen Sie das LEGACY-Format oben; künftige Updates haltencode: stringundstatus: numberstabil. Das Felddetailskann strukturierten Kontext enthalten — zum Beispiel feldbezogene Validierungsfehler als{ field: message }-Paare beiINVALID_PARAMETER.
Kanonische Fehlercodes
| HTTP | Code | Bedeutung |
|---|---|---|
| 400 | INVALID_URL | URL-Format ist ungültig |
| 400 | INVALID_SCHEMA | JSON Schema ist ungültig |
| 400 | INVALID_PARAMETER | Mindestens ein Anfrageparameter ist ungültig |
| 400 | SCHEMA_OR_PROMPT_REQUIRED | schema (oder prompt) ist für die Extraktion erforderlich |
| 400 | SCHEMA_AND_PROMPT_EXCLUSIVE | schema und prompt können nicht gleichzeitig angegeben werden |
| 400 | BATCH_SIZE_EXCEEDED | Batch-Anfrage überschreitet das Limit von 100 URLs |
| 400 | MALFORMED_REQUEST_BODY | Anfrage-Body ist kein gültiges JSON |
| 401 | API_KEY_MISSING | Authorization-Header fehlt |
| 401 | API_KEY_INVALID_FORMAT | API-Key-Format ist ungültig |
| 401 | API_KEY_NOT_FOUND | API-Key wurde im System nicht gefunden |
| 401 | API_KEY_REVOKED | API-Key wurde widerrufen |
| 401 | API_KEY_DISABLED | API-Key wurde deaktiviert |
| 401 | API_KEY_EXPIRED | API-Key ist abgelaufen |
| 401 | INVALID_API_KEY | (veraltet, verwende stattdessen die spezifischen API_KEY_*-Codes) |
| 402 | INSUFFICIENT_CREDITS | Nicht genügend Guthaben auf dem Konto |
| 404 | JOB_NOT_FOUND | Batch-Job nicht gefunden |
| 404 | RESOURCE_NOT_FOUND | Ressource nicht gefunden |
| 408 | REQUEST_TIMEOUT | API-Anfrage hat Zeitlimit überschritten |
| 408 | SCRAPE_TIMEOUT | Zielseite hat zu lange gebraucht |
| 422 | SCRAPE_SSL_ERROR | Zielseite hat SSL-/TLS-Probleme |
| 422 | SCRAPE_DNS_RESOLUTION_ERROR | Ziel-Hostname konnte nicht aufgelöst werden |
| 422 | SCRAPE_SITE_ERROR | Zielseite hat einen Fehler zurückgegeben |
| 422 | SCRAPE_EMPTY_CONTENT | Zielseite hat leeren Inhalt geliefert |
| 422 | SCRAPE_CONTENT_TOO_LARGE | Zielseite überschreitet Größenlimits |
| 422 | SCRAPE_TARGET_FORBIDDEN | Zielseite hat den Zugriff verweigert (403) |
| 422 | SCRAPE_TARGET_NOT_FOUND | Ziel-URL liefert 404 |
| 422 | SCRAPE_UNSUPPORTED_FILE | Ziel-Dateityp wird nicht unterstützt |
| 429 | RATE_LIMIT_EXCEEDED | Konto-Ratenlimit ausgelöst |
| 429 | SCRAPE_TARGET_RATE_LIMITED | Zielseite hat unsere Anfrage drosseln lassen |
| 500 | INTERNAL_ERROR | Allgemeiner interner Fehler |
| 500 | DISTILL_FAILED | Destillations-Pipeline ist fehlgeschlagen |
| 500 | EXTRACT_FAILED | Extraktions-Pipeline ist fehlgeschlagen |
| 500 | PIPELINE_ERROR | Pipeline-Schritt meldet Fehler |
| 500 | AI_EXTRACTION_FAILED | KI-Extraktionsschritt ist fehlgeschlagen |
| 500 | MARKDOWN_CONVERSION_FAILED | HTML-zu-Markdown-Konvertierung fehlgeschlagen |
| 502 | SCRAPE_ALL_PROVIDERS_FAILED | Alle Scraping-Provider sind fehlgeschlagen |
| 502 | UPSTREAM_BAD_GATEWAY | Upstream hat eine ungültige Antwort geliefert |
| 503 | SCRAPE_PROVIDER_UNAVAILABLE | Scraping-Provider nicht verfügbar |
| 503 | AI_SERVICE_UNAVAILABLE | KI-Dienst nicht verfügbar |
| 503 | DOWNSTREAM_SERVICE_UNAVAILABLE | Downstream-Dienst vorübergehend nicht verfügbar |
| 504 | UPSTREAM_TIMEOUT | Upstream-Gateway-Zeitlimit überschritten |
| 504 | AI_TIMEOUT | KI-Dienst-Aufruf hat Zeitlimit überschritten |
Wiederholungsstrategie
| Fehlerklasse | Wiederholen? | Wie |
|---|---|---|
4xx (deine Eingabe) | ❌ Nein | Anfrage korrigieren und erneut senden |
401 (Auth) | ❌ Nein | API-Key rotieren / neu ausstellen |
402 (Guthaben) | ❌ Nein | Aufladen |
408 / 504 (Timeout) | ✅ Ja | Exponentielles Backoff, max. 3 Versuche |
429 (Rate-Limit) | ✅ Ja | Bis X-RateLimit-Reset warten — siehe Rate Limits |
5xx (Server) | ✅ Ja | Exponentielles Backoff, max. 3 Versuche |
SCRAPE_TARGET_* (Zielseite) | ⚠️ Vielleicht | Einmal erneut versuchen mit höherem renderMode |