Manager Accounts

Amazon Ads API v1 - unified ManagerAccounts endpoints

Documentation: https://advertising.amazon.com/API/docs/en-us/api-spec-v1-manager-accounts Specification: https://d1y2lf8k3vrkfu.cloudfront.net/openapi/en-us/dest/AmazonAdsAPIALLManagerAccountsContract_prod_3p.json

Three routes, no delete in the contract:

POST /adsApi/v1/create/managerAccounts POST /adsApi/v1/query/managerAccounts POST /adsApi/v1/update/managerAccounts

This family is not about ad products, so no adProductFilter appears anywhere in it, unlike the campaigns, ad groups, ads and targets siblings.

The query declares no required member at all: an empty body is a valid request and returns every manager account the caller can see.

maxResults on the query starts at 10, so a smaller value is a rejected body rather than a shorter page. Both write routes take up to 10 accounts per call and answer a multi-status indexed the same way.

Warning

create and update write into the manager account hierarchy: they are not reads, and a body that reaches them creates or changes an account. Only the query is exercised by the probes.

The package keeps the legacy manager account reader as ad_api.api.ManagerAccounts, a different class in a different package; from ad_api.api import ManagerAccounts keeps resolving to that one.

Note

The legacy reader is not deprecated and should not be: it exposes managerAccountId, which the v1 ManagerAccount schema does not carry, plus associate and disassociate, which have no v1 route. Create is not interchangeable either: the legacy method takes managerAccountName and managerAccountType, while the v1 body carries displayName, currencyCode, timeZoneIana, industryVertical, accountUsageType and businessDetails.

class ad_api.api.v1.ManagerAccounts(account='default', marketplace: Marketplaces = Marketplaces.EU, credentials=None, debug=False)

Amazon Ads API v1 - unified ManagerAccounts endpoints

Three routes, no delete in the contract:

POST /adsApi/v1/create/managerAccounts POST /adsApi/v1/query/managerAccounts POST /adsApi/v1/update/managerAccounts

This family is not about ad products, so no adProductFilter appears anywhere. The query declares no required member at all: an empty body is a valid request and returns every manager account the caller can see.

Both write routes take up to 10 accounts per call and answer a multi-status with success[] and error[] indexed the same way.

Alongside this class the package keeps the legacy manager account reader as ad_api.api.ManagerAccounts; the two live in different packages and do not shadow each other.

query_manager_accounts(body: dict) → ApiResponse

Amazon Ads API v1 - Query Manager Accounts (operationId: QueryManagerAccount)

Request Body [All optional]
managerAccountIdFilter (dict) | include (list<string>) : 1..100 identifiers
maxResults (int) : 10..100, default 100
nextToken (string) : token to navigate to the next page
Returns
managerAccounts (list<ManagerAccount>) : 0..100 | displayName (string) | managerAccountId (string) | currencyCode (CurrencyCode) | timeZoneIana (TimeZoneIana) | industryVertical (IndustryVertical) | accountUsageType (AccountUsageType) | businessDetails (BusinessDetail)
nextToken (string)

maxResults starts at 10: a value below that is a rejected body, not a smaller page.

create_manager_accounts(body: dict) → ApiResponse

Amazon Ads API v1 - Create Manager Accounts (operationId: CreateManagerAccount)

Request Body [Required]
managerAccounts (list<ManagerAccountCreate>) : [required] 1..10 | displayName (string) : required on create | currencyCode (CurrencyCode) | timeZoneIana (TimeZoneIana) | industryVertical (IndustryVertical) | accountUsageType (AccountUsageType) | businessDetails (CreateBusinessDetail)
Answer

207 MultiStatus: success[] carries the created accounts with their index, error[] the index and reason of the refused ones.

This route creates an account in the manager hierarchy. It is not a read and not something to fire to see what happens.

update_manager_accounts(body: dict) → ApiResponse

Amazon Ads API v1 - Update Manager Accounts (operationId: UpdateManagerAccount)

Request Body [Required]
managerAccounts (list<ManagerAccountUpdate>) : [required] 1..10 | managerAccountId (string) : the account to change | displayName (string) | currencyCode (CurrencyCode) | timeZoneIana (TimeZoneIana) | industryVertical (IndustryVertical) | businessDetails (UpdateBusinessDetail)
Answer

207 MultiStatus, indexed the same way as create.

businessDetails uses the Update variant of each nested object, so a body copied from create is not interchangeable here.