この頁は英語の原文の参考訳です。内容が異なる場合は原文が優先します。

ガイド

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)、ほとんどの要求と応答の形がそれに合わせて変わります。

v5Platform API
基底 URLapi.searchads.apple.com/api/v5api.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、応答に totalResultsfilters と pagination{offset, pageSize} の POST …/query。総数は返らない。削除済みは deleted EQUALS true を付けたときだけ返る
応答の封筒{ data, pagination, error.errors[] }{ result, pagination, error{code, message, details[]} }
campaign の欄adamId・countriesOrRegions・dailyBudgetAmount・servingStatuspromotedObjectId・targeting{countryOrRegion, supplySource}・dailyBudget.value・bidStrategy・systemStatus / displayStatus
ad group と keyworddefaultBidAmount・pricingModel CPC・keyword の status ACTIVEbidStrategy.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/campaignsPOST /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 に入る。

広告費を危うくしない移り方

  1. api.searchads.apple.com を呼んでいる物を全部洗い出す(台本・定期の処理・BI の接続・外部ツール)。外部ツールには切り替えの日を文で確かめる。
  2. 読みを先に移し、同じ口座で v5 と並べて動かす。支出・インストール・campaign の一覧を日ごとに比べる。私たちは「差が 0 のまま 2 週間」を基準にした。
  3. 書き込みや支出の取り込みをする 2 本目の接続は作らない。1 つの口座に 2 本つなぐと支出が二重に数えられる。
  4. 書き込みは口座 1 つずつ、戻せる物から切り替える(戻せる予算の変更、再開できる停止)。
  5. 期限よりずっと前に終える。私たちは 6 週間前の 2026 年 12 月 11 日を自分の切り替えの日にし、思わぬ事に直す余裕を残した。

1 つめの洗い出しのために、私たちが使った走査の道具を公開しています。コードの中の v5 の呼び出しを見つけ、Platform API で何に変わるかを並べます。Node 18 以上、依存なし、手元の外には何も送りません。v5 の呼び出しが残る間は終了コード 1 を返すので、CI の関門にも使えます。

npx github:y7technology/apple-ads-api-v5-migration path/to/your/code

走査の道具とメモ(GitHub) →

Loop Marketing ではどうしているか

Loop Marketing は Apple Ads と Google 広告の口座につなぎ、決めた上限の内側で予算と入札を変えます。Apple Ads の接続はすでに両方の API を話し、周回ごとに並べて読んでいるので、切り替えは口座ごとで、元に戻せます。1 月までに社内の台本を移したくなければ、口座をつなぐこともできます。

無料で試せます。始めるのにクレジットカードは要りません。