API リファレンス
API 概要
Base URL、認証、エラー形式、および全エラーコードリファレンス
Base URL
https://openapi.thunderbit.com/openapi/v1認証
すべてのエンドポイントで HTTP Bearer(API Key)を使用します:
Authorization: Bearer YOUR_API_KEYThunderbit ダッシュボード からキーを取得してください。キーは取り消し可能で環境ごとに分離されています —— 本番キーをクライアント側コードに埋め込まないでください。
エラーレスポンスの形式
すべてのエラーレスポンスは同じエンベロープを共有します。デフォルトは LEGACY 形式:
{
"success": false,
"error": {
"code": "INVALID_URL",
"status": 400,
"message": "The provided URL is not valid",
"details": null
}
}Note: 以前
GOOGLE_RPC代替エンベロープが記載されており、codeとstatusの型が入れ替わっていました(string ↔ number)。このモードは 非推奨 です — 厳格型のクライアント(OpenAPI codegen、Pydantic、serde、encoding/json)は逆シリアライズに失敗します。上記の LEGACY 形式を使ってください。将来もcode: string、status: numberを維持します。detailsフィールドには構造化されたコンテキストが含まれることがあります —— 例えばINVALID_PARAMETERでは{ field: message }形式のフィールド単位の検証エラーが返されます。
標準エラーコード
| HTTP | Code | 意味 |
|---|---|---|
| 400 | INVALID_URL | URL の形式が無効 |
| 400 | INVALID_SCHEMA | JSON Schema が無効 |
| 400 | INVALID_PARAMETER | 1 つ以上のリクエストパラメータが検証に失敗 |
| 400 | SCHEMA_OR_PROMPT_REQUIRED | 抽出には schema(または prompt)が必要 |
| 400 | SCHEMA_AND_PROMPT_EXCLUSIVE | schema と prompt は同時指定不可 |
| 400 | BATCH_SIZE_EXCEEDED | バッチリクエストが 100 URL 上限を超過 |
| 400 | MALFORMED_REQUEST_BODY | リクエストボディが有効な JSON ではない |
| 401 | API_KEY_MISSING | Authorization ヘッダーが欠落 |
| 401 | API_KEY_INVALID_FORMAT | API Key の形式が無効 |
| 401 | API_KEY_NOT_FOUND | API Key がシステム内に見つからない |
| 401 | API_KEY_REVOKED | API Key が取り消し済み |
| 401 | API_KEY_DISABLED | API Key が無効化済み |
| 401 | API_KEY_EXPIRED | API Key が期限切れ |
| 401 | INVALID_API_KEY | (非推奨、上記の具体的な API_KEY_* を使用してください) |
| 402 | INSUFFICIENT_CREDITS | アカウントのクレジット不足 |
| 404 | JOB_NOT_FOUND | バッチジョブが見つからない |
| 404 | RESOURCE_NOT_FOUND | リソースが見つからない |
| 408 | REQUEST_TIMEOUT | API リクエストがタイムアウト |
| 408 | SCRAPE_TIMEOUT | 対象ページの応答がタイムアウト |
| 422 | SCRAPE_SSL_ERROR | 対象サイトに SSL/TLS の問題 |
| 422 | SCRAPE_DNS_RESOLUTION_ERROR | 対象ホスト名を解決できない |
| 422 | SCRAPE_SITE_ERROR | 対象サイトがエラーを返した |
| 422 | SCRAPE_EMPTY_CONTENT | 対象ページが空のコンテンツを返した |
| 422 | SCRAPE_CONTENT_TOO_LARGE | 対象ページがサイズ上限を超過 |
| 422 | SCRAPE_TARGET_FORBIDDEN | 対象サイトがアクセスを拒否(403) |
| 422 | SCRAPE_TARGET_NOT_FOUND | 対象 URL が 404 を返した |
| 422 | SCRAPE_UNSUPPORTED_FILE | サポートされていないファイル形式 |
| 429 | RATE_LIMIT_EXCEEDED | アカウントのレート制限に達した |
| 429 | SCRAPE_TARGET_RATE_LIMITED | 対象サイトがリクエストにレート制限をかけた |
| 500 | INTERNAL_ERROR | 一般的な内部エラー |
| 500 | DISTILL_FAILED | 蒸留パイプラインが失敗 |
| 500 | EXTRACT_FAILED | 抽出パイプラインが失敗 |
| 500 | PIPELINE_ERROR | パイプラインのいずれかのステップで失敗 |
| 500 | AI_EXTRACTION_FAILED | AI 抽出ステップが失敗 |
| 500 | MARKDOWN_CONVERSION_FAILED | HTML から Markdown への変換が失敗 |
| 502 | SCRAPE_ALL_PROVIDERS_FAILED | すべてのスクレイピングプロバイダが失敗 |
| 502 | UPSTREAM_BAD_GATEWAY | アップストリームが無効な応答を返した |
| 503 | SCRAPE_PROVIDER_UNAVAILABLE | スクレイピングプロバイダが利用不可 |
| 503 | AI_SERVICE_UNAVAILABLE | AI サービスが利用不可 |
| 503 | DOWNSTREAM_SERVICE_UNAVAILABLE | ダウンストリームサービスが一時的に利用不可 |
| 504 | UPSTREAM_TIMEOUT | アップストリームゲートウェイがタイムアウト |
| 504 | AI_TIMEOUT | AI サービス呼び出しがタイムアウト |
リトライ戦略リファレンス
| エラー区分 | リトライ? | 方法 |
|---|---|---|
4xx(入力エラー) | ❌ 不可 | リクエストを修正して再試行 |
401(認証) | ❌ 不可 | API Key を再発行 / 差し替え |
402(クレジット) | ❌ 不可 | チャージ |
408 / 504(タイムアウト) | ✅ 可 | 指数バックオフ、最大 3 回 |
429(レート制限) | ✅ 可 | X-RateLimit-Reset まで待機 —— レート制限 を参照 |
5xx(サーバー) | ✅ 可 | 指数バックオフ、最大 3 回 |
SCRAPE_TARGET_*(対象サイト) | ⚠️ ケースバイケース | renderMode を上げて 1 回再試行 |