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

タイトル: Product Advertising API (PA-API)
SEOタイトル: Amazon PA-API 5.0 完全ガイド(認証 Sigv4/SearchItems/レート制限/SDK)

この記事の要点
  • PA-API = Amazon アソシエイトが商品情報を取得できる API。5.0 系のみ現役(4.0 は廃止)
  • 利用には Amazon アソシエイトアカウントと、Access Key / Secret Key / Partner Tag が必要
  • 認証は AWS Signature Version 4。エンドポイントは webservices.amazon.co.jp 等の地域別 URL
  • 主要オペレーション: SearchItemsGetItemsGetVariationsGetBrowseNodes
  • レート制限あり(既定 1 リクエスト/秒、売上に応じて緩和)。Resources パラメータで取得フィールドを絞る

PA-API とは

Product Advertising API(PA-API)は、Amazon アソシエイト(アフィリエイト)が Amazon 商品情報・価格・在庫状況・カスタマーレビュー要約などをプログラムから取得するための公式 API です。アフィリエイトリンク自動生成、比較サイト構築、書籍データベースの集計などに使われます。

項目内容
現行バージョンPA-API 5.0(4.0 は 2020 年廃止)
必要なアカウントAmazon アソシエイト(地域別)
認証AWS Signature Version 4 (Sigv4)
レスポンスJSON(POST + JSON ペイロード)
レート制限既定 1 req/s, 8640 req/day(売上で緩和)
料金無料(アソシエイト収益が条件)

利用条件と制約

  • Amazon アソシエイトアカウントが必要(地域別、日本なら affiliate.amazon.co.jp
  • 承認後 180 日以内に売上発生 がないと API キーが停止される(要再申請)
  • 取得した情報は規約内での利用(24 時間以上のキャッシュ禁止 等)
  • レート制限は過去の売上実績に応じて緩和(最大 8640 req/day → 数万 req/day へ)

認証情報の取得

  1. Amazon アソシエイトにログイン
  2. 「ツール」→「Product Advertising API」→ 「認証情報を管理する」
  3. Access Key IDSecret Access Key(Sigv4 署名用)を発行
  4. 同ページで Partner Tag(トラッキング ID)を確認

Secret Key は表示時に必ず保管してください。後から再表示できません。

エンドポイントと地域

地域MarketplaceHostRegion
日本www.amazon.co.jpwebservices.amazon.co.jpus-west-2
米国www.amazon.comwebservices.amazon.comus-east-1
英国www.amazon.co.ukwebservices.amazon.co.ukeu-west-1
ドイツwww.amazon.dewebservices.amazon.deeu-west-1

主要オペレーション

オペレーション用途
SearchItemsキーワード/カテゴリ検索
GetItemsASIN 指定で個別取得(最大 10 件)
GetVariations色違い/サイズ違いのバリエーション取得
GetBrowseNodesカテゴリ階層取得

Resources パラメータ

レスポンスに含めるフィールドを Resources で明示します。指定しないとごく一部しか返らないので注意。

{
  "Keywords": "ノートPC",
  "SearchIndex": "Electronics",
  "PartnerTag": "yourtag-22",
  "PartnerType": "Associates",
  "Marketplace": "www.amazon.co.jp",
  "Resources": [
    "ItemInfo.Title",
    "ItemInfo.Features",
    "Images.Primary.Large",
    "Offers.Listings.Price",
    "Offers.Listings.Availability.Message",
    "BrowseNodeInfo.BrowseNodes"
  ]
}

cURL でリクエスト例

Sigv4 署名生成が複雑なので、本来は SDK 利用が推奨ですが、雰囲気をつかむための例:

# 署名生成済を前提とした POST 例
curl -X POST \
  -H "Host: webservices.amazon.co.jp" \
  -H "Content-Type: application/json; charset=UTF-8" \
  -H "X-Amz-Date: 20260610T000000Z" \
  -H "X-Amz-Target: com.amazon.paapi5.v1.ProductAdvertisingAPIv1.SearchItems" \
  -H "Content-Encoding: amz-1.0" \
  -H "Authorization: AWS4-HMAC-SHA256 Credential=..., SignedHeaders=..., Signature=..." \
  --data @body.json \
  https://webservices.amazon.co.jp/paapi5/searchitems

SDK 利用(PHP)

composer require amazon-paapi5-php-sdk
use Amazon\ProductAdvertisingAPI\v1\ApiException;
use Amazon\ProductAdvertisingAPI\v1\Configuration;
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('xxxxxxx');
$config->setHost('webservices.amazon.co.jp');
$config->setRegion('us-west-2');

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

$req = new SearchItemsRequest();
$req->setSearchIndex('Books');
$req->setKeywords('PHP');
$req->setItemCount(5);
$req->setPartnerTag('yourtag-22');
$req->setPartnerType('Associates');
$req->setResources(['Images.Primary.Large','ItemInfo.Title','Offers.Listings.Price']);

try {
    $res = $api->searchItems($req);
    foreach ($res->getSearchResult()->getItems() as $item) {
        echo $item->getItemInfo()->getTitle()->getDisplayValue(), "\n";
    }
} catch (ApiException $e) {
    echo $e->getMessage();
}

SDK 利用(Python)

from paapi5_python_sdk.api.default_api import DefaultApi
from paapi5_python_sdk.search_items_request import SearchItemsRequest
from paapi5_python_sdk.partner_type import PartnerType

api = DefaultApi(
    access_key='AKIA...', secret_key='xxxx',
    host='webservices.amazon.co.jp', region='us-west-2'
)

req = SearchItemsRequest(
    partner_tag='yourtag-22',
    partner_type=PartnerType.ASSOCIATES,
    keywords='Python',
    search_index='Books',
    item_count=5,
    resources=['Images.Primary.Large','ItemInfo.Title','Offers.Listings.Price'],
)
res = api.search_items(req)
for it in res.search_result.items:
    print(it.item_info.title.display_value)

レート制限とリトライ

制限を超えると 429 Too Many RequestsRequestThrottled エラーが返ります。指数バックオフで再試行してください。

import time, random
for attempt in range(5):
    try:
        res = api.search_items(req); break
    except ApiException as e:
        if e.status == 429:
            time.sleep((2 ** attempt) + random.random())
        else:
            raise

他 EC プラットフォームの API との比較

API認証レート備考
Amazon PA-API 5.0Sigv41 req/s〜アソシエイト連携前提
楽天市場 商品検索 APIApp ID1 req/s 目安アフィリエイト ID 任意
Yahoo!ショッピング APIYahoo! Client ID制限あり(公開値)商品検索 / カテゴリ取得
楽天ブックス/KoboApp ID同上書籍特化

規約上の重要ポイント

  • 取得データの24 時間以上の保管禁止(価格情報は特に)
  • 表示する場合は「価格は変動する可能性があります」等の文言
  • API キーの他者共有禁止
  • 取得した画像のサイズ改変は許可範囲内(規約参照)
  • アソシエイト規約に従って Partner Tag を必ず含める

FAQ

Q: 4.0 系のサンプルコードがネット上に大量にあるが、まだ使える?
A: 使えません。4.0 は 2020 年 3 月で完全廃止。5.0 のドキュメントを参照してください。

Q: 「Your account is missing approved sales」エラーが返る
A: アソシエイトで承認後 180 日間売上ゼロだとキーが停止します。Amazon アソシエイトサイトから API 再申請が必要です。

Q: SearchItems で「ノートPC」を検索しても 0 件
A: SearchIndexBooks 等になっていませんか。All または Electronics を指定してみてください。Marketplace が違うとレコードゼロもよくあります。