この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:7
ページ更新者:atom
更新日時:2026-06-11 07:12:00

タイトル: エラー一覧
SEOタイトル: Amazon PA-API のよくあるエラーと対処法完全ガイド — InvalidParameterValue /

この記事の要点
  • InvalidParameterValue = リクエストパラメータの値が不正。ASIN・国コード等の typo
  • MissingParameter / InvalidSignature = AWS Signature V4 の計算ミス、AccessKey / SecretKey 間違い
  • RequestThrottled / TooManyRequests = TPS(秒間リクエスト)上限超過。指数バックオフ必須
  • AccessDeniedException = アソシエイト未承認、または売上未達で API 失効
  • 4.0 → 5.0 移行で多数のフィールド名・エンドポイントが変更、SDK は paapi5-php-sdk 等を利用

Amazon PA-API(Product Advertising API)とは

Amazon の商品情報を取得するための公式 API です。アフィリエイト(Amazon アソシエイト)プログラム参加者向けに提供されており、商品検索・詳細取得・カート操作が可能です。2020 年 3 月に PA-API 5.0 が正式版になり、4.0 は廃止されました。

主要エラー一覧

エラーコード意味主な原因
InvalidParameterValueパラメータ値不正ASIN / 国コード / 通貨
MissingParameter必須パラメータ欠落PartnerTag 等の未指定
InvalidSignature署名不一致SigV4 計算ミス、時刻ずれ
AccessDeniedExceptionアクセス権限なしアソシエイト未承認 / 失効
RequestThrottledスロットリングTPS 超過
TooManyRequestsレート制限1 日のリクエスト上限
ItemNotAccessible商品アクセス不可地域限定 / 廃番
InvalidAssociateアソシエイト ID 無効PartnerTag のスペルミス
NoResults結果ゼロ検索キーワード合致なし
InvalidPartnerTagPartnerTag 不正登録外のタグ使用

エラー1: InvalidParameterValue

もっとも頻発するエラー。リクエストパラメータの値が API の期待形式と違います:

{
  "Errors": [{
    "Code": "InvalidParameterValue",
    "Message": "The ItemId provided in the request is invalid."
  }]
}

確認ポイント:

  • ASIN: 10 桁の半角英数字(例: B08N5WRWNW)、ハイフン不可
  • Marketplace: www.amazon.co.jp / www.amazon.com 等、URL 形式
  • Resources: ItemInfo.Title 等、ドット区切りで正確に
  • Condition: New / Used / Collectible / Refurbished(大文字小文字)

エラー2: InvalidSignature

AWS Signature Version 4 の計算ミスで発生:

// 署名計算の正しい流れ(PHP の例)
$method = "POST";
$service = "ProductAdvertisingAPI";
$region = "us-west-2"; // ★ PA-API 固定
$host = "webservices.amazon.co.jp";
$endpoint = "https://" . $host . "/paapi5/searchitems";

$amz_date = gmdate('Ymd\THis\Z');
$date_stamp = gmdate('Ymd');

// Canonical Request
$canonical_uri = "/paapi5/searchitems";
$canonical_querystring = "";
$canonical_headers = "host:" . $host . "\n" .
                     "x-amz-date:" . $amz_date . "\n" .
                     "x-amz-target:com.amazon.paapi5.v1.ProductAdvertisingAPIv1.SearchItems\n";
$signed_headers = "host;x-amz-date;x-amz-target";
$payload_hash = hash('sha256', $payload);

$canonical_request = $method . "\n" . $canonical_uri . "\n" .
    $canonical_querystring . "\n" . $canonical_headers . "\n" .
    $signed_headers . "\n" . $payload_hash;

// String to Sign
$algorithm = "AWS4-HMAC-SHA256";
$credential_scope = $date_stamp . "/" . $region . "/" . $service . "/aws4_request";
$string_to_sign = $algorithm . "\n" . $amz_date . "\n" . $credential_scope . "\n" .
                  hash('sha256', $canonical_request);

// Signature
$signing_key = hash_hmac('sha256', $date_stamp, "AWS4" . $secret_key, true);
$signing_key = hash_hmac('sha256', $region, $signing_key, true);
$signing_key = hash_hmac('sha256', $service, $signing_key, true);
$signing_key = hash_hmac('sha256', 'aws4_request', $signing_key, true);
$signature = hash_hmac('sha256', $string_to_sign, $signing_key);

失敗するケース:

  • システム時刻が UTC からずれている(±15 分以内必須)
  • SecretKey の改行・空白混入
  • Payload JSON のキー順序・空白の違い
  • Region を us-west-2 以外で計算

