Skip to main content
PUT /api/v2/buyer/advertisers/{advertiserId} Updates an existing advertiser through the raw v2 API. All body fields are optional — send only what you want to change. Brand domain, an already-known country scope, currency, and reporting time zone can change only before the first campaign or seller-account binding. A legacy advertiser whose country scope is still unknown may classify it once even after first use. sandbox is fixed at creation.

In the app

In Apostra, advertiser settings open as one Task titled Advertiser settings. Open it from Settings on an advertiser’s row on the Advertisers Page, from the pencil beside the advertiser in the left rail, or from Edit advertiser under Settings → Setup & readiness. An agent opens it with open_add_advertiser and the advertiser’s advertiserId. The Task lets you change the name, description, channels, and, until the advertiser has a campaign or linked seller account, the reporting time zone. The brand domain, countries, currency, and environment show as read-only, each with a short reason. Until the advertiser has a campaign or linked seller account, the brand domain, countries and currency can still be changed through this endpoint or an agent; after that they are fixed. The environment is fixed when the advertiser is created. Save changes saves the advertiser, opens the Advertisers Page, and closes the Task. Cancel closes it without saving. If the Advertisers Page can’t open, the Task stays open with the error and a Done button. Once the Task closes, it doesn’t come back when you reopen that chat. Creating an advertiser works the same way, except the confirmation stays open so you can switch into the new advertiser or add another, until you choose Done. Buyer-owned labels are managed separately through V3 MCP save_advertiser, not this REST endpoint. See Dimensions and labels.

Request

curl

Parameters

Response

Returns the full advertiser resource with the applied changes. brandCountriesKnown: true confirms that brandCountries is authoritative. An empty authoritative list is global, not a scope with zero countries. A legacy advertiser may return brandCountriesKnown: false with an empty list; setting brandCountries classifies that scope once, even after first use.
linkedAccounts is additive (existing links stay), but utmConfig and frequencyCaps replace their entire existing set. Pass an empty array to clear, or omit the field to leave it untouched.
If a legacy advertiser has no settings row and its terminal (completed, cancelled, or archived) campaign history spans currencies, include primaryCurrency with the intended currency when you add its brand. The value must match one of the historical campaign currencies. Active campaigns and currently linked seller accounts remain authoritative and still block conflicting currency choices; do not create a duplicate advertiser to bypass that conflict.

Errors

  • 400 VALIDATION_ERROR — invalid field value.
  • 409 CONFLICT — brand domain, an already-known country scope, currency, or reporting time zone is changed after the first campaign or seller-account binding, or legacy currency evidence cannot be resolved safely. Classifying a still-unknown legacy country scope is the one country-scope exception.
  • 404 NOT_FOUND — advertiserId does not exist or is not visible to the authenticated account.
See Errors for the full error contract.
The canonical UI keeps brand, an already-known country scope, and currency out of the edit form. It offers a one-time country classification for a legacy advertiser whose scope is still unknown. Create another advertiser from the UI when known identity values must differ.

Advertiser tasks

All advertiser operations

Advertiser overview

Fields, lifecycle, and concepts

Get advertiser

Read the current state first

Delete advertiser

Archive when done