5.

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 を作るのが推奨。

編集
Post Share
子ページ
  1. Error 400 : Bad Request Parameter Operation is missing
  2. MissingParameter. The request must contain the parameter Signature.
  3. RequestThrottled. AWS Access Key ID: ... . You are submitting requests too quickly
  4. SignatureDoesNotMatch. The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.
  5. failed to open stream: HTTP request failed! HTTP/1.1 503 Service Unavailable
同階層のページ
  1. アカウントの作成とキーの生成
  2. PA-APIの使い方 リクエストの構造とパラメータの指定
  3. リクエストにスペースを含める方法
  4. 署名認証の方法(PHPサンプル ItemSearch)
  5. エラー一覧
  6. レスポンスの構造(ItemSearch)