エラー3: RequestThrottled / TooManyRequests

PA-API の上限:

制限初期値備考
TPS (Transactions Per Second)1 TPS1 秒に 1 リクエスト
1 日のリクエスト数8,640 件1 TPS × 86,400 秒の 1/10 程度
売上連動増加30 日売上 × 1 TPS / $1売上多いほど枠拡大
新規アカウント初回 180 日以内に売上必須未達で失効

対処: 指数バックオフでの再送:

function callWithRetry($callback, $maxRetries = 5) {
    $delay = 1;
    for ($i = 0; $i < $maxRetries; $i++) {
        try {
            return $callback();
        } catch (Exception $e) {
            if (strpos($e->getMessage(), "RequestThrottled") !== false ||
                strpos($e->getMessage(), "TooManyRequests") !== false) {
                sleep($delay);
                $delay *= 2; // 1, 2, 4, 8, 16 秒
                continue;
            }
            throw $e;
        }
    }
    throw new Exception("Max retries exceeded");
}

// 使用例
$result = callWithRetry(function() use ($api, $request) {
    return $api->searchItems($request);
});

エラー4: AccessDeniedException

「アクセスが拒否されました」: アソシエイトプログラム関連の権限問題:

  • アソシエイトプログラム未承認 → 申請から数日かかる
  • 180 日売上ゼロで失効 → 1 件以上の売上が必要
  • アカウント停止 → ガイドライン違反でアカウント凍結
  • API キーが別アカウント用 → 国別(.co.jp / .com)で別キー

確認: https://affiliate.amazon.co.jp にログインし「ツール → Product Advertising API」でステータスを確認します。

エラー5: ItemNotAccessible

商品が API でアクセスできない:

  • 地域限定商品: 日本マーケットからは見えない海外限定品
  • 廃番: ASIN は存在するが販売終了
  • 大人カテゴリ: 一部の制限付きカテゴリは API で取得不可
  • Marketplace 不一致: .co.jp のキーで .com の ASIN を取得しようとした

PA-API 4.0 → 5.0 移行時のエラー

変更点4.05.0
エンドポイントecs.amazonaws.jpwebservices.amazon.co.jp/paapi5/
プロトコルGET + クエリ文字列POST + JSON
署名SigV2SigV4
操作名ItemSearch / ItemLookupSearchItems / GetItems
レスポンスXMLJSON
SDK独自実装公式 SDK 各言語

公式 SDK の利用(推奨)

署名計算のミスを避けるため、公式 SDK を使うのが最善:

# PHP の場合
composer require amazon-paapi5/paapi5-php-sdk

# Python
pip install paapi5-python-sdk

# JavaScript (Node.js)
npm install paapi5-nodejs-sdk

# Java
# Maven 経由で paapi5-java-sdk
use Amazon\ProductAdvertisingAPI\v1\com\amazon\paapi5\v1\api\DefaultApi;
use Amazon\ProductAdvertisingAPI\v1\com\amazon\paapi5\v1\SearchItemsRequest;

$config = new Configuration();
$config->setAccessKey("AKIA...");
$config->setSecretKey("xxxxxxxx");
$config->setHost("webservices.amazon.co.jp");
$config->setRegion("us-west-2");

$apiInstance = new DefaultApi(new GuzzleHttp\Client(), $config);

$request = new SearchItemsRequest();
$request->setPartnerTag("yourtag-22");
$request->setPartnerType(PartnerType::ASSOCIATES);
$request->setKeywords("Harry Potter");
$request->setSearchIndex("All");
$request->setResources([
    SearchItemsResource::ITEM_INFOTITLE,
    SearchItemsResource::OFFERSLISTINGSPRICE
]);

try {
    $response = $apiInstance->searchItems($request);
    // 成功
} catch (ApiException $e) {
    echo "Error: " . $e->getMessage();
}

FAQ

Q: 売上ゼロで API が止まった
A: 180 日以内に売上 1 件が必要。再開には売上発生 → 数日後に自動復活。アカウント自体が停止された場合は再申請。

Q: TPS をもっと増やしたい
A: 売上を増やすと自動で枠が拡大します(30 日売上 × 係数)。手動申請はできません。

Q: PA-API 4.0 のコードはまだ動く?
A: 2020 年 3 月で完全廃止。すべて 5.0 への移行が必須です。

Q: 開発環境(Sandbox)はある?
A: ありません。本番 API を低 TPS で叩くしかありません。テスト用に専用 PartnerTag を作るのが推奨。