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」のレポートで見られるとされています。

要件を満たしていない間にできること

自動投稿のツールを検討している場合

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公式ドキュメントにもとづく整理です。要件は変わる可能性があるため、利用前にアソシエイト・セントラルで最新の記載を確認してください。