Overview
Sandbox mode supports the platform’s no-spend test workflows when they use a sandbox account and a reviewed provider test context. It does not make every provider account or every execution request non-deliverable on its own.Supported integration testing
Validate supported workflows with a sandbox account and the provider test context they require.
Account-scoped routing
Supported account resolution and synchronization retain the sandbox setting for the selected account.
How It Works
Sandbox is account-level, not per-request. Supported account resolution and synchronization retain the sandbox setting for the selected account. Keep a dedicated sandbox account separate from production accounts. When you create an advertiser withsandbox: true, supported platform account
resolution and synchronization use sandbox context. A request that names an
account_id relies on that account’s own sandbox semantics. The advertiser
flag alone does not prove that an arbitrary provider account cannot reserve,
deliver, or otherwise act on a request.
Use the provider’s documented test account and the reviewed provider test
context before executing a test. The platform preserves its sandbox context for
supported flows; it does not replace the provider’s account controls.
Seller ad-server setup
For an ad-server-backed storefront, Apostra also needs a dedicated advertiser/account inside the seller’s ad server. Keep it separate from every production advertiser. The seller can either:- Create or designate a sandbox advertiser/account and assign it to Apostra service account, then map it as the storefront’s sandbox advertiser; or
- Grant Apostra service account permission to create advertisers so Apostra
can provision
Apostra - Sandboxautomatically.
For protocol-level details on how sandbox mode works, see the AdCP Sandbox documentation.
Creating a Sandbox Advertiser
Via API
Setsandbox: true in the create advertiser request body:
Via UI
When creating an advertiser in the dashboard, toggle the Sandbox switch before saving. Sandbox advertisers are shown with a badge in the advertiser list for easy identification.Using Sandbox
Supported sandbox workflows use the same API endpoints as production. Before executing one, confirm that the selected account is a sandbox account and that the provider’s reviewed test context supports the operation you intend to run. For example, executing a campaign:account_id, the provider action
still relies on that account’s sandbox semantics and the provider’s reviewed
test context. A sandbox advertiser flag by itself does not prove that every
provider response is simulated or that an arbitrary provider account cannot
reserve, deliver, or spend.
Media Company V3 preview
Every Media Company can create a sandbox Advertiser, Campaign, Creative, Proposal request, and staged MediaBuy through/mcp/v3 without switching to a Buyer account. The preview exposes
save_advertiser, save_campaign, save_creative,
save_creative_collection, request_proposals, and save_media_buy in the
Seller account.
No entitlement or beta grant is required for this no-spend workflow. Live
Media Company-managed campaigns use the same tools but are a separate,
customer-scoped rollout controlled by the amc-campaign-management flag.
Live operations retain normal approval, creative, financial, publisher, and
inventory-source readiness checks; the flag does not bypass them. Giving
clients access to operate their own campaigns is separate and uses the
storefront-self-service-buyers rollout. Neither flag expands an Advertiser’s
durable Storefront scope.
This path is deliberately confined:
save_advertisercreates a no-spend Advertiser withsandbox: true; when the live rollout is enabled for the organization, omittingsandboxcreates a live Advertiser;- the advertiser and campaign remain owned by the authenticated Media Company;
- Campaign creation is pinned server-side to the company’s own Storefront,
even when
sellerIdsis omitted; and - Proposal requests can address only that Storefront;
- Proposal acceptance and direct MediaBuy staging reject foreign qualified Proposal and Product IDs; and
- existing MediaBuy updates require every line item to resolve durably to that Storefront.
search and get can inspect an authorized sandbox or live
Advertiser, Campaign, Creative, Proposal, and MediaBuy. Opening the company’s
own Seller with include: ["products"] returns its wholesale Products,
including any eligible signal_targeting_options; pass a selected Signal
through that Product’s targetingOverlay when staging the MediaBuy. After launch,
get_delivery({ report: "live_campaign_delivery", ... }) reads bounded delivery
live for one exact own-supply campaign. It accepts the campaign ID and date
range, not warehouse metrics, dimensions, other filters, or pagination. The
stored aggregate contract remains available as campaign_delivery.
Seller Accounts also get a route-backed organization workspace
selector. Inventory keeps the existing seller experience; Campaigns lists the
account’s sandbox Advertisers, plus its live own-supply Advertisers once the
account is enrolled in amc-campaign-management, and opens the shared
Campaigns and Creative Pages. The native roster read stays fail-closed to
sandbox for an unenrolled account; it does not grant general Buyer REST
access. Two additional read-only compatibility calls hydrate those shared
Pages: Campaign listing requires an explicit, durably bound advertiserId in
either environment and removes Campaigns outside own supply; the promoted
Creative list requires the same bound Advertiser and exposes no attach or
generation actions. Advertiser, Campaign, and Creative detail, mutations, and
reporting remain V3-only for the Seller Account. Agents appears in the same
selector when the organization separately has Agent workspace access. Within a
browser session, returning to Campaigns restores the last Advertiser that was
successfully resolved from that roster; an invalid or foreign Advertiser ID
returns to account scope instead.
Creating an Advertiser or requesting Reporting from the Campaigns workspace
stages a Murph request, so the guarded V3 flow remains the only write and
delivery path — the workspace’s ”+ Add advertiser” control stages a
sandbox-creation prompt today; an enrolled account can ask Murph directly to
create a live Advertiser. Marketplace, Connections, Buyer Setup, and unbound
production Advertisers remain outside this preview.
Independent Buyer Accounts and their existing sandbox workflows are unchanged.
Validate an Agent in sandbox
Agent validation now uses the Agent’s publicvalidationSkill and the ordinary
V3 Buyer workflow. Resolve the exact Agent with get({ kind: "agent" }), select
a profile from its returned plan, fetch the versioned skill, and follow that
skill without substituting legacy test wrappers or generic V2 api_call
orchestration.
Run the profile with sandbox inputs first. The workflow uses the same typed V3
objects and operations a Buyer uses: Advertiser, Campaign, Creative, Proposal,
MediaBuy, and bounded delivery reads. It preserves normal confirmation before
mutations and never treats a simulated run as certification.
After the run or an intentional stop, read the same Agent with
include: ["validationRuns", "diagnostics"]. Pass an exact
validationRunId to inspect its bounded trace. If the run selected Products
from a Source, open that Source’s diagnostics as well. Report which assertions
were observed, failed, unavailable, or unexercised, and report cleanup
separately.
Historical Murph test-run records remain readable during the bounded rollback
window, but they are no longer a launch surface or readiness authority. Agent
validation evidence and Source diagnostics are the canonical history.
Filtering Sandbox Advertisers
Thesandbox field is returned on every advertiser response. Use the optional sandbox query parameter to filter:
Key Constraints
Next Steps
Advertiser API Reference
Full schema for
POST /advertisers, including the sandbox field.AdCP Sandbox Docs
Protocol-level details on how sandbox mode works in AdCP.
Quickstart
Get up and running with Apostra API.