Overview
Sandbox mode lets you test the full media buying lifecycle — product discovery, campaign creation, creatives, execution, and delivery — without real platform calls or spending real money. Just create a sandbox advertiser and everything else is handled automatically.Safe Integration Testing
Validate your workflows end-to-end before going live. No real bids, no real spend.
Fully Automatic
Create a sandbox advertiser and you’re done. Account routing and environment isolation are handled for you.
How It Works
Sandbox is account-level, not per-request. The seller provisions a dedicated sandbox account, and every request using that account is automatically treated as sandbox. This eliminates the risk of accidentally mixing real and test traffic in a multi-step flow. When you create an advertiser withsandbox: true:
- All discovered accounts for that advertiser are sandbox accounts
- The correct sandbox account is automatically injected into every ADCP call —
create_media_buy,get_media_buy_delivery, andget_products - Delivery and reporting data are fully scoped to the sandbox environment
- Responses contain simulated but realistic data
sandbox: true flag on the advertiser.
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
Once you have a sandbox advertiser, the entire workflow is identical to production. Discover products, create campaigns, add creatives, and execute — all using the same API endpoints. The sandbox routing is completely transparent. For example, executing a campaign: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: "campaign_delivery", ... }) queries bounded Buyer
delivery by explicit date range and own-supply advertiser, campaign, or media
buy scope.
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.