楽天APIが突然動かなくなった話
楽天APIが突然動かなくなった話──2026年2月移行でハマった3つの罠
「昨日まで動いてたのに…」
ある日突然、楽天商品検索APIが wrong_parameter を返すようになった。
{
"error": "wrong_parameter",
"error_description": "specify valid applicationId"
}
アプリIDは正しいはずなのに。コードも変えていないのに。
原因を調べていくと、楽天ウェブサービスが2026年2月に大規模な移行を実施していたことがわかった。
この記事では、その移行で実際にハマった3つの罠を整理する。同じエラーで詰まっている人の時間を少しでも節約できれば幸いだ。
何が起きたか:2026年2月の移行
楽天ウェブサービスは2026年2月10日、セキュリティ・パフォーマンス強化を目的としたインフラアップグレードを実施した。
変更点は大きく3つ:
-
APIドメインの変更(
app.rakuten.co.jp→openapi.rakuten.co.jp) - 認証システムの刷新(既存のAPIキーが非推奨、アプリの再登録が必要)
- 旧APIバージョンの廃止
移行期間は 2026年2月10日〜5月13日。5月14日以降は旧ドメイン・旧APIが完全停止する。
今まさにこのエラーに遭遇しているなら、まだ間に合う。
罠① エンドポイントのドメインとパスが変わった
変更内容
# 旧
https://app.rakuten.co.jp/services/api/IchibaItem/Search/20170706
# 新
https://openapi.rakuten.co.jp/ichibams/api/IchibaItem/Search/20220601
ドメインだけでなく、パス構造とAPIバージョンも変わっている点に注意。
/services/api/ → /ichibams/api/ というパスの変化を見落としがちだ。
対処法
エンドポイントを上記の新URLに書き換える。バージョンも 20170706 → 20220601 に更新すること。
罠② applicationId の形式が変わり、accessKey が追加必須になった
これが一番ハマりやすい罠だった。
変更内容
| 項目 | 旧 | 新 |
|---|---|---|
| applicationId の形式 | 数字のみ(例: 1013710578357821951) |
UUID形式(例: e5e2671a-b454-4e6f-xxxx-xxxxxxxxxxxx) |
| 認証に必要なパラメータ |
applicationId だけでOK |
applicationId と accessKey の両方が必須 |
エラーの症状
// applicationId だけ送った場合
{ "error": "wrong_parameter", "error_description": "accessKey must be present" }
// accessKey だけ送った場合
{ "error": "wrong_parameter", "error_description": "applicationId must be present" }
どちらか片方だけでは動かない。両方必要だ。
対処法
楽天Developer Dashboard(https://webservice.rakuten.co.jp/app/list)でアプリを**再登録**して新しいIDを取得する。旧アカウントで発行したIDは使えない。
取得したら両方をクエリパラメータに含める:
?applicationId=YOUR_UUID&accessKey=YOUR_ACCESS_KEY&...
罠③ GASはReferer/Originヘッダーが必須になった
GAS(Google Apps Script)から叩いている場合、ドメインと認証を直しても 403エラー が返ってくることがある。
403: REQUEST_CONTEXT_BODY_HTTP_REFERRER_MISSING
原因
新APIはブラウザからのリクエストを想定した設計になっており、Refererヘッダーが必須になった。
GASの UrlFetchApp はサーバーサイドで動作するためデフォルトではRefererを送らない。
さらに、楽天アプリ設定の「許可されたWebサイト」に呼び出し元のドメインを登録しておく必要もある。
対処法
コード側: fetchオプションにヘッダーを追加する
var response = UrlFetchApp.fetch(url, {
muteHttpExceptions: true,
headers: {
'Referer': 'https://script.google.com/',
'Origin': 'https://script.google.com'
}
});
楽天管理画面側: アプリ設定の「許可されたWebサイト」に script.google.com を追加する。
ボーナス:レート制限も厳しくなった
新APIは旧APIより制限が厳しい。ループで複数商品を検索する場合、リクエスト間隔を1.5秒以上空けないと 429 Too Many Requests が返ってくる。
Utilities.sleep(1500); // 1000だと429になることがある
動作確認済みの最小構成(GAS)
上記3つの対処をすべて反映した最小構成コードを示す。
var APP_ID = 'YOUR_UUID_APP_ID';
var ACCESS_KEY = 'YOUR_ACCESS_KEY';
function searchRakuten(keyword) {
var endpoint = 'https://openapi.rakuten.co.jp/ichibams/api/IchibaItem/Search/20220601';
var params = [
'applicationId=' + APP_ID,
'accessKey=' + ACCESS_KEY,
'keyword=' + encodeURIComponent(keyword),
'hits=1',
'sort=%2BitemPrice',
'format=json'
].join('&');
var res = UrlFetchApp.fetch(endpoint + '?' + params, {
muteHttpExceptions: true,
headers: {
'Referer': 'https://script.google.com/',
'Origin': 'https://script.google.com'
}
});
var code = res.getResponseCode();
if (code !== 200) {
Logger.log('Error ' + code + ': ' + res.getContentText());
return null;
}
var json = JSON.parse(res.getContentText());
if (!json.Items || json.Items.length === 0) return null;
var item = json.Items[0].Item;
return {
price: item.itemPrice,
url: item.affiliateUrl || item.itemUrl
};
}
まとめ
| 罠 | 症状 | 対処 |
|---|---|---|
| ① ドメイン変更 | wrong_parameter |
エンドポイントを openapi.rakuten.co.jp/ichibams/api/... に変更 |
| ② 認証の二重化 | accessKey must be present |
アプリ再登録し、UUID形式ID + accessKey の両方を送る |
| ③ Refererヘッダー必須 | 403 REFERRER_MISSING |
fetchヘッダーに Referer/Origin を追加、管理画面で許可ドメイン登録 |
| ボーナス | 429 |
sleep(1500) 以上に設定 |
移行期限は 2026年5月13日。まだ旧APIで動いている場合も、5月14日以降は完全停止するので早めの対応を推奨する。
Discussion