list_accounts is not
limited to relationships first provisioned through sync_accounts.
list_accounts returns accounts, and every account has an account_id. A
seller that keeps pending provisioning as account requests
(experimental in 3.3) lists the account only once its request resolves; until
then, read the request in account_requests[] by setting include_requests: true
(or request_ids). Requests page separately from accounts: account_requests_pagination
in the response, requests_pagination in the request. The top-level pagination pages
accounts only.
For upstream-managed account namespaces, list_accounts is not optional discovery polish; it is the namespace discovery contract. The upstream platform owns the accessible account set, so buyers MUST resolve an explicit account_id before the first account-scoped request. If the authenticated credential can access more than one account, the seller MUST expose list_accounts; if it can access exactly one account, the seller SHOULD expose list_accounts returning that singleton so SDKs can auto-select it and still send { "account_id": "..." } on required-account calls. sync_accounts provisioning does not create account-id accounts in 3.0.x unless a future explicit capability declares that mode; if sync_accounts is exposed on these sellers today, use it only for settings updates against an account already identified by account_id.
list_accounts works across all vendor protocols — media buy agents, signals agents, governance agents, and creative agents all return accounts through this same task.
Response Time: ~1s.
Request Schema: static/schemas/source/account/list-accounts-request.json
Response Schema: /schemas/3.3.0-beta.1/account/list-accounts-response.json
Quick Start
List all accounts this agent can operate:Request Parameters
All parameters are optional. An empty request returns all accounts visible to the authenticated caller. Useaccount to re-read one known account by
seller-assigned account_id, or to find buyer-declared accounts by natural key.
Response
Each account includes:
For buyer-declared accounts,
list_accounts MUST return each account’s account_id with its current brand, operator, and attributes. A stateless buyer recovers its account IDs this way after a cold start and sends { "account_id": "..." } on later tasks. A natural-key account filter returns every matching account, so several accounts for one brand and operator are a normal result here, not an ambiguity.
Mapping buyers to listed accounts
When the seller owns the account namespace, the caller usually maps its own buyers onto accounts it already has, and asks for a new one only when none fits. A storefront holding credentials for its ad servers’ sales agents works this way, as does a buyer on a social platform. The caller needs to know what each account is for:- Sellers SHOULD return
account_scopeon every account, andbrandand/oroperatorwherever the scope names them. - When several accounts could serve a buyer, a person chooses. The choice decides who is invoiced, so there is no default order between scopes, and a caller does not pick one automatically.
- When nothing fits, ask for an account with
request_account(experimental in 3.3) orsync_accounts.
Single-publisher cardinality
A seller serving exactly one publisher entity MAY return that entity as the sole account onlist_accounts responses, regardless of calling principal. The “Direct advertiser with single account” example in list-accounts-response.json is canonical for this case — a single-element accounts[] with no pagination envelope at all.
Pagination conformance requiring pagination.has_more: true does not apply when:
paginationis absent entirely (canonical single-account shape), orpagination.total_countis present and ≤ 1
not_applicable in either case. This pattern is conformant; the spec carries no minItems constraint on accounts[] and the single-account example is normative.
Common Scenarios
Poll until account becomes active
Aftersync_accounts returns pending_approval, poll until the account is ready. With request_account, poll the request instead, with request_ids:
Reconcile account status webhooks
After receivingaccount.status_changed, re-read the account snapshot. The webhook tells you which account changed; list_accounts is the source of truth for the current status, setup hints, billing terms, and authorization.
The seller-mediated account provisioning walkthrough shows this invalidation-and-repair pattern in context.
Filter active accounts only
Error Handling
Next Steps
- request_account — Open or change an account (experimental,
account.requests) - sync_accounts — Sync advertiser accounts with a seller
- sync_governance — Sync governance agents to accounts
- Accounts and agents — Billing models, trust models, and authorized operators
- Brand protocol — How vendor agents resolve brand identity from the brand’s
domain