GET /api/v2/buyer/campaigns/:id/workspace
Returns the CampaignWorkspace projection: a presentation-ready view over
Get campaign that assembles phase,
handling, budget, source, media buys, and per-seller creative approval status
into one response. It’s built for a single-call dashboard read — the campaign
drill-in widget uses it — not a substitute for get_campaign, which remains
the source of the raw campaign resource.
Request
Parameters
Response
Returns theCampaignWorkspace for the campaign — the base campaign fields plus
mediaBuys[] and creatives[]. See the getCampaignWorkspace schema in the API
reference for the authoritative response shape and field types; the key fields
are summarized in Sections below. Conditional fields (for example
source, and each media buy’s attentionNote) appear only when they apply to
the campaign.
CampaignWorkspace also declares spend, pacing, outcome, and
recentActivity top-level fields, and dimensions/previewUrl/placements
on each creative — but this endpoint does not hydrate any of them today. They
are simply absent from the response, not falsy or zero.
Review vs. record mode
mode tells the campaign drill-in widget which receipt moment it’s rendering,
and is chosen by the server from the campaign’s phase — it is not a request
parameter. A campaign still in draft (not yet executed / gone live) returns
mode: "review": a plan glance plus a read-only readiness.blockers list of
what still stands between the draft and launch. Every other phase (active,
completed, canceled) returns mode: "record", the ongoing-delivery view.
Only in review mode does this endpoint hydrate readiness, and only its
blockers[] — never nextAction, and attention is always [] here. Each
blocker is { code, message }, derived purely from the campaign’s own media
buys and creatives (no extra lookups):
CREATIVE_NOT_READY— one per creative that isn’treadyon every media buy it’s attached to:rejected,in_review,missing, or not yet resolvable on any single occurrence blocks the whole creative (approved on one media buy does not clear a still-unresolved or rejected occurrence on another; a creative with no seller-review status yet counts as not ready, never as clear)NO_MEDIA_BUYS— the campaign has no media buys yet
readiness.blockers is always present as an array in review mode — an empty
array means the campaign is ready to go live, not that readiness wasn’t
checked. In record mode, readiness is absent entirely, as before.
Sections
creatives[].readiness is the worst status across that creative’s
sellerReviews[] — rejected outranks in_review/missing, which outranks
ready. A creative with no seller reviews yet omits readiness entirely
rather than defaulting to ready. mediaBuys[] and creatives[] are drawn
directly from the campaign’s own media buys, so this is a single-fetch read —
no extra round-trip per media buy or creative.
Errors
404 NOT_FOUND— no campaign with this ID is visible to the authenticated account.
Related
Get campaign
The full campaign resource this projects from
List campaigns
Compact summaries across campaigns
Get media buy status
Poll live ADCP status
Campaign overview
Fields, lifecycle, and concepts