get_status to read it, and open_page with { "page": "buyer_setup" } to open the
Buyer Setup Page for a person. Identity and brands shows the calls
that set the operator identity and read the whole checklist.
If Apostra invites you to a new buyer account, the setup email goes to your named
address. Accept the invitation and verify that email to join. The invitation opens the
account setup path, and your organization still completes its identity, Terms and other
readiness steps before live buying.
Platform go-live
These steps are done once for the buyer account:- confirm the domain of the company that runs the account (Company identity, the
operator_identitycheck); - accept the current Terms (
terms); - resolve any account hold (
account_standing); - choose the payment terms sellers are asked for, before buying from a seller on
consolidated billing (
payment_terms); and - add your billing details: a payer name, street address and country. This step is open
only while you can buy from a seller on consolidated billing and those details are
missing (
billing_details).
Seller-direct transactions need nothing further from Apostra. An account hold blocks every
capability. Confirming or changing the operator does not change your WorkOS organization,
sign-in, invitations, SSO, account membership, billing company, advertiser or brand
domain. Choosing an IU plan is not a buyer-readiness requirement, and the media rate card
used to price a buy is separate from the Organization IU Rate Card.
You can connect destinations, inspect accounts and view mirrored campaigns without
charge. “Can buy now” means the capability is allowed and at least one destination’s own
requirements are complete.
Company identity
The Company identity step asks for the domain of the company that runs the account. Sellers use it to recognize you. Sandbox advertisers do not need this step, so you can create, update or archive a test-only advertiser (sandbox: true) before the identity is
confirmed. Plan, Terms and the other readiness checks still apply. Live advertisers and
real buying need the complete identity. Once you have confirmed the domain and created your
first live advertiser, the domain and the account code lock, and changing them takes an
identity migration through support.
In AdCP terms the company is the operator and each buyer account is one operating
unit of it. Every buyer account is its own unit. There is no “whole company or one team”
choice: an organization with one buyer account has one unit, and an organization with
several accounts has several. Together the domain and the account’s unit code form its AdCP
operator identity:
Apostra generates the code from the account name, so “DM - Restaurant Company Europe”
becomes
dm-restaurant-company-europe. If another account under the same operator domain
already holds the code, Apostra adds a numeric suffix (-2, -3). You can send a shorter
code of your own, such as rce. It must start with a letter or number and use only letters,
numbers, dot, underscore, colon, slash and hyphen, up to 255 characters. Do not use
default, global or primary, which save_buyer_operator refuses, because no account is
the default, global or primary one. Do not use a temporary display name, a seller’s account
ID or an Apostra database ID. The code never changes when you rename the account. The buyer
account name is display text, and the billing company’s name is separate and does not
identify the unit.
An account administrator confirms the identity with save_buyer_operator. Before
confirming, review the other buyer accounts under the same operator domain. Apostra rejects
an exact identity (domain and code) that another buyer account already claims. You can
change the domain or the code after setup, and after connecting storefronts, until an
advertiser account is created or bound under that identity. get_status then reports the
identity as locked. In AdCP 3.2 the operator domain and the operating-unit ID are
advertiser natural-key dimensions, so changing either needs an identity migration, not an
ordinary settings update. Identity and brands
has the preview and confirmation a change needs.
get_status always shows the current operator. A domain suggested from existing account or
work-email information is prefilled, but it is never silently treated as your choice, and
the code you see is the code that is saved.
Accounts created before every account had an operating unit keep working on their existing
buying paths until a unit is assigned. A complete AdCP 3.2 account key needs the unit, so
new AdCP 3.2 account provisioning waits for it.
Accounts under an organization that claims a domain
When your buyer account sits under an organization whose company identity holds a domain, an account that uses that same domain takes its domain proof from the organization:- The account is verified when the organization’s domain is approved or verified by DNS. That approval covers every account under the organization that uses the domain. An approval for the account itself does not count, and staff ask for the approval on the organization instead.
- An account that proved the domain before the organization claimed it keeps that proof.
- Once any account using the organization’s domain has an advertiser, the organization’s domain is locked, because changing it would change every one of those accounts’ identity at sellers.
- An account that uses a different domain, or whose organization has not saved a company identity, confirms and proves its own domain.
adagents.json, which belongs to
seller authorization, and buyer setup does not require brand.json. See
Which domain is which for how a domain is approved.
Seller-history co-op
The operator identity also holds whether the account joins the seller-history co-op, how an account takes part in the data co-op of section 6.3 of the Terms of Service. It starts off. An account administrator changes it withsellerHistoryCoop on save_buyer_operator. What a member shares and gets,
and how leaving works, is on that page.
If a call needs Buyer Setup
Product discovery and other new buying operations are refused with HTTP409 and the error
code BUYER_SETUP_REQUIRED when the account has no confirmed operator identity that is not
the platform’s own. This is a correctable account task, not a seller outage. The refusal
carries these details:
get_status first. When operatorIdentity.usableForBuying is false, an account administrator
can call save_buyer_operator with the real operatorDomain, and optionally a short
operator_unit code such as { "id": "rce" }. When locked is true, follow the support
action get_status returns instead, unless the account has no unit yet (operator_unit is
null), which the same call can still assign.
Apostra never substitutes interchange.io for a missing buyer operator, because that would
combine unrelated buyers under one seller-side account. A buyer with no registered domain
gets this refusal and is not given a default operator. If a legacy profile explicitly holds
the platform domain, the request is refused the same way with details.reason: "platform_operator_not_allowed". Replace it with your organization’s operator domain.
A seller account that cannot be opened because a company account has no approved
complete-key account is also reported as BUYER_SETUP_REQUIRED, with details.reason: "complete_key_account_setup_required"; see
Seller accounts and the account key.
Changing or confirming the operator affects new discovery and account provisioning. It does
not rewrite existing transactions. A historical media buy keeps using the exact seller
account recorded when it was created, for status, creative re-sync, update, cancellation and
delivery.
Double-check your media partners
Before you create your first advertiser, setup asks one question: Have you double-checked your media partners? Media partners are managed for the whole company, not advertiser by advertiser. This is a reminder, not a go-live step. It never blocks creating an advertiser, and it shows as done once your company has made a choice on the Media Partners page. In readiness it is themedia_partners check, which is missing until then and complete
after, and is never a blocker. get_status lists it as a recommended next action that calls
open_media_partners_page.
Launch your first campaign
Your first campaign counts as launched once one of its media buys is placed. This is the step after setup, not a setup check, and it never blocks anything. Withinclude: ["setup"],
get_status returns setup.firstCampaign. launched says whether the account has placed a
media buy. Until it has, and once platformReady is true, action is a call to
open_campaigns_page. firstCampaign is null only when it could not be read for that
request, so try again. get_status lists the same step as the recommended next action
first_campaign.
Seller accounts and the account key
A seller holds an account for you, keyed by your brand and operator (and operating unit). Apostra can open that account for you automatically as part of connecting a seller and buying from it, and a direct AdCP agent can ask a storefront for one withsync_accounts.
Who decides your account request
A seller decides the request the same way whichever way it arrives.- A seller that routes accounts to its own sales agent (a Listing whose only source is
that agent) forwards the request, including any
payment_terms, to the agent. The agent approves or rejects it. The seller does not review it in Apostra. The agent must accept the terms you requested or reject the account. A new account the agent offers on other terms is treated as a refusal: it is not activated and waits for you to review the seller’s terms. An existing account the agent keeps on other terms stays usable and shows a warning that names both sets of terms. If the agent cannot take account requests, nothing is created and the request fails withCAPABILITY_NOT_SUPPORTEDand adetails.reasonsuch asaccount_resolution_authority_missing. Retrying does not help until the seller fixes its agent. - Every other seller applies its account approval setting in Apostra. The request is approved automatically or waits for the seller to review it. By default Apostra approves an account that asks for net 60 or shorter terms, prepay, or no particular terms, and a request for longer terms waits for review. See Why approve and map buyers.
status: "pending_approval". On a
storefront’s AdCP endpoint, sync_accounts answers with the account’s own row, with
status: "pending_approval" and a setup message. Call list_accounts on that endpoint to
see the seller’s decision.
Payment terms: per seller and per organization
Payment terms can be requested for one seller account and, separately, for your whole organization. They are two settings with different values.- Per seller account. Each
sync_accountsentry can carry its ownpayment_terms:net_15,net_30,net_45,net_60,net_90orprepay. Omit it to accept the seller’s default terms. The seller accepts the requested terms or rejects the account. It cannot counter-offer or edit them. You can change the terms while the request is pending by sending the same account again, and the seller reviews the new terms. After the seller has accepted or rejected the account, a request naming different terms changes nothing: that row returnsaction: "failed"with the AdCP errorPAYMENT_TERMS_NOT_SUPPORTED, and the account keeps its status and terms. To change terms on an accepted account, agree them with the seller directly. The V3 tools have no per-seller payment-terms field. - Per organization. One choice for the whole organization:
net_15,net_30,net_45,net_60ornet_90.prepayis not an organization-level value. An organization administrator sets it withpaymentTermsonsave_billing, and Apostra asks sellers for these terms when it opens a consolidated-billing account for you. Until you choose,net_60applies andpaymentTermsChosenreadsfalse. Once chosen, the terms can be changed but not cleared:nullis refused.
payment_terms check is incomplete and blocks go-live when you have sellers on
consolidated billing, a seller on consolidated billing shows needs_commercial_setup, and a
buy from it is refused with the payment_terms blocker. Direct-billed sellers and sandbox
accounts are not affected. If you already connected a seller on consolidated billing, Apostra
holds that seller-account setup until you choose, then resumes it automatically.
The choice applies to accounts opened afterwards. An account a seller has already accepted or
rejected keeps that decision and its terms. Longer terms can mean more rejections, because
sellers carry the credit risk on their accounts and some decline longer terms. A seller can
refuse your requested terms, and Apostra then does not retry the request on the seller’s
default terms. Choose payment terms for consolidated billing
and Billing: plan and invoices
cover the calls and what happens after a refusal.
Billing modes
Eachsync_accounts entry names a billing mode: agent (Apostra invoices on your
behalf; nothing more is needed), operator, or advertiser (the storefront invoices your
operator or advertiser directly). operator and advertiser need a billing_entity, the
AdCP BusinessEntity payload with your legal name and, as they apply, tax, VAT or registration
IDs, a postal address, billing contacts and bank details. billing_entity.bank is write-only:
the seller stores it and confirms receipt, and no read returns it. A storefront accepts only
the modes it has published support for. A mode it does not list fails that account’s row with
BILLING_NOT_SUPPORTED, and details.supported_billing lists the modes it accepts.
The account key
After a storefront moves to complete AccountKey mapping, a direct agent uses two kinds of approved account, and theaccount_id says which:
- Company accounts have an
account_idthat startsseller_account_v1_. The seller approved them for your verified buyer organization and an advertiser. Any human or service token currently authorized for that organization and advertiser can use them. - Credential accounts were approved for one credential before the seller moved. Their
account_idstartssf_. They stay available to that exact credential and to nobody else. Another user or service token of the same company does not inherit them, and Apostra does not convert them into company accounts.
account_id alone. An AdCP account is one of two exclusive shapes, never both:
account_id with brand or operator inside account is rejected
before any account lookup. To say which brand you buy for, send the top-level brand
reference AdCP defines, and its domain must match the approved account’s brand.
On a seller in complete-key mode, list_accounts, get_products, get_account_resources,
sync_creatives, create_media_buy, get_media_buys, update_media_buy and
get_media_buy_delivery resolve the same approved account through the lane its account_id
belongs to. An id that starts seller_account_v1_ is only ever looked up as a company
account, and Apostra never retries a failed lookup as a credential account or reads an sf_
id as a company account. A company-account call checks again each time that the account
belongs to your verified organization and is approved by the seller, that the request selects
the advertiser the account is scoped to, and that the credential is a human with Premium or
Admin access to the organization or a write-capable service token for it. A credential
account needs the grant for the calling credential to be active. A call that fails closed
never falls back to another account.
A direct AdCP 3.0 or 3.1
sync_accounts call can still read an approved account that
belongs to its credential, but it cannot create a new account on that older wire format.
Use AdCP 3.2 or later, which carries the full key including the operating unit.
An account grant says whether the seller will transact with you. It does not say whether
Apostra uses that seller for a given advertiser. Turning a seller on for an advertiser is a
separate choice.
Child accounts
An organization administrator can create a Buyer child account under the selected organization with a review and a request. Both tools run in the organization account.- Call
review_buyer_child_accountwith the parent organization’s account id (parentId) and the proposedname. It is read-only and creates nothing. It returns the proposed account (role: "BUYER"), the operator, the parent’scapacity(consumed,remaining,limit,allowedand anydenialReasons), whether the organization’s plan covers a Buyer account (planCoverage, with arefusalthat names the plan it needs when it does not), what changes (accessChanges: parent administrators inherit access to the child, with no new memberships or invitations;otherChanges: no feature flags and no media buys),canRequestand anyblockers.transactionReadinessis alwaysnot_verified. Show the review to the person. - Call
request_buyer_child_accountwith the sameparentIdandnameand a newidempotencyKey(a UUID). Nothing is created until an organization administrator approves the request on the Apostra site. The result isapproval_requiredwith a link to show the person. Repeat the call with the same key and name to read the outcome.
Related
- Identity and brands for the calls that confirm the operator.
- Which domain is which for how a domain is approved.
- Plan and billing for Terms, plan and billing details.