AssociateNotEligible|Creators APIの403と、売上の要件(過去30日10件)
Creators APIを呼んで403が返り、本文にAssociateNotEligibleとあれば、原因はコードでもキーでもありません。アソシエイトのアカウントが、利用の要件(過去30日間に10件の適格売上)を満たしていないという意味です。同じ403でも、PA-API 5を呼び続けて出る「deprecated」の403とは別物で、直し方がまったく違います。
(確認:Amazonアソシエイト「Creators API Documentation」の Introduction・Error Codes and Messages・API Rates。確認日:2026年10月29日。要件は変わることがあります)
2つの403の違い
| 応答の中身 | 意味 | 直し方 |
|---|---|---|
"__type": "com.amazon.paapi5#AccessDeniedException"、メッセージに「Product Advertising API is deprecated」 |
終了したPA-API 5を呼んでいる | Creators APIへ移行する(資格情報とコードの作り直し) |
"type": "AccessDeniedException"、"reason": "AssociateNotEligible" |
Creators APIは呼べているが、アカウントが要件を満たしていない | 要件を満たすまで待つ。キーやコードを直しても解決しない |
前者の詳しい経緯はAmazon PA-APIが403になる理由と、Creators APIへの移行にまとめています。この記事は後者を扱います。
公式ドキュメントに書かれている要件
Introduction の「Prerequisites」には、Creators APIを使う条件として次の4つが並んでいます。
- 対象のマーケットプレイス(日本ならAmazon.co.jp)のアソシエイト・プログラムに登録している
- Creators API経由でPA APIを使うには、過去30日間に10件以上の適格売上があること(原文:Have at least 10 qualifying sales within the past 30 days)
- アソシエイト・セントラルでAPIの利用を登録する
- 資格情報(Credential)を発行する
Error Codes and Messages では、AssociateNotEligibleの説明として「現在の要件は、直近30日間に10件の適格売上があること」と書かれ、返るメッセージは「Your account does not currently meet the eligibility requirements.」です。
なお API Rates のページには、別の書き方で「30日間続けて適格な紹介売上が無いと、Creators APIへのアクセスを失う」「紹介した売上が出荷されてから2日以内にアクセスが戻る」とも書かれています。2つのページの書き方は同じではないため、本記事では、より厳しい「過去30日間に10件」を基準として扱います。
API Rates のページには、アクセスを失った(取り消された)場合は429 TooManyRequestsが返るとも書かれています。売上の要件を満たさない時に、AssociateNotEligibleの403ではなく429で返る可能性があるので、429を呼び出しの回数の問題だけと決めつけず、売上の件数も確かめてください。
コード:エラー応答を見分ける
公式ドキュメントに載っている応答の例を5つ用意し、どれに当たるかと、何をすればよいかを出します。__typeがPA-API 5の形式かどうかを先に見て、そうでなければreasonで分けています。
# Creators API と PA-API 5 の 403 などのエラー応答を見分ける
# 応答の例は公式ドキュメント「Error Codes and Messages」「PA-API 5 Deprecation Notice」のもの(2026年10月29日に確認)
import json
SAMPLES = {
'PA-APIを呼んでいる': (403, '{"__type": "com.amazon.paapi5#AccessDeniedException", "Errors": [{"Code": "AccessDenied", "Message": "Product Advertising API is deprecated. Please migrate to Creators API ..."}]}'),
'売上の要件を満たさない': (403, '{"type": "AccessDeniedException", "message": "Your account does not currently meet the eligibility requirements.", "reason": "AssociateNotEligible"}'),
'トークンの期限切れ': (401, '{"type": "UnauthorizedException", "message": "Authentication token has expired.", "reason": "TokenExpired"}'),
'トラッキングIDの誤り': (400, '{"type": "ValidationException", "message": "Partner tag in the request is invalid or is not mapped to the store associated with your credential.", "reason": "InvalidPartnerTag"}'),
'呼び出しが多すぎる': (429, '{"type": "ThrottleException", "message": "The request was denied due to request throttling. Please verify the number of requests made per second.", "retryAfterSeconds": 60}'),
}
ACTION = {
'PAAPI_DEPRECATED': 'PA-API 5 の終了。Creators API へ移行する(コードとキーの作り直し)',
'AssociateNotEligible': '売上の要件(過去30日間に10件の適格売上)を満たしていない。キーやコードを直しても解決しない',
'TokenExpired': 'アクセストークン(1時間有効)を取り直す',
'InvalidPartnerTag': 'トラッキングID(パートナータグ)と資格情報の組み合わせを確認する',
'ThrottleException': '待ってから再試行する(retryAfterSeconds があればその秒数)',
}
def classify(status, body):
d = json.loads(body)
if d.get('__type', '').startswith('com.amazon.paapi5#'):
return 'PAAPI_DEPRECATED'
if d.get('type') == 'ThrottleException':
return 'ThrottleException'
return d.get('reason', d.get('type', '不明'))
for name, (status, body) in SAMPLES.items():
key = classify(status, body)
print(f'{status} {name:<12} → {key}')
print(f' {ACTION.get(key, "公式の Error Codes で確認する")}')
実行の結果(Python 3)
403 PA-APIを呼んでいる → PAAPI_DEPRECATED
PA-API 5 の終了。Creators API へ移行する(コードとキーの作り直し)
403 売上の要件を満たさない → AssociateNotEligible
売上の要件(過去30日間に10件の適格売上)を満たしていない。キーやコードを直しても解決しない
401 トークンの期限切れ → TokenExpired
アクセストークン(1時間有効)を取り直す
400 トラッキングIDの誤り → InvalidPartnerTag
トラッキングID(パートナータグ)と資格情報の組み合わせを確認する
429 呼び出しが多すぎる → ThrottleException
待ってから再試行する(retryAfterSeconds があればその秒数)
同じ403が2つありますが、上は移行の作業、下は待つしかない状態です。ログに残すときは、HTTPのステータスだけでなくreasonまで記録しておくと、後から区別できます。
要件まであと何件かを数える
「過去30日間」は日が進むごとに区切りが動くため、今日は要件を満たしていても、数日後に古い売上が外れて満たさなくなることがあります。下は架空の出荷日9件で、2つの日付の件数を数えた例です。
# 過去30日間の適格売上の件数を数え、Creators API の要件(10件)まであと何件かを出す
# 売上の日付は説明用の架空のデータ。実際の件数はアソシエイト・セントラルのレポートで確認する
import datetime as dt
REQUIRED = 10 # 公式ドキュメントの要件:過去30日間に10件の適格売上
WINDOW = 30 # 日
# 出荷された日(架空)
shipped = ['2026-09-25', '2026-10-02', '2026-10-03', '2026-10-08', '2026-10-11',
'2026-10-15', '2026-10-19', '2026-10-24', '2026-10-27']
def count_in_window(dates, today):
start = today - dt.timedelta(days=WINDOW)
return sum(1 for d in dates if start < dt.date.fromisoformat(d) <= today)
for today in (dt.date(2026, 10, 29), dt.date(2026, 11, 3)):
n = count_in_window(shipped, today)
left = max(0, REQUIRED - n)
print(f'{today} 過去{WINDOW}日の件数 {n:>2}件 要件まで あと{left}件')
2026-10-29 過去30日の件数 8件 要件まで あと2件
2026-11-03 過去30日の件数 6件 要件まで あと4件
10月29日には8件ありますが、11月3日には9月下旬〜10月初めの売上が区切りから外れて6件に減ります。実際の件数は、アソシエイト・セントラルのレポートで確認してください。API Rates のページでは、Creators API経由の売上は「Link Type Performance」のレポートで見られるとされています。
要件を満たしていない間にできること
- API Rates のページには、アクセスを失っても、SiteStripe などほかのリンク作成ツールは使い続けられると書かれている
- 商品の価格を手で入力して記事に載せるのは避ける(Amazonアソシエイトで価格を載せる時の規約)
- 適格売上の考え方(24時間のセッションと89日)はアソシエイトの24時間と89日で整理している
- 資格情報の発行は、アソシエイトのプライマリアカウントに限られる(Amazon Creators API 資格情報の取得手順)
自動投稿のツールを検討している場合
Creators APIを使うツールは、どれもこの要件の影響を受けます。当サイトが開発・販売しているAmazon Auto Posts(¥9,800・買い切り)も、商品情報をCreators APIで取得するため、過去30日間に10件以上の適格売上が無いと商品データを取れません。OpenAIの利用料も購入代金とは別にかかります。自社製品なので割り引いて読んでいただいて構いませんが、まだ売上が無い段階なら、先にリンク作成ツールで売上を作る方が順番として無理がありません。
この記事で確かめていないこと
- 実際のアカウントで
AssociateNotEligibleが返る瞬間(筆者のアカウントでは再現していない。応答の形は公式ドキュメントの例による) - 「適格売上」に数えられる売上の細かい範囲(Kindle本などの扱い。公式ドキュメントに記載が見当たらなかった)
- 要件を満たした後、何日でアクセスが戻るか(API Rates の「2日以内」の記載以外は確認していない)
まとめ
AssociateNotEligibleの403は、売上の要件(過去30日間に10件の適格売上)を満たしていない合図。コードやキーの問題ではない。アクセスを失った時は429で返ることもある(API Rates)- PA-API 5の「deprecated」の403とは、
__typeとreasonで見分けられる - 30日の区切りは毎日動くので、満たしていても後で外れることがある
本記事は2026年10月29日時点のCreators API公式ドキュメントにもとづく整理です。要件は変わる可能性があるため、利用前にアソシエイト・セントラルで最新の記載を確認してください。

