この頁は英語の原文の参考訳です。内容が異なる場合は原文が優先します。
ガイド
Apple Ads Campaign Management API v5 は 2027 年 1 月 26 日に止まる:Platform API で何が変わるか
Apple は Apple Ads Campaign Management API v5(api.searchads.apple.com/api/v5)を 2027 年 1 月 26 日に止めます。その日から先は呼び出しがエラーになり、報告も予算の変更も停止もできません。v5 を呼んでいる入札の台本・ダッシュボード・外部ツールの接続は、その日に止まります。
後継は Apple Ads Platform API(api.ads.apple.com/v1)です。私たちは自社の接続を移し、切り替える前に自社の App Store の口座で両方を並べて読みました。変わらない所・変わる所・実際の API が文書と違った所を書きます。
変わらないもの
- 認証。同じ OAuth の client credentials、同じ ES256 の client secret、同じ API ユーザーの鍵が、発行し直さずに新しい API で通りました。
- campaign・ad group・keyword の id。v5 で作った campaign は Platform API でも同じ id のままで、id で持っている履歴はそのまま繋がります(自社の口座での結果。自分の口座は並べ読みで確かめてください)。
- 数字。同じ日の支出・表示・タップ・インストールは、両方の API で一致しました。指標の名前(localSpend・impressions・taps・totalInstalls・tapInstalls・viewInstalls)も同じです。
変わるもの
階層が 1 段増え(Org → Ad Account → Campaign)、ほとんどの要求と応答の形がそれに合わせて変わります。
| v5 | Platform API | |
|---|---|---|
| 基底 URL | api.searchads.apple.com/api/v5 | api.ads.apple.com/v1 |
| 口座の文脈のヘッダ | X-AP-Context: orgId=… | X-AP-Context: adAccountId=… |
| 口座の一覧 | GET /acls が名前・通貨・時間帯を返す | GET /acls は id と権限だけ。通貨と時間帯は GET /ad-accounts/{id} |
| campaign・ad group・keyword の一覧 | limit と offset の GET、応答に totalResults | filters と pagination{offset, pageSize} の POST …/query。総数は返らない。削除済みは deleted EQUALS true を付けたときだけ返る |
| 応答の封筒 | { data, pagination, error.errors[] } | { result, pagination, error{code, message, details[]} } |
| campaign の欄 | adamId・countriesOrRegions・dailyBudgetAmount・servingStatus | promotedObjectId・targeting{countryOrRegion, supplySource}・dailyBudget.value・bidStrategy・systemStatus / displayStatus |
| ad group と keyword | defaultBidAmount・pricingModel CPC・keyword の status ACTIVE | bidStrategy.bid{amount, currency}・pricingModel CPT・keyword の status ENABLED |
| 更新 | PUT /campaigns/{id} に { campaign: {…} } | PUT /campaigns/{id} に変える欄だけを包まずに送る。配列は丸ごと置き換わる |
| まとめての書き込み | …/bulk に配列。重複は 200 のまま中に error | …/bulk-create に { items: [{ correlationId, data }], allowPartialSuccess }。成否は 1 件ずつ |
| 報告 | POST /reports/campaigns | POST /reports/apps/campaigns/query。日次は 1 回で 90 日まで |
| 呼び出しの上限 | 文書が薄い | 全応答に RateLimit-Limit / -Remaining / -Reset、429 に Retry-After |
| 総額予算 | v5.6 で消えた | campaign にも無い。総額は日次予算と終了日で組む |
実際の API が文書と違った所
2026 年 10 月に、自社の口座へ読み取りだけを打って確かめました。どれも、文書を信じていたら黙って数字を誤るか、止まっていた所です。
文書: campaign の報告には campaignId の filter が必須。
実際の API: campaignId の filter は 400 INVALID_FIELD_ATTRIBUTE で断られる。filter の欄は id(文字列)。filter を付けなければ、1 回で口座全体が返る。
文書: 行の無い報告は result.rows: [] を返す。
実際の API: rows の無い result: {} が返る。rows.length を読むコードは 0 と言わずに落ちる。
文書: 一覧の応答は総数を持つ。
実際の API: 一覧は offset と pageSize だけを返し、pageSize は頼んだ大きさではなく返した件数。空のページまで読む。
文書: 時刻は UTC。
実際の API: campaign の読みは帯の無い時刻(UTC)を返す。同じ campaign の時刻が、報告の metadata では口座の時間帯にずれて返る。日程は報告ではなく campaign から読む。
文書: ad が配信の単位。
実際の API: v5 から移った campaign は ad 0 本のまま配信していた(/ads/query が空)。どの campaign にも写せる ad があるとは考えない。
文書: どの窓も粒度を付けて頼める。
実際の API: 1 日だけの窓は粒度を付けずに送り、その日の値は日ごとの行ではなく totalMetrics に入る。
広告費を危うくしない移り方
- api.searchads.apple.com を呼んでいる物を全部洗い出す(台本・定期の処理・BI の接続・外部ツール)。外部ツールには切り替えの日を文で確かめる。
- 読みを先に移し、同じ口座で v5 と並べて動かす。支出・インストール・campaign の一覧を日ごとに比べる。私たちは「差が 0 のまま 2 週間」を基準にした。
- 書き込みや支出の取り込みをする 2 本目の接続は作らない。1 つの口座に 2 本つなぐと支出が二重に数えられる。
- 書き込みは口座 1 つずつ、戻せる物から切り替える(戻せる予算の変更、再開できる停止)。
- 期限よりずっと前に終える。私たちは 6 週間前の 2026 年 12 月 11 日を自分の切り替えの日にし、思わぬ事に直す余裕を残した。
1 つめの洗い出しのために、私たちが使った走査の道具を公開しています。コードの中の v5 の呼び出しを見つけ、Platform API で何に変わるかを並べます。Node 18 以上、依存なし、手元の外には何も送りません。v5 の呼び出しが残る間は終了コード 1 を返すので、CI の関門にも使えます。
npx github:y7technology/apple-ads-api-v5-migration path/to/your/codeLoop Marketing ではどうしているか
Loop Marketing は Apple Ads と Google 広告の口座につなぎ、決めた上限の内側で予算と入札を変えます。Apple Ads の接続はすでに両方の API を話し、周回ごとに並べて読んでいるので、切り替えは口座ごとで、元に戻せます。1 月までに社内の台本を移したくなければ、口座をつなぐこともできます。
無料で試せます。始めるのにクレジットカードは要りません。