Skip to content

Unity Advertiser Public API: what changed in September 2026

The Advertiser Public API replaced /advertise/v1 in September 2026. New base URL, UUID app ids, microdollars and renamed fields, plus a migration order.

Published
6 min read
6 min read
Русский
Українська
On this page
  1. What changed in September 2026
  2. New base URL and path prefixes
  3. App ids: campaignSetId becomes applicationId
  4. Money: microdollars instead of dollar strings
  5. Routes that moved or merged
  6. Renamed and changed fields
  7. What was removed
  8. Auth and roles after the move
  9. Migration order
  10. Doing this in DarkCore Ramet
  11. What the docs don’t say

In September 2026, Unity’s Advertiser Public API replaced the Advertising Management API at /advertise/v1. If your scripts or tools still call the old API, you need to migrate: the base URL, app ids, money format and many field names are different. The docs we read give no shutdown date for the old API, so schedule the work instead of postponing it.

What changed in September 2026

According to Unity’s What’s new in User Acquisition page, the Advertiser Public API replaces the Advertising Management API (/advertise/v1), and existing integrations should migrate. Unity’s API campaign management page calls /advertise/v1 the previous version of the advertiser API. It says the new API manages apps, campaigns, bids, source bids, ROAS goals, budgets, creatives and creative packs, and that you find it in the dashboard under Settings > API management.

The sections on URLs, ids, money, routes, fields, removals and migration order come from Unity’s Advertiser API migration reference. The page shows “Last updated 2 months ago” instead of a date, and its lists of routes and fields are selected examples. Read it in full before you port code.

New base URL and path prefixes

The host stays services.api.unity.com. The base path changes:

Environment New base URL
Production https://services.api.unity.com/ads/advertiser
Staging https://staging.services.api.unity.com/ads/advertiser

Two path changes follow. The prefix /advertise/v1 becomes /public/v1, and the segment apps/{campaignSetId} becomes applications/{applicationId}. The page gives this example of a new route:

https://services.api.unity.com/ads/advertiser/public/v1/organizations/{orgId}/applications/{applicationId}/campaigns

App ids: campaignSetId becomes applicationId

The old app id was campaignSetId, a 24-character hex string. The new one is applicationId, a UUID. Campaign, creative and creative pack ids stay 24-character hex and do not change.

Store a mapping from each legacy app id to its new applicationId before you port anything else. Every later step uses it. The page also tells you to verify whether creative ids survive a re-upload, so do not assume they do.

Money: microdollars instead of dollar strings

Money moves from dollar decimal strings to microdollars: integers, where 1 USD is 1,000,000. ROAS goals change shape as well.

Value Legacy New
Amount "2500.20" "2500200000"
Bid "0.201" 201000
ROAS goal: "12.34" (percent string) target: 0.1234 (decimal ratio)

The page’s examples show a string for an amount and a plain integer for a bid, so confirm the type of each field in the reference before you send it. A small converter for the legacy values:

// Legacy dollar string -> microdollars as an integer string.
// Round after multiplying so floating point leaves no fraction.
const toMicros = (usd) => String(Math.round(parseFloat(usd) * 1_000_000));

toMicros("2500.20"); // "2500200000"
toMicros("0.201");   // "201000" (Unity's example shows the bid as the number 201000: use Number() if the field needs it)

Routes that moved or merged

  • GET …/apps becomes GET …/applications.
  • The per-app campaign list becomes an org-wide GET …/organizations/{orgId}/campaigns?appIds={applicationId}.
  • The four bid routes (cpi-bids, source-bids, roas-bids, event-optimization-bids) become one PATCH …/campaigns/{campaignId}/bids.
  • Budget cap and targeting get PATCH …/campaigns/{campaignId}/budget-cap and PATCH …/campaigns/{campaignId}/targeting.
  • Assigning and unassigning creative packs become list-based: PATCH …/assign-creative-pack and DELETE …/unassign-creative-pack.
  • Reads of bids, budget, targeting and packs move to GET campaign?includeFields=….

The bids route needs care. It replaces the full bid set of that type, so you send the complete array, and [] clears the set. A script that raises every bid by 10% has to read the current set first, change each value, and send all of it back.

Renamed and changed fields

Legacy New Note
store store + platform platform is required
goal optimizationType installs becomes cpi, eventOptimization becomes appEventConversion
scheduleStart / scheduleEnd start / end
enabled paused meaning is inverted
biddingStrategy bidConfigurationMethod automated becomes auto
cpiBids[] manualBids[]
sourceBids[] manualSourceBids[]
eventOptimizationBids[] appEventBids[]

Watch enabled in particular. enabled: true becomes paused: false, so a straight rename would flip the state of every campaign you write.

What was removed

The page lists these as removed or without an equivalent:

  • There is no delete-application endpoint. Unity’s page says application deletes are currently disabled platform-wide.
  • Retention bids and eligibility are deprecated, and ROAS no longer needs eligibility.
  • Several targeting fields are gone: limitedAdTracking, connectionType, screenSize, screenDensity, allowedDevices and osMax.
  • The app field adomain is gone.
  • The squareVideo creative type is not supported.

Auth and roles after the move

Per the migration reference, HTTP Basic with a service account key still works, and a Bearer JWT (issuers unity and ads) is also accepted. The credential is the same, but the required roles differ. The page says a 403 with the same credential means a missing role grant, not a request bug.

Unity’s page on locating advertiser credentials adds that only Organization Owners or Organization Managers can create service accounts and secret keys. The dashboard shows the Secret key once. We cover the role names and a checklist in Unity Ads API 403 Invalid Credentials: how to fix it.

Migration order

The migration reference suggests this order:

  1. Config: host and path prefix.
  2. Apps, including the legacy-to-new id mapping.
  3. Attribution.
  4. Creatives.
  5. Creative packs.
  6. Campaign-management lookups.
  7. Campaigns: create with optimizationType and start only, then PATCH the rest.
  8. Bids, in microdollars.
  9. Budget, in microdollars.
  10. Targeting.
  11. Creative pack assignment.
  12. Reads.

The page also gives a staging base URL, listed above, if you want to run steps against it first.

Doing this in DarkCore Ramet

DarkCore Ramet works through the official Unity API. You connect Unity orgs with a service account key or your own Unity ID, pick apps and geos once for bulk launch, and change bids, daily budgets or pause state across campaigns with bulk edit. Each change is read back from Unity before it counts as done and is logged with who made it.

What the docs don’t say

  • Any deprecation, sunset or end-of-life date for /advertise/v1. The pages we read say the new API replaces the old one and that you should migrate. They give no timeline for when the old API stops working.
  • Rate-limit values and the exact auth header. The API campaign management page links to Unity’s get started page for auth and rate limiting, and that page does not state them either. We state no API rate limit.
  • Whether creative ids survive a re-upload. The migration reference says to verify.

In DarkCore Ramet

Keep your Unity Ads bulk work on the official API

DarkCore Ramet works through the official Unity API. Connect a Unity org with a service account key or your own Unity ID, then launch and edit in bulk.

All articles