API-overzicht
Basis-URL, authenticatie, foutformaat en volledige referentie van foutcodes
Basis-URL
https://openapi.thunderbit.com/openapi/v1Authenticatie
Alle endpoints gebruiken HTTP Bearer (API Key):
Authorization: Bearer YOUR_API_KEYHaal je key op vanuit het Thunderbit Dashboard. Keys zijn intrekbaar en per omgeving — sluit nooit een productiekey in clientcode in.
Foutomhulsel
Alle foutresponses delen dezelfde envelope. Standaard (LEGACY-formaat):
{
"success": false,
"error": {
"code": "INVALID_URL",
"status": 400,
"message": "The provided URL is not valid",
"details": null
}
}Note: Er was eerder een alternatieve
GOOGLE_RPC-envelope gedocumenteerd waarbijcodeenstatusvan type wisselden (string ↔ number). Deze modus is verouderd en niet aanbevolen — sterk getypeerde clients (OpenAPI codegen, Pydantic,serde,encoding/json) zullen niet kunnen deserialiseren. Gebruik het bovenstaande LEGACY-formaat; toekomstige updates houdencode: stringenstatus: numberstabiel. Het velddetailskan gestructureerde context bevatten — bijvoorbeeld validatiefouten op veldniveau als{ field: message }-paren die bijINVALID_PARAMETERworden teruggegeven.
Canonieke foutcodes
| HTTP | Code | Betekenis |
|---|---|---|
| 400 | INVALID_URL | URL-formaat is ongeldig |
| 400 | INVALID_SCHEMA | JSON Schema is ongeldig |
| 400 | INVALID_PARAMETER | Een of meer requestparameters zijn niet gevalideerd |
| 400 | SCHEMA_OR_PROMPT_REQUIRED | schema (of prompt) is vereist voor extractie |
| 400 | SCHEMA_AND_PROMPT_EXCLUSIVE | schema en prompt mogen niet samen worden meegegeven |
| 400 | BATCH_SIZE_EXCEEDED | Batch-request overschrijdt de limiet van 100 URLs |
| 400 | MALFORMED_REQUEST_BODY | Request body is geen geldige JSON |
| 401 | API_KEY_MISSING | Authorization-header ontbreekt |
| 401 | API_KEY_INVALID_FORMAT | API Key-formaat is ongeldig |
| 401 | API_KEY_NOT_FOUND | API Key niet gevonden in het systeem |
| 401 | API_KEY_REVOKED | API Key is ingetrokken |
| 401 | API_KEY_DISABLED | API Key is gedeactiveerd |
| 401 | API_KEY_EXPIRED | API Key is verlopen |
| 401 | INVALID_API_KEY | (verouderd, gebruik de specifieke API_KEY_*-codes hierboven) |
| 402 | INSUFFICIENT_CREDITS | Onvoldoende credits op het account |
| 404 | JOB_NOT_FOUND | Batchtaak niet gevonden |
| 404 | RESOURCE_NOT_FOUND | Resource niet gevonden |
| 408 | REQUEST_TIMEOUT | API-request is verlopen |
| 408 | SCRAPE_TIMEOUT | Doelpagina reageerde te traag |
| 422 | SCRAPE_SSL_ERROR | Doelsite heeft SSL/TLS-problemen |
| 422 | SCRAPE_DNS_RESOLUTION_ERROR | Doelhostnaam kan niet worden omgezet |
| 422 | SCRAPE_SITE_ERROR | Doelsite gaf een fout terug |
| 422 | SCRAPE_EMPTY_CONTENT | Doelpagina gaf lege inhoud terug |
| 422 | SCRAPE_CONTENT_TOO_LARGE | Doelpagina overschrijdt grootte-limieten |
| 422 | SCRAPE_TARGET_FORBIDDEN | Doelsite weigerde toegang (403) |
| 422 | SCRAPE_TARGET_NOT_FOUND | Doel-URL gaf 404 terug |
| 422 | SCRAPE_UNSUPPORTED_FILE | Doelbestandstype wordt niet ondersteund |
| 429 | RATE_LIMIT_EXCEEDED | Rate-limit van het account bereikt |
| 429 | SCRAPE_TARGET_RATE_LIMITED | Doelsite heeft onze request beperkt |
| 500 | INTERNAL_ERROR | Algemene interne fout |
| 500 | DISTILL_FAILED | Distillatiepipeline is mislukt |
| 500 | EXTRACT_FAILED | Extractiepipeline is mislukt |
| 500 | PIPELINE_ERROR | Een pipeline-stap meldde een fout |
| 500 | AI_EXTRACTION_FAILED | AI-extractiestap is mislukt |
| 500 | MARKDOWN_CONVERSION_FAILED | HTML-naar-Markdown-conversie mislukt |
| 502 | SCRAPE_ALL_PROVIDERS_FAILED | Alle scraping-providers zijn mislukt |
| 502 | UPSTREAM_BAD_GATEWAY | Upstream gaf een ongeldige respons terug |
| 503 | SCRAPE_PROVIDER_UNAVAILABLE | Scraping-provider niet beschikbaar |
| 503 | AI_SERVICE_UNAVAILABLE | AI-service niet beschikbaar |
| 503 | DOWNSTREAM_SERVICE_UNAVAILABLE | Een downstream-service is tijdelijk niet beschikbaar |
| 504 | UPSTREAM_TIMEOUT | Upstream-gateway is verlopen |
| 504 | AI_TIMEOUT | AI-service-aanroep is verlopen |
Retry-strategie referentie
| Foutklasse | Retry? | Hoe |
|---|---|---|
4xx (jouw input) | ❌ Nee | Corrigeer de request en probeer opnieuw |
401 (auth) | ❌ Nee | Roteer / heruitgeef de API Key |
402 (credits) | ❌ Nee | Top op |
408 / 504 (timeout) | ✅ Ja | Exponentiële backoff, max. 3 pogingen |
429 (rate-limit) | ✅ Ja | Wacht tot X-RateLimit-Reset — zie Rate Limits |
5xx (server) | ✅ Ja | Exponentiële backoff, max. 3 pogingen |
SCRAPE_TARGET_* (doelsite) | ⚠️ Misschien | Probeer eenmaal opnieuw met verhoogde renderMode |