> ## Documentation Index
> Fetch the complete documentation index at: https://docs.adrop.io/llms.txt
> Use this file to discover all available pages before exploring further.

# エラーコード

> REST APIエラーコードと解決方法を案内します。

## エラーコード一覧

| コード    | 定数                           | メッセージ          | 説明            |
| ------ | ---------------------------- | -------------- | ------------- |
| `0`    | OK                           | OK             | 成功            |
| `4000` | ERROR\_CODE\_INVALID\_UNIT   | Invalid unit   | 無効な広告ユニットID   |
| `4001` | ERROR\_CODE\_AD\_INACTIVE    | Ad inactive    | 有効な広告キャンペーンなし |
| `4002` | ERROR\_CODE\_AD\_NO\_FILL    | No fill        | 条件に合う広告なし     |
| `4003` | ERROR\_CODE\_INVALID\_PARAMS | Invalid params | 無効なパラメータ      |

***

## エラー詳細説明

### ERROR\_CODE\_INVALID\_UNIT (4000)

**原因**：存在しないまたは無効化された広告ユニットIDでリクエストしました。

**解決方法**：

* コンソールで広告ユニットIDが正確か確認
* 広告ユニットが有効な状態か確認
* コピー/ペースト時に空白や特殊文字が含まれていないか確認

```json theme={null}
{
    "code": 4000,
    "msg": "Invalid unit",
    "result": null
}
```

***

### ERROR\_CODE\_AD\_INACTIVE (4001)

**原因**：該当広告ユニットに有効な広告キャンペーンがありません。

**解決方法**：

* コンソールでキャンペーンが実行中か確認
* キャンペーンスケジュール（開始日/終了日）を確認
* キャンペーン予算が消費されていないか確認

```json theme={null}
{
    "code": 4001,
    "msg": "Ad inactive",
    "result": null
}
```

***

### ERROR\_CODE\_AD\_NO\_FILL (4002)

**原因**：ターゲティング条件に合う広告が見つかりません。

**解決方法**：

* ターゲティング設定が過度に制限的でないか確認
* リトライロジックを実装（指数バックオフ推奨）
* 代替コンテンツ（フォールバック）を準備

```json theme={null}
{
    "code": 4002,
    "msg": "No fill",
    "result": null
}
```

**リトライ実装例**：

```javascript theme={null}
async function requestAdWithRetry(params, maxRetries = 3) {
    for (let i = 0; i < maxRetries; i++) {
        try {
            const response = await axios.get('https://api-v2.adrop.io/request', {
                params,
                headers: { 'Authorization': 'YOUR_APP_KEY' }
            });

            if (response.data.code === 0) {
                return response.data.result;
            }

            if (response.data.code === 4002) {
                // No fill - リトライ
                await new Promise(r => setTimeout(r, Math.pow(2, i) * 1000));
                continue;
            }

            // 他のエラーは即座に返却
            throw new Error(response.data.msg);
        } catch (error) {
            if (i === maxRetries - 1) throw error;
        }
    }

    return null; // フォールバックコンテンツを表示
}
```

***

### ERROR\_CODE\_INVALID\_PARAMS (4003)

**原因**：リクエストパラメータが正しくありません。

**解決方法**：

* 必須パラメータ（`unit`）が含まれているか確認
* パラメータ値の形式が正しいか確認
* パラメータ名に誤りがないか確認

```json theme={null}
{
    "code": 4003,
    "msg": "Invalid params",
    "result": null
}
```

**パラメータチェックリスト**：

| パラメータ   | 必須 | 有効な値の例                |
| ------- | -- | --------------------- |
| `unit`  | 必須 | `AD_UNIT_123`         |
| `pf`    | 推奨 | `android`、`ios`、`web` |
| `lcl`   | 推奨 | `ja_JP`、`en_US`       |
| `theme` | 任意 | `light`、`dark`        |

***

## エラー処理のベストプラクティス

### 1. エラーコードに基づく分岐処理

```javascript theme={null}
function handleAdResponse(response) {
    switch (response.code) {
        case 0:
            // 成功 - 広告をレンダリング
            renderAd(response.result);
            break;
        case 4000:
            // ユニットIDエラー - ログ記録
            console.error('Invalid unit ID');
            break;
        case 4001:
        case 4002:
            // 広告なし - フォールバックコンテンツを表示
            showFallbackContent();
            break;
        case 4003:
            // パラメータエラー - 開発者に通知
            console.error('Invalid parameters:', response.msg);
            break;
        default:
            // 不明なエラー
            console.error('Unknown error:', response.code, response.msg);
    }
}
```

### 2. フォールバックコンテンツの準備

```javascript theme={null}
function showFallbackContent() {
    const container = document.getElementById('ad-container');
    container.innerHTML = `
        <div class="fallback-content">
            <img src="/images/house-ad.jpg" alt="House Ad" />
        </div>
    `;
}
```

### 3. モニタリングとロギング

```javascript theme={null}
function logAdError(code, message, params) {
    // エラー発生率をモニタリング
    analytics.track('ad_error', {
        error_code: code,
        error_message: message,
        unit_id: params.unit,
        timestamp: new Date().toISOString()
    });
}
```

***

## HTTPステータスコード

REST APIは標準HTTPステータスコードも返します。

| HTTPステータス | 説明                          |
| --------- | --------------------------- |
| `200`     | リクエスト成功（エラーコードはレスポンスボディで確認） |
| `401`     | 認証失敗（App Keyを確認）            |
| `500`     | サーバー内部エラー                   |

<Warning>
  HTTP 200でもレスポンスボディの`code`値を必ず確認してください。ビジネスロジックエラーはレスポンスボディに含まれます。
</Warning>

***

## 関連ドキュメント

<CardGroup cols={2}>
  <Card title="REST API概要" icon="server" href="/ja/sdk/rest-api">
    API基本使用法
  </Card>

  <Card title="ターゲティング設定" icon="bullseye" href="/ja/sdk/rest-api/targeting">
    ターゲティングパラメータ設定
  </Card>
</CardGroup>
