LLM コーディングエージェントのパブリッシャー公開 API 移行リファレンス
Monetize Manage API (legacy)から Ads 統合プラットフォームのパブリック API にクライアントのインテグレーションを移行する LLM コーディング エージェントのリファレンス。
読み終わるまでの所要時間 41 分最終更新 1ヶ月前
オーディエンス:このファイルは、LLM コーディングエージェント (クロードコードまたは Unityの古い機能である「Monetize」からクライアントのインテグレーションを移行するタスク Manage API」()を新しい Unity Ads パブリッシャー Public API に追加 (/monetize/v1/...).自己完結型エンティティブロックに分割されます。各ブロック _何が変更_され、_何をする_かを示します。概念モデル変更を読む グローバル変更セクションは、まずすべてのブロックに適用されます。/ads/publisher/public/v1/...
このファイルの使用方法(エージェントの手順)
- この散文ではなく、2 つの契約を真実のソースとして扱います。古い機能 =
.新規 =
ads-selfserve/src/servers/http-internal/openapi/public-v1.yaml.ads-unified-platform/openapi/publisher/platform-public-v1-routes.yaml - 指定した順序でエンティティブロックを 1 つずつ移行します (「アプリケーション」→「プレースメント」→「 組織レベルリスト)。ブロックは、依存するブロックがコンパイルまたはパスするまで開始しません。
- レガシー機能が 🚫 No equivalent (同等の機能 なし) の下にリストされている場合、 エンドポイント。停止し、オープンな質問としてユーザーに提示します。最も重要な例 は eCPM ターゲットで、新しい API にはありません。
- 各ブロックの後に、フィールドテーブルごとにフィールド名を再マップする。フィールドは持ち越されないと仮定する テーブルに "unchanged" と表示されていない限り変更されません。
概念モデルの変更 (最初にお読みください)
データモデルはフラット化され、プロジェクトからアプリケーションへと中心が変更されました。
古い機能モデル (ネストされたプロジェクト中心)
組織└──── プロジェクト(両ストアにまたがる、coppa + adsProvider あり) └── ストア (Apple | Google) (URL パス内) └── 広告単位 (adFormat、スキップ/ミュート/バナー設定はこちら) └── Placement └── eCPM ターゲット (地域ベースの下限価格)
新しいモデル(フラットなアプリケーション中心)
組織└── アプリケーション (プラットフォーム + ストアが 1 つずつ、プライバシー + テストモードあり) └── 配置 (adFormat + adFormatConfigurations をここに配置。ターゲットなし)組織└── テストデバイス (新規、組織スコープ付き)
すべてのトランスフォーメーションを推進する4つのシフト
# | Shift | 移行の結果 |
|---|---|---|
| 1 | プロジェクト → アプリケーション | |
| 2 | Ad-Units removed | 広告単位のリソースがありません。広告単位レベルの設定(スキップタイマー、ミュート、バナー更新)が |
| 3 | eCPM ターゲットを削除 | 🚫 新しいパブリック API には同等のものはありません。 |
| 4 | バッチ → 個別操作 | 古い機能によるプレースメントと広告ユニットの一括作成/更新(マップ/配列)。新しい API はリクエストごとに 1 リソースです ( |
グローバル変更(すべてのエンドポイントに適用)
アスペクト | 古い機能 | 新規 |
|---|---|---|
| Host | | |
| パスプレフィックス | | |
| 完全な例 | | |
| Auth | HTTP Basic(サービスアカウントキー) | HTTP の Basic は引き続き機能します。Bearer JWT ( |
| Org id | パスの |
パス内の |
| パス内のプライマリ ID | | |
| 書き込みでサポート | 🚫 を削除しました |
| 読み取りでサポート | 配置リストでのみ |
| アーカイブ | パッチボディの |
専用 |
レート制限の変更(クライアント側のバックオフ前提条件の更新)
古い機能 | New | |
|---|---|---|
| IP 単位の上限 | 5/秒、4000/30分 | 40/s |
読み取り ( | (グローバルでカバー) | 20/s + 8000/hour |
作成 ( | 5/秒、1000/30分 | 1/秒 + 60/時間 |
アップデート ( | 5/秒、1000/30分 | 1/s + 200/hour |
マスター エンドポイント マップ
古い機能操作 | 古い機能ルート | 新規操作 | 新規ルート | ブロック |
|---|---|---|---|---|
| | | | A |
| | | | A |
| | | | A |
| | | | A |
| | — | 🚫広告単位リソースなし | B |
| | | | C |
| | | | C |
| | | | C |
| | | | C |
( によるアーカイブ | | | | C |
( によるアーカイブ解除 | | | | C |
| | | | D |
| | — | 🚫 eCPMターゲットを削除 | E |
| — | — | | | F (新規) |
| — | — | test-device CRUD | | G (新規) |
ブロック A - プロジェクト → アプリケーション
変更内容
- リスト/作成/読み取り/更新したリソースは、プロジェクトではなくアプリケーションになります。
- 読み取り/更新が org () の下にネストされるようになりました。 スタンドアロン
/organizations/{orgId}/applications/{applicationId}ではなく、/projects/{projectId}(Unity App ID) によってキー付けされます。applicationId - 古い機能プロジェクトでは両方のストアが使用され、新しいアプリケーションはシングルプラットフォームです。分割 (Transform rules を参照)。
- はなくなりました。
adsProviderは enum 文字列からブーリアンに変更され、 新しいcoppaブーリアンを持つmixedAudienceオブジェクト。privacy
エンドポイントマッピング
古い機能 | 新規 |
|---|---|
| |
| |
| |
| |
フィールドマッピング — 作成 (createProject → CreateApplicationPublicDto)
古い機能フィールド | 新しいフィールド | ノート |
|---|---|---|
| | unchanged |
| — | 🚫 Dropped 送信しません。同等のものはありません。 |
| | Transform: |
| — | | 新規。 |
| | プラットフォームごとのアプリケーションに分割。Transform ルールを参照してください。 |
| — | | 新規、必須。 アプリケーションターゲットのストアから取得します。 |
| — | | 新規、任意 |
| — | | 任意 — 既存のプロジェクトに関連付ける |
| — | | 任意 — 新しいプロジェクトを作成 + 関連付ける。デフォルトはアプリケーション名 |
フィールドマッピング — 更新(updateProject → UpdateApplicationPublicDto)
古い機能フィールド | 新しいフィールド | ノート |
|---|---|---|
|
— | 🚫 dropped | .
| | create と同じ Transform。更新時に両方の |
| | アプリケーションごとに 1 プラットフォーム |
| — | | now updatable |
| — | | new; |
フィールドマッピング — 反応(project/projectDetail → ApplicationPublicResponseDto)
古い機能フィールド | 新しいフィールド | ノート |
|---|---|---|
| | 反応に アプリケーション |
| | unchanged |
| | enum→boolean |
| — | 🚫 行ってしまった |
| | single store |
| — | アプリケーション反応にない |
| — | 🚫 行ってしまった |
| — | | new |
Transform 規則: 1 つの古い機能プロジェクト → N つのアプリケーション
stores.applestores.googlePOST /applicationsplatform: iOSstore: AppleAppStorestoreId: <apple.storeId>platform: Androidstore: GooglePlaystoreId: <google.storeId>projectName: <project.name>projectIdprojectId例
古い機能 — プロジェクトの作成 (両方のストア):
POST /monetize/v1/organizations/3573617062594/projects{ "name": マイゲーム "adsProvider": "unity", "coppa": "non_compliant", "stores": { "apple": { "storeId":"1479198816", "storeUrl": "https://apps.apple.com/..." }, "google": { "storeId": "com.unity.trashdash", "storeUrl": "https://play.google.com/..." } }}
新規 — 2 つのアプリケーションが作成され、1 つのプロジェクトの下にグループ化されます。
POST /ads/publisher/public/v1/organizations/3573617062594/applications{ "name": マイゲーム "platform": "iOS", "store":"AppleAppStore", "storeId":"1479198816", "privacy": { "coppa": false, "mixedAudience": false }, "projectName":マイゲーム}// → response.projectId = "5a8591dd-..."; reuse it for the second app:POST /ads/publisher/public/v1/organizations/3573617062594/applications{ "name": マイゲーム "platform":"Android", "store":"GooglePlay", "storeId": "com.unity.trashdash", "privacy": { "coppa": false, "mixedAudience": false }, "projectId":"5a8591dd-..."}
Block B — Ad-Units (広告ユニット) → 削除 (アプリケーション + 配置に展開)
🚫 同等のリソースなし
広告単位のエンドポイントはありません。を呼び出すすべてのクライアントコードを削除します。
(,
, , , , ).
…/projects/{projectId}/[stores/{storeName}/]adunits…getAdUnitsByProjectgetAdUnitsByProjectStorecreateAdUnitsupdateAdUnitsgetAdUnitspatchAdUnits広告単位データの送信先
古い機能の広告単位フィールド | 新しいホーム |
|---|---|
| 配置 |
| 配置 |
| 配置 |
| 🚫 直接同等なものはありません。クライアントが人間に依存している場合は、人間に提示します。 |
ネスト | アプリケーション (Block C) の下にプレースメントを個別に作成します。 |
移行アプローチ: 各古い機能の広告単位をプレースメントの_グループとして扱い、
adFormat_。古い機能の広告単位を使用していたすべての配置について、
アプリケーション (その広告単位のストアと一致するもの)、広告単位のを
配置、広告単位の管理設定の配置のへの折りたたみなどです。
adFormatadFormatConfigurationsブロック C — プレースメント(アプリケーションごと)
変更内容
- パスがになりました。ストア/広告単位はありません。 セグメント。
…/applications/{applicationId}/placements[/{placementId}] - 個々の操作がバッチマップ/配列に置き換わります。
- 各配置で**が必要**です(広告単位のプロパティでした)。
adFormat - 新しい****オブジェクトはプレイヤー/管理者設定を保持します。形状は
adFormatConfigurations(リワード型/インタースティシャル/バナー)。adFormat - 配置ボディから eCPM が削除されます(ブロック E を参照)。
targets - 識別子:古い機能はナメクジ(
placementId)で、新しい配置^[\da-zA-Z_-]+$は UUID。人間が判読できるスラッグは、**id**として個別に返されます(keyから生成)。name - アーカイブ/復元は専用のオペレーションであり、ボディ フラグではありません。
- 配置ごとの更新は(完全置換)であり、
PUTではありません。PATCH
エンドポイントマッピング
Intent | 古い機能 | 新規 |
|---|---|---|
| 作成 | | |
| リスト | | |
| 取得 | | |
| 更新 | | |
| アーカイブ | | |
| 解凍 | | |
フィールドマッピング — リクエスト(addPlacements[]/patchPlacementObject → PlacementPublicRequestDto)
古い機能フィールド | 新しいフィールド | ノート |
|---|---|---|
| | unchanged |
| — | 🚫 ID を選択しなくなりました。サーバーは UUID |
| — | | 新規および必須。古い機能の親広告単位の |
| — | 🚫 削除しました。送信しません。ブロック E を参照してください。 |
|
— | not accepted on write | .
| — | 代わりに |
| — | | 新機能 プレイヤー/管理者設定。下の形状を参照してください。 |
adFormatConfigurations形状 (adFormat)
- rewarded ():
RewardedConfigurations(報酬名、必須)、name(報酬値、 必須)、value(adminSettings)。AdminConfigurations - インタースティシャル ():
InterstitialConfigurations。adminSettings - バナー():
BannerConfigurations、adminSettings(必須)。bannerRefreshRate - :
AdminConfigurations,allowSkip,allowSkipInSeconds,videoPlayableSkipInSeconds,closeTimerDuration,tapsToClose,muteVideo,disableVideoControlsFade.useCloseIconInsteadOfSkipIcon
フィールドマッピング — 反応 (placement → PlacementPublicResponseDto)
古い機能フィールド | 新しいフィールド | ノート |
|---|---|---|
| | 古い機能のナメクジスタイル ID は、新しい |
| — | | 新規 標準 ID。URL パスに記述します。 |
| | unchanged |
| | ISO-8601 に準拠。アクティブ時に |
| — | アプリケーションごとの反応ではない(組織リスト、ブロック D) |
| — | 🚫 を削除しました |
| — | | new |
⚠️ **IDを再マップすることは最もリスクの高いステップです。**クライアントが古い機能の配置を維持していた場所 slug を識別子として使用する場合、パス操作の新しい UUIDを格納する必要があります。 はidとして存続します。key検索のビルドと永続化は、 移行。legacy placement slug → new {id, key}
例
古い機能 — 広告単位でのバッチ作成:
POST /monetize/v1/projects/{projectId}/stores/apple/adunits/{adUnitId}/placements[ { "name":"Rewarded Placement", "id": "rewarded_01", "addTargets": [ { "value":18.5, "type": "global" } ] } ]
新規 — 配置ごとに1つの作成(ターゲットの削除、adFormat + 設定の追加):
POST /ads/publisher/public/v1/organizations/{orgId}/applications/{applicationId}/placements{ "name": "リワード配置", "adFormat": "rewarded", "adFormatConfigurations": { "name": "coins", "value":100, "adminSettings": { "allowSkip": true, "allowSkipInSeconds":5, "muteVideo": false } }}
ブロック D — 組織プレースリスト
変更内容
同じ意図(組織内のすべてのプレースメントのリスト)ですが、反応形状が異なります。eCPMは
gone; 、、およびが追加されます。古い機能は になります。
(人間が判読できるキー)。アクティブな iOS/Android プレースメントのみが返されます。
targetsadFormatplatformstoreIdidplacementIdエンドポイントマッピング
古い機能 | 新規 |
|---|---|
| |
フィールドマッピング (placementWithGameId → OrganizationPlacementPublicResponseDto)
古い機能フィールド | 新しいフィールド | ノート |
|---|---|---|
| | 人間が判読できるキー( |
| | unchanged |
| | unchanged (文字列、例: |
| | unchanged |
| — | 🚫 を削除しました |
| — | |
新 | 規
| — | | 新規; iOS と Android のどちらでもない場合の |
| — | |
新 | 規
ブロックE - eCPMターゲットを削除
🚫 新しいパブリック API には同等のものはありません
すべての古い機能ターゲット エンドポイントはなくなり、この API に代わるものはありません。
、 、 、 、 、 および
placements/ad-units の / フィールド。
getTargetscreateTargetsgetTargetDetailpatchTargetdeleteTargettargetsaddTargetsエージェント指示:
- これらを新しいエンドポイントにマップしないでください。パスを作成しません。
…/targets - すべての配置作成/更新ペイロードから /
targetsを削除します。addTargets - クライアントのインテグレーションがこのAPIを介してeCPMの下限価格を管理する場合は、これを停止してレポートする 人間がブロックするギャップ — eCPMターゲット管理は新しいパブリッシャーではカバーされない パブリックAPI。帯域外で処理する必要がある(例えば、異なるUnityサーフェスや製品を使用) decision)。明示的にフラグを立てます。価格ロジックを提示せずに黙ってドロップしないでください。
ブロック F — アプリケーションテストモード (NEW)
古い機能と同等なものはありません。新しいエンドポイント:
- →
GET …/applications/{applicationId}/test-mode{ id, testMode } - と
PATCH …/applications/{applicationId}/test-mode{ "testMode": "forceAll" | "forceOff" }
アプリケーション反応にもがあります(ブロック A)。Migration is additive only(移行は付加的のみ):
古い機能 API にはポートするものはありません。クライアントがテストモードコントロールが必要な場合は、これらを公開します。
testModeブロック G — テストデバイス (NEW)
古い機能と同等なものはありません。Org-scoped CRUD (組織スコープ付き CRUD):
- —
POST …/organizations/{orgId}/test-devicesCreateTestDevicePublicDto{ name*, advertisingId*, platform? } - — リスト(任意の
GET …/organizations/{orgId}/test-devicesフィルター)platform - — 購入
GET …/organizations/{orgId}/test-devices/{testDeviceId} - —
PATCH …/organizations/{orgId}/test-devices/{testDeviceId}UpdateTestDevicePublicDto - — 204
DELETE …/organizations/{orgId}/test-devices/{testDeviceId}
testDeviceIdplatformAndroidiOSOSXWindowsLinuxWebGLWindows_StorePS4PS5XboxOnetvOSSwitchVisionOS推奨される移行アルゴリズム (エージェントの決定的な順序)
- 構成: ベースホストをにスワップし、パスプレフィックスを「
…/ads/publisher」→「/monetize/v1」にします。 Basic 認証を維持します。すべての/public/v1パラメーターを削除します。dryrun - アプリケーション(ブロックA):古い機能プロジェクトごとに、ストアごとに1つのアプリケーションを作成。Transform
enum→boolean、drop
coppa、setadsProvider/platform/store。グループ化storeId/projectName.projectIdマップを持続します。legacy projectId+store → new {applicationId, projectId} - **Placements(Block C):古い機能配置ごとに、マップから所有アプリケーションを解決し、
(古い機能の広告単位) +
adFormatを使用して個別に作成 (広告単位/管理者設定から)。adFormatConfigurations/targetsをドロップします。**持続addTargets.legacy placement slug → new {id, key} - **再ポイント識別子:**格納された古い機能配置ナメクジをパスの新しい UUID に置き換えます。 ops (ディスプレイの
idを保持)。格納されているkeyベースのアプリケーション参照をprojectIdに置き換えます。applicationId - アーカイブセマンティクス: パッチコールを
archive:true/false/DELETEに置き換えます。PATCH …/restore - リスト/読み取り形状: フィールドテーブルごとの反応解析の更新(esp. org リスト — ブロック D)。
- **eCPMターゲット(**ブロックE): ターゲットコードを削除し、ユーザーにレポートします。
- 任意新機能: テストモード (F) とテストデバイス (G) は、必要な場合のみ接続します。
- レート制限: 上限は 1 秒未満と 60 時間未満で作成され、20 秒未満で読み取ります。
検証チェックリスト (移行後に実行)
- リクエスト パスに、
/monetize/v1、/projects/{、/adunits、または/stores/は含まれません。/targets - 、
adsProvider、addTargets、またはtargetsを含むリクエスト ボディはありません。archive - は、すべての場所でブーリアンです (決して
coppa/"compliant"ではありません)。"non_compliant" - 配置作成/更新のたびに、有効なと
adFormatが送信されます。 その形式と一致します。adFormatConfigurations - 配置パスパラメーターは、古い機能のナメクジ () ではなく、新しい UUID
keyを使用します。id - 2つのストアを持つ古い機能プロジェクトでは、1つのを共有する2つのアプリケーションが生成されていました。
projectId - eCPM ターゲット管理は、(クライアントがターゲット管理を使用している場合) サポートされていないギャップとしてユーザーに認識されました。
クイック リファレンス:🚫削除済み/同等なし(移行または製造しない)
- すべての広告単位エンドポイントと広告単位リソース。
- すべての eCPM ターゲットエンドポイントと /
targetsフィールド。addTargets - プロジェクトのと
adsProvider。maxCaps - および
dryrunクエリパラメーター。showarchived - クライアントによって選択された配置 ID(サーバが UUID を割り当てます。スラッグは として保持します)。
key