エラーコード
TWP公開APIが返すエラーコードの一覧です。
エラーレスポンス形式
{
"error": {
"code": "ERROR_CODE",
"message": "エラーの説明"
}
}バリデーションエラーの場合は、詳細情報が含まれます。
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Validation failed",
"details": [
{
"field": "email",
"message": "メールアドレスの形式が正しくありません"
}
]
}
}共通エラーコード
認証・認可
| コード | HTTPステータス | 説明 |
|---|---|---|
UNAUTHORIZED | 401 | APIキーが指定されていない |
INVALID_API_KEY | 401 | APIキーが無効 |
EXPIRED_API_KEY | 401 | APIキーの有効期限切れ |
FORBIDDEN | 403 | 権限不足 |
リクエスト
| コード | HTTPステータス | 説明 |
|---|---|---|
MISSING_BODY | 400 | リクエストボディが空 |
INVALID_JSON | 400 | JSONのパースエラー |
VALIDATION_ERROR | 422 | バリデーションエラー |
NOT_FOUND | 404 | リソースが見つからない |
METHOD_NOT_ALLOWED | 405 | 許可されていないHTTPメソッド |
サーバー
| コード | HTTPステータス | 説明 |
|---|---|---|
INTERNAL_ERROR | 500 | サーバー内部エラー |
RATE_LIMITED | 429 | レート制限超過 |
コンテンツAPI固有のエラー
| コード | HTTPステータス | 説明 |
|---|---|---|
CATEGORY_NOT_FOUND | 404 | 指定されたカテゴリが存在しない |
MISSING_CATEGORY | 400 | カテゴリの指定が必要 |
MISSING_ID | 400 | IDの指定が必要 |
MISSING_SLUG | 400 | スラッグの指定が必要 |
INVALID_CURSOR | 400 | カーソルの形式が不正 |
INVALID_LIMIT | 400 | limit値が不正(1〜100の範囲外) |
INVALID_SORT_PARAM | 400 | ソートパラメータが不正 |
TOO_MANY_FILTERS | 400 | フィルター条件が多すぎる(最大3件) |
TAG_FILTER_SORT_NOT_SUPPORTED | 400 | タグフィルターとソートの併用は非対応 |
検索API固有のエラー
| コード | HTTPステータス | 説明 |
|---|---|---|
MISSING_QUERY | 400 | 検索クエリが指定されていない |
QUERY_TOO_LONG | 400 | 検索クエリが長すぎる(500文字超) |
INVALID_SIZE | 400 | size値が不正(1〜100の範囲外) |
INVALID_FROM | 400 | from値が不正(負の値) |
SEARCH_ERROR | 500 | 検索エンジンエラー |
プレビュー機能のエラー
| コード | HTTPステータス | 説明 |
|---|---|---|
INVALID_PREVIEW_TOKEN | 401 | プレビュートークンが無効または期限切れ |
PREVIEW_TOKEN_TENANT_MISMATCH | 401 | プレビュートークンのテナントが一致しない |
PREVIEW_TOKEN_VERIFICATION_ERROR | 401 | プレビュートークンの検証エラー |
INVALID_PREVIEW_TYPE | 400 | プレビュートークンの種類が不正 |
CONTENT_ID_MISMATCH | 403 | プレビュートークンとコンテンツIDが一致しない |
問い合わせAPI固有のエラー
| コード | HTTPステータス | 説明 |
|---|---|---|
MISSING_CATEGORY_CODE | 400 | カテゴリコードが指定されていない |
INVALID_CATEGORY_CODE | 400 | カテゴリコードが無効 |
MISSING_INQUIRER_INFO | 400 | 問い合わせ者情報が不足 |
エラーハンドリングの例
async function fetchContent(id) {
const response = await fetch(`${API_URL}/v1/cms/contents/${id}`, {
headers: { 'X-API-Key': API_KEY },
});
if (!response.ok) {
const error = await response.json();
switch (error.error.code) {
case 'NOT_FOUND':
// コンテンツが見つからない
return null;
case 'UNAUTHORIZED':
case 'INVALID_API_KEY':
// 認証エラー - 設定を確認
throw new Error('APIキーを確認してください');
case 'RATE_LIMITED':
// レート制限 - リトライ
await sleep(1000);
return fetchContent(id);
default:
throw new Error(error.error.message);
}
}
return response.json();
}