API v2 Changelog
All notable changes to the Interchange API v2 are documented here.5.678.0 — September 23, 2026 at 2:12 PM UTC
- V3 campaign launch failures now show the real classified reason (and, where the platform’s message is safe to display, the specific text) instead of a bare “execution failed” — a debug-mode error wrapper was silently dropping that information before it reached the buyer.
- Connections and other media-partner pages no longer wait for third-party logo rehosting before showing content.
- Sellers can now re-admit a rejected buyer account intake. A new
POST /api/v2/storefront/account-mappings/reviews/:intakeId/readmitendpoint transitions a rejected intake back topending_reviewso the seller can review it again - useful when a rejection was made by mistake. - V3 tool responses now surface more detail by default.
save_signalsuccess text includes the signal ID and source ID so follow-up calls can reference the exact record without a separate search.save_media_buycreate responses include the seller, flight dates, and budget; update responses include the resulting flight; and update errors include the attempted flight dates. Error messages fromsave_advertiser,save_connection, andsave_wholesale_productnow include the relevant entity ID and operation context, making it easier to diagnose what was attempted when a write fails. Signal discovery now runs with debug mode enabled so diagnostic detail is available when discovery fails.
5.677.1 — September 23, 2026 at 1:12 PM UTC
- Fixed the API access page showing a generic “internal error” when a parent account admin was not enrolled in a sub-account’s WorkOS organization. The error is now correctly classified as an access issue (HTTP 403 with a clear message) rather than an opaque internal server error.
- Cancelling or deleting a media buy that is still waiting for seller approval now withdraws the seller’s approval request, so the seller can no longer approve it and it can never go live afterwards. Previously the cancel failed and left the request approvable, so a buyer who cancelled a buy could still see it booked with the seller’s ad server once the seller approved it. The buy reads canceled only once the request is withdrawn; if the seller approved it moments before your cancel arrived, the cancel is refused and you can retry it once the buy reaches the seller’s ad server. Nothing to change on your side. Sellers: a buy the buyer cancelled drops out of your approvals queue and shows as revoked.
- Cleaned up the wording buyers’ agents see when Meta or TikTok has no real price guidance to offer. It now reads “no price guidance available for this cpm product” instead of the awkward “cpm AUD (no price guidance available)“.
5.676.2 — September 23, 2026 at 12:13 PM UTC
- Updated the documentation site’s content to the Apostra brand: company/product references, API and asset URLs (
interchange.io→apostra.com), and the “Use Apostra”/“Build with Apostra” guide filenames now match the rest of the docs.
5.676.1 — September 23, 2026 at 11:45 AM UTC
- Launching a v3 campaign with a Meta media buy that has no geographic targeting now shows the specific reason (“Meta requires explicit geographic targeting…”) instead of a generic “The ad platform rejected the request as invalid.” message.
5.676.0 — September 23, 2026 at 11:08 AM UTC
- Buyers on MANAGED storefronts can now declare
operatororadvertiserbilling on async_accountsentry, not onlyagent.POST /api/v2/buyer/storefront-accounts/syncand thesync_buyer_storefront_accountstool accept abilling_entitypayload on any entry — legal name, tax/VAT/registration ids, postal address, billing contacts, and (optionally) bank details — andoperator/advertiserentries now require one. - A storefront only accepts the billing modes it has declared support for; requesting one it doesn’t returns HTTP
400BILLING_NOT_SUPPORTEDnaming the supported modes.billing_entity.bankis write-only: you can send it to provide payment coordinates, but it is never echoed back in async_accountsorlist_accountsresponse.billing: 'agent'behavior, and entries that omitbilling_entityfor agent billing, are unchanged. - Sellers see no new protocol or UI surface. A buyer’s
billing_entityflows through the same account-grant record sellers already read foragentbilling. - Monetization: no billable surface, no packaging change.
- Rollout - gate: none, atomic launch. The new billing modes and
billing_entityfield are additive; a buyer that never sends them sees no behavior change. Release check: after deploy, anoperator/advertiserentry with a completebilling_entityagainst a storefront that supports it returnsaction: created/updated, one against a storefront that doesn’t returnsBILLING_NOT_SUPPORTED, and no response body carriesbilling_entity.bank. - Meta’s
get_media_buy_deliveryadapter method now accepts host-attestedprotocolOptions.servedAdcpVersionand forwards it into the underlying task, matching the signature of Meta’s other four AdCP methods. No customer-visible behavior changes today — the delivery-read task has no 3.2 branches to gate yet — but this closes the last Meta signature-parity gap so a subsequent per-behavior slice can add 3.2 read-path branches without touching the adapter boundary. - Meta and TikTok product discovery and proposal responses no longer show a $0 or invented CPM floor price. Neither platform gives us a real price signal at discovery time, so a floor we authored ourselves was never more than a guess - and for any non-USD account it was already showing as zero. We now leave floor price and price guidance out of the response entirely when we don’t have a real number to back it, rather than showing a number that could be mistaken for platform guidance.
- Snap wholesale
get_productsnow stamps per-productext.scope3_execution_readiness(ready_for_execution / setup_required / input_required / selection_required / inventory_unavailable) when the buyer’s Snap ad account is connected, matching Meta’s and TikTok’s existing wholesale behaviour. Buyers on Snap wholesale can now see at discovery time whether a product will succeed atcreate_media_buyor requires setup.
5.675.1 — September 23, 2026 at 10:33 AM UTC
- Library cards and rows now show file-type thumbnails and preview state, while buyer Creative images use their approved source image when available.
5.675.0 — September 23, 2026 at 10:21 AM UTC
- Open Buyer Account Mapping directly from the Buyers workspace. Murph now uses the public guide when explaining where buyer mappings are managed.
- Fixed a bug where budget and other field updates sent to AdsWizz/Mediamark (and any ESA seller that responds synchronously) were confirmed by the seller but not applied locally - leaving the media buy showing its old values indefinitely. Updates now correctly apply after seller confirmation.
- The TypeScript starter can generate types from the live tool schemas. Run
npm run types:generateto write one input type per tool intosrc/generated/tools.ts, so incompatible type or enum changes and newly required fields can become compile errors instead of rejected calls.
5.674.0 — September 23, 2026 at 9:27 AM UTC
- The Media Partners page now groups partners into Active, Needs connection, and Available, and opens with Ready for buying selected. Choose All to include partners that are not yet open for buying; partners that need a platform connection remain visible.
5.673.0 — September 23, 2026 at 8:43 AM UTC
- First-party emails now use the Apostra name, legal identity, and visual design from the scheduled launch time. Buyer invitations have shorter setup copy.
- Buyer waitlist submissions now receive a confirmation email after the form is accepted. The message confirms that the request is under review without implying that an account or access already exists.
5.671.0 — September 23, 2026 at 7:17 AM UTC
- Show sellers recorded reasons for an RFP response, including a safe link to the relevant source diagnostics when pricing configuration is incomplete.
5.670.0 — September 23, 2026 at 5:53 AM UTC
- Seller Library documents and Creative Library items now open in a previewer while the browse list stays in place.
5.667.0 — September 23, 2026 at 4:04 AM UTC
- Restrict Apostra’s developer skill to canonical first-party contract sources, scan its exact source tree for trust-boundary drift before publication, and bind the pre-publication policy result to the exact source digest, including extensionless text and executable assets, without treating an unbound public provider result as release qualification.
- Give an Account Admin an owner task for attesting the endpoint of an exact current observed Sales revision. Fixture setup now reports a safe reason when it has no eligible option. Attestation records endpoint provenance only: it does not register a fixture, certify an Agent, start a test, or enable spend.
5.665.0 — September 23, 2026 at 3:08 AM UTC
- Uploading to the Library after an earlier session no longer fails with “Could not start the private upload”.
- Responses now show only sent or imported proposals. Uploaded Library files stay in Documents until you save one as a response from its detail view by linking it to a brief.
- In V3
get_delivery, group campaign delivery by a Buyer Account label withdimensions: ["labels.<key>"]. Reports use current campaign and advertiser labels, so relabeling reorganizes historical delivery; no setup change is required.
5.664.0 — September 23, 2026 at 2:10 AM UTC
- Buy mobile web display, CTV, and other coherent inventory combinations in one campaign by defining channel groups with
save_campaign. Assign every selected product or proposal to achannelGroupId; Interchange creates separate media buys for each group, seller, and settlement currency, and reports delivery by the same group. Presets cover display, online video (OLV), mobile web display, mobile web OLV, and CTV, or you can define a custom group with AdCP channel, property type, device type, and format values. - Channel groups preserve the buyer’s declared inventory intent, but Interchange does not yet filter discovery, validate selected products against a group, or translate the group into package targeting. Clients must verify seller product evidence before assigning a group. See Channel groups for examples and reporting queries.
- Library now identifies a private upload that did not finish as incomplete and lets you retry the original file, instead of leaving the document at Inspection pending.
- Launching a v3 campaign with a Meta media buy staged without geographic targeting now returns a clear reason (“Meta requires explicit geographic targeting…”) instead of an opaque, unclassified failure with no diagnostic detail.
- When transaction validation finds an active inventory source that is not linked to a registered Agent, Interchange now opens Source diagnostics for that exact source. You can create or attach the Agent there, then retry validation.
5.663.0 — September 23, 2026 at 1:46 AM UTC
- Exact document reads return fenced code blocks and inline code again. The search tokenizer strips them so ranking works on prose; reads shared that projection, so request examples were removed from the surface agents use to learn call shapes.
- When you open the Advertisers page, advertiser cards now load campaign counts without downloading every campaign or waiting for every brand logo. A logo that is still loading uses the existing monogram fallback. There is nothing to change on your side.
- Switching accounts now stays inside the application instead of loading the whole page again. The account menu and page content wait for the new account together, which removes the brief flash of the previous account. Wide Advertisers tables also fit the available page width.
- The Sellers page now starts loading seller data immediately even when its optional configuration service is slow. The Connections page also loads its initial data with fewer requests.
- When OAuth authorisation for a sales-agent source fails, the credentials page now shows the specific safe error instead of a generic failure. Interchange also waits until it has observed the Agent before offering implementation registration. Nothing changes on the agent server.
- The Library now opens as a list grouped by category, and the grid view stays one click away.
- build-with-apostra 1.0.3 corrects the instructions so agents take request and response shapes from the tool schemas before writing calls or parsers. It also separates authentication and account readiness from operation authority. This prevents local fixtures from confirming an assumed shape that the server can reject.
- Use the full public Git URL when adding the Apostra developer marketplace in Codex, Claude Code, or another compatible coding agent. Existing installations do not need to change.
5.662.0 — September 22, 2026 at 10:54 PM UTC
- The advertiser picker in Murph’s left rail now edits any advertiser directly from its row: hover a row and a pencil opens that advertiser’s settings without changing which advertiser you are working in. From the keyboard, the up and down arrows choose an advertiser and the right arrow edits it. The roster no longer repeats itself as a second list of nav rows under the picker, each row labels its identifier as
ID: …rather than showing a bare string, and the picker’s search field drops its magnifying-glass icon. On a storefront, the setup checklist count in the rail header reads4 of 14with a chevron instead of underlined text, so it looks like the link into the checklist that it already was. - Murph now keeps chat available while you use Sellers and Creative Engines, and Creative Engines loads and scrolls correctly. Nothing to change on your side.
5.661.1 — September 22, 2026 at 10:31 PM UTC
- The Library now explains what each tab is for and what to do next, and its rail item no longer shows the materials-teaching count.
5.660.1 — September 22, 2026 at 8:32 PM UTC
- Advertisers with a confirmed no-country-qualifier brand scope can now manage sellers after selecting at least one channel. Legacy advertisers can classify an unknown country scope once, and the form now explains exactly which setup is required for seller availability.
5.660.0 — September 22, 2026 at 8:24 PM UTC
- The released Apostra Platform Terms of Service v4.1 are available at their permanent versioned URL. Existing product terms and acceptance requirements are unchanged.
5.659.0 — September 22, 2026 at 8:12 PM UTC
- When you attach a canonical Creative in the Creative Library, Interchange now checks its declared media details against the campaign’s product options. It shows whether the Creative fits, needs named adaptations, or lacks the facts needed to confirm a fit; if no option fits, attachment stops and identifies the closest option and the mismatch. Attachments with insufficient facts proceed unconfirmed. Existing attachments and legacy seller-specific formats do not change. An attachment records the required adaptations but does not create them. The Creative is forwarded as-is for seller review.
- The Add button in the Library is no longer covered by the widget’s collapse control. Header actions in Listing, Murph escalations, Release notes, buyer Catalog list and detail, Run-rate, and Marketing email operations also remain clear of it.
5.657.0 — September 22, 2026 at 7:23 PM UTC
- Event (measurement) sources now report
managedBy(buyerorseller) andsellerIdon every read — viaGET /api/v2/buyer/advertisers/:advertiserId/event-sources,sync_event_sources, and themeasurement_sourcenoun (search,get, andsave_measurement_sourcein the v3 agent surface). Buyer-created sources reportmanagedBy: "buyer"withsellerId: null. These fields are read-only for now; a later release will populatesellerIdonce a source is provisioned on a seller account.
5.656.1 — September 22, 2026 at 6:11 PM UTC
- Media buy reads now show newly attached and removed creatives immediately instead of returning a stale creative list for up to five minutes.
5.656.0 — September 22, 2026 at 5:53 PM UTC
- The agent that sells for your storefront is now called the storefront agent in the docs glossary and concept guide. It was previously documented as the Merchandising Agent; the glossary keeps that name as a pointer so older links and screenshots still make sense. Nothing changes in how the agent works or in your account.
5.655.2 — September 22, 2026 at 5:08 PM UTC
- Sales-adapter dispatch now forwards the host-attested AdCP 3.2 negotiation to the underlying adapter tool call. Previously,
adapterCallOptions()in the storefront SDK platform adapter propagatedcandidatePropertyCoverageVersionbut silently droppedservedAdcpVersion, so Meta’s 3.2 code branches (and any other adapter’s 3.2 wiring) never executed for storefronts that route through a sales adapter. Direct-dispatch storefronts were already correct; this change closes the sales-adapter parity gap. - Tidied two pages that sit on their own outside the app shell. The page you land on from a “connect this adapter” link now keeps one frame the whole way through — asking for a key, waiting for the provider, and explaining a dead end all look like the same page rather than three different ones — and its buttons take the standard size. The page for accepting an invitation to an organization uses the standard loading state on its Accept button.
- TikTok wholesale
get_productsnow stamps per-productext.scope3_execution_readiness(ready_for_execution / setup_required / input_required / selection_required / inventory_unavailable) when the buyer’s TikTok ad account is connected, matching Meta’s existing wholesale behaviour. Buyers on TikTok wholesale can now see at discovery time whether a product will succeed atcreate_media_buyor requires setup.
5.655.1 — September 22, 2026 at 4:42 PM UTC
- The Apostra company page now uses the brand’s uppercase display treatment for its “Better advertising” headline and gives the supporting headings the same visual weight as the copy beneath them.
5.655.0 — September 22, 2026 at 4:28 PM UTC
- Tidied the standalone pages that sit outside the app shell. The hosted “add a payment method” page and the media-company confirmation form now use the shared panel, so their headings, spacing, and buttons match every other page. The referral page is now two tabs — make a referral, then see what became of the ones you have made — instead of one long column, and an empty list says so properly rather than trailing a grey sentence. The referral form’s fields now show what to type in them, the company-confirmation form no longer shows an empty country box, and the note about what an AMC account includes now sits with the option it describes.
5.654.0 — September 22, 2026 at 4:06 PM UTC
- Account administrators can inspect commercial identity, correct operator domains, look up public branding and follow Seller domain reviews from a text-only v3 MCP client. Identity reads expose saved-brand provenance and verification status in text; identity writes return audit receipts.
- Use
identityContract: "confirmed-v1"on operator identity saves and existing advertiser brand corrections. Before replacing an operator identity or advertiser brand, requestpreview: true. Review the change with the person requesting it, then repeat withoutpreviewand with its confirmation token. An unconfirmed replacement in this contract returns an error and saves nothing. Earlier save payloads retain their existing behaviour. Advertiser creation can require public branding withpublicBrand: trueand a stable idempotency key. See Identity and brands for the calls and verification steps. - Domain text and public branding do not grant access or prove ownership. Editing or publishing
brand.jsonand completing Buyer AAO OAuth proof are outside this text-only flow; the guide explains the supported human follow-up.
5.653.1 — September 22, 2026 at 3:32 PM UTC
- Embedded sales agent 1.45.2: bound update media buy idempotency replay.
5.653.0 — September 22, 2026 at 3:23 PM UTC
- Allow a directly authenticated organization account admin to attest a current observed Sales revision’s existing source endpoint without changing the revision or its deployment history.
5.652.3 — September 22, 2026 at 3:02 PM UTC
- Codex and Claude Code installation now uses the published Apostra package. The developer guide verifies account access with a read-only call and keeps interactive sign-in separate from a deployed application’s runtime identity.
- Budget changes made while a media buy is waiting for seller approval now update the pending request. If the request cannot be updated, the buyer’s original budget is kept.
5.652.2 — September 22, 2026 at 2:35 PM UTC
- Media-buy updates now use a new idempotency key for each submitted change, so a previous failed response cannot be replayed over a later retry with the same budget.
5.652.1 — September 22, 2026 at 2:04 PM UTC
- Seller analytics compares buyers side by side again, and a screen reader can reach every part of it
- Buyer signals and recent runs are tables once more — one row per buyer or run, every comparable figure in its own column — so two buyers can be read against each other without scanning down two cards. When the table is wider than the widget, its scroll area is now reachable from the keyboard and announced by name, so the off-screen columns are not stranded.
- Each widget title is a heading, so heading navigation lands on it, and a policy’s own headings sit underneath in order. Metric names read as written names rather than machine keys: the latency tile says “Average processing latency” instead of “Average Processing Latency Ms”.
5.652.0 — September 22, 2026 at 1:24 PM UTC
- Murph’s left navigation is rebuilt on the Apostra design system. Sections that showed a collapse chevron now actually collapse — previously several of them drew the chevron but ignored the click. The setup checklist drops its per-section progress fractions, keeping the single “N of M steps” summary at the top, and its rows now read at the same size as the rest of the rail.
5.651.3 — September 22, 2026 at 1:01 PM UTC
- Creative Library now explains how to save a draft with a canonical format or a seller product format, and shows when Creative Engines is unavailable.
save_campaignresponses now include flight dates, budget, phase, and seller IDs in the text content so the full campaign state is visible without a separate read. When a campaign launch fails, each per-buy error now includes the exact ESA request payload that was sent, making it easier to confirm what targeting, pricing, and format options were passed.save_media_buystaging calls now also pass debug mode through so diagnostic detail is available when media buy staging fails.- The standalone pages behind the account menu and the organization settings — your account, account settings, notification preferences, connected apps, user API keys, member management, advertisers, activity, reporting, connections, billing sections and partner fleet — are rebuilt on the Apostra design system. Same pages, same actions, same data; what changes is the typography, spacing and controls, which now match the rest of the product instead of carrying the older look.
- A filter that sits above a list no longer repeats its own name as a label — the chosen value already says what it filters.
- More of the product now uses the new design system: the API keys page, the account page, member management, advertisers, connected apps, notification preferences, organization settings, buyer agents, campaign creative assets, and the “page not found” / “access denied” / error screens. Nothing about how any of them work has changed — the same information, the same actions, the same permissions. A newly created API key is still shown once and never again.
5.651.2 — September 22, 2026 at 12:22 PM UTC
- Media buys sent to legacy-format sellers no longer fail when a creative is pinned to a specific format option. After the storefront translates the package’s format options into the seller’s legacy formats, the pinned creative had nothing to match against and the request was rejected with “cannot select a valid creative wire shape … did not provide one unambiguous legacy format reference”. The pin is now matched exactly against the legacy format it was created from, and a creative that narrows to a single legacy format is trafficked under it. A pin that names a format the product does not offer still fails, with a message that says so.
5.650.2 — September 22, 2026 at 9:57 AM UTC
- Credential alerts now name the connected platform, explain what has stopped, and link directly to Settings > Connections to reconnect it.
5.650.1 — September 22, 2026 at 9:35 AM UTC
- Fresh Demo Storefront chats reach the Teach entry without waiting for unrelated setup navigation.
5.650.0 — September 22, 2026 at 9:18 AM UTC
- Buyers can now open the campaign Creative Library composer and assemble a creative from their uploaded assets even when Creative Engines is not enabled. Pick assets, fill format slots, and save the assembly draft without connecting or calling an engine. Generation remains available only to Buyer Accounts with Creative Engines enabled; when it is unavailable, the composer labels those controls and links to setup guidance.
5.649.0 — September 22, 2026 at 8:36 AM UTC
- Buyers can now use Nielsen DMA codes or familiar DMA names when saving campaign and media-buy targeting. If a name could mean more than one DMA, the response lists the matching codes to choose from.
5.648.0 — September 22, 2026 at 7:09 AM UTC
- Organize advertisers and campaigns with buyer-owned dimensions and labels. Create governed or open dimensions, use the built-in
tagsdimension, and find labeled or unlabeled records through the V3 MCP tools. Buyer Accounts can have up to 20 dimensions, each dimension up to 200 values, and each advertiser or campaign up to 50 labels. Existing advertisers and campaigns start unlabeled. Nothing to change on your side.
5.647.0 — September 22, 2026 at 6:28 AM UTC
- An advertiser can now hold more than one catalog, and your agent can read and write each one directly on the V3 agent surface. A catalog is the AdCP Catalog object: a product feed or other typed list your advertiser sells from. Find them with
search(kind: "catalog"), read one withget(kind: "catalog", id, advertiserId: "12345"), and addinclude: ["items"]to page through its items up to 50 at a time, filtered by id, GTIN, tag, category, keyword contains query, orstatus: "approved". Create, replace, or archive a catalog with onesave_catalogcall; it requires an idempotency key, so a retried request returns the original result or recorded failure for 24 hours instead of applying twice. Each catalog reports a health ofhealthy,syncing, orstalewith a plain-language reason. Nothing to change on your side: an advertiser’s existing default catalog keeps working as before.
5.646.0 — September 22, 2026 at 5:40 AM UTC
- When you assemble a creative in the Library, products now update automatically while sellers respond and are easier to search and compare. Product rows show the declared format requirements and explain when an asset does not fit, so you can upload another file or review all available products before you save.
5.645.0 — September 22, 2026 at 5:15 AM UTC
- Buyers can now turn an uploaded file into a creative by naming its format before choosing a product.
5.644.3 — September 22, 2026 at 3:36 AM UTC
get { kind: "advertiser" }now returnspreferredTimezonealongsidereportingTimezoneLocked, matchingsave_advertiserandsearch. Previously, a buyer reading an advertiser viagetcould see that its reporting timezone was locked but not what it was locked to.
5.644.2 — September 22, 2026 at 2:09 AM UTC
- Fixes AI-9720: buyers can recover from cancelled or stale media-buy updates without a stranded pending change blocking their next update.
5.644.1 — September 22, 2026 at 12:15 AM UTC
save_campaign’s launch step now shows the actual reason a media buy failed to launch when that reason is safe, locally-generated text from a first-party ad-platform adapter (e.g. Meta requiring a Pixel/Dataset for a Sales campaign) - previously the chat response collapsed every failure to a bareexecution failed (CODE, recovery)with no further detail, even when the underlying cause was already known and actionable. A genuine remote sales agent’s own error text is unaffected and continues to stay out of the rendered response, unchanged from today’s behavior.- Let a verified domain user claim an archived Seller account, become an admin, and restore its existing Storefront. This works for every archived Storefront, including accounts that already have an administrator, while keeping ambiguous domains and public email providers out of the recovery path.
5.644.0 — September 21, 2026 at 11:42 PM UTC
- Upload copy now says file, not creative, and clarifies Library file types, audio availability, campaign counts, and Catalogs so buyers can find and use their creative files.
- Pending invitations in the account menu now open the organization you were invited to, even when you are working in a different organization. Sign-up links for invitations that are no longer available now explain the problem before account creation instead of asking you to join an unnamed organization.
5.643.0 — September 21, 2026 at 10:37 PM UTC
- Seller signup now describes storefront setup more clearly and labels the setup action directly. No action is needed for existing accounts.
5.642.3 — September 21, 2026 at 10:22 PM UTC
- Account choices use the available row width during sign-up when fewer than three options are available.
- Adapter errors on
create_media_buy,update_media_buy,sync_creatives, and delivery reads (get_media_buy_delivery,get_media_buys) now return a classified error message and code instead of the ad platform’s raw response text. This closes an inconsistent gap where Google, LinkedIn, Reddit, Criteo, CitrusAd, Flashtalking, OpenAI Ads, UniversalAds, and Pinterest passed their provider’s unfiltered error text straight through on every operation, and wheresync_creativescould leak raw upstream diagnostics in a creative’serrors[]entry regardless of platform.code/reasonremain the same stable, machine-actionable classification every integration already keys on; the platform’s own explanation (when it designed that text for external display, as Meta does) is now surfaced consistently instead of only in a couple of hardcoded scenarios.
5.642.1 — September 21, 2026 at 8:43 PM UTC
- Campaigns Pages pass plain advertiser names to their widgets, and browser links open the advertiser’s workspace.
5.642.0 — September 21, 2026 at 8:16 PM UTC
- On the buyer agents list, the link to the documentation moves into the page header beside Add agent, so it stays reachable when the list is empty or when you are signed in through a session that cannot manage agents — the states where it was previously hidden. Each agent row is now a card, and its status carries a colour that matches what the state means for that agent’s work.
5.640.3 — September 21, 2026 at 7:04 PM UTC
- The buyer agent list and agent detail pages are rebuilt on the Apostra design system. Same routes, same actions, same data — what changes is the presentation and some of the wording.
- Each tab’s sections no longer draw a panel inside the page’s own panel, so a section reads as a band of the page rather than a nested card. A credential is one row that names itself and carries its own Rotate and Revoke actions. On Activity, “Platform state changes” and “Administration activity” say in plain language what separates them: what the platform recorded on its own, versus what someone on your team did and who they were. A limitation under “Current limitations” now reads as a warning when there is something to act on, and as an empty state when the connection simply has not reported anything yet.
5.640.0 — September 21, 2026 at 5:47 PM UTC
- Branding & distribution now opens Listing even when the browser had cached an older setup route. Publisher domains entered in the Property Roster are saved directly; invalid entries stay unsaved, and a failed save keeps your draft so you can try again.
5.638.0 — September 21, 2026 at 4:40 PM UTC
- Selecting the required-step count in the setup rail now opens the full Seller Setup checklist. The rail labels the final validation separately, so its result no longer looks like the full checklist.
5.637.0 — September 21, 2026 at 3:51 PM UTC
- The Creative Library now leads with Add creative. Pick an image or video file; when the upload finishes, the Library opens the creative composer (campaign Library) or the inline creator (advertiser Library) with that file in the first slot, and you complete the creative with a name, click-through URL, and format. Campaigns that declare Audio :30 also accept audio. Upload (add a file only) and New creative (start from a file already in the Library) are under More. Nothing to change on your side.
- Media buys sent to sellers that still speak legacy creative formats no longer fail when the seller lists more than one legacy format for the same display size, for example
display_htmlwith 300x250 dimensions next todisplay_300x250_html. The creative is now matched on its own declared dimensions and, when two legacy formats impose the same constraints, trafficked under the seller’s fixed-size format. Previously the request was rejected with “cannot select a valid creative wire shape … the seller advertised 2 legacy refs”. - Text across the product is easier to read. Interface copy, labels, and table data now set in Public Sans, a typeface drawn for screen text at small sizes, while headings keep the GT Planar brand face. Small text reads clearer without anything moving or changing size, and labels separate more cleanly from the content around them.
- In-chat widgets also load less: each one carries about 29 KB less font data than before.
5.636.0 — September 21, 2026 at 3:05 PM UTC
save_media_buyon the v3 buyer surface now acceptsproducts[].pixelId, so Meta Sales campaigns can supply the required Pixel/Dataset ID for conversion tracking. Previously the field had no way to reach v3, so launching a Meta Sales (or a Traffic campaign optimizing toward a pixel-based conversion goal) failed with a bareINVALID_REQUESTnaming no cause. This brings the field over from the existing v2create_media_buyssurface unchanged - same name, same “no auto-select” behavior.- Storefront transaction readiness now stays current while product catalogues are syncing.
- Find the right advertiser faster by searching the workspace selector by name or advertiser ID. Advertiser IDs now appear alongside names, making similar or duplicate names easy to distinguish.
5.635.0 — September 21, 2026 at 2:47 PM UTC
- After uploading a creative asset, see its preview, name, media type, size, and saved Library tags, then open that exact advertiser-scoped Library asset.
5.632.0 — September 21, 2026 at 12:54 PM UTC
- Widget navigation now keeps text readable while buttons change state. Nothing changes on your side.
- Interactive buyer Pages now accept Claude’s external-host authorization when Claude forwards the same signed Page capability in both request metadata and the reserved app argument. Conflicting capabilities and first-party proxy requests remain rejected.
- Canonical image requests now reach the configured creative generator with their validated dimensions. Existing valid legacy format selectors continue to work; malformed or ambiguous selectors are rejected before generation.
5.630.0 — September 21, 2026 at 11:32 AM UTC
- Select or drop up to 25 creative files into the upload Task and follow them in one progress list. The Task uploads three files at a time, and a failed file retries on its own without touching the ones that finished. Enter Library tags once for the whole batch, or change a queued file’s tags before its upload starts. Per-file size limits are unchanged, and a batch adds files to the Library; it does not create Creatives. Nothing to change on your side.
5.628.1 — September 21, 2026 at 10:45 AM UTC
- Murph can now follow an exact Skill ID without searching for it first.
- Library and Product Marketing uploads now accept a valid short-lived private upload reservation when the seller’s browser clock is slightly behind the server. Server reservation failures remain distinct from an unsafe upload capability, and overlong capabilities still fail closed.
5.628.0 — September 21, 2026 at 10:14 AM UTC
- Interactive buyer Pages (Creative Library, Advertisers, Campaigns) now load in Claude and other MCP-app hosts that run the widget on a separate MCP session from the chat. Opening a Page returned “authorization could not be verified” on its first read in those hosts because the Page’s signed capability was bound to the session that launched it; it is now verified against its own signed session when it arrives through the external-host transport, with every other check unchanged.
- Embedded sales agent 1.45.1: create bookable FreeWheel placements.
5.625.0 — September 21, 2026 at 8:41 AM UTC
- Creating a Meta media buy with postal/zip-code targeting for most countries (United States, United Kingdom, Canada, Germany, Switzerland, Austria, France, Australia, Brazil, India) now succeeds instead of failing after the ad set was already created on Meta.
- Buyer agents can open the Creative composer from the Creative Library’s new campaign-scoped composer lens, including a browser hand-off for hosts without an embedded widget surface.
5.623.1 — September 21, 2026 at 6:57 AM UTC
- Fixed
request_proposalsreturning a bare, unexplainedSELLER_ERRORfor a built-in storefront adapter (e.g. Meta) rejecting a request as invalid — for example, a brief that names an unsupported placement exclusion like “Threads” or “Audience Network”. The adapter’s specific, actionable error code and message now reach the response instead of being discarded.
5.623.0 — September 21, 2026 at 6:03 AM UTC
- Third-party sales-agent observations now remain current when two refreshes reach the same connection at once. This keeps implementation changes and freshness records available for certification. Nothing needs to change on your side.
- Murph can now read an exact versioned Skill before continuing a workflow.
5.621.0 — September 21, 2026 at 3:08 AM UTC
- Buyers can now open a slot-based Creative composer from a campaign’s Creative Library. Save drafts to an existing Creative Session, preview slot changes as you work, and use host chat to request copy or other changes.
5.620.0 — September 21, 2026 at 2:43 AM UTC
- Meta
discover_productsandcreate_media_buynow honor a buyer’s request to target Facebook/Instagram Stories and/or Reels alongside Feed. Previously, any brief ortargeting_overlay.placement_selectionnaming Stories or Reels silently collapsed to Feed only. A mixed request — Feed together with Stories and/or Reels — is now honored in full.targeting_overlay.placement_selectionis also now read and honored atcreate_media_buytime (previously rejected outright as an unsupported targeting dimension) and can override the discovery-time snapshot, including an explicitmode: "default"to revert to Advantage+ Placements. - Requesting only Stories and/or Reels with no Feed in the mix remains unavailable on every account today: discovery now returns no products for that specific request rather than one it can’t actually deliver.
- Brief-text placement parsing also now fails closed on an explicit exclusion (e.g. “excluding Feeds, only Stories and Reels”) instead of matching the excluded surface’s keyword and selecting it anyway.
5.618.0 — September 21, 2026 at 12:16 AM UTC
- Organization administrators can approve, suspend, reactivate, or revoke one advertiser’s self-serve admission from the Advertisers page. These actions do not change capabilities, invitations, billing or payment authority, organization membership, or campaign execution.
5.617.0 — September 20, 2026 at 11:07 PM UTC
- The Library now identifies Responses as durable saved materials and shows each saved version’s date and current brief. Opening Responses does not regenerate an answer from the documents visible in your Library. Nothing to change on your side.
5.616.1 — September 20, 2026 at 10:29 PM UTC
- You can now see and manage a brief’s linked response from either the Demand Inbox or the Library. Choose an eligible saved response or import a historical brief without losing the current pairing record. Add files in the Library before linking them from the Demand Inbox. Nothing to change on your side.
5.615.0 — September 20, 2026 at 9:12 PM UTC
- MP4 upload preparation now finishes within the upload Task’s request window. Storage or signing timeouts and confirmed database aborts return a retryable error without signed upload details; an unconfirmed database outcome says not to retry. JPEG, PNG, WAV, and MP3 uploads are unchanged.
- Opening the Campaigns Page from a host that cannot show interactive pages, such as Claude Code or a plain MCP client, now returns an “Open in the browser” link that opens the same Campaigns Page in the Interchange chat for that advertiser, focused on the launched campaign when there was one. The link is also available as
openInBrowserUrlin the structured result. Following a Campaigns Page link in the browser now opens the Page once, with the list filters the link carries, instead of minting a second launch that was discarded on arrival.
5.613.0 — September 20, 2026 at 7:39 PM UTC
- In the Library Page, sellers can assign a document category and filter documents by category alongside file type, search, and grouping. Existing documents remain Uncategorized until a seller chooses a category. Rate-card and policy documents can remain source Materials, but their canonical facts remain governed by Rate Cards and AI Business Rules. Categorising a document does not make its units reusable.
5.612.2 — September 20, 2026 at 7:04 PM UTC
- Existing storefronts with audited pre-split sales-agent sources can continue transacting without repeating onboarding approval.
5.612.0 — September 20, 2026 at 6:24 PM UTC
- Library now explains reuse per page, slide, or sheet, shows why each unavailable control is disabled, and enables eligible units as soon as inspection finishes. Keep buyer-specific content off and current prices in Rate Card.
5.611.0 — September 20, 2026 at 6:07 PM UTC
- Buyers can now see connected catalog feeds in the advertiser Creative Library, including item counts, sync health, and links to manage a feed.
- An empty Material Library links to a fictional publisher onboarding pack with a short, goal-based starter checklist. The guide distinguishes included examples from missing proof material and keeps pricing and policy in their owning flows. Opening or downloading the pack never adds account data, and completing the checklist proves neither seller readiness nor production completeness.
5.608.0 — September 20, 2026 at 4:09 PM UTC
- You can open the Create Agent task from the Agents page. Your existing administrator permissions still apply.
- Keep navigation to another account workspace from returning you to a Murph conversation that is no longer available.
5.604.0 — September 20, 2026 at 2:11 PM UTC
- Set which campaigns a Library creative runs on from either side of the relationship:
save_creativenow acceptscampaignIds, the full set of campaigns for an advertiser creative, andsave_campaignacceptscreativeIds, the full set of creatives on a campaign. An explicit list replaces membership, so a missing id detaches; omitting the field leaves membership unchanged. Attaching checks the campaign’s sellers and fails, naming them, when none accepts the creative’s format. Both fields set the same membership the Creative Library picker sets, and a member creative is delivered on every media buy of the campaign whose products accept its format.
5.601.2 — September 20, 2026 at 11:38 AM UTC
- Show both Enterprise seller choices during signup while keeping them outside the selectable public Rate Card plans.
5.601.0 — September 20, 2026 at 10:28 AM UTC
- Murph now states that you are interacting with an AI agent on your first interaction. Once delivered, the notice applies across supported channels. This does not change what Murph can access or do.
- Every Apostra sign-up path now stays in the Apostra interface, including organization invitations, buyer qualification, partner registration, and Storefront plan setup. Nothing changes for existing accounts.
- Murph in Slack now clears its working status after posting a completed response. Nothing to change on your side.
5.600.0 — September 20, 2026 at 9:36 AM UTC
- Correct the historical identity used to restore readiness for one existing third-party sales source. New sources still need the normal validation.
- Your enrolled advertiser viewers can now list Campaign summaries for the advertiser assigned to them. Their access is read-only and does not extend to another advertiser.
5.599.2 — September 20, 2026 at 9:24 AM UTC
- Live seller workspaces now open analytics even when setup status is temporarily unavailable. Nothing to change on your side.
5.598.1 — September 20, 2026 at 8:29 AM UTC
- Apostra-branded sign-in pages now show the full Apostra wordmark with dark lettering.
5.597.0 — September 20, 2026 at 2:38 AM UTC
- Opening a creative in the Creative Library now offers “Attach to a campaign”. The picker lists the advertiser’s campaigns with their status, flight and budget, and says for each one how many of its sellers accept this creative’s format and which sellers do not and why. Campaigns whose flight has ended, and campaigns where no seller accepts the format, are shown with the reason instead of an Attach button. Attaching adds the creative to the campaign so its sellers review it; campaigns it already belongs to are marked Attached.
- An existing third-party sales source that was serving before readiness enforcement no longer remains blocked because its historical transaction evidence was missed. New sources still need the normal validation.
5.596.0 — September 20, 2026 at 1:00 AM UTC
- Saving coaching in a practice proposal now reruns the same buyer brief and opens the revised response beside the original.
- When a seller-managed relationship needs missing advertiser information, Sellers now pauses the advertiser view with one setup action instead of repeating it on every seller card. Direct ad platforms do not trigger this blocker. Nothing changes for API integrations.
5.593.1 — September 19, 2026 at 9:18 PM UTC
- Campaign Creative links now open the advertiser Creative Library with the campaign already selected, while keeping Creative requirements, upload, create, attach, and preview actions together.
- Seller workspaces now open directly into setup or analytics without briefly showing the Merchandising Agent introduction. Nothing to change on your side.
5.593.0 — September 19, 2026 at 8:30 PM UTC
- Buyer access requests now use Apostra’s responsive sign-up experience when the new product brand is enabled. The journey keeps its existing qualification and routing behaviour while making conditional questions, validation, progress and outcomes easier to follow on desktop and mobile.
- Buyer access requests now distinguish direct Apostra use, a buyer’s own AI agent, and a preferred AI chat. Buyers can select Claude, ChatGPT, Copilot, or name another chat, or say that they are still undecided. Pilot countries and channels appear in the intended priority order, Social requests can proceed regardless of country, and New Zealand is no longer treated as a pilot market. Buyers who select Social or a pilot country receive the same fit confirmation at any timing. The nurture message now explains that supply is still being onboarded in the selected markets.
- Managed MP4 upload is now generally available and no longer depends on a separate account rollout switch. It remains subject to authenticated advertiser access and managed-video service availability. Managed audio remains an alpha behind its existing account rollout gate and independently dark production infrastructure.
5.592.0 — September 19, 2026 at 7:53 PM UTC
- Buyers can associate a completed advertiser Creative with an authorised campaign through
save_creativebefore seller package assignment or provider delivery exists. The saved Creative read now reports durable campaign membership separately from delivery state.
5.589.0 — September 19, 2026 at 3:36 PM UTC
- Agent Page can now forward a protected technical certification evaluation request to Murph. A queued request is not a completed evaluation, certification, or client authorization.
5.588.0 — September 19, 2026 at 3:24 PM UTC
- During an active Demo Storefront evaluation, Product Marketing now names the selected file and distinguishes upload, processing, ready-to-review and failure states. Each state gives the seller one clear next action, while ordinary Product Marketing and the existing private upload flow remain unchanged.
- Opening the Creative Library from a host that cannot show interactive pages, such as Claude Code or a plain MCP client, now returns an “Open in the browser” link that opens the same Library in the Interchange chat for that advertiser. The link is also in the structured result as
openInBrowserUrl.
5.587.0 — September 19, 2026 at 2:58 PM UTC
- Stop sending
sellerPracticeandsellerPracticeActionin Murph chat requests. Seller Practice is no longer available, and requests containing either field now return a validation error instead of opening an ordinary chat. Other seller chat requests work as before.
5.586.2 — September 19, 2026 at 2:32 PM UTC
- During an active Demo Storefront evaluation, Product Marketing now starts with a clearly labelled file upload and explains the path from adding seller material to reviewing offers and testing a buyer brief. Webpage import and synthetic practice remain available as secondary choices. Ordinary seller Product Marketing and upload handling do not change.
5.585.1 — September 19, 2026 at 1:33 PM UTC
- Practice proposal reruns now apply the latest saved coaching note while keeping the buyer brief, products, prices, sources, and claims unchanged.
5.584.1 — September 19, 2026 at 12:49 PM UTC
- The fixed synthetic practice proposal now uses only the seeded Demo catalogue and its matching synthetic teaching material. Ordinary media-kit uploads and Library examples stay out.
5.584.0 — September 19, 2026 at 12:12 PM UTC
- Opening a creative in the Creative Library now shows where it stands with each seller. A Seller approval table lists every seller the creative was sent to with Approved, Reviewing, Changes requested, Rejected or Sync failed, the date, and the seller’s note when it rejected the creative or asked for changes, and the header sums it up as “Approved n of m” plus how many need attention. A collapsed Destination row shows the click URL, the URL as delivered, and which UTM additions came from the advertiser, campaign or creative. A creative not yet sent to any seller says so.
5.583.2 — September 19, 2026 at 12:07 PM UTC
- Slack actions that need your approval now say “Approval needed” while they wait, instead of reporting that the call failed. The action, approval decision, and final result do not change.
5.583.1 — September 19, 2026 at 11:35 AM UTC
- Library previews now distinguish pending, failed, unsupported, unavailable, and ready files, and older PDF or PowerPoint uploads can be retried from the open document without reloading the Library.
5.582.1 — September 19, 2026 at 10:00 AM UTC
- Inventory-source diagnostics now retain recorded health timestamps so an older error is not presented as a new provider check or current transaction outcome.
- Time-bounded Seller beta profiles now include the complete feature package they name. Enrolled sellers no longer need a second set of matching entitlement grants, and the profile’s expiry still returns the account to its safe fallback.
5.582.0 — September 19, 2026 at 9:40 AM UTC
- The Creative Library page is easier to scan. Creatives and Assets are tabs with counts, one row holds search and the Shelf, Format, Source and Role filters (Media for assets), and each card shows its state alongside role, campaign and reuse badges. Opening a creative or asset shows a detail with About, Used in, Where it lives and a collapsed technical record, and “New creative” opens the composer directly. The same layout fits the narrower width chat hosts give a widget.
5.581.3 — September 19, 2026 at 9:26 AM UTC
- Buyer briefs now open as compact cards with the complete plan, targeting, measurement, governance, provenance, and exact request available in one disclosure. Existing brief records remain readable, and sellers do not need to change how they work.
5.581.2 — September 19, 2026 at 9:08 AM UTC
- V3 archive is now visibility-only: campaigns and media buys keep their lifecycle phase, and restoring a canceled campaign keeps it canceled. Campaign archive refuses while executable media buys remain, and legacy archived media buys are readable.
- Buyer account reads now keep a linked seller account visible when its connection is disabled or archived, so it can be reconnected. Partner-scoped reads now include direct seller-account links.
5.581.1 — September 19, 2026 at 8:37 AM UTC
- In Advertisers, clients admitted for self-service now show their advertiser access state instead of a missing sponsorship warning. These rows remain read-only; access readiness does not grant Campaign or payment authority. Nothing to change on your side.
5.580.2 — September 19, 2026 at 6:29 AM UTC
- Sellers in the Product Marketing beta can complete a teaching rehearsal from their training material to a held-out buyer brief, a coached follow-up proposal, and its comparison.
5.580.1 — September 19, 2026 at 5:54 AM UTC
- Record a completed, cleaned own-supply transaction as the matching technical-certification assertion only after the platform verifies its immutable fixture and implementation binding.
5.580.0 — September 19, 2026 at 1:37 AM UTC
- Show the confirmed sample booking, synthetic source, and delivered impressions in Demo Storefront Media buys.
5.579.3 — September 19, 2026 at 12:08 AM UTC
- Product searches that exceed the quick wait now show the products already returned and can continue the same search without starting a replacement. Nothing needs to change on your side.
- Active Demo Storefronts now show a synthetic, non-commercial Plan & billing state without changing ordinary billing setup.
5.579.2 — September 18, 2026 at 11:18 PM UTC
- Synthetic inventory sources in an active Demo Storefront now show all nine required setup steps as ready. Source Diagnostics identifies them as local synthetic recipes and no longer asks you to run vendor connection checks that do not apply. Ordinary inventory sources keep their existing live-source checks.
- Fixed an issue where buyer-agent principal routes were inaccessible for organizations whose WorkOS binding exists but whose internal organization record has not been populated. The registry key for buyer-agent principals is now derived from the customer ID directly, which is always present, rather than from the optional organization FK.
5.579.1 — September 18, 2026 at 10:06 PM UTC
- When you open Listing in an active Demo Storefront, its readiness now agrees with Seller Setup: Identity and What you do are the two required details. Marketplace publication and Public distribution remain available as optional choices. Nothing changes for ordinary Storefronts, and there is nothing to change on your side.
- Pages on app.apostra.com now show the Apostra name and favicon in browser tabs. Apostra’s staging app and creative-preview domains use the orange Apostra symbol to stay visually distinct. Other domains are unchanged, and no action is required.
5.579.0 — September 18, 2026 at 9:17 PM UTC
- Media Companies can now create a sandbox advertiser from Advertisers or Campaigns and switch into it immediately. Accounts enrolled for live campaign management can explicitly choose Live; other accounts see Sandbox only.
5.578.2 — September 18, 2026 at 8:58 PM UTC
- Selecting a Demo Storefront inventory source now replaces the previous source Page and opens the source named in the setup checklist.
- Demo Storefront now shows its versioned sample buyer brief and booked outcome in Demand while the demo lease is active.
5.577.1 — September 18, 2026 at 7:56 PM UTC
- Readable scanned faxes now reach your storefront agent when lower scan quality makes text recognition less certain. Nothing to change on your side.
5.577.0 — September 18, 2026 at 7:36 PM UTC
- Demo Storefronts now create and restore a synthetic inventory source during explicit creation and reset, so Inventory and Signals can be explored without connecting a live ad server.
5.576.0 — September 18, 2026 at 7:22 PM UTC
- Click-URL parameters now have one home. The
utmConfigyou set on an advertiser or campaign and thetracking.macroAdditionsyou set through V3 are the same parameters, resolved advertiser → campaign → creative with the nearest value winning, and applied once when a creative is synced to a seller. A key already in your click-through URL is never overwritten. New advertisers start with no parameters; advertisers created earlier keep the sixutm_*entries Scope3 used to add for them, and you can edit or clear those like any other entry.{PACKAGE_ID}is accepted alongside the canonical AdCP macros. Parameter keys start with a letter or digit and use URL query-key characters (max 100), the same rule forutmConfigandmacroAdditions.
5.575.0 — September 18, 2026 at 6:55 PM UTC
- Embedded sales agent 1.45.0: add synthetic mock inventory selectors, add synthetic mock signal catalog, negotiate FreeWheel booking actions as XML, preserve published format option ids, update AnyIO past known vulnerabilities.
5.574.1 — September 18, 2026 at 6:33 PM UTC
- Keyboard focus on a clickable row in an in-chat widget now draws its focus outline inside the row, so the outline is no longer sheared off at the left and right edges when the list scrolls. Advertiser rows on the All advertisers widget also sit flush against each other instead of being separated by a gap.
5.574.0 — September 18, 2026 at 6:05 PM UTC
- Buyers on MANAGED storefronts can now request production account linkages, not only sandbox ones.
POST /api/v2/buyer/storefront-accounts/syncand thesync_buyer_storefront_accountstool accept entries withoutsandbox: true, and the request lands in the seller’s approval queue as a pending account. Once the seller accepts it and maps the account to a source, creative sync on that storefront stops failing withMANAGED_ACCOUNT_LINKAGE_REQUIRED. - A production entry must use your confirmed buyer operator domain as
operator. Any other domain returns HTTP403ACCESS_DENIED(details.reason: "operator_identity_mismatch"); an account without a confirmed identity gets the existingBUYER_SETUP_REQUIREDresponse. Sandbox entries are unchanged and still accept any operator.billingremainsagent. - Sellers see no protocol or UI change. Production requests arrive through the same pending-review queue and decision endpoints as any inbound
sync_accounts. - Monetization: no billable surface, no packaging change.
- Rollout - gate: none, atomic launch. The operator check is the only new refusal and it fails closed. Kill switch is
apps/api/src/routes/v2/buyer-accounts.routes.ts(unmount) or re-adding thesandboxliteral inapps/api/src/schemas/v2/buyer-accounts.schema.ts. Release check: after deploy, a productiondry_run: truerequest from a buyer with a confirmed identity returnsaction: created, and one naming another operator returns 403; adoption watch is the count of non-sandboxstorefront-accounts/syncrequests per customer via the standard v2 REST metric labels.
5.573.0 — September 18, 2026 at 5:36 PM UTC
- Demo Storefront approval queues now start with one synthetic media-buy request and one synthetic creative review. Reset restores both pending items, while expiration or deletion removes their synthetic approval data.
5.571.0 — September 18, 2026 at 4:15 PM UTC
- In
save_campaign, setbrieforflighttonullto clear the saved value. Omit either field to leave it unchanged. Campaign pauses now use the same audited path as the API.
5.570.0 — September 18, 2026 at 3:46 PM UTC
- Claimed agent owners can request a protected certification evaluation for the current implementation when an approved fixture and immutable evaluation template already exist. The request does not run a provider test or create certification evidence.
- Show a claimed agent owner when protected certification preparation cannot continue, rather than scheduling the same permanent failure again.
5.568.1 — September 18, 2026 at 2:46 PM UTC
- Platform administrators can now choose Listing, Listing + Distribution, Merchandising, or Merchandising + Distribution capabilities when creating a Demo Storefront. New and existing demos default to the full Merchandising + Distribution experience without changing the organization’s paid plan. Setup progress also counts only required work, while recommended setup remains visible.
5.568.0 — September 18, 2026 at 2:07 PM UTC
- Buyer agents can now create, inspect, update, and archive advertiser event sources through V3. Each save returns installation guidance and keeps registration separate from proof that conversion events are flowing.
- Buyer agents can also define generic click-URL macro additions on advertisers, campaigns, and creatives. Campaign values override advertiser defaults, creative values override both, and
nullsuppresses an inherited parameter without changing the authored click URL. - Murph’s guided Storefront rehearsal now explains the purpose, current step, next action, and expected result across Teach, Confirm, Test, Inspect, and Coach. It uses the same seller workflow and actions as self-guided practice. Media-kit upload is discoverable, teaching still requires explicit candidate confirmation, and coaching still records immediately on the immutable turn.
5.567.0 — September 18, 2026 at 12:26 PM UTC
- Advertiser guidance now explains how measurement evidence stays in advertiser scope across sellers and distinguishes Apostra’s standard 0% media-fee model from percentage-based terms in existing agreements.
- Reject a media buy when its composed product points to a creative-format option that the source product has since removed, renamed, or changed. The storefront now asks the buyer to refresh the product before approval or forwarding instead of sending a request the source will reject.
5.565.0 — September 18, 2026 at 11:06 AM UTC
- For organizations enrolled in IU plan selection, seller choices now appear under Listing and Merchandising. Choose Get in touch for help with a plan or a private offer, even when public plans are available. A billing administrator can send the request and, when tracking is available, follow it in Your requests. Stalled help requests now recover instead of leaving plan actions disabled. During signup, finish creating your account, then send the request from Plan & Billing. Your plan, prices and access stay the same until you separately accept an offer.
5.563.0 — September 18, 2026 at 9:23 AM UTC
- Embedded sales agent 1.44.0: add FreeWheel inventory-package targeting and ad-product defaults, support FreeWheel direct ad-unit selection, harden FreeWheel booking state reconciliation, keep AdsWizz package delivery stable across renames, persist and book FreeWheel insertion orders, respect FreeWheel insertion-order booking state, traffic AdsWizz audio impression trackers, validate FreeWheel VAST renditions after create.
5.562.0 — September 18, 2026 at 8:47 AM UTC
- The Merchandising Agent interview now stays open when you enter the seller workspace, so Seller Analytics no longer replaces the buyer-practice entry.
5.561.0 — September 18, 2026 at 8:04 AM UTC
- Installable messaging apps are now available as an early-access customer feature: your team can talk to Murph from Slack, Microsoft Teams, Discord, or WhatsApp. On a seller’s Listing page, Distribution lists each as a destination with two ways in; seller administrators manage the same apps from Settings → Messaging apps. Use the Interchange app is the shared, one-click option with nothing to configure. Slack installs from the tab once Interchange’s Slack app is publicly available; shared Microsoft Teams and Discord apps are not available yet. Use your own app connects a Microsoft Teams, Discord, or WhatsApp app you created with the provider. The tab says what each provider needs, lists the apps already connected with their install locations and linked people, and opens the secure setup pane (Settings → Messaging apps) where you manage credentials, approved install locations, and the links between provider identities and Interchange members. WhatsApp replies only when a linked member messages the registered business number inside Meta’s user-initiated service window; it never starts a conversation or sends template notifications.
- Branded apps are early access for enrolled accounts. Enrollment controls who can set up and administer them; it does not stop an app that is already active. To stop new conversations, suspend a location or retire the branded app. Nothing changes for storefront ranking, readiness, or buying workflows, and there is no new plan, entitlement, or usage charge. Conversations from Microsoft Teams, Discord, and WhatsApp never count toward usage or billing; they are recorded for telemetry only.
- Team members who already use Murph need no setup of their own. Once an administrator has connected an app and a member’s Teams, Discord, or WhatsApp identity is linked to their active Interchange membership, that member can ask Murph the same questions from an approved Teams or Discord chat, or by replying on WhatsApp. Members never handle provider credentials or installations.
5.560.5 — September 18, 2026 at 6:57 AM UTC
- Creative reads now report a successful sync only when every current seller link succeeded. Failed links include the seller’s rejection reason when available, so buyers can see that a creative was not delivered and why. Nothing to change on your side.
5.560.3 — September 18, 2026 at 5:59 AM UTC
- Enterprise offers now reject unsupported campaign management, custom inventory onboarding and co-marketing commitments before they become commercial terms. No action is required for offers that do not include those commitments.
5.559.0 — September 18, 2026 at 4:29 AM UTC
- Files from your existing creatives can appear in the Creative Library Files panel as reusable assets after your team runs the backfill.
- Publisher practice now saves the proposal and its private practice plan together. If the practice conversation changes while a proposal is being created or extended, no partial proposal is retained and the seller can retry from the current conversation.
5.558.0 — September 18, 2026 at 3:34 AM UTC
- Sales Agent providers can complete the confirmed no-spend media-buy step before certification or Storefront publication setup is complete. The exception is limited to the temporary certification source; live transactions remain gated.
- Buyers enrolled in the Creative Engines alpha can find a versioned guide that helps their agent create and refine campaign creatives without losing the output they selected or approved. The guide covers secure connection, advertiser mapping, the funding that applies to the request, named-parent refinement, exact-output approval and recovery after an interrupted request.
- Using the guide requires its two Creative Session tools, a supported engine capability and connection, any locked reference required by the selected engine, funding and an authorised quote before generation can be dispatched. It does not choose funding or prices, approve a creative for a seller, or launch a campaign.
5.557.1 — September 18, 2026 at 2:55 AM UTC
- Buyer agents now see that Creative search requires exactly one advertiser or campaign owner before calling the tool. Successful searches repeat the effective scope and filters in text and structured output, including the three promoted filter meanings: omitted for all visible results, true for the reusable shelf, and false for non-promoted results.
5.557.0 — September 18, 2026 at 2:49 AM UTC
- Completed Creative uploads now leave a durable conversation receipt in Claude, ChatGPT, and Interchange with the available saved metadata and verified video facts. Advertiser uploads include their reusable Library asset ID. A legacy provider upload without one includes its digest only as byte identity for the receipt, not as a value that can be saved, adopted, or attached later. The receipt does not create or attach a Creative, sync data, contact a provider, or deliver media, and the upload Task stays open for retry if the host cannot record it. Existing assets need no changes.
- No changes are required for existing V3
save_creativecallers: omittingmodepreserves complete-save behavior. - You can now save a partial advertiser-scoped Creative with
mode: "draft", then replace its entire submitted authored and slot state by sending the Creative’s currentstateRevisionasexpectedRevision. Usemode: "complete"on the same Creative once every required media, authored, and repeat-group slot validates. Creative reads exposestateand the authoritative whole-statestateRevision, while the existing opaque previewrevisionremains compatible and revision-bound previews continue to use the Interchange render frame. These advertiser-scoped draft and completion saves do not attach the Creative to a campaign or contact a provider.
5.556.4 — September 18, 2026 at 2:19 AM UTC
- Opening reviewer access now recovers automatically when an earlier login setup attempt left cleanup unfinished.
5.556.1 — September 18, 2026 at 1:22 AM UTC
- When you choose another Murph conversation while an earlier one is still loading, Murph now keeps the conversation you chose last.
5.555.0 — September 17, 2026 at 11:41 PM UTC
- When released, buyers already enrolled in the Creative Engines alpha will be able to save a campaign creative brief, generate variants, refine a named variant with feedback, and finalise the exact output they approve through V3 MCP.
- To use these actions, save a brief with
save_creative_session, then explicitly request generation withgenerate_variants. Saving does not start generation. A saved engine connection and the existing account access are required. If a generation request is uncertain, recovery checks the original request without silently starting a replacement. Provider account and funding requirements still apply; finalising creative does not approve it for a seller or launch a campaign.
5.554.1 — September 17, 2026 at 11:16 PM UTC
- Fixed TikTok video creatives failing to sync to campaigns. Uploaded videos were being rejected every time due to a response-parsing bug in how we read TikTok’s upload confirmation; video creatives now sync and attach correctly.
5.554.0 — September 17, 2026 at 11:10 PM UTC
- The Creative Library’s Files and compose panel now loads the product picker in the Interchange web app. Previously the panel showed “Products unavailable” there, so you could not choose a product or its canonical formats; in Claude and ChatGPT the picker already worked.
5.553.3 — September 17, 2026 at 10:32 PM UTC
- Seller admins can open newly provisioned directory reviewer logins without a Secret Manager error.
5.553.0 — September 17, 2026 at 9:15 PM UTC
- When an MCP host cannot show the creative upload task, its fallback now opens the selected advertiser’s Creative Library and starts the existing upload task. You do not need to select or create a campaign first.
- Additional account creation now appears only when your organization’s accepted package includes an unused account slot. Otherwise, the account selector does not show a creation or upgrade control, and API requests fail without creating a partial account. Existing accounts are unchanged. Buyer accounts now ask for the Operator domain. Seller accounts ask for the Company domain and distinguish it from the public listing domain.
5.552.0 — September 17, 2026 at 8:59 PM UTC
- Buyer agents can pause an active media buy or resume a paused one through
save_media_buy. Media-buy reads can also return the authoritative selected-product details and a fresh live AdCP status when requested. get_media_buynow includesproposalIdinpendingChangewhen the queued change is waiting on seller approval through the async approval flow. Use this ID withDELETE /api/v2/buyer/update-proposals/{proposalId}to cancel the pending proposal and unblock a subsequent update.
5.550.0 — September 17, 2026 at 8:08 PM UTC
- Design-system widgets now render in the same brand typeface as the rest of the app. Headings sit slightly lighter than before, because that typeface ships Regular and Medium only and no longer synthesises a heavier weight.
- Creative Library now shows collections as a navigable tree with nested paths. Dragging a creative onto a collection adds it, with Undo available.
5.549.1 — September 17, 2026 at 7:46 PM UTC
- Seller admins can now open reviewer login credentials from eligible child accounts.
5.549.0 — September 17, 2026 at 7:20 PM UTC
- Selected sellers can choose Try as a buyer in the Merchandising Agent interview to practise a buyer conversation. Coach a completed reply, write and test a private lesson, then review it before applying it to your Playbook. Practice uses your normal allowances; it books no media and does not open advertiser admission. Existing conversations need no changes.
5.547.0 — September 17, 2026 at 6:07 PM UTC
- The Creative Library now has an advertiser-scoped Assets view for browsing reusable image, video, and audio files. Image and video assets can be selected for Creative assembly; audio remains browse-only for now.
- When a published Rate Card is available for your Free Seller Account, Interchange prompts you to review it from any app page after the Terms of Service step. An organization administrator opens the existing plan review and explicitly confirms the exact offer before accepting. Other members see an Ask your admin message. You can decide later or continue without a paid plan, and return through Plan & Billing at any time.
- Plan & Billing now shows only the public IU plans that cover every active Buyer, Seller, and Partner product in your billing organization. Seller choices also follow the Storefront operating mode. Existing accepted plans stay in effect, so there is nothing to change unless your organization chooses a new plan.
5.546.0 — September 17, 2026 at 5:23 PM UTC
- Product discovery now polls a successful provisional result without sending internal routing fields that the buyer API rejects.
5.544.0 — September 17, 2026 at 4:08 PM UTC
- Report progress while a
chatturn runs. A caller that sends a progress token now receivesnotifications/progressupdates as the turn works, written in the language the conversation is already being answered in, so a long analysis is no longer indistinguishable from a hung request. The first update goes out before the turn starts: preparing a caller’s status language never delays it by more than a second, and cancelling the request releases that wait immediately. Callers that send no progress token keep the existing synchronous behaviour. - The Teach opening now explains how your materials prepare your agent and how to test it safely with a practice brief. It presents Teach as the one clear way to begin.
- Allow existing active reviewer grants to open the reusable directory reviewer login.
- Practice proposals now create a new attempt from the same brief when you select Run again, then show the new response beside the previous one. Products, prices, uploads, and saved feedback are unchanged.
- Creative sync now reaches sellers that publish legacy creative formats when a creative is pinned to one of the product’s format options. The selected option is sent back as the exact seller format it came from, so buyers no longer need to retry the media buy without syncing creatives first.
5.543.0 — September 17, 2026 at 2:37 PM UTC
- Sellers can upload a private file from Product Marketing in Murph without the file being rejected after selection. Existing file permissions and the general Murph attachment flow are unchanged; sellers do not need to take action.
5.542.0 — September 17, 2026 at 1:10 PM UTC
- Product searches that take 30 seconds now preserve their in-progress results and continue the same search instead of stopping before products can be returned. Nothing needs to change on your side.
- Buyer Pages now load reliably in external MCP Apps hosts and provide a clear recovery message when Page authorisation cannot be verified.
- Media buys now reach sellers that publish their creative formats in the legacy form, instead of failing with “the selected seller product did not provide one unambiguous legacy format reference”. When you pin a creative to a format option a seller’s product advertises, that pin now routes to the exact seller format it was built from. Nothing about how you select a format changes, and the affected buys can simply be retried.
- Sellers can open and reuse reviewer test credentials for their public listings.
- Buyers can organise advertiser creative collections into nested groups, see each collection’s parent and distinct subtree member count, and archive a collection after its active children are archived.
- Partner organizations with an issued private offer can review its terms in Plan & Billing and continue to secure payment setup when required.
- FreeWheel sellers can now build products from direct Ad Units, Ad Unit Packages, or both. Product creation follows each source’s inventory selection rules, so networks without packages can create valid drafts without a separate seller setting. Existing products are unchanged.
5.541.0 — September 17, 2026 at 11:36 AM UTC
- Enrolled buyers can now upload WAV and MP3 files up to 50 MB through the V3 creative upload Task. After inspection, the file is saved to the advertiser’s creative library and can be found with
search(kind: "creative_asset"). - These audio assets are not yet available to
save_creative, and uploading does not create or deliver a Creative. Existing image, MP4, and connected-provider audio workflows continue unchanged. Buyers who are not enrolled see no change.
5.539.1 — September 17, 2026 at 10:32 AM UTC
- If Creative Engines is enabled for your Buyer Account, open Creative Engines under Discover in Murph, or ask Murph to find a registered provider and open its setup on the Page. Start the secure connection from the Page. The form names the provider and, for OpenAI connections using your own key, links to the OpenAI API key dashboard. Creative Engines remains an alpha; this change does not make generation available.
5.539.0 — September 17, 2026 at 10:17 AM UTC
- Prepare remote MCP directory reviews from Listing. Request read-only reviewer access and reopen the same email and password for OpenAI, Anthropic, Microsoft, and other directories until you revoke it or it expires.
5.538.0 — September 17, 2026 at 9:58 AM UTC
- To cancel a campaign through
/mcp/v3, first cancel or settle every executable or unsettled media buy. Then callsave_campaignwithdesiredPhase: "canceled"and the campaign’s current revision. - Campaign cancellation is terminal and does not cancel media buys for you. If any executable or unsettled media buys remain,
save_campaignnames them and leaves the campaign unchanged. Archive is a separate visibility action; this cancellation request does not archive the campaign. - When you open Library in Murph, your documents and pages or slides now load correctly. An empty Library shows its first-run guide, and a failed read shows the full retry action. Nothing to change on your side.
5.537.0 — September 17, 2026 at 9:19 AM UTC
- Demo Storefront sellers can now use Teach to review and correct extracted candidates before opening a frozen synthetic evaluation in Proposal Pass. The evaluation keeps its sources and limits visible, including a synthetic rate card for planning only, not a live or buyer-quotable price. Custom fulfilment stays a named human or Connect follow-up; it is not treated as available automatically.
5.536.1 — September 17, 2026 at 8:39 AM UTC
- Embedded sales agent 1.43.4: declare AdsWizz hosted audio durations, quarantine partial AdsWizz creates, read the AdsWizz agency currency from the ad server, respect AdsWizz delivery in budget updates.
5.536.0 — September 17, 2026 at 8:32 AM UTC
- Ask Murph to show your creatives and open a portable Creative Library for one advertiser. The Page clearly separates all visible Creatives from the promoted reuse shelf, keeps active filters and incomplete results visible, and opens revision-bound previews without exposing another advertiser’s records. Existing
search(kind: "creative")calls continue to return plain objects.
5.535.0 — September 17, 2026 at 7:38 AM UTC
- Sales Agent providers can run a zero-spend creative check that records a separate result for the exact implementation revision after cleanup completes.
5.533.0 — September 17, 2026 at 5:35 AM UTC
- Sales Agent providers can explicitly confirm each no-spend sandbox transaction step in a run-scoped technical certification check before any client setup.
- RFP proposal-file rendering continues after the request that queued it ends.
5.531.0 — September 17, 2026 at 2:05 AM UTC
- Sales Agent providers can start a no-spend brief-only technical certification check with a dedicated, run-scoped fixture before connecting an Inventory Source.
5.530.0 — September 17, 2026 at 1:10 AM UTC
- When you open an active Demo Storefront inventory source in Murph, its Display and CTV readiness now loads without an Enterprise Merchandising plan. Creating or changing custom modular inventory sources still requires Enterprise access. Nothing to change on your side.
5.529.0 — September 16, 2026 at 11:31 PM UTC
- Seller Material decks now produce slide previews, OCR, and semantic document inspection in production. The renderer runs inside the private worker boundary and does not receive seller or cloud credentials.
- A media-buy change that every publisher rejects for a reason that cannot be fixed by sending it again — an invalid request, or an outright refusal — now stops immediately and reports why, instead of being re-sent every two minutes for six hours and then going quiet.
- Nothing about a valid change is different, and a change rejected for a reason that might clear on its own — a publisher’s system being briefly unavailable, or an access grant that has not landed yet — is still retried for the usual six hours. Publishers see the same “forwarding failed” signal they already receive, once, rather than repeatedly.
- Cancellations are deliberately unaffected: a cancellation that fails to reach the publisher stays retryable, because a live campaign must never be recorded as stopped while it is still delivering.
5.528.0 — September 16, 2026 at 10:09 PM UTC
- Expose direct parameter types beside reusable MCP schema references so Anthropic’s directory scanner can validate the live tool catalog. Remove the non-actionable Claude plugin-package checkpoint from the storefront distribution flow and lead publishers directly to connector submission.
- Behind the existing default-off
organization-settings-in-placeflag, corrected the server-side authority foundation for the organisation-posture endpoint and added the B1 epoch proof surface: - The flag is now evaluated for every caller before any posture is returned, including excluded principals. An excluded principal whose parent org is enrolled receives 200
ineligiblerather than 403. - Standalone posture is restricted to valid PARENT or STANDALONE customers with no parent; unknown or malformed topology is ineligible after the flag check.
- The
OrganizationPostureServiceproduction entry point wires all dependencies (Prisma, Agentic DB, PostHog, delegation reader) inside the service module; the route only builds context and calls one method. BillingAccountService.getInheritedBillingStubuses a neutral locked Core FOR SHARE substrate: topology is read withFOR SHARE, and while those locks are held a single AgenticREPEATABLE READsnapshot evaluates sponsorship, membership, and delegation. Concurrent reparenting cannot produce a stale parent identity and the billing result is fully assembled before Core releases. Billing has no feature-flag gate and no epoch computation.- Shared Zod runtime contract (
OrganizationPostureKindSchema,OrganizationPostureResponseSchema,OrganizationAuthorityProjectionSchema) exported from@scope3/agentic-contracts/organization-settings. - Non-impersonated platform SUPER_ADMIN principals authenticated to a CHILD account receive
direct_parent_adminwithout a parent membership read. - B1 addition:
GET /api/v2/accounts/organization-posturenow includes requiredauthorityCustomerId(integer — the authenticated account whose authority was resolved) andauthorityEpoch(opaque 16-hex-char string) fields in every 200 response. The epoch encodes all verified authority-bearing inputs (principal identity, credential, customer topology, parent membership, child projection, and delegation) and rotates whenever any of these change. The/auth/meresponse optionally includes the sameauthorityCustomerId+authorityEpochpair for enrolled accounts. Both endpoints derive the epoch from the same authority-proof resolver so the values are guaranteed to match for the same canonical authority state. A UI hook (useOrganizationPosture) is shipped in this slice but has no consumers; it is wired to the posture surface exclusively and carries no lifecycle dispatch, route decisions, redirects, or rollout logic. - Creative Library and Catalog feeds now follow your interface language in German, Spanish, French, Italian, Japanese, Korean, Dutch, Brazilian Portuguese, and Simplified Chinese. Names and content from your account remain unchanged. No action is required.
5.525.0 — September 16, 2026 at 8:42 PM UTC
- An approved media buy now has its flight start re-checked at the moment it is sent to the seller, instead of only when it was first submitted. A start that has since passed is sent as “start now” rather than as a stale timestamp the seller would reject.
- A media buy whose flight has already ended is no longer sent at all. Previously it was retried against the seller every two minutes for six hours, rejected every time, and then went quiet — leaving the buy approved but never placed, with nothing to explain why. It now stops immediately and reports
flight_window_elapsed, so buyers and publishers both see a stated reason and can submit a replacement buy with a current flight window. - Buys with a valid flight window are unaffected.
5.524.0 — September 16, 2026 at 8:17 PM UTC
- The Creative Library composer now lets you choose an eligible product by seller and product name before selecting its creative format. Incomplete seller results remain visible and selectable, with clear options to continue or retry the browse, and saves and previews retain the selected format exactly; there is nothing to change on your side.
- Executing a staged media-buy batch no longer repeats an already-completed campaign link, preventing an otherwise valid batch from failing during concurrent activity.
- Buyer Accounts enrolled in the Creative Engines preview can now browse registered engines and manage provider connections, account selection, and advertiser mappings. Declared support and observed account access are shown separately. Provider prices and generation are not available in this preview.
5.523.0 — September 16, 2026 at 7:29 PM UTC
- Fixed searchable dropdowns being cut off inside dialogs. In the Create account dialog, the option list for a field like additional payment currencies or support channel was clipped at the edge of the dialog’s scrolling area, so options below the cut were invisible and unreachable. The list now opens over the dialog, scrolls with a trackpad, flips above the field when there is no room below, and closes on Escape without also closing the dialog.
- Buyer agents can now browse an advertiser’s visible wholesale products across eligible Sellers with
search(kind: "wholesale_product")before a campaign exists. Passfilter.advertiserId; bounded results include the exact product and Seller IDs needed forcreative_format, and incomplete Seller reads or withheld unsafe identities are reported instead of appearing as an empty catalogue. Seller product search is unchanged.
5.522.0 — September 16, 2026 at 7:01 PM UTC
- The notification bell now shows a dot when you have something unread, instead of a number. The exact count lives in the panel the bell opens, so the bar just tells you there is something waiting. The help, notifications, switch-account and menu icons beside it are quieter too — they carry no background until you hover them, so the top bar reads as one row of icons rather than a row of filled buttons.
5.521.0 — September 16, 2026 at 6:35 PM UTC
- In
/mcp/v3, buyers can now set a media buy’s flight and budget whensave_media_buystages products or accepts a proposal. A total budget applies to a single-product buy; use per-product budgets for a multi-product buy. Flight dates use ISO 8601 datetimes; use a future start time orasapto start immediately. Calls that omit these new inputs continue to work unchanged.
5.520.2 — September 16, 2026 at 6:10 PM UTC
- Inventory-source and other seller workspaces now open at their content height in chat instead of taking over the conversation window when their content is short. Tall workspaces remain capped and scrollable, and the surrounding conversation stays accessible.
5.520.0 — September 16, 2026 at 5:18 PM UTC
- Creatives that name only a format kind now attach to products that declare the same format more than once. Some catalogues list one size under two option ids; that counted as two competing options and the product dropped the creative. Identical declarations are now treated as the one format they describe. Creatives pinned to a specific option are unaffected, and no creative is sent to a seller with an option id we had to guess at. The message shown when a creative genuinely cannot attach now counts the options on the product it failed against, rather than every option on the buy.
- Campaign goals are now opt-in. You can clear a goal without recreating the campaign.
5.519.0 — September 16, 2026 at 4:51 PM UTC
- Brand logos no longer run to the edge of the tile they sit on. A logo is now centred in the avatar’s content slot, so the brand colour behind it reads around the mark and a list of advertisers lines up row to row whatever shape each logo is — a square icon, a wide wordmark, and a logo that carries its own background all render the same size.
- The colour behind a logo is now chosen by looking at the artwork itself rather than by trusting what the brand kit says about it, which is often missing. A white knockout mark gets a dark backing and a dark mark gets a light one, so a logo can no longer disappear into its own tile. An advertiser with no logo and no brand kit falls back to its initials.
- The advertiser-list response no longer carries
logoFill. It said whether a logo should fill its tile, and nothing fills a tile any more. - Fix two agent-facing text issues in the v3 buyer surface.
- Currency lock: the skill now explicitly states that an advertiser’s
primaryCurrencyis freely updatable, while a media buy’s settlement currency is a separate value locked at creation and cannot be changed. The currency mismatch error message insave_media_buyhas been updated to reflect this correctly. - Draft wording: agent-facing prose in
save_media_buyand the buyer skill now uses “draft” instead of “staged/staging” to match the product vocabulary. Status enum values, field names, and wire identifiers are unchanged. - V2 Buyer connectors now publish a smaller tool catalogue so supported AI clients can load it. Existing API inputs and validation do not change, and buyers do not need to take action.
5.518.0 — September 16, 2026 at 4:32 PM UTC
- Optimization goals (
performanceConfig) are now hints you can attach to any campaign — they no longer transfer composition ownership to the platform optimizer. Composition is now controlled byautonomy.inventorySelection. - Before: setting optimization goals made a campaign
performance, which blocked manual seller picks andcreate_media_buyscalls from staging. - After:
autonomy.inventorySelectionowns composition: manual(default) — you pick sellers and products directlypropose— the platform drafts a selection for your approvalautomatic— the platform optimizer owns product selection; manual staging is rejected- Campaigns with goals but without
inventorySelection: "automatic"can now stage manual media buys. To use the platform optimizer, setautonomy.inventorySelection: "automatic"alongside your goals. - Existing performance campaigns are automatically migrated: any campaign with optimization goals and no explicit
inventorySelectionreceivesinventorySelection: "automatic", preserving their current behaviour. - The
modefield on campaign reads continues to returnperformancewhen goals are present,discoveryotherwise — v2 consumers see no change on reads. - Creative Library now confirms that the upload task opened before showing success, and shows a clear error when the task cannot open.
- OpenAI package downloads no longer leave a stale preparation message after the browser starts the download.
- Fix async task poll never firing for third-party seller sources (e.g. PubX) when the seller responds in the final 2 seconds of the discovery budget.
- The SDK call was being aborted by an internal deadline signal 2 seconds before the outer timeout, cutting the connection before the response arrived. Interchange never received the async task ID, so no poll row was created and
tasks_getwas never called. This change gives sellers the full discovery budget to respond, and adds a background flush to recover the task handle if the flush-to-DB races with the deadline. - Seller identity labels in the v3 buyer surface now use
storefrontIdinstead ofsellerId, making it clear the id refers to a publisher storefront rather than an internal account. Searches that reference a seller by name now also match on platform id and publisher domain. When a storefront’s display name disagrees with its publisher domain (for example, a name of “Daily Mail Digital” paired with a domain of “wonderstruck.org”), the domain is shown instead — catching data mismatches at read time without requiring a data correction. - The legacy
connection.customerIdremains available for one compatibility release and is now deprecated. Buyer integrations should move tosellerIdorstorefrontId; we will removeconnection.customerIdin a follow-up release after the transition period.
5.517.0 — September 16, 2026 at 3:46 PM UTC
- When one inventory-source health change also updates Storefront liveness, you now receive one source-health email instead of a second Storefront update for the same change. The Storefront state change remains in your in-app notification history. Nothing to change on your side.
- Buyers receive an incomplete, pollable product-discovery result when a background publication misses the request deadline, instead of an error that requires starting over.
- The V3 buyer agent now requires explicit user confirmation before staging a media buy, even after a proposal round completes. Previously the agent could proceed to
save_media_buybased on a prior direction or conversational momentum without waiting for an active “yes”. After this fix, the agent stops after presenting products or proposals, confirms the exact commitment with the user, and callssave_media_buyonly after receiving explicit approval in the current exchange. The agent also treats any failure or error in the buy flow as a fresh decision point — a “try again” re-proposes and confirms rather than silently re-authorizing the prior action. - Buyer agents can search for and open Sellers whose activation is deferred without receiving a conflict response. No action is needed.
- Parent organizations can now see each child account’s attributed customer IU usage for the current billing period in Plan & Billing. Accounts with no rated activity show 0 IUs; unavailable or unratified usage remains blank.
5.516.0 — September 16, 2026 at 3:06 PM UTC
- OpenAI package downloads now start from a direct click after preparation, so browsers no longer block them as pop-ups.
5.515.2 — September 16, 2026 at 2:22 PM UTC
- Connections can open the advertiser setup flow from the buyer workspace.
5.515.0 — September 16, 2026 at 1:41 PM UTC
- Creative Library uploads can now include searchable tags. After an upload finishes, the agent receives the saved asset’s name, tags, file details, and verified video facts so it can accurately confirm the result and continue building a Creative. Existing uploads need no changes.
5.514.1 — September 16, 2026 at 1:04 PM UTC
- Plan & Billing now opens inside Account settings, keeps its selected tab in the URL, and sends older billing links to the same in-frame destination.
5.514.0 — September 16, 2026 at 12:38 PM UTC
- Interview actions now stay unavailable until their matching workflow is ready, instead of starting a general chat.
5.513.0 — September 16, 2026 at 11:59 AM UTC
- Fixed two bugs that could leave a creative attached to a Meta media buy without ever reaching Meta, or reaching it with no explanation of why it failed:
- A creative attached to a media buy before launch was never recorded against its package, so buyers and their agents saw 0 creatives linked even though the creative was correctly associated internally.
- When a background retry to re-sync a creative to Meta failed, the failure reason was sometimes left blank instead of explaining what went wrong, making it impossible to tell why delivery hadn’t started.
- Standalone accounts no longer show a duplicate organization settings entry, and Buyers without another account or account action no longer see a redundant selector.
5.511.4 — September 16, 2026 at 11:22 AM UTC
- OpenAI package downloads now revalidate the current approved listing before generating the archive.
5.511.3 — September 16, 2026 at 10:39 AM UTC
- Let buyers assemble uploaded Library assets with
save_creativeby passing the exactcreativeFormatIdreturned by Creative format search or read. - You can now upload supported seller material from the Product Marketing Teach page. The page sends the file to private storage and starts processing it; pasted text and existing material are unchanged.
5.511.1 — September 16, 2026 at 9:57 AM UTC
- Package budget updates now return success only after the seller confirms the change. If every seller proves that a rejected update left no upstream mutation, the existing live budget remains in place and the rejected proposal no longer appears as pending approval. Asynchronous and otherwise uncertain outcomes stay pending for reconciliation.
- The Campaigns page now loads self-serve advertiser campaigns correctly. Nothing changes for existing campaign filters.
5.510.0 — September 16, 2026 at 9:02 AM UTC
- Proposal passes now show buyers—and the sellers reviewing them—when a request depends on unsupported attribution or human-fulfilled custom work, so neither side mistakes a limitation for an automated promise.
- Make the current Proposal Pass response the visual focus, show sellers a direct before-and-after comparison after coaching without hiding preserved commercial limits, and keep format previews refreshing reliably while proposal files render.
5.509.1 — September 16, 2026 at 7:17 AM UTC
- Fixed a bug where a creative could stay stuck in a failed/pending-approval state on a Meta media buy after activation, because the background job that re-syncs assigned creatives to the seller wasn’t resolving the format details some Meta placements require. Retrying creative delivery after a media buy goes live now carries the same format information as the initial sync.
5.508.0 — September 16, 2026 at 4:57 AM UTC
- Fixed an issue where MCP apps opened in Ask Murph could open without the original request details. Nothing to change on your side.
5.507.3 — September 16, 2026 at 3:24 AM UTC
- The Plan & Billing Accounts tab now shows intelligence usage by account. Account-level fees and billing delegation controls remain unavailable, and no action is required.
5.507.2 — September 16, 2026 at 3:03 AM UTC
- Open API calls from the Agents workspace’s left navigation on both the buyer and seller sides. It opens the existing Activity widget in the main screen, with chat still available. The shortcut has moved out of Inventory and the general buyer navigation. API keys remain in Settings.
- The seller Agents collection now opens from a standard left-navigation row instead of appearing as a management widget inside the sidebar. Agent creation and selection stay in the main screen.
- Selecting an Agent groups its sections beneath its name. API calls stays separate and account-wide; selecting an Agent does not filter calls or API keys. On narrow screens, use All agents to return to the collection instead of an Agent dropdown.
- Existing access rules and Calls-beta eligibility are unchanged. Accounts outside the beta retain the Changes fallback. Sellers using the older navigation, or a failed-checklist fallback, keep their existing Activity shortcut. No credential or integration changes are needed.
5.507.1 — September 16, 2026 at 2:28 AM UTC
- Plan & Billing → Accounts no longer shows an empty Period fees column. Organization-level billing and account usage are unchanged; no action is needed.
5.507.0 — September 16, 2026 at 2:06 AM UTC
- Creative reads now identify the durable Library asset used to assemble each manifest asset. This keeps the reusable asset and Creative-specific manifest identities distinct while making their provenance navigable.
5.505.1 — September 16, 2026 at 12:58 AM UTC
- For buyers, REST responses continue to provide a numeric
file_size. Verified video sizes includefile_size_status: "verified"; when verification is unavailable,file_sizeis0and the status is absent instead of reporting the length of the URL. No buyer action is required. - For sellers, sales-agent integrations now receive video size, container, and codec through video-specific properties. The existing generic
file_sizeandformataliases remain during the compatibility transition, so current custom integrations continue to work. Unknown sizes are omitted from delivery and size checks under both field names, while older video records keep their available file-type details. No storefront setup change is required. - Show a clear loading indicator while an OpenAI submission package finishes processing.
5.504.0 — September 15, 2026 at 10:29 PM UTC
- The per-buyer auto-approve Page has been retired. New clients should use the storefront-wide media-buy approval setting in AI Business Rules.
- The deprecated V2 REST and MCP operations keep their existing behaviour while clients migrate. Existing V2 buyer overrides therefore continue to apply during this window.
5.503.3 — September 15, 2026 at 10:18 PM UTC
- The Creative Library now accepts the exact Product ID returned by marketplace discovery and checks promoted MP4 container, codec, duration, and dimensions before save. New durable uploads also retain their original filename. After one advertiser-level save, buyers can preview the saved revision and find the Creative once under All creatives. No integration change is required, and no campaign or provider is contacted.
5.503.2 — September 15, 2026 at 10:09 PM UTC
- Source tests no longer blame your agent for a discovery that returned nothing conclusive.
- When you test an inventory source, we run a buyer discovery against it and then select products from the result. If that discovery came back empty, the test told you your source returned no products and suggested your inventory did not match the brief — even when the discovery had not finished, or when it reported no reason at all.
- A source test now says plainly when it is inconclusive. If the discovery had not finished, it says so and names which agents were still outstanding. If the discovery came back with no products, no error, and no explanation, it says it cannot tell a source with no matching inventory apart from a discovery that returned before the source answered. Either way it asks you to re-run rather than drawing a conclusion.
- It does not swing to the opposite claim either: an unfinished discovery is reported as inconclusive, not as our fault, because an agent that did not answer in time may have been slow itself. Where discovery genuinely finished and the source reported products, a skip reason, or an error, the test attributes it exactly as before.
- Every run also records whether discovery had completed when its products were read, so a past result can be re-examined instead of assumed.
- This changes what a source test reports, not how discovery runs or how long it waits.
5.502.1 — September 15, 2026 at 9:01 PM UTC
- When a selected creative format has one compatible asset slot, your agent can now save an advertiser-owned image or video without supplying a slot name. Formats with multiple compatible slots or repeatable groups still require an explicit slot, and any other required assets are unchanged. Nothing to change on your side.
5.500.0 — September 15, 2026 at 6:48 PM UTC
- The creative uploader now points to the correct Close action when it records an asset but cannot dismiss the upload card.
5.498.0 — September 15, 2026 at 6:09 PM UTC
- The menus in the top navigation bar — account, help, workspace picker, notifications, and the organization switcher — now use the new design system, so they match the look of the rest of the product. Opening Ask Murph from the navigation bar no longer reloads the whole app.
5.497.2 — September 15, 2026 at 4:12 PM UTC
- The Advertisers and Campaigns pages load again in the web app. Both pages could open to “Couldn’t load advertisers” (or an empty campaign list) with a Retry button that never recovered, because the page discarded its own read authorization while starting up.
5.497.0 — September 15, 2026 at 2:58 PM UTC
- Buyers can now select Show preview for a saved Creative in the Library. V3
getclients can request the same short-lived, revision-bound preview withinclude: ["preview"]. Direct image, video, and audio sources are renderable; active tag documents return an honest reason rather than exposing nested provider resources or trackers. V3 Creative reads no longer forward the legacy provider preview URL or tracker fields; use the capability-gated preview instead.
5.495.3 — September 15, 2026 at 2:27 PM UTC
- First-time users who return to signup after signing in with an existing password can now continue account setup. If the recovery session has expired or is not eligible, signup shows an error instead of leaving them on the same step. No action is needed unless you encountered this issue; sign in again to retry.
- FreeWheel sellers can now set the execution currency in Inventory Sources without re-entering or replacing source credentials. Existing sources without one must add the currency FreeWheel uses for insertion orders, and it must be one the storefront settles.
5.494.0 — September 15, 2026 at 12:06 PM UTC
- Storefront operators with an approved, expiring lifecycle-test exception can commit the exact test availability row while their Storefront is paused. The row stays out of buyer catalogs and does not count as publisher authorization or activation evidence.
5.492.0 — September 15, 2026 at 11:16 AM UTC
- Buyers can now assemble advertiser-owned image or MP4 assets into a canonical creative format directly from the Creative Library, then save and verify the result without attaching it to a campaign.
5.491.0 — September 15, 2026 at 10:33 AM UTC
- In creative approvals, live previews now stay closed until you choose Show preview and appear in their placement format. Expired or superseded previews do not load; refresh the queue for a current preview. External creative links continue to open separately.
5.489.0 — September 15, 2026 at 7:51 AM UTC
- Buyer agents can now read the exact creative format and slot requirements for visible products before a campaign exists. Use V3
searchandgetwith kindcreative_format, then pass the returnedformatOptionRefunchanged when saving the creative. The read makes no provider call or setup request. Seller-owned product declarations are available without a provider connection; direct-adapter products keep their existing active-connection visibility rules.
5.488.1 — September 15, 2026 at 7:00 AM UTC
- Buyer Library MP4 Creatives can now reach a compatible selected Meta destination when they are attached to a campaign. Interchange rechecks the current buyer, advertiser, account authorization, Library source, format, and revocation state before Meta delivery, without another upload or a private storage URL.
5.486.2 — September 15, 2026 at 5:42 AM UTC
- HTML5 ZIP uploads in the V2 buyer flow now accept one enclosing creative folder and report missing or ambiguous banner dimensions explicitly instead of calling a readable archive corrupt. Hidden export metadata no longer creates extra creatives in the campaign upload UI. Mac metadata is removed from delivered HTML5 ZIPs while creative files and relative paths are preserved. V2 Murph can retrieve saved attachments on a later turn before inspecting them. HTML5 adoption through the V3 connector remains unavailable.
5.486.0 — September 15, 2026 at 4:34 AM UTC
- An empty sales Library now explains which documents to add and opens the existing private file chooser from the drop area. Loading, failed reads, filtered results and narrower empty views keep their existing messages.
5.485.0 — September 15, 2026 at 3:47 AM UTC
- AI Business Rules now keeps a support correlation ID visible when a policy save fails without a usable server response.
- Buyers enrolled in the Creative Engines preview can list creative sessions for a campaign and open them through V3
searchandget. Each session includes its persisted revision, plan, variants and evaluation, subject to current campaign and advertiser access. Session reads do not start generation. V3 session writes andgenerate_variantsare not available in the preview. - Separately, existing V2 creative-session fixes take effect when this release is deployed. They preserve explicit image dimensions and an AudioStack duration, refuse a selected credential when it is unavailable rather than falling back to another key, and return the saved result when a finalized session is retried with the same selected variant, name and message. A batch whose direction labels resolve to the same provider key is rejected before generation. The Creative guide explains retry behaviour and direction-label requirements.
5.484.0 — September 15, 2026 at 3:10 AM UTC
- Library documents you upload now get faithful page and slide previews: PDF pages and PowerPoint slides render as they look, and each page’s inspection state comes from that render rather than a text-only scan. If a page cannot be rendered fully, the Library says so instead of presenting it as ready. Nothing to change on your side; documents already in your Library keep their current previews until they are reprocessed.
5.482.1 — September 15, 2026 at 1:40 AM UTC
- Campaigns opened with an existing relationship or status filter now load the matching list. Invalid filter values and extra filter fields remain rejected.
5.482.0 — September 15, 2026 at 12:49 AM UTC
- Advertiser Creative Library can switch the same loaded results between Grid and List while keeping filters and detail context, and can manage advertiser-owned collections. Refreshes and collection results stay scoped to the current advertiser.
- If your seller account uses a third-party sales agent, Source Diagnostics now shows Storefront availability, Agent certification, and Source health separately. It gives you the next action for the status that needs attention. This release only clarifies existing status; it does not change whether your storefront can transact.
5.481.1 — September 14, 2026 at 11:26 PM UTC
- The Advertisers Page now loads its advertiser list reliably in MCP v3 hosts. Nothing to change on your side.
5.481.0 — September 14, 2026 at 11:00 PM UTC
- Browse Library documents and decks with source-grounded previews, file types, and relevance labels. Search and grouping use the canonical, seller-scoped Material read projection while keeping source mentions, catalog links, suggestions, and seller confirmations distinct.
5.480.0 — September 14, 2026 at 10:34 PM UTC
- Promote finalized image and video uploads into durable advertiser asset records, expose them through V3 search/get, and let
save_creativeassemble reusableassetIdinputs. - Seller decision details now leave buyer advertiser and buying-operator identity unknown when a captured brief request omits them, instead of presenting compose-run fallback data as buyer-declared identity.
- Start storefront brief tests from Storefront Briefs. Test Runs no longer appears in navigation or starts new runs; historical links still open during the rollback window, and Fix this run remains available for failed or stalled records.
- Provisioned Demo Storefront accounts can open their Demo Storefront page from the setup rail without modular source access.
5.478.0 — September 14, 2026 at 9:25 PM UTC
- Advertiser-owned creative collections can now be read and changed through the existing creative collection tools. Changes require the current collection revision, support name or description and saved-creative member changes, and do not attach a campaign or add executable behavior.
- Creative collection search now accepts an explicit advertiser scope, and
save_creative_collectioncan create an advertiser-owned non-executable collection without attaching it to a campaign or changing membership. - When a seller investigates a media-buy mutation that did not go out, Source Diagnostics and Murph now show the intended mutation, any capability check that did run, and whether Interchange stopped before sending the mutation. The view identifies Interchange as the owner of that local stop and directs the seller to the recorded evidence while Interchange resolves the local setup failure and retries through the normal operation path; it does not ask the seller to change their Agent or Source configuration.
- Opening a seller from the connections widget now shows a tabbed detail in place — Connections & advertisers and Controls — instead of a side drawer. It lays out your media partners, the accounts each connection authorizes, and the advertisers mapped to them, with icon statuses (hover for detail) and inline actions; the advertiser search now filters whichever tab you’re on. Section and tab labels are clearer too: Media Partners, Connections, and Controls.
5.477.3 — September 14, 2026 at 8:51 PM UTC
- New signups no longer inherit a retired Seller account or its billing family from an email-domain match. Child accounts and archived Seller accounts now require an explicit invitation or support-led recovery. Sign-in fallback also ignores historical permissions on inactive accounts. No action is needed for active standalone accounts.
5.476.0 — September 14, 2026 at 7:20 PM UTC
- Inventory Sources now distinguishes a healthy ad-server connection from whether that source can accept a new buy. If execution currency blocks buying, the page names the blocker and keeps seller-owned actions separate from work Scope3 must complete instead of saying that nothing needs attention.
- Show seller-facing Core reporting capability, exact Source attribution and health, and retained obligation/revision evidence without treating one Source as Agent-wide health.
5.475.0 — September 14, 2026 at 6:19 PM UTC
- Library Material search and lookup now show source file type separately from business format tags, and keep topics, audiences, product relationships, suggestions, and seller-confirmed applicability distinct.
- Material
getcan now includerepeatsto show separate readable units with the same complete rendered preview in one rendering configuration. Each unit keeps its own source, rendition, and place in the document. Results are bounded and may be incomplete. This comparison does not mean the Material has the same meaning or is an approved template, and seeing a result does not make it available for model use or reuse. - Library Material searches can return indexed evidence matches from current readable source units, with source and inspection identities but no source text.
5.474.2 — September 14, 2026 at 5:55 PM UTC
- Run transaction validation from Required to go live now opens the exact Agent and inventory source that needs proof. If Interchange cannot identify one active Agent connection for the inventory source, it explains whether to connect the source or reconcile its connections instead of reopening Seller Setup.
5.474.0 — September 14, 2026 at 5:19 PM UTC
- v3
get_deliveryseller delivery responses now include two new fields:period(the resolved reporting window —startandenddates) andtotals(an additive rollup of impression and click metrics across all matched rows). Non-monetary metrics such as impressions and clicks are available intotals; monetary metrics are unavailable because seller delivery data does not carry currency. No changes to existing calls are required — the new fields appear alongside the existing response without breaking current usage.
5.469.1 — September 14, 2026 at 2:26 PM UTC
- Murph chat no longer blocks new messages when it crosses the 24-hour token threshold. Gemini-backed chats also avoid repeating expanded tool instructions between steps, reducing token use. The runaway-use safety backstop is unchanged.
5.469.0 — September 14, 2026 at 2:05 PM UTC
- Seller RFP responses and proposal files now begin processing when they are queued instead of waiting for the next periodic worker check.
5.468.0 — September 14, 2026 at 1:06 PM UTC
- Inventory Components now keeps the publisher-property coverage option you choose when it prepares a product for review. Coverage for all publisher properties and for tagged properties is sent exactly as your source provides it.
5.467.0 — September 14, 2026 at 12:36 PM UTC
- Inventory Components now asks you to choose the publisher-property coverage for a draft product. A single source-provided option is selected automatically; when several are available, choose the one that covers the product before review. The product check no longer adds a contradictory advisory when the ad server already reports missing coverage as a blocking issue.
- Connections now waits for its owner-authorised Page session before loading or changing seller connections, and lets the user retry a failed launch.
5.466.0 — September 14, 2026 at 11:34 AM UTC
- Buyers can now assemble finalized image and video uploads into an advertiser Creative before a campaign exists. Campaign-scoped saves still create and attach in one operation.
5.465.0 — September 14, 2026 at 11:13 AM UTC
- Inventory Components now loads each product’s complete editable definition before you save. Review and update canonical formats and their parameters, placements and inventory, targeting, video placement types, channels, and every pricing option, while source-managed fields remain visibly read-only. The editor validates complete and repaired products and safely patches only your changes, preserving every untouched field. Blank or null optional JSON and unsupported delivery-type clears are rejected rather than silently retained. Legacy FreeWheel products can still receive non-inventory edits; inventory changes clearly require a current Ad Unit Package.
- Your Listing page is now four steps you complete in order: Identity, What you do, Listed on Interchange marketplace, and Public distribution, where you add the paid Distribution package and point your own domain at Interchange. Once that step is live, the Distribution tabs below let you add app destinations, starting with the ChatGPT app, and each tab lists the steps it still needs. Your existing listing, domain, and ChatGPT app setup carry over, so there is nothing to redo.
5.464.4 — September 14, 2026 at 10:30 AM UTC
- AI Business Rules now keeps a failed policy draft and shows the save reason, recommended action, and support correlation ID.
5.464.3 — September 14, 2026 at 10:09 AM UTC
- In Configure connection, you can load a published contract as a new higher-version draft. The published version remains unchanged; retry if its canonical definition cannot be read.
- Creatives pinned to a format from an earlier product discovery now stay attached when rediscovery returns the same requirements under a new synthetic format ID. Interchange uses the current format automatically when the media buy runs; nothing changes on your side.
5.464.0 — September 14, 2026 at 8:50 AM UTC
- FreeWheel product drafts in Inventory Components now require an Ad Unit Package and keep it alongside the selected site or site group. Empty package lists and package-loading failures are shown separately so an incomplete draft cannot advance to review. Product creation for other ad servers is unchanged.
- Buyers can now add an agent to a room they own.
- Buyer administrators now see clearer agent setup, access, lifecycle, and error guidance.
5.463.1 — September 14, 2026 at 7:30 AM UTC
- The Inventory Selector now separates FreeWheel targeting from delivery binding. Sellers can choose where a product runs using sites, sections, site groups, series, or video groups, then independently choose the ad-unit packages that provide its delivery slots.
5.463.0 — September 14, 2026 at 6:14 AM UTC
- Sellers can now create a Sales Agent in the standard Agent workspace, attach it to a new inventory Source without leaving that workspace, test its
get_productspath directly without spending, and follow an end-to-end guide for validation, diagnostics, certification, and distribution. Source creation and attachment now complete as one operation, so an interrupted response can be recovered by refreshing the Agent instead of submitting the connection form again. - When you try to change the agents in a room you do not own, the error now says you do not own the room instead of reporting that the room was not found.
5.462.0 — September 14, 2026 at 5:33 AM UTC
- Use
upload_creative_assetin Buyer V2 or V3 to upload a JPEG, PNG, or MP4 without sending the file through chat. Uploading alone does not create or attach a Creative. To use the asset in a campaign, call V3save_creative, bind the returned asset reference to each required canonical format slot — including a thumbnail for video — and select a destination before provider delivery can begin.
5.461.0 — September 14, 2026 at 4:33 AM UTC
- Snap Pixel-optimized media buys (Web Conversions and other pixel-based products) now get a clear, actionable error when the selected Snap Pixel doesn’t yet have enough tracked conversion events, instead of an opaque “ad platform rejected the request” error. When Interchange can confirm this up front, it refuses the buy before creating anything on Snap, so the buyer sees the real reason (and can wait for more events to accumulate, or choose a different product/optimization goal) rather than a rolled-back campaign with no explanation.
5.460.0 — September 14, 2026 at 3:05 AM UTC
- Enrolled buyers can use V3
searchandgetto discover registered Creative Engines, then usesave_connectionto authorize an engine, select a provider account and map it to an advertiser. Existing seller connection calls and their default results remain unchanged. This preview covers registered engines only. It does not include the Creative Engines Page, V3 generation-session tools, pricing or settlement, provider qualification, or arbitrary external MCP services. - In the existing V2 creative workflow, AudioStack voiceovers now render through Audioform at the script’s natural spoken length without background music. API-key connections expose one credential-scoped provider account for advertiser mapping before generation. When an image-generation request starts with brand context but no prior creative assets, it is treated as a new draft: Interchange preserves the initial brief and creates the requested variants.
5.459.2 — September 14, 2026 at 2:47 AM UTC
- Fixed
sync_creatives(REST and MCPapi_call) failing withaccount_grant_inactivefor direct/official-adapter storefronts (Meta, TikTok, Snap, and similar). These storefronts authorize buyer accounts through the adapter’s own credential, not through the storefront relationship/grant model, and the buyer-facing sync path was checking the wrong one.
5.458.4 — September 13, 2026 at 11:19 PM UTC
- Sellers enrolled in the Product Marketing corpus can open their material Page from Teach my agent without starting a chat. Sellers outside the rollout keep the guided conversation.
5.458.3 — September 13, 2026 at 10:17 PM UTC
- OpenAI submission packages now download successfully while the Listing page refreshes their status.
5.458.2 — September 13, 2026 at 9:54 PM UTC
- Fixed two issues that could block getting a creative live with a sales agent.
list_creatives,list_campaign_creative_manifests, andsync_creativesnow find every creative attached to a campaign — some attachments were previously invisible to these calls, which blocked retrying a sync after fixing a rejected creative. Separately, a click-through URL now must be provided in the URL field; providing it as plain text is rejected with a clear error instead of being silently dropped every time the creative syncs.
5.458.1 — September 13, 2026 at 9:38 PM UTC
- Hands-on buyer teams using REST API, MCP, or S2S proposal-request integrations now keep each response bound to the exact campaign revision and brief that created it. A reused provider proposal ID cannot be attributed to a different request. No action is needed and existing integration contracts are unchanged. Seller indirect audience is not applicable: this changes no seller-facing surface or contract.
5.455.1 — September 13, 2026 at 6:06 PM UTC
- Fixed a sign-in loop that returned users to the login page immediately after successful authentication.
5.455.0 — September 13, 2026 at 5:43 PM UTC
- Make the Demo Environment Notice open reliably and keep the attached-source count grammatically correct after live source changes.
5.453.0 — September 13, 2026 at 4:28 PM UTC
- Browser authentication now requires WorkOS session tokens to target the configured application.
5.452.0 — September 13, 2026 at 3:23 PM UTC
- Agents now opens and stays inside the standard seller workspace, preserving workspace navigation, chats, settings, and the composer while an Agent is selected. Partner-entitled organizations also receive the same Agent collection and creation launch access as enrolled organizations.
5.451.0 — September 13, 2026 at 2:37 PM UTC
- Show creative upload byte and inspection progress, keep Claude informed as inspection advances, and show a completed state when a host retains the widget.
5.449.0 — September 13, 2026 at 1:20 PM UTC
- Choose an Interchange plugin package for the job you need to do. Buyers get separate packages for account setup, campaign management, creative management, and reporting. Agent developers get a sales-agent testing package. Agentic Media Companies get packages for listing, merchandising, distribution, campaign management, and self-serve buying.
- Storefront operators can now see the Anthropic and Claude distribution path alongside OpenAI. OpenAI reviewer access lasts 90 days after the reviewer confirms receipt, and downloading the same submission bundle more than once no longer creates a conflict.
- Installing a package does not change pricing, storefront listings, or account access. Existing Interchange plans and OAuth permissions still decide which tools and accounts each person can use.
5.447.1 — September 13, 2026 at 12:29 PM UTC
- When your AI assistant sends you to Interchange to upload a creative, the campaign page now accepts private MP4 uploads up to 2 GB instead of rejecting files larger than 50 MB. After inspection, the page keeps a visible upload receipt. MP4 uploads still only store and inspect the file; creating or attaching a campaign creative remains a separate step.
5.447.0 — September 13, 2026 at 12:08 PM UTC
- People using Interchange through chat or the UI do not need to configure anything new. Buyers and sellers may be shown an approved public agreement as reference material, but this does not accept terms, reveal private agreements, or decide which agreement governs an account.
- MCP builders can discover approved public agreement revisions through the existing
docssearch source, then read an exact revision or section and continue a long read without starting over. API developers can read the same immutable public text or download the complete document through the focused/api/v3/documentsresources. - Monetization: none. These read-only resources do not change packaging, billing, or feature access.
- Measurement: monitor successful, not-found, and unavailable reads for the two public-document HTTP operations and exact-revision MCP reads. HTTP and MCP acceptance checks must return the same approved revision and content hash.
5.445.0 — September 13, 2026 at 11:18 AM UTC
- Hosted buyer-agent operators can now give a deployed runtime a short-lived, read-only Interchange identity instead of storing a long-lived credential in the runtime. The deployment orchestrator provisions an installation binding, mints a token with a 15-minute default lifetime, and refreshes it before expiry; normal buyer credentials, human sessions, and the runtime token itself cannot call those endpoints or gain administration authority.
- This is opt-in for hosted runtimes only. Existing buyer automations and seller workflows do not change, and sellers have no new UI, ranking, inventory, or authorization effect. There is no pricing, entitlement, billable-surface, or Interchange Unit impact. The hosted-runtime handoff guide documents the orchestrator-only flow and its fail-closed binding prerequisite.
- Configured means an orchestrator has provisioned an active runtime-token binding for an installation; using means it has successfully minted or refreshed a runtime token. Track successful provisioning, mint, refresh, and runtime-token authentication events, alongside rejected mint/refresh requests and lifecycle-invalidated token attempts, before expanding hosted creation.
- Storefront connections now use AdCP 3.1 by default. Requests pinned to stable AdCP 3.2 use the compatible 3.1 contract, while prerelease 3.2 requests return a clear unsupported-version error. Clients already using an advertised Storefront version do not need to make any changes.
5.444.0 — September 13, 2026 at 10:36 AM UTC
- On
/mcp/v3, documentation search now prioritizes public guidance for the active Buyer, Seller, or Organisation account and explains each result’s relevance. MCP builders can passdocsScope: "public_research"to search across all public documentation; this changes discovery only and never grants access to private content or customer objects. Existing clients need no action, and the change does not affect how buyers see sellers.
5.442.7 — September 13, 2026 at 8:17 AM UTC
update_campaignnow always protects against two concurrent updates to the same campaign silently overwriting each other. Previously, this concurrency check only ran when the caller suppliedexpectedRevision; now the campaign’s own revision is always used as the check, even when the caller doesn’t. If a concurrent update wins the race, you now get a409 CONFLICTtelling you to re-read and retry, instead of silently reverting the other request’s already-applied change.
5.442.4 — September 13, 2026 at 6:52 AM UTC
- Murph escalation triage now probes only public, credential-free URLs, validates every redirect, and pins validated DNS destinations before connecting.
5.442.0 — September 13, 2026 at 5:15 AM UTC
- Printable discovery-card downloads now allow a cold browser start up to 15 seconds before timing out.
- Amazon campaign end dates now stay on the selected UTC calendar day when media buys are updated. Nothing to change on your side.
- Murph chat recents remain responsive when an older conversation needs its title repaired and its account details are unavailable.
- Show a current first-party Discovery submission package as ready for the OpenAI portal without requiring a second custom app hostname.
- New Listing + Distribution offers include unlimited self-serve advertiser invitations and management instead of a ten-advertiser allowance. Existing accepted and negotiated offers continue to use the self-serve advertiser capacity stated in their terms.
5.441.3 — September 13, 2026 at 4:28 AM UTC
- Sellers with a configured third-party Agent source can now view bounded physical transport attempts alongside logical Calls in Murph. Source-attributed and shared-Agent evidence remain separately labeled, and an evidence-read outage does not hide the existing Calls view.
- Buyer-side behaviour is unchanged. This adds no billable surface, packaging, unit economics, or product differentiation. It introduces no new adoption event because it is an additive view within an existing diagnostic journey; the existing authenticated request-audit record for
GET /api/v2/murph/agent-debug-calls, together with the returned bounded transport-attempt counts, provides the usage and acceptance signal. - Storefront Agent Page access now follows a stable application-owned account profile, preserving the existing experience independently of analytics targeting changes.
5.441.2 — September 13, 2026 at 3:48 AM UTC
- Verify the active platform route before atomically transferring first-party Distribution hosting, so a public listing cutover can complete without requiring the replacement route to be live first.
5.440.0 — September 13, 2026 at 2:32 AM UTC
- After completing buyer qualification for the pre-launch program, the success screen now makes clear that your details are still under review and that the solutions team will follow up.
5.439.0 — September 13, 2026 at 2:13 AM UTC
- Keep non-interactive creative upload deeplinks on the requested advertiser and campaign while the buyer workspace initializes its chat scope.
- In v3 MCP, you can now use
save_advertiserto create, update, and archive test-only sandbox advertisers before claiming your buyer operator identity. Nothing changes unless you want to test in sandbox; live advertisers and all other readiness requirements still apply.
5.438.0 — September 13, 2026 at 1:36 AM UTC
- Organization administrators can register an Agent’s current observed implementation as an immutable production revision without interrupting active Inventory Sources.
5.437.0 — September 13, 2026 at 12:55 AM UTC
- Buyer integrators now have one architecture guide that distinguishes an interactive MCP client or application from a registered buyer agent, while covering external-agent administration, optional creative pipelines, the portable asset-and-creative handoff, hosted-orchestration limits, approval boundaries, launch confirmation, and reporting ownership.
- MCP v3 now lists both Buyer and Seller tools for people who can operate in both account kinds, while each call remains authorized against the selected account.
- Sponsoring sellers can now edit a client’s self-serve campaigns directly from the shared rail — no need to route changes back through the client. Every edit made this way is labeled “Edited by [seller organization] (operator)” so both the client and the seller always know who made the change.
- Persona pass.
- Seller: can make the same campaign changes available to its client from the sponsored Campaigns Page. No separate setup is needed.
- Sponsored self-serve buyer: sees each sponsoring-seller edit in campaign history as an operator action, including the seller organization. The buyer can continue editing the same fields itself and needs no action.
- Packaging and monetization.
- No pricing, entitlement, or metering change: this extends the existing seller campaign-management workflow for an already sponsored self-serve account.
- Availability and exposure.
- This ships without a new flag because the request is already parameter-gated: only an active sponsorship, the seller’s existing campaign-management capability, a self-serve child advertiser, and the seller-owned Storefront prove access. It does not expand to External, Delegated, advertiser-scoped, or child-bound principals. The current ruling is the expansion boundary; a future product decision may limit it to oversight-only fields. Immediately suspend the sponsorship or the seller’s campaign-management eligibility to remove access.
- Measurement.
- Acceptance: a sponsored seller can edit an eligible client campaign and both the client history and seller activity list show the operator line; every ineligible principal is denied.
- Adoption: first successful
save_campaignorsave_advertiseraudit record withparameters.operator.role = operatorper sponsoring seller. - Usage: successful operator-attributed campaign edits per sponsored buyer account, monitored alongside denied scope proofs and write failures.
5.436.0 — September 12, 2026 at 11:38 PM UTC
- Seller administrators can now complete Distribution and ChatGPT setup in the Branding & distribution Page, while technical operators can run the same guarded steps with an MCP agent. Both paths edit one shared storefront profile and clearly separate it from ChatGPT-only category, hostname, verification, reviewer access, and submission-package settings. Leave both icon overrides empty to use resolved brand identity automatically, or upload both the directory and composer PNGs; new one-sided manual uploads are rejected. Existing one-sided icon setups continue working during migration, so existing apps need no action. Printable PDF cards remain a Page-only download so their bytes never enter an agent conversation.
5.435.0 — September 12, 2026 at 11:16 PM UTC
- In Interchange’s buyer console, the Agents page now shows a buyer agent’s name, lifecycle state, credential count, and advertiser-access summary in one place, and lets an administrator rename it, or suspend, resume, and retire it directly. Suspending or retiring still requires retyping the agent’s exact name and retiring is permanent — none of this changes advertiser access or billing; access is still granted separately on the Access tab.
5.434.0 — September 12, 2026 at 10:40 PM UTC
- Directly authenticated buyer-organization administrators can now create an external buyer agent, rename it, set its exact advertiser access, and suspend, resume, or retire it from their agent workflow. Hosted buyer-agent creation is not available here, and existing agent connections do not change. Start with the buyer-agent credentials guide. This does not change what buyers see about sellers, seller storefront presentation, or seller setup.
5.431.0 — September 12, 2026 at 8:10 PM UTC
- Allow V3 connections to switch accounts before Terms acceptance so they can reach the account that needs setup and inspect its next action.
- Return an authenticated Interchange upload deeplink when an MCP client cannot render the creative upload Task, preserving advertiser and campaign context.
5.430.0 — September 12, 2026 at 7:40 PM UTC
- The Listing page now separates the current listing status from its publish destinations. A printable card appears only after a revision is live, and a failed publish names the attempted destination while keeping the confirmed status visible.
- ChatGPT setup now leads with one next action, with detailed configuration under App details. Temporary reviewer-status failures can be retried, while a missing entitlement points to Plan & Billing.
- No action is required. Buyer-facing discovery results are unchanged.
- When you ask Murph to find advertising options, it now follows the same search while sellers respond and keeps earlier options as more arrive. It tells you whether a search finished with no matches or is still waiting, and checks that your selections belong to that search before saving them. You can correct a request rejected before the search starts and continue in the same conversation. No setup is required.
- For buyers using REST, MCP, or server-to-server integrations outside Murph, continue using your client’s polling policy and the existing execution ID, campaign revision, idempotency key, and result cursors. This update adds no required request fields or integration setup; direct clients still control their own waiting and retries.
- Sales Agent validation from the Agent Page and Source Diagnostics now keeps one deterministic run in flight per action and returns its run-specific zero-model-token receipt.
5.428.0 — September 12, 2026 at 6:28 PM UTC
- Scrappy builder and power-buyer teams can now inspect a registered buyer agent in the Interchange API, including its identity, lifecycle, active credential facts, exact advertiser grants, and notification configuration. It gives the people building and testing an automation one place to check what Interchange recognizes without treating a credential or organization membership as permission to buy.
- Existing integrations require no change. Access remains limited to directly authenticated organization administrators and an agent reading only its own record; advertiser access remains an explicit grant. Enterprise, agency, and chat buyer workflows do not change. Sellers’ storefronts, inventory, ranking, and seller-facing experience do not change. This is included with the existing buyer API: it adds no entitlement, price, billing, or Interchange Unit use.
- The capability is alpha and structurally admin-gated, with no deployment flag. It is an atomic release: expansion is limited to eligible directly authenticated organization administrators after direct-human authorization, cross-organization isolation, zero-authority behavior, and grant-readback validation pass. Any unexpected authorization, cross-organization result, or authority without an explicit grant pauses the release and triggers rollback of this buyer-agent read surface; existing authentication and buying workflows remain available.
- We will measure first buyer-agent inspection per organization as adoption; repeat buyer-agent readback as usage; and buyer-agent read failures, grant-readback failures, and rejected non-direct-human, cross-organization, or over-broad search requests as guardrails. At 30/60/90 days, review adoption, repeat use, error/rejection rates, and whether documentation clarifies the common safe setup question; none of these signals weakens the authorization boundary.
- Add revision-fenced advertiser access editing to buyer-agent management.
- Buyer-agent administrators grant each connected agent read or read-write access to exact advertisers from the agent’s Access tab; the editor keeps unsaved changes until Save or Discard and reloads on a revision conflict.
- Sellers are not affected: this changes only a buyer organization’s own agent-to-advertiser grants and nothing a buyer sees about a seller.
- Monetization: no new billable surface. Advertiser access control is part of the buyer-agent management included with the buyer plan; it makes hosted and external agents safe to connect, which is the precondition for agent-driven spend on the platform.
- Creative submissions to direct provider storefronts now use the authenticated provider account through manual review instead of incorrectly requiring a managed storefront account grant.
- Fixed an Interchange-side response handoff delay that could incorrectly mark configured seller storefronts unhealthy during account-scoped product discovery. No seller action is needed; submitted-task recovery and retries retain the original account context.
5.427.0 — September 12, 2026 at 5:05 PM UTC
- No action is needed. Reporting polls for configured Agent sources now leave safer, more complete diagnostic evidence for support investigations, and reporting continues even when that evidence cannot be recorded.
5.426.0 — September 12, 2026 at 4:24 PM UTC
- Buyer access links from Scope3 now open the Interchange signup flow directly, preserve campaign attribution through sign-in, and collect the same required qualification details on every waitlist path.
5.425.0 — September 12, 2026 at 3:56 PM UTC
- Buyers can now configure per-campaign autonomy settings on
save_campaignthat persist across sessions. Two independent dimensions —inventorySelectionandrebriefing— each accept one of three modes:manual(buyer acts),propose(agent drafts, buyer approves), orautomatic(agent acts without per-action confirmation). The preference survives session restarts; omitting a dimension on update leaves it unchanged. - Sellers are not affected: autonomy is buyer-configured campaign behavior with no seller-visible effect on storefront, ranking, or presentation.
- Plan & Billing no longer shows an empty Orders & quotes card before that functionality is available. Pending IU offers remain under Plan & pricing, and accepted plans remain in IU plan history. No action is required.
- V3 buyers can inspect a selected product’s declared demographic-overlay support and age ranges while reading proposals. When capability details do not fit in one result, a signed cursor returns the next page from the same completed request or saved proposal and identifies when the result is complete.
- This is discovery and readback only. It does not activate public AdCP 3.2 execution or send demographic selections to sellers: application seller transport remains on AdCP 3.1, so
save_media_buyrejects demographic overlays before seller dispatch. Existing seller request shapes do not change. - There is no plan, entitlement, pricing, or usage-charge change in this slice. Existing
save_media_buycalls without demographic age-range selections are unchanged. - Sellers: No action is required. Buyers can read existing declared capability facts, but Scope3 does not send a new demographic targeting request to an existing seller connection.
5.424.0 — September 12, 2026 at 2:50 PM UTC
- Your campaigns can now carry structured targeting intent. Pass a
targetingobject tosave_campaignon the V3 MCP surface (/mcp/v3) and the campaign stores it — geography (countries and DMAs), language, device type (CTV, mobile, desktop), daypart, and demographic dimensions. Targeting is returned in the campaign workspace so any subsequent read sees what was set. - For teams managing multiple campaigns at scale, targeting intent travels with the campaign object in a single workspace read — no separate lookup needed. For programmatic integrations, each dimension is an array of requirement entries with a stable
requirementId, astrengthofrequiredorpreferred, and the values to include or exclude; update targeting by callingsave_campaignagain with the revised object. For buyers working through Murph or a chat surface, targeting set via the tool appears in the campaign workspace immediately. - The
targetingparameter is optional — existing calls and campaigns are unaffected. Sellers: this is buyer-side only and does not affect storefront ranking, readiness, or presentation. Delivery enforcement is tracked separately and is not yet active. - This ships ungated:
targetingis purely additive. Every buyer account can use it from day one; callers that omit the field see today’s behavior unchanged. No billing change — targeting is campaign metadata, not a separately metered surface. - Murph now routes unqualified questions about what teammates were chatting about to conversation search and shows safe evidence from the title, participant, or message that matched, including older message matches outside the recent transcript preview. This lets Murph answer from the result instead of trying Slack or incorrectly reporting that only recent messages were searched.
- Buyer agents can now configure campaign optimization goals through
save_campaignon the V3 buyer surface. SupplyoptimizationGoalsas a ranked array — the primary goal is at index 0, with up to 10 goals total. - Two goal kinds are supported. An
eventgoal targets conversion events delivered by configured event sources, with optional cost_per, ROAS, or maximize_value targets and attribution windows. Ametricgoal targets a seller-tracked delivery metric (clicks, views, completed_views, viewed_seconds, attention_seconds, attention_score, engagements, follows, saves, profile_visits, reach), with optional cost_per or threshold_rate targets. - Campaigns that do not include
optimizationGoalsare unaffected — seller execution for those campaigns is unchanged. Sellers receive the ranked goal list during campaign execution and apply it within their delivery capabilities. This is a buyer-configured field; seller-side delivery behavior is governed by each seller’s own optimization support.
5.423.1 — September 12, 2026 at 12:43 PM UTC
- Creative uploads opened in Claude can now send selected files directly to private storage, and failed browser transfers are reported to operators without including creative content, filenames, or signed upload details.
5.423.0 — September 12, 2026 at 11:17 AM UTC
- Clarify neutral no-match, stalled, and genuine run failures in seller run details, with safe recovery guidance and recorded buyer identity. Buyer identity remains available only to the authorized seller of the recorded storefront; this introduces no buyer-facing lookup or inferred account mapping.
- Browser SSO sign-ins now complete reliably. Existing sign-in methods are unchanged.
- Asking an AI agent to “show me all sellers” no longer triggers both a seller search and the Connections page at the same time. The agent now routes seller and connection discovery exclusively through
open_connections_page. No changes required for programmatic callers —search(kind: seller)andsearch(kind: connection)remain valid on the V3 wire contract. - The
save_campaigntool now correctly labels flight dates as datetimes and rejects a start in the past, preventing the midnight-UTC same-day start bug and grounding date arithmetic. get_products(anddiscover-products) no longer stalls a cold-start caller with an opaque advertiser-context error. If your account has exactly one active advertiser we now use it silently, so a request with noext.interchange.advertiser_id,X-Advertiser-ID, or advertiser-scoped credential just works. If your account has several (or none), the error now names each candidate asadv_<id>so your agent can pick the right one on the next call. Explicit sources still win — no change is required if you already pass an advertiser id.- If your seller account is outside a request’s market or channel, you will no longer receive a brief for that request. No action is needed from sellers, and buyers have no new workflow or action to take.
- The Merchandising Agent interview now separates facts awaiting confirmation and gaps that block a practice brief from optional delivery setup needed only before live activation. Practice proposals also distinguish source-backed facts, assumptions, and manual confirmation instead of inventing commercial or delivery details.
- Product Marketing now summarizes confirmed selling points, pending reviews, processing material, and recorded gaps before you inspect each source.
5.422.0 — September 12, 2026 at 10:17 AM UTC
- Buyer delivery reports now show flight-to-date totals when sales agents send daily delivery using an end-exclusive reporting window. Daily buy and package counters are retained in the delivery ledger and accumulated across the flight; no action is required from buyers or sellers.
- Through the V3 MCP, seller agents can now find and inspect seller-owned account relationships with external buyers, admit or decline seller-controlled pending requests through
save_seller, and open the existing relationship-scoped Media Buys and Delivery page. Decisions use the request’s current version, so stale writes cannot overwrite a newer decision. Existing relationships and buyer-side admission behavior are unchanged; no action is required unless you want your seller agent to use this workflow. - Campaign reads now include a
readinessfield with astatus(readyornot_ready) and specificreasons(no_budget,no_staged_buys,flight_not_started,flight_ended,advertiser_missing) so agents can give buyers actionable next steps instead of showing a misleadingactivephase when the campaign cannot actually deliver. - Campaign delete no longer holds the budget lock while issuing upstream cancel requests to the seller ad server.
- The lock is now committed before each seller cancel call and re-acquired for the final check and archive write. This removes a latency spike that could block concurrent campaign edits for the full duration of a seller-cancel round trip.
- Ask Murph keeps your latest sent message and its response visible while the response or an in-chat widget loads more content. Scrolling up to review earlier messages still pauses automatic following until you return to the bottom.
- Snap media buys targeting Australia exclusively now automatically include only 18+ audiences to satisfy Snap’s Australian minimum-age regulation. If you explicitly request 13-17 targeting on an AU-only buy, the buy is rejected with a clear error before it reaches Snap.
- Snap media buys no longer fail creation with a generic “The ad platform rejected the request as invalid” error caused by Snap rejecting our targeting-expansion shape as internally contradictory. The adapter now sends the standard “no expansion” signal instead of the regulated-sector-only shape it was previously using by default.
5.419.0 — September 12, 2026 at 1:08 AM UTC
- Murph now makes one tool-capable recovery attempt with an independent model when its primary model cannot complete a response. Account lookups and actions keep the same authorization and confirmation checks, with nothing to change on your side.
- Creative observation no longer reports the analytics beacon Cloudflare adds to pages on the Interchange render origin as a domain the creative called or as a tracking pixel. Only that injected script and its beacon post, issued from the render origin’s own frame, are left out. Requests the creative makes from its own page, including to the same hosts, are still recorded; a creative that embeds Cloudflare Web Analytics inside the render frame itself is the one case the observer cannot tell apart.
- Seller Agent navigation controls now have accessible labels for assistive technology.
- Show preview on the Approvals page in the Interchange web app now loads the creative’s live preview. The web app’s widget host refused every frame, including the render origin, so the preview panel fell back to “Nothing to preview for this format”. The host now allows the frames a widget declares, and nothing else.
5.418.0 — September 11, 2026 at 11:22 PM UTC
- Organization administrators can now grant a buyer agent access to specific advertisers as read-only or read-write through the buyer-agent principals REST API. Changes take effect on the agent’s next advertiser operation and notification-delivery attempt.
- Buyer agents without configured grants cannot access advertisers. Registering an agent, issuing credentials, or organization membership does not grant advertiser access. This buyer-side control does not change sellers’ storefronts, inventory, ranking, or buyer-visible seller information.
- Campaign creative creation and updates now map uploaded files to declarative repeatable format slots, including carousel cardinality validation and correction controls.
- Proposal PDF downloads render correctly in common PDF viewers.
5.417.0 — September 11, 2026 at 9:59 PM UTC
- On the shared
/mcp/v3connector, select a buyer-owned advertiser to upload a local JPEG, PNG, or, for enrolled buyers, MP4 to private storage. Each upload is bound to the buyer, authenticated principal, and advertiser; it neither selects a destination nor confirms provider delivery. Finalized JPEG/PNG sources can be adopted throughsave_creative. MP4 remains upload-only on V3 pending explicit human approval of its adoption contract. The V2 provider-bound Legacy adoption path remains a separate handoff and is never a fallback. - Activity’s Calls API now returns an
mcpHosthint for newly recorded MCP calls when it recognizes a host, such as ChatGPT or Claude; accounts with the Calls view enabled see the same label there. The caller supplies this diagnostic hint, so it is not identity or authorization evidence; it isnullfor older calls, non-MCP calls, and unrecognized hosts. Nothing to change on your side: use the Calls API, or Activity’s Calls view where it is available, when you need to inspect the hint. - Proposal composition now keeps a dedicated verification window after corrective model passes, preventing valid corrected proposals from falling back because generation consumed the verifier’s entire time budget.
5.416.2 — September 11, 2026 at 8:25 PM UTC
- Keep seller setup tasks and collapsed widget expand controls available before a chat begins.
5.416.1 — September 11, 2026 at 7:46 PM UTC
- Branding & distribution now opens Plan & Billing reliably and lets every eligible Public storefront request and revoke its own ChatGPT reviewer sandbox. No action is needed.
5.416.0 — September 11, 2026 at 6:29 PM UTC
- Preview structurally valid modular inventory rows before catalog proof is complete, while keeping unresolved rows unavailable to buyers until their publisher, property, and format declarations are verified. Seller agents can also update an existing modular source module’s non-secret configuration through the typed inventory-source save flow.
- The buyer and storefront API specs grew: shapes reused across the document are written out at each usage site, and Zod 4.5 reuses more aggressively than before, so the buyer spec restates its 78 distinct regex patterns thousands of times. The two largest offenders — the AdCP product’s
placementsandformat_options— are now published once each, asAdcpProductPlacementsandAdcpProductFormatOptions, and referenced from the product schemas rather than repeated inside them. That recovers about 73,000 lines. No existing schema component was removed or renamed, and nothing about what the endpoints accept changed. - Three
GET /activity/callsquery parameters —includeDiagnostics,includeProtocol, andincludeInternal— now publish asbooleanrather than as a string enum of"true"/"false", which is what they always were on the wire. Regenerate your client to pick up the corrected type. - Integer lower bounds now render as
exclusiveMinimumwhere they previously rendered as an inclusiveminimumone value higher. The accepted values are identical; only the spelling in the spec differs. Request validation also got substantially faster, most noticeably when rejecting a malformed request. - Campaign resume now skips media buys that were paused directly by the buyer.
- Previously, resuming a paused campaign would reactivate all paused media buys, including ones the buyer had explicitly paused. Resuming a campaign now only reactivates buys that were paused as part of the campaign pause. A buy the buyer paused individually stays paused after a campaign resume.
- A new
pausedByfield on the media buy surface shows whether a buy was paused by the buyer directly (buyer) or by a campaign pause action (campaign). - When a seller sends an updated offer across negotiation rounds, each version is now stored separately and linked to the one it replaced. You can retrieve any round’s proposal and trace how the seller’s offer evolved — earlier versions are no longer silently overwritten. Nothing to change on your side; proposal history is tracked automatically.
- Snap media buys submitted with
start_time: "asap"(the default meaning “start immediately”) now correctly submit an ISO timestamp to Snap instead of the literal string, so they no longer fail with a generic error on creation or update. - Snap media buys using automatic bidding — the default for nearly every Snap product — now create successfully instead of failing with a bid-price error. Nothing to change on your side.
- Invitations now keep the intended account email design when resent, use a saved Dutch language preference when available, and render transactional email chrome from centrally configured branding. An invitation opened with a different authenticated email now explains the mismatch and alerts compliance while keeping access locked to the invited address.
- Embedded sales agent 1.43.2: resolve FreeWheel creative nodes from Placement readback.
- Restored the Merchandising Agent interview as the eligible seller’s bare-chat value layer alongside the current seller setup navigation. Sellers first encounter it on initial login and can return whenever the chat canvas is empty to teach the agent how their business sells or test it with a real buyer brief; sellers without product-composition capability retain the neutral home experience.
get_delivery({ report: "campaign_delivery" })on/mcp/v3now acceptsrange: { lifetime: true }for the campaign’s full delivery history and echoes the resolved window asperiod; every response carriestotalsover all matched rows (money is unavailable when rows span currencies); and two new dimensions,sellerandsales_agent, group delivery by the storefront and AdCP sales agent a buy ran with.
5.415.0 — September 11, 2026 at 12:37 PM UTC
- Buyers and sellers can now select All in Murph’s recent chats list to search and reopen past conversations for the account, advertiser, or storefront they are viewing. Earlier conversations are included; results never leave the selected scope, and nothing needs to change on your side.
- For enterprise brand buyers, this keeps previous work visible within the advertiser their media organization is reviewing. Agency buyers can return to a prior account or advertiser conversation without hunting through recent chats. Hands-on buyers can quickly pick up an earlier task, and newer Murph users will simply see All as another way to find a chat they already had. For sellers, this changes only their own storefront conversation history; it does not change what buyers see about a seller or storefront.
- Monetization: none — this ships with existing Murph access and adds no plan, entitlement, packaging, or billable-surface change.
- Clarified that campaign-level
frequencyCapsis enforced through Scope3’s own cross-publisher exposure tracking and cannot be honored at request time by closed-platform integrations (TikTok, Meta, Snap, Pinterest, Reddit, Spotify, Amazon, Google, LinkedIn). To set a native per-publisher frequency cap on one of those platforms, usetargetingOverlay.frequency_capon the product instead. - Selected sellers now activate every eligible advertiser through the canonical account connection, including storefronts without a legacy sales-agent record. New advertisers are picked up while the seller remains selected, blocked sellers create no new advertiser accounts, and failed activations show a support code for diagnosis. Nothing changes on your side.
- The Public Distribution upgrade action in Listing now opens Plan & Billing instead of showing an error.
- The v3 buyer skill now explicitly instructs agents to poll a running proposal execution by calling
request_proposalsagain with the samecampaignId,expectedCampaignRevision, andidempotencyKey, matching the tool’s own response text. The previous wording (“reuse the idempotency key to poll”) was vague about which tool to call. - Murph buyers. In-progress seller results now continue on the same product query instead of restarting. When you select a returned product, Murph carries that selection into the campaign without rerunning discovery. There is nothing to change on your side.
- Direct V2 API and MCP integrations. Reuse the original execution ID when checking progress. To attach a selection, set
productQueryIdto that execution ID and include the returned storefront-qualified product or proposal IDs, as applicable. Legacy executions without saved accepted proposals still require a fresh product query and buyer re-selection. - Direct V3 integrations. Retry in-progress proposals within a bounded polling policy using the same campaign ID, expected campaign revision, and idempotency key. No endpoint or schema change is required.
- Murph sellers. An inventory-source diagnostic that records its test run and source-health result now asks for confirmation before it starts. Read-only inventory-source checks remain confirmation-free, so only diagnostics that save a result add this approval step.
- You can now guarantee that specific reusable Library slides appear in a composed proposal. When you call
save_rfpwithcreateorappend_turn, passrequiredLibraryUnitIdswith the exact identity of each unit (materialId,unitId,renditionRevision). Only slides, pages, or sheets you have marked reusable, that carry no pricing, and that are currently available in your Library qualify; anything else is rejected with a validation error before composition starts. The buyer’s proposal then always carries those Library blocks unchanged, including when the composer falls back to the deterministic response, and the turn receipt records them as seller-required rather than model-selected. Leave the field out and proposals compose exactly as they do today. Details are on the Seller RFP lifecycle docs page (/v2/setup/v3/rfp-lifecycle). - Launching a campaign from your agent now shows you exactly what would go live before anything does.
- What changes for you
- The launch preview lists the media buys. Asking to activate a campaign without confirming returns a preview that names each staged media buy that would go live, its budget and seller, and the combined budget across them, alongside the campaign budget and flight. Nothing is launched by that call.
- The confirmation step is explicit. The preview tells your agent the exact follow-up call — the same request with
confirmLaunch: trueand the previewed revision — so a launch always takes two intentional steps: see it, then confirm it. - Budgets in different currencies are never added together. If the staged buys settle in more than one currency, the preview totals each currency separately instead of inventing a single number.
- Do you need to do anything?
- No. The confirmation field already existed; this release makes the preview complete. Agents that already confirm with
confirmLaunch: truekeep working unchanged. - Sellers: not applicable.
5.414.0 — September 10, 2026 at 11:54 PM UTC
- In the Buyers tab, select an external buyer to see the media buys delivering on your inventory — impressions, seller-reported net spend, progress toward the seller-visible booked budget when available, and the latest reported delivery day. Nothing to configure. Buyers awaiting admission and buys without a delivery report remain clearly unavailable rather than showing zero.
- Clarify available IU offers, current plans, and the no-plan state.
- Keep the Available balance explanation visible inside its overview card.
- Open balance details directly at Standing & funding.
- Give Interchange and media invoice activity distinct section headings.
- Label unbound IU accounts as having no paid plan instead of pay-as-you-go.
- Explain the action or payment issue causing an account to need attention.
- Creative sync now succeeds for media buys placed through a connected ad-server account (Google, Meta, Snap, TikTok, Reddit, Spotify, Amazon, or AudioStack). Previously, creatives could silently fail to sync to these media buys after they were created. Nothing to change on your side.
- The Sellers page now tells you to add an advertiser’s markets and channels instead of saying sellers don’t match, and offers the setup step.
- Managed storefront creative syncs now reuse approved account links when creatives are saved again or explicitly resynced. Incomplete links are blocked before sync starts and return an actionable account or seller-mapping error.
- In a storefront’s Advertisers tab, Sellers now opens the advertiser’s sellers page instead of doing nothing.
- A media buy whose underlying source connection was removed or never fully configured no longer stays stuck indefinitely with a status that never updates — it now resolves to canceled after a bounded number of retries. Nothing to change on your side.
- Corrected composed-product prices so size-specific rate-card facts apply only to products that actually include those selected creative dimensions.
- Preserve organization-local browser history while moving between billing tabs.
- Use Available balance consistently across Plan & Billing.
- Show billed Intelligence Units on Overview instead of provider operating cost.
5.413.8 — September 10, 2026 at 11:09 PM UTC
- When Murph is waiting for a storefront during product discovery, it now continues the same search instead of treating a provisional empty response as final or starting over. Direct API responses are unchanged, and there is nothing to change on your side.
5.413.0 — September 10, 2026 at 11:57 AM UTC
- Enterprise buyer teams can govern their buyer agent’s organization-owned machine notification subscriptions through the buyer API. Teams building their own buyer-agent integration can create or replace, pause, reactivate, remove, and non-business-test an endpoint. Changes are fenced, endpoint credentials remain write-only, and only deliverable event types are offered. This does not change any seller-owned account or destination.
- See a clearly labeled fictional Storefront before creating an account. This display-only walkthrough uses preloaded sample data, runs no analytics, and saves nothing. Create an account to add your inventory or connect a production system.
- Campaign creative creation and updates now map uploaded files to declarative repeatable format slots, including carousel cardinality validation and correction controls.
- Updating a campaign’s country or region targeting (
constraints.geo_countries/constraints.geo_regions) now correctly applies to media buys that are already live, instead of only affecting future product discovery.update_campaignreports the outcome per media buy (applied, unchanged, or rejected) so a targeting change a seller can’t accept on an already-live buy is never silently dropped. Sellers see this the same way they already see any other live targeting change: through the existing per-package targeting-overlay update. - Separately: any update to a campaign — not only ones that change targeting — now returns
409 CONFLICTif it arrives while another update to that same campaign is still being applied, instead of racing it. This closes a gap where an unrelated concurrent change (for example, a rename) could silently undo a targeting change that had already taken effect. If you see this error, retry the request. - Proposal PDF downloads render correctly in common PDF viewers.
5.411.0 — September 10, 2026 at 8:18 AM UTC
- Campaign creative format pickers now show only formats declared by that campaign and preserve the selected canonical option identity.
5.410.2 — September 10, 2026 at 7:31 AM UTC
- Listing + Distribution now unlocks automatically once an account has the package’s distribution entitlements. No action is needed.
- When a creative submitted to your storefront cannot be filed for review, the failure is now recorded with its reason instead of disappearing. The buyer’s sync result names the creative and carries a typed error, and the storefront operator sees the exact cause in logs and error tracking, so a creative that never reached your Approvals queue can be traced rather than guessed at.
5.410.1 — September 10, 2026 at 6:23 AM UTC
update_media_buyerrors are more actionable, with no change to which requests are accepted or rejected. An unsupported update field now tells you to remove that field and resubmit the rest of the request separately, instead of a generic “Upstream request failed”. A package creative that fails format-compatibility validation now names the exact creative and the reason it was rejected, instead of a generic “does not match its product’s canonical format options” sentence.
5.410.0 — September 10, 2026 at 5:53 AM UTC
- Fixed creative assignment to a Meta-backed media buy, which failed end-to-end after Meta rejected
sync_creativesfor requesting webhook completion tracking it doesn’t support, and then rejected theupdate_media_buyfallback too. Creative sync to a synchronous adapter-backed storefront (Meta, and any other first-party ad-platform connection) no longer requests webhook tracking meant for asynchronous external sales agents, sosync_creativesnow completes directly.
5.409.0 — September 10, 2026 at 5:02 AM UTC
- Pass a finalized private JPEG or PNG upload as
sourceAssetReftosave_creativeto create a durable Creative; existing calls are unchanged. Interchange confirms that the upload belongs to the connected account and the Creative belongs to the advertiser, then saves a managed copy. For source provenance, the Creative stores only a one-way fingerprint, never the private source reference or a signed storage URL. The upload Task activity keeps the private reference available until the handoff completes. Retrying the same source and name returns the same Creative, and you can optionally associate it with a campaign. Raw REST creative creation and package or media-buy attachment remain separate. - Storefront discovery now retains submitted third-party seller tasks and continues them through account-scoped catch-up polling when an interactive deadline ends.
- Agent-composed proposals now allow the model up to 90 seconds before falling back to the plain summary, so a slow answer no longer discards the endorsed shape or Library material you asked it to follow.
5.408.2 — September 10, 2026 at 4:02 AM UTC
- When a proposal required to follow an endorsed response hits a transient verifier model error and time remains, it now gets one more verification pass instead of falling back to the plain summary. Proposal receipts identify verifier outcomes and retain the cost of verification passes even when the proposal falls back.
5.408.1 — September 10, 2026 at 3:24 AM UTC
- A product you price on your ad-server source, or that carries a platform-derived floor, can now be pitched by the proposal composer, and its product page shows the same completeness verdict the composer uses. A bare non-fixed rate without a fixed or floor price is not quotable.
- Media buys created directly against a Meta, TikTok, Snap, or other platform-adapter storefront now record their routing correctly, so creative sync and other post-buy operations can find them instead of silently failing.
5.408.0 — September 10, 2026 at 1:52 AM UTC
- Products from Google Ad Manager now carry a channel inferred from an unambiguous canonical creative format when the source leaves channels blank. You can also set channels yourself when saving a product, and the proposal composer can pitch those products once a complete price is present.
- Correction: uploaded TikTok creatives are still affected. Release 5.404.0 reported this as fixed, and that was incorrect.
- Release 5.404.0 said uploaded TikTok image and video creatives now become ads, and gave TikTok’s media processing time as the reason they previously did not. Both statements were wrong. Uploaded creatives still reach your TikTok creative library and are still not attached to an ad.
- Nothing you uploaded has been lost. Those creatives are in your TikTok creative library and remain usable directly in TikTok Ads Manager in the meantime, and no action is needed from you. We are still working on the underlying cause and will report again only once it is confirmed working end to end.
- Buyer administrators with publication access can now open Branding & distribution from their designated account. No action is needed.
- Inventory Selector can now open the secure ad-server connection task when an ad server needs to be connected.
- Google and SSO signup now moves directly to company confirmation while company research runs in the background. Academic mailbox subdomains are normalized to their institution domain and treated as affiliation context, never evidence of a sell-side media business.
- When you endorse a response and a later brief fits it, the composed proposal now follows that endorsed shape instead of falling back to the plain summary.
5.407.1 — September 9, 2026 at 9:22 PM UTC
- When a media buy uses a seller creative library, retries now reference existing creative IDs instead of resending them as new creatives. Inline delivery for sellers without a creative library is unchanged, and buyers do not need to modify their creatives.
5.407.0 — September 9, 2026 at 8:19 PM UTC
- Murph can now accept WAV files that Slack or a browser labels with the common vendor MIME type, and a direct request in a Slack thread can use a file shared earlier in that thread.
- Campaigns, media buys, and advertisers on the v3 buyer surface now do what they say, and you can undo more without leaving your agent.
- What changes for you
- You can bring an archived campaign back. Restoring returns it as a draft, since its media buys were retired when it was archived. Stage inventory again before launching.
- You can fix or drop a draft media buy. Change its budget, bid, or pricing option, remove a line item, or archive an unwanted draft without touching the rest of the campaign. When the same product is staged twice, each line item now carries its own reference so you can point at exactly one. Anything the draft cannot absorb is refused with the field named, never silently ignored.
- Archiving an advertiser no longer hides its history. Its campaigns, media buys, and creatives stay readable (read-only until the advertiser is restored), and its name is free for a new advertiser. Restoring into a name that is now taken is refused with a clear conflict message.
- Archive several advertisers in one go. Ask once; your agent confirms the list once and reports each outcome. A long list that runs out of time tells you exactly which advertisers were not attempted, so you can retry just those.
- Offers do not silently expire while you decide. A product query left for over an hour is reopened when you stage from it, and an expired proposal says whether the seller’s validity or the 90-day window lapsed.
- Do you need to do anything?
- No. Everything in this release is additive or corrective; existing calls keep working.
- Sellers: not applicable. Nothing a seller sees about a buyer, a proposal, or a delivered buy changes.
add_discovery_productsnow returns a distinguishablediscovery_publication_orphanederror when the discovery snapshot never finalized, telling you to rerunget_productson the same discovery so the snapshot republishes — the session’s selected products and campaign attachment stay intact. Previously these attempts failed withdiscovery_pricing_supersededand the misleading advice to “retry against the current snapshot” — but no newer snapshot ever existed, so every retry was guaranteed to fail. The real transient race (a fresh publication is landing while your request runs) still surfaces asdiscovery_pricing_supersededand remains safe to retry. If your integration branches onerror.details.reason, add a handler for the newdiscovery_publication_orphanedvalue.- Invitation links now join you to the intended account when an organization has multiple accounts with the same name. No action is needed.
- Fixed a bug where campaign postal-code targeting for countries without a dedicated postal system (e.g. the Netherlands) could make
list_campaignsfail to load for affected campaigns. - For sellers enrolled in the limited Sales Library rollout, Murph chat now reliably saves material when you explicitly approve the supplied details, and proposal previews reliably use the response example you select. Buyers may see the proposal shaped by that selected example. No action is required.
- Agent-composed proposals can now follow your endorsed responses. Shaped by and Library blocks appear when a fitting endorsed pair or reusable Library material exists.
- If Source Diagnostics shows stale or conflicting health evidence for a sales-agent inventory source, you can refresh it with Murph or an MCP client. A fresh no-spend
get_productscheck can supersede an older creative-sync failure, so your storefront’s readiness reflects the source’s latest observed catalog health. It does not change source configuration or create a media buy; review the timestamped receipt in Source Diagnostics. No refresh is needed when diagnostics does not request verification. - This is an ungated (
gate: none) atomic, read-only operational improvement for sellers with an already configured external sales-agent source: there is no staged audience expansion, billable surface, packaging change, or new entitlement. There is no runtime kill switch because it neither mutates source configuration nor spends; withdraw the tool in a follow-up release if it produces misleading evidence. For the first 30 days, review refresh invocation volume, successful durable receipts, and readiness-status changes. Success is replacing stale evidence with a current receipt without creating a media buy; investigate repeated failed or no-change refreshes in Source Diagnostics. - Buyer reporting no longer fails an entire account’s metrics when a seller reported delivery spend in a currency it is not actually paid in. Those buys previously made
/api/v2/buyer/reporting/metricsreturnSPEND_DENOMINATION_UNRESOLVED(and the timeseries view mislabelled their rows). The spend is now denominated by the currency the source settles in, when that is evidenced by money that actually moved — an FX lock or a booked spread-ledger leg: unchanged when it already matches the advertiser’s reporting currency, converted from the settlement currency when it does not. ThedeliveryFxConversion.sourcefield gains asettlementvalue identifying spend denominated this way. Buys whose settlement currency cannot be established, and buys whose only settlement evidence is the product budget currency (a configuration value, not proof of what historical periods were paid in), still fail closed rather than guess.
5.406.0 — September 9, 2026 at 2:53 PM UTC
- Authenticated customer members can now search their own and shared Murph conversations by title, participant, or transcript text. V3 clients can also search and open a bounded conversation transcript; private teammate rooms and other accounts remain excluded, and service credentials without a member identity cannot read chat history.
- When a media buy or creative sync fails for a reason the buyer can fix, the error now carries a structured classification your agent or client can route on directly — no more regex on the human message.
- If your code doesn’t consume the new field, nothing changes. Existing error messages still render the same way, and the outer
codeon the error is unchanged. - On a buy-flow failure the buyer can act on (creative dimensions don’t fit the packages, missing destination URL, budget below the source’s minimum, product no longer available, permission not granted yet, account not linked, etc.), the error now includes a
buyer_reasonsub-object with a stablecodeand a message safe to show to a buyer. It travels with arecoveryclassifier (correctable,transient, orterminal) so you can tell “fix and resubmit” apart from “wait and retry.” - The same classification appears on each per-source entry when a fan-out mixed causes (one source rejected the creative, another was unavailable), and on each failed creative row on
sync_creativesso a batch failure is per-creative traceable. - The
codefollows the AdCP 3.2 error vocabulary; unknown codes are preserved end-to-end, so a newer source or a seller-defined extension flows through your client without upgrade. - Read the current
buyer_reason.codefor programmatic routing andbuyer_reason.messagefor the string you show a human. - The Sellers page keeps loading when a connection is waiting for activation prerequisites. This does not change storefront readiness or how sellers are presented.
- ChatGPT app registrations that omit the deprecated upload fields now use the storefront logo from
brand.jsonto generate directory and composer icons automatically, without requiring a separate rollout enrollment. Existing V2 upload callers keep working, and stored manual icons remain safe while their accounts migrate. - A response you attached to a brief now shows as Paired on the Library page.
- Agent-composed proposals now complete the full model pass instead of falling back to the short summary, so Shaped by and Library blocks appear when an endorsed pair or reusable material fits.
- For sellers enrolled in the limited rollout, this restores reliable Murph chat support for saving shared material and using a selected response example while preparing a proposal. Buyers may see proposals shaped by the selected response example. No action is required.
get_media_buyandget_campaignnow include TikTok’s provider-confirmed targeting (country, age, gender, and audience) alongside what you requested, so you can verify what a TikTok media buy is actually targeting without checking TikTok Ads Manager directly. Previously this readback was never returned for TikTok buys.- Seller Page search tools now keep their complete guidance on the wire instead of cutting off the final identity instructions.
- Published agreements now have permanent, hash-verified revision URLs. Current links continue to show the maintained version, while pinned links—including the Privacy Policy and Demo Environment Notice—remain tied to the exact published text for reliable citation and historical review. A corrected v2→v3 summary restores its originally approved “MSA equivalent” wording at a new revision URL while preserving the earlier published summary bytes.
- Account admins can now review people in a connected Slack support channel from Communications. Choose an account role to send an invitation, keep someone as a channel guest, identify an external company, or disconnect the channel. Joining a channel never grants Interchange account access; disconnecting it leaves existing account memberships unchanged.
5.405.0 — September 9, 2026 at 11:01 AM UTC
- The advertiser picker now opens on your only advertiser, or the one you used last, so you land in the right workspace without an extra click.
- Invited team members now land in their organization after verifying a new Interchange account instead of reopening an invitation after signup already granted access. Other post-signup destinations are unchanged, and there is nothing to change on your side.
- Invited team members can finish creating their Interchange account without a signup validation error. When the invitation already belongs to their resolved organization, signup no longer offers to create a duplicate organization. Nothing needs to change on your side.
- Fixed two related Meta storefront issues: resuming a paused campaign now activates its ad set and ad along with the campaign (instead of leaving delivery silently paused underneath a reportedly-active campaign), and syncing a creative to a package no longer requires the package to already be paused first.
- Prevent capability checks from reusing the tracking ID of a following seller mutation. Media-buy updates and account syncs with webhook callbacks now reach the seller instead of failing locally with a webhook-registration conflict.
- Nothing changes in the Interchange chat experience today. Teams using a buyer or seller MCP client can now continue a Murph conversation and read its display-safe history, while existing
ask_murphintegrations keep working. There is nothing to configure and no pricing or packaging change. - For enterprise brands, this makes a Murph conversation easier to retain in their governed workflow. For large agencies, it gives teams a consistent way to resume the same conversation across their client tools. Builders can use the new
chatandget_conversationoperations, including standard progress and app-display support. For people using Interchange chat directly, the behavior stays the same and requires no action. Sellers receive the same client support; it does not change how buyers see their storefront or inventory. - This does not yet add the Interchange agent picker, calls to installed buyer agents, or agent-initiated messages.
- Rollout is ungated because this is additive on Murph’s existing authenticated MCP endpoint and keeps its existing authentication, terms, and availability checks. Monitor successful and failed
chatandget_conversationcalls plus cursor/readback errors during the first seven days; only the later installed buyer-agent and picker slices expand the audience. SetMURPH_ENABLED=falseto use the existing Murph kill switch if the profile needs to be withdrawn.
5.404.0 — September 9, 2026 at 8:40 AM UTC
- When you use an endorsed response example in a proposal, its “Shaped by” detail now stays visible. Murph also saves a complete Library dictation instead of replying without making the requested update. Nothing to change on your side.
- TikTok image and video creatives now become ads instead of stalling after upload.
- An uploaded creative reached TikTok’s creative library but was then reported as failed, so no ad was created and the media buy stayed in pending creatives. TikTok processes uploaded media asynchronously, and Interchange was reading back the result before that processing finished. It now waits for TikTok to confirm the media is usable before deciding whether a creative is live, and a creative that is briefly unavailable immediately after upload is no longer treated as missing.
- Recent chats in the rail are now named for what you asked, empty chats no longer linger, and the list shows your five most recent with an All view for the rest.
5.403.0 — September 9, 2026 at 5:48 AM UTC
- Snap media buys using a creative that wasn’t tied to a specific product at upload time — the common case for a general-purpose creative-library upload — now sync correctly instead of being rejected outright. We resolve the correct format automatically from the assigned product when it’s unambiguous. No action needed on your side.
- While a Scope3 administrator used view-as to view your account, they could have seen analytics from another account. This was limited to Scope3 administrator view-as sessions; other sellers could not access your analytics. Analytics now always belong to the account being viewed. There’s nothing for you to change—your own sign-in was never affected.
- The configured first-party distribution account can now open Branding & distribution from its account navigation even when that account is classified as a buyer. Other buyer accounts remain unable to open seller-only surfaces.
- Asking Murph about your Library now goes straight to your Library materials instead of first trying the advertiser creative library.
- Sellers who submit their storefront’s buyer agent to a public app directory now get a no-spend test advertiser inside that storefront and one read-only reviewer credential. Existing storefront configuration, customer advertisers, campaigns, billing, and delivery are unchanged; no action required.
5.402.0 — September 9, 2026 at 1:06 AM UTC
- Creative observation is now on for every seller, with no enrolment step. When a buyer submits a creative for your review, Interchange runs it once, headlessly, on its render origin and records what it actually did, and the Approvals row reads from that run instead of guessing from the source. Where thumbnail storage is configured, a picture of the frame appears beside it. Observation is evidence from one run at one time, never a safety verdict, and it never gates your decision.
- The example pack now includes Library files and two brief/response pairs so a new seller can rehearse the full proposal loop before uploading their own material.
- Opening a link for one of your other accounts now switches to that account before rendering, instead of showing the wrong navigation or an error.
- Since 2026-09-07 the Library, the demand inbox scoreboard, and proposal narratives are available to every seller, and the Playbook rules editor points to the Library, rate cards, and AI Business Rules. This release updates the documentation to match what you see: use Add material at the top of Materials to upload a file, and use Shaped by on your seller pass or preview to see the endorsed pair the response followed and why. Docs: /v2/storefront/library.
- Keep Murph-specific response rewrites out of internal TARS answers while preserving shared security and action-confirmation guardrails. Murph no longer replaces a terminology warning with unrelated inventory guidance.
5.401.0 — September 8, 2026 at 7:33 PM UTC
- When an admin sends an account invitation, they now receive a copy of the email so they can confirm what was sent and help resolve delivery issues.
- The Library and Demand pages now load in the Interchange web app; they previously failed to load outside chat hosts.
- For API integrators: no action is needed unless your integration called the Seller Dashboard demo evaluation through the web app’s internal endpoint with an API key. That path now requires a signed-in browser session. Use the Seller Dashboard read tools on the API instead; nothing else about your API access changes.
- Murph can now file an ask after you switch into another account you manage. Staff support and impersonated sessions remain excluded from customer-authored requests. If an MCP session authenticated with a user or personal API key was already open during the release, reconnect it once before filing; this includes switched sessions.
- Murph no longer fails at the start of a Gemini-backed conversation when the Seller V3 tool catalog contains recursive JSON values.
- Delivery reports whose response-wide currency contradicts the currency their packages declare no longer strand spend as unbooked. The reconcile sweep and the admin replay path now denominate a re-driven delivery the way the report processor already does — the currency every package agrees on takes precedence over the deprecated response-wide one — so spend that a mismatched currency kept out of the ledger books automatically on the next sweep.
- A report that sends an empty currency now falls through to the next level that declared one, rather than being read as a declaration of nothing; previously a report whose packages all sent
""booked no spend at all even when its response-wide currency was valid. - Reject placeholder
unknownbrand and account identities before consulting cached product-discovery results, so stale cache entries cannot mask invalid seller-bound identity. - When you select an Agent, its workspace now stays in your Murph conversation with your chat history and message composer available. Nothing to change on your side.
- On Seller settings, Resume intake now clears a seller-owned hold even if the readiness panel still needs attention. No extra action is needed to clear the hold; readiness, runtime, and administrator safeguards still control whether new transactions can proceed. This does not bypass buyer transaction eligibility safeguards.
- On Agent collection pages and Murph, active Inventory Sources with an explicit authorized binding now appear consistently. These visibility corrections do not change an Agent’s details, source ownership, or buyer transaction behavior.
- Media buy and campaign product reads now show the selling agent again for buys whose seller moved to typed storefront routing, and their product and publisher names resolve as before. No buyer action is required.
- When sellers open Advertisers, they can select an account they operate from a shared advertiser picker and use its buyer work rail. Protected System accounts remain read-only. External counterparties continue to appear in Buyers, while Merchandise, Operate, and Organization settings remain in Inventory (or the Settings footer); no action is required.
search(kind: "media_buy")on/mcp/v3now acceptsfilter.advertiserIdwithout acampaignId, returning every current media buy for the advertiser across its campaigns in one paged read (limitup to 200,nextCursorfor the next page). Each row carries itscampaignId. The campaign-scoped read is unchanged.- In-chat widgets now render as one consistent card in every state. Fixes extra padding around widget content, doubled card frames, a stray horizontal scrollbar, and clipped list rows, and caps the advertisers list so it scrolls within the widget instead of running the whole surface tall.
5.400.0 — September 8, 2026 at 3:13 PM UTC
- Sellers can now use the new Buyers tab, between Advertisers and Agents, to find existing external buyer relationships and their media buys, synced creatives, and account setup. No action is required: this reorganizes seller-only relationship work and does not change what counterparties see.
- Buyers can now author a social creative through
save_creativewithout uploading a file; existing calls are unchanged. Pass asocialblock withheadline,body,description,callToAction, anddisplayName, pluscomponentsfor any slot a specific platform format declares (TikTok’sad_text, for example; a format that needs a Facebook Page or Instagram-account identity exposes it as a slot the same way). You still setclickUrland aformatKindsuch asimageorvideo_hosted, because copy alone carries no format identity. The copy lands in the standard AdCP text and URL slots, the same place a file upload would put it.getwithkind: "creative"now returns the full record: ownership scope, canonical format identity and media kind, stored asset metadata, the authored copy read back from those slots, validation and sync state, and campaign membership. An advertiser-scopedsearchwithkind: "creative"acceptsformatKind,assetType,role,source, andpromotedfilters and reports each row’s media kind and readiness; under campaign scope those filters are refused rather than ignored. Archiving frees the name for reuse and removes the creative fromgetandsearch; unarchiving is not available, and anisArchived: falserequest is refused rather than ignored. - Attaching a creative to an existing package on a Meta-backed media buy through
update_media_buynow fails with a clear, actionable error instead of a confusing “No update fields provided” rejection — Meta requires a separatesync_creativescall to actually deliver a creative, same as most other storefront adapters.sync_creativesalso no longer silently returns an empty result for these media buys. If a creative attach to a Meta package fails, retry withsync_creativesas directed by the error message. - Selected Agent details now keep Agent navigation and controls separate from seller workspace navigation.
- Reduce repeated capability checks and account-sync requests sent to active third-party sales agents, and reject placeholder
unknownbrand domains before they can be queued or sent to a seller. Internal discovery requests that identify an advertiser without repeating its brand now resolve the persisted brand instead of fabricating a fallback, so buyer discovery continues without repeating identity already stored for the advertiser. Account-change webhooks now return a retryable error when reconciliation cannot be durably queued.
5.399.0 — September 8, 2026 at 11:57 AM UTC
- The Approvals widget now shows what a creative actually did, not just what its source looks like. For sellers in the observation cohort, the “Does” line reads from the headless run Interchange made when the creative was submitted: the external domains it called, tracking pixels fired, redirects followed, popups and page navigations attempted, and media fetched, with when it was observed. While a run is still queued or running the row says so; when no run exists the line falls back to the source-derived summary and is marked “from source”. The row stage also shows the observed thumbnail of the creative before you open the live preview. Observation is evidence from one run, never a safety verdict, and it never gates your decision.
- Selecting an advertiser now opens that advertiser’s Campaigns workspace reliably for buyers and sellers, and the seller rail shows only that advertiser’s jobs.
- Fixed creative sync failures against Storefront-backed sales agents (e.g. Snap) so the reported reason reflects the actual per-creative problem — a rejected review status, an unconfirmed package assignment, or a specific validation error — instead of an uninformative “Sales agent reported creative sync failure” for every kind of refusal.
- Rewarded-video and other product-discovery polls now receive a fresh wait budget for each request, so buyers can continue a provisional search until its storefront results settle.
5.398.0 — September 8, 2026 at 8:44 AM UTC
- The Sellers screen matches marketplace browsing: the market and channel filters now sit in compact controls instead of stretching across the page, and the market filter is searchable so you can jump straight to a country instead of scrolling the full list.
- Embedded sales agent 1.43.1: fail closed on invalid JSON and architecture drift, fail closed on unexecutable FreeWheel products, reconcile archived GAM inventory, traffic FreeWheel content inventory selectors, verify FreeWheel placement inventory contract.
- Nothing to change on your side. In your Advertisers tab the rail now starts with a Needs you count and one row per advertiser lens (House, Partner-managed, Self-serve, plus System when present) with how many advertisers each holds; the roster overview opens in the canvas, including for live storefronts. Selecting an advertiser shows a picker at the top of the rail and only that advertiser’s jobs. Seller analytics stays under Operate → Dashboard.
5.396.1 — September 8, 2026 at 6:36 AM UTC
- Campaign
constraints.age_min,age_max,gender,genders, anddemographicsnow return a validation error instead of being silently accepted and dropped. These fields never affected targeting on any storefront — requests carrying them previously succeeded with no error and no effect. Describe age and gender targeting in your campaign brief instead.
5.396.0 — September 8, 2026 at 5:34 AM UTC
- If a media-buy request to a managed sales agent stops before the storefront starts sending it, it can be sent again. Once sending may have begun, the safeguard against duplicate media buys remains in place.
5.395.0 — September 8, 2026 at 5:01 AM UTC
- Creative review now includes live, interactive previews for every seller. In Approvals, select Show preview to run the buyer’s creative at placement size in an isolated browser sandbox. The preview cannot access Interchange, your chat host, or your session. Source inspection and Approve or Reject remain available when a preview cannot be rendered. No setup is required.
5.394.1 — September 8, 2026 at 4:02 AM UTC
- Shaped by now names the past example your agent followed, on your pass and previews only; buyers never see it.
5.394.0 — September 8, 2026 at 2:51 AM UTC
- You can now add a deck, one-sheet, or PDF directly from the Library page.
5.393.0 — September 8, 2026 at 2:09 AM UTC
- Nothing to change on your side. In your Advertisers tab, selecting a buyer’s advertiser now opens that buyer’s activity with you: the media buys they placed, the creatives they synced, and their account setup. This works the same in Murph, Claude, and ChatGPT. It never shows the buyer’s own campaigns. Delivery figures for those buys are not in this view yet; they remain in your Media buys and Reporting.
5.392.0 — September 8, 2026 at 1:32 AM UTC
- Buyer-agent developers can validate conversational MCP integrations against one portable contract. It defines
chatandget_conversation, including MCP Tasks for longer turns and MCP Apps widget data instructuredContent. Nothing changes in the Interchange UI yet: no buyer-agent runtime serves this profile until the server and edge-route slices land. - This contract does not alter what buyers see about sellers, so sellers have no action or notification for this release. It has no separate price or billable event; packaging and monetization remain unchanged.
- The contract is not exposed from a runtime, so no feature flag is needed in this slice. Expansion requires separately reviewed server and edge-route slices with their own release plan; reverting this package addition removes the contract before any runtime can expose it.
- Acceptance is an independently runnable schema suite covering valid chat, conversation pagination, MCP Tasks handles, MCP Apps metadata, and rejected invalid input. Adoption begins when a runtime records a successful
chatcall and a client reads a conversation withget_conversation; neither event exists in this slice. - Creative reviews now carry an
observationand athumbnailUrl. For sellers in the observation cohort, Interchange runs each newly submitted creative version once, headlessly, on its render origin and records what the creative actually did: the registrable domains it contacted, pixel-shaped requests, redirects, popups, attempts to navigate the top window, and bytes transferred. The review row’sobservationfield carries that record with its status (queued,running,completed,timed_out,failed), andthumbnailUrlpoints at an authenticated PNG of the creative frame from that run, bounded to 600 px on its longest edge and served only to the storefront that owns the review. A resubmitted creative gets a fresh observation, and the previous version’s picture stops being served. Observation never gates review, live preview, or decisions; a row without one simply readsnull. - When you open Seller Dashboard as the owner of an active Demo Storefront, you can review a Synthetic evaluation data view for the current lease generation. It shows terminal evaluation RFP facts, including RFP and turn IDs, response state, the demo profile disclosure, and lease expiration. This rehearsal evidence is not buyer demand, commercial outcomes, bookings, revenue, attribution, learned posture, delivery, or live performance. Resetting the demo or allowing it to expire removes prior evaluation evidence. Your standard Seller Dashboard analytics remain live-only, and nothing changes on your side.
- Slack DM tenant defaults now resolve only when one active account has the exact normalized, approved email domain and the user holds a current authoritative seat on it. The same protection applies to buyer and seller accounts, requires no customer action, and ignores existing cached defaults in favor of bounded recomputation from current authority.
- The Demand inbox and Proposal pass no longer describe a practice, draft, or imported response as sent to a buyer.
- Marking a whole deck reusable could make every slide reusable, including priced slides. Now only individual slides, pages, or sheets can be marked reusable, and priced ones stay excluded.
5.390.1 — September 7, 2026 at 9:22 PM UTC
- Campaign creative uploads now show and count every creative found in a tag sheet before the sheet is submitted. Nothing changes about how the original tag sheet is uploaded or trafficked.
5.390.0 — September 7, 2026 at 8:14 PM UTC
- Teach your Merchandising Agent with the proposals you’d send again. Endorse a brief-and-response pair and the agent draws on those pairs when composing future proposals — you can trace which pairs shaped each response. Reuse slides across proposals and close open Library requests by uploading material or asking Murph.
- Agent developers who retrieve Set Up a Campaign through the buyer MCP skill catalog can now pin version 1.1.0 and run a repeatable no-spend sandbox advertiser check before relying on it. This makes automated skill checks reproducible, while the unversioned skill link keeps returning the latest instructions. Ordinary buyers do not need to change how they set up campaigns, and sellers are unaffected.
5.389.1 — September 7, 2026 at 6:38 PM UTC
- A media buy now records the currency its delivery is reported in, so anything reading that buy knows the denomination instead of having to assume one. The currency comes from the report itself — the currency every package agrees on, or the report’s top-level currency if the packages do not declare one. A report that names no currency anywhere leaves the field empty rather than guessing at one. Buys that were already delivering have their currency recovered from their packages.
- If your context agent prices packages for a media buy, its price block now uses that buy’s reported delivery currency where one is known, instead of falling back to your campaign’s rate-card currency.
5.389.0 — September 7, 2026 at 5:29 PM UTC
- Advertiser currency changes now update in place instead of rebuilding; clarification requests no longer appear as failures. Always pass
primaryCurrency(an ISO 4217 code) at create time to avoid locking silently to USD:save_advertiserdefaults to'USD'whenprimaryCurrencyis omitted, and that currency locks after the first campaign is created. Changing an unlocked advertiser’s currency is an ordinary update withadvertiserIdplus the newprimaryCurrency. Whennameorbrandis missing the tool returns a neutralneeds_inputresult instead of an error. Sellers are not affected by these changes. - The only customer-facing change is an optional buyer API guard; existing proposal requests are unchanged. Buyer agents can add
expectedSellerIdtorequest_proposalswhen automation must remain confined to one seller. The server rejects a fresh round if current buyer authority no longer resolves exclusively to that seller; the value can narrow access but never grant it. Sellers receive no new or changed requests from this precondition, so no seller action is needed. - Enrolled sellers now open the canonical Material-backed Product marketing page from Teach and can open the exact Proposal Pass shaped by an accepted selling point.
- The Sellers page now loads Connections correctly when activation is deferred. Repeated failures are also flagged automatically for review. Buyers do not need to change anything, and seller storefront presentation is unchanged.
- Nothing to change on your side. Advertisers that Scope3 operates for compliance checks now appear as System in your Advertisers list and in the advertiser roster API. The seller UI does not offer actions for these rows; advertiser lifecycle, relationship, and campaign creation actions are unavailable.
- Sponsored buyers can now complete a sandbox media-buy test with their seller when advertiser-to-seller activation checks are enabled. No action is required: seller visibility and activation defaults for other buyers are unchanged.
- Enrolled organization administrators can open Organization in the rail to use Members, Billing & contract, and Accounts without leaving their current account. Each pane works on the parent organization. When the rollout flag is off, the existing gear and parent-account navigation are unchanged.
5.388.1 — September 7, 2026 at 2:48 PM UTC
- The Sellers page keeps loading when a connection is waiting for activation prerequisites. This does not change storefront readiness or how sellers are presented.
- Fixed: brief-mode product discovery (
discover_productsandrequest_proposals) was ignoring thecountriesfilter whenever a brief didn’t also mention the country in prose, causing 0 products or an unhelpful “no usable candidate” result across Snap, Meta, TikTok, LinkedIn, Google, Pinterest, Reddit, Spotify, and UniversalAds. Thecountriesfilter now takes priority over any country implied by the brief text.request_proposalsfailures also now include the seller’s own explanation (e.g. a brief-mode clarification reason) instead of a generic message.
5.388.0 — September 7, 2026 at 1:50 PM UTC
- The advertiser status filter in a seller’s details is clearer. When every advertiser has the same status, the filter chips are hidden — there’s nothing to switch between — instead of showing a single chip that blanks the whole list when clicked. If a search or filter matches nothing, the list now says “No advertisers match your search or filters” rather than showing an empty area.
- Sellers you haven’t connected yet no longer look broken. A seller you’ve never connected now reads as a calm “Not connected” with a plain Connect action, instead of an amber “Action required” alert — and the “Action required” count reflects only connections that genuinely need attention (reconnect, account mapping, or billing).
- Published the Demo Environment Notice and linked it from Demo Storefront and developer documentation. Bring-your-own buyer agents now receive the same canonical notice URL with the visible and machine-readable warning on every demo/onboarding MCP tool result.
5.387.0 — September 7, 2026 at 12:28 PM UTC
- Browsing sellers is easier to scan: the channel and market filters now sit in compact controls instead of stretching across the page, and the market filter is searchable so you can jump straight to a country instead of scrolling the full list.
- Seller logos now render in the Sellers widget. When you browse or connect to sellers in an agent, each seller shows its brand logo instead of a placeholder with initials. Nothing to change on your side.
- Organization administrators now manage their organization’s members, invitations, billing, and accounts from an in-place Organization section opened from a child account.
5.386.0 — September 7, 2026 at 11:31 AM UTC
- Meta delivery reports now accurately show the reporting metrics available for each campaign goal. They no longer publish inconsistent qualified-lead totals when package and campaign evidence disagree: a reported zero remains zero, missing lead evidence stays unavailable, and qualified leads are not shown as generic leads or conversions. Existing buyer setup and optimization are unchanged, and buyers do not need to take action. Seller setup and workflows are unchanged; this buyer reporting update does not apply to sellers.
5.385.0 — September 7, 2026 at 10:06 AM UTC
- Sponsored self-serve advertisers now open their own Campaigns work from the seller Advertisers tab, while external and delegated advertiser relationships remain unavailable there. This update provides read access only; write actions from that Campaigns Page are not yet available.
- Buyer organizations can now manage software Agents as first-class resources alongside Advertisers. The redesigned Agents collection shows each agent’s purpose, connection state, advertiser access, and useful activity, while its detail experience organizes work into Overview, Access, Connections, Activity, and Settings.
- Named seller-account discovery replaces numeric ID entry. Connections distinguish Interchange, reporting resources, and machine subscriptions; activity keeps seller updates separate from exact human administration records. Technical identifiers, protocol versions, configuration generations, and proof state move to collapsed Advanced diagnostics.
- Settings retains one-time credential handling and exact-name confirmation for pause, retirement, credential rotation, revocation, and supported connection controls. The console continues to report No advertiser access until a separate authoritative grant exists; it never infers spend, payment, or Terms authority from identity, credentials, or connections.
- This workspace is for administrators and teams that already operate buyer automations. It serves power buyers and large-agency administrators; it does not change enterprise governance or the novice/chat buying experience. Existing integrations require no migration or customer action.
- There is no pricing, entitlement, packaging, or billable-unit impact. The workspace ships behind the existing direct organization-administrator authorization boundary rather than a separate feature flag, because its controls and visibility must share one authorization path. Expansion requires the documented cross-organization, revocation, zero-authority, and lifecycle checks; the kill switch is an atomic rollback of the workspace and named discovery route without changing existing authentication.
- Adoption is measured by buyer organizations reviewing an active Agent, usage by successful Add agent and administration flows, and guardrails by authorization refusals, control failures, post-revocation use, and any inferred authority. The owner reviews these signals at 30, 60, and 90 days using the plan in the commercialization brief.
- See Buyer-agent credentials.
- Enhanced Reporting now consumes its 4-IU account-period activity only after the exact connected account completes a successful reporting sync. Enabling an account without a reporting subscription no longer creates IU usage.
- Connections now disables unavailable Enhanced Reporting controls until the applicable IU Rate Card is active and accepted, rather than showing a predictable enablement error.
- Delivery reads no longer report a combined spend figure that no single currency covers. When one media buy is served by several sources,
get_media_buy_deliverypreviously added up every source’s spend and labelled the total with whichever source happened to answer last — so $200 plus €300 came back as one number under one currency, and money a source reported without naming a currency was quietly counted under another source’s. It now withholds the figures it cannot state truthfully: the response omitscurrency,aggregated_totals, and thespendinsidemedia_buy_deliveries[].totals, and says why inerrors[]—MIXED_CURRENCY_DELIVERYwhen sources named different currencies,SPEND_DENOMINATION_UNRESOLVEDwhen a source reported spend without naming one. Impressions, per-source status, and every other non-monetary metric still report as before, and a buy whose sources share one currency is unchanged. Read each source separately to see its amount in its own currency. - Storefront connections no longer claim that advertiser provisioning is underway when setup has been safely deferred. Activation failures now also produce explicit operational evidence for faster diagnosis.
5.384.1 — September 7, 2026 at 4:56 AM UTC
- Organization administrators can again find Members, Billing & contract, and Accounts in the seller rail while the setup checklist is shown.
5.384.0 — September 7, 2026 at 4:14 AM UTC
- Organization administrators can open Members, Billing & contract, and Accounts from the rail without switching away from their current account. Nothing needs to change on your side.
- Seller impact: not applicable. This signed-in organization navigation change does not alter storefronts, inventory, seller presentation, or anything buyers see about sellers.
- Monetization: none. This changes where existing organization settings open; it does not change billing plans, packaging, prices, entitlements, or charges.
- Buyers now live under Advertisers: each buyer is an External advertiser row, and pending ones show as ‘awaiting you’.
5.383.1 — September 7, 2026 at 2:27 AM UTC
- Connecting a provider account (TikTok, Meta, and other OAuth-based storefronts) from a connection link now reaches the provider’s sign-in page. Clicking Continue no longer silently stalls in some browsers before the sign-in screen ever loads.
5.383.0 — September 7, 2026 at 2:00 AM UTC
- Sellers who have not connected an inventory source yet see the setup checklist again.
- Advertiser updates, tracking configuration changes, and archiving through the Buyer API now require the same current Buyer identity, plan, Terms, and account-hold checks as advertiser creation.
- Delivery spend now books in the currency your packages declare, not the one the report’s top-level field claims. Some sales agents send a delivery report whose overall currency contradicts every package inside it — those deliveries previously failed to book at all and sat unbooked while the mismatch was chased down. Where the packages agree with each other, that shared currency is now what we book and what we report, and the contradiction is flagged so the source can be corrected. Reports with genuinely mixed package currencies are unchanged, and a report that declares no currency anywhere is still never booked against a guessed one.
- The Advertisers tab now opens on your organization’s full roster instead of a chat prompt. It reflects your existing advertisers automatically — nothing to set up on your side.
- Each row is one of three kinds: House (you operate it), Self-serve (your client runs it, though you can still edit), or External (a buyer connected through their own agent). A Sandbox badge marks any test advertiser and stays hidden behind a toggle. Filter the roster by House, Self-serve, Partner-managed — the same External rows, filtered — or Needs you, which shows every row with an open setup case waiting on your response.
- House and Self-serve rows open Campaigns, Creatives, and Reporting. External rows open Account — the same setup-case drawer Buyer Account Mapping already shows (billing path, setup requests, inventory mappings), so it’s one place to review instead of two.
- This only changes what you see on your own Advertisers tab. Buyers see no change: the Account drawer is your existing Buyer Account Mapping case, reached from a new place but showing no new buyer-facing data.
- Enable Enhanced Reporting for an active connected provider account when you want up to one year of reporting history for that account. If you do nothing, your standard reporting, connections, campaigns, and charges do not change.
- For a governed media organization, the account-level control makes each reporting and billing decision explicit. For hands-on teams, it is available in Connections, the API, and MCP; an account earns 4 Interchange Units per billing period only after its existing reporting subscription successfully syncs after the control is enabled. Turning it off stops future enhanced reporting while preserving the history already collected.
- Seller impact: not applicable. Sellers cannot see or configure this buyer-side account control; their storefronts and ordinary connection and campaign workflows do not change.
- TikTok product discovery now reports which account setup (app, pixel, connected identity) each candidate product still needs before you can execute a campaign with it — not only for the one product a decision plan already picked, but for every product returned from a brief-driven search.
5.381.1 — September 6, 2026 at 11:33 PM UTC
- Seller setup navigation is cleaner and easier to scan, with aligned status details and a compact go-live summary.
5.381.0 — September 6, 2026 at 11:00 PM UTC
- During seller signup, choose Just list to list inventory with an agent operated by you, a partner, or another provider, or Create an AMC account to list inventory and train your AMC’s hosted Merchandising Agent. An AMC account always includes listing. Interchange uses that selection to show the setup workspaces and navigation that apply. Existing sellers do not need to act; use Account settings or ask Murph if you want to switch later. Switching does not change your plan or inventory sources and does not delete completed setup. The initial choice and canonical Storefront capabilities commit together, so onboarding cannot complete with stale workspace routing. This launch does not introduce new pricing, change a seller’s plan, or grant an entitlement; it configures which already-packaged seller product the account is setting up.
- Measurement: track
media_company_intake_startedandmedia_company_identity_confirmed, then measure current-mode adoption from the canonical Storefront projection. Before expanding the flag, complete at least one onboarding in each mode and one switch in each direction with zero authority divergence and no sustained increase in confirmation errors.
5.380.0 — September 6, 2026 at 9:46 PM UTC
- During account signup, you can now record the exact product, country, and channel you need when that option is not ready. The waitlist applies to that request, so you can continue setting up work that Scope3 supports. See the Buyer onboarding and Market readiness guides for the available paths.
- For buyers, the Buyer Setup response now names the identity, plan, Terms, account-standing, product-access, or payment step blocking an action. Existing integrations need no response-parsing change:
platformReadykeeps its prior wire behavior, and developers can adoptcapabilitiesfrom the Buyer Setup operation when they are ready. This is an intentional authorization cutover: an existing account that lacks verified Organization identity, a selected plan, or current Terms is denied real operations and receives that specific blocker; deprecatedLIVE_ELIGIBLEposture does not bypass those requirements. Payment remains required only for purchases on routes that clear through Interchange. - For sellers, signup can record interest for the country and channel where you want to offer supply. This does not change how your storefront ranks, presents inventory, sets prices, or becomes ready to transact. No action is required for an existing storefront.
5.379.0 — September 6, 2026 at 8:26 PM UTC
- Approval notifications now open straight to the review waiting on you. The email for a pending creative review names the creative, the buyer, its format, and its size when the creative states one, plus a Review creative button that opens directly on that review. A pending media-buy approval works the same way, with a Review media buy button. The in-app feed entry and the Slack post’s Open in Interchange link open to the same review. Nothing to change on your side: delivery still follows your storefront’s approval routing rules, and notifications never include the creative itself or a preview link, since the live preview is created only when you open the review.
- V3 advertiser creation safely replays an uncertain response when callers reuse one idempotency key.
5.378.0 — September 6, 2026 at 6:03 PM UTC
- When a brief names an age range a Seller cannot target exactly,
get_productsandrequest_proposalsnow return a proposal instead of an error: products without age targeting, plus alimitationsentry (age_targeting_unavailable) that states the requested range, the ranges the Seller can target, and any fixed-range inventory that was excluded. A brief that names disjoint ranges (for example 21-24 or 35-44) is asked to clarify rather than answered for one segment. Only when the Seller has no inventory without age targeting does the request still fail as before. Buyer integrations that readget_productsprogrammatically should checklimitationsbefore treating a proposal as fully on-brief; agents that read the proposal text need no change. Sellers see the same limitation in the run record and can declare the age ranges their inventory targets (seller-authored age signals) so briefs that name them are answered exactly.
5.377.0 — September 6, 2026 at 5:03 PM UTC
- Sellers with more than one storefront can now open the proposal pass returned by a practice brief from their selected storefront. Practice briefs now use the same session-selected storefront context as the proposal-pass view.
- When you ask Murph to set up or manage your Seller Account in a private conversation, Murph now handles the request with dedicated seller actions. Murph remains restricted in shared conversations.
- You can now open the Advertisers page from your seller workspace to see every advertiser in your organization’s roster. Each row is labeled House, Partner-managed, or Self-serve. House is an advertiser you run directly, live or sandbox. Partner-managed rows are run by a connected partner — an AdCP counterparty or a delegated relationship. An advertiser you’ve set to self-serve mode shows as Self-serve. When someone else operates the advertiser, the row also shows the operator’s name.
- A row with an open setup step you need to act on shows “Awaiting your decision,” “Waiting on buyer,” or “Awaiting billing,” with a Review setup action that opens the same case in Seller Accounts.
- Your Playbook now opens with a first-run checklist of what your Merchandising Agent sells from: business rules and a rate card (required), plus a media kit, selling guidance, and past proposals or sales decks (recommended), each with a line on why it sharpens the agent’s pitch. Every buyer brief the agent has answered now reads in four blocks (what the buyer asked, what we responded, outcome, our read), and the Inventory components and Signals pages open by explaining how the agent uses them; nothing to change on your side.
5.376.0 — September 6, 2026 at 2:13 PM UTC
- Creative review now shows the ad itself. When you open a pending creative in Approvals, Show preview runs the buyer’s creative live at placement size: third-party display tags, hosted HTML, VAST video, DAAST audio, images, video, and audio all render, animate, and respond to hover and click the way they would on the page. Open full size shows the same preview in a new tab through your chat host.
- The preview runs on Interchange’s dedicated render origin (
render.interchange.io), inside a browser sandbox that has no access to Interchange, your chat host, or your session. Click macros are rewritten to an interstitial that shows the destination instead of leaving the page; a tag’s own code can still open a new window, which stays sandboxed: it cannot script or read your page or read cookies and storage itself, though like any navigation it reaches that site with the cookies your browser already holds for it. Treat any window the preview opens as buyer-controlled. Each review row carries a signed preview link that expires after fifteen minutes and stops working the moment the buyer resubmits the creative or the review is decided. - Seeing a creative run is not a safety verdict. The trust chip, the plain-language “Does” line, referenced domains, and the source itself stay beside the preview so you can judge what the tag does as well as how it looks.
- Buyers: nothing changes in how your creative is delivered. During review a seller may render your submitted creative in this preview, where its tags and trackers fire as they would on a page and its click macros resolve to an interstitial rather than a landing page. No action is needed.
- This capability is included in creative review at no additional charge: no package, entitlement, usage charge, or other billable surface is added.
- Adoption is measured through the fixed lifecycle events
mcp_creative_preview.live_preview_open,.live_preview_full_size, and.live_preview_expired, alongside the existing.request,.returned_link,.external_open, and.expired_linkevents: preview-open rate per pending review, full-size rate per open, and the share of links that expire unused. These events carry no creative, URL, provider, or buyer identifiers. - Creative review rows in Approvals now lead with the creative instead of the caveats. Each row opens to what the buyer sent: an image + copy creative shows its headline, body, and call to action as text; a hosted file shows its format, size, and host; a third-party tag shows who serves it and, in plain words, what it does (loads a script, fetches VAST from a domain, fires tracking pixels). One chip in the row header names the trust level, the tag source sits behind a “View tag source” disclosure, and Approve and Reject are in the same place on every row. Where an interactive preview is available, the button names the provider it will send the creative to, and its expiry is shown in your locale.
- Nothing about the safety boundary changed: buyer HTML, JavaScript, VAST, and media URLs are still never loaded or executed inside Interchange, and the provider preview still opens only through your chat host after you ask for it.
- Agent-supplied Listing storefronts now show their connected-agent account overview instead of unrelated Interchange merchandising analytics. Branding & distribution now presents a clear Public Distribution upgrade path before exposing paid hostname, self-serve advertiser, AdCP, and ChatGPT app controls.
-
Enterprise brand buyers
- Connected-account campaign tracking now works without a separate enrollment, keeping campaign identity, governance, and live delivery evidence in the same Interchange workflow. Existing subscriptions need no changes, and provider capability and account-access checks still apply.
-
Agency buyers
- After mapping and subscribing an eligible provider account, teams can inspect its mirrored campaigns, account presence, and live delivery across advertisers without waiting for feature enrollment. Tracking remains read-only and does not grant authority to change provider campaigns.
-
Builders and power buyers
- Existing integrations continue to use the buyer API or
subscribe_directed_campaignsin MCP. The former feature-enrollment error is gone; account mapping, credentials, provider capabilities, and advertiser access remain the operative checks. -
Buyers using chat
- No technical setup or action is required. Once an eligible connected account is mapped and subscribed, its campaign history and current delivery become available through the normal campaign experience.
-
Sellers
- Listing + Distribution now makes a storefront easier for buyer agents to discover and transact with by publishing a stable
/adcp/mcpaction in its machine-readable Listing. Keeping the Seller CNAME verified gives buyers a branded, predictable route into the storefront’s governed campaign, contract, reporting, and billing workflow. Other Seller profiles remain private from this transaction endpoint. - This release does not introduce a new charge or billable unit. Listing + Distribution remains the existing packaging boundary for the Seller endpoint, while connected-account campaign tracking remains a buyer capability.
5.375.0 — September 6, 2026 at 10:23 AM UTC
- Review & go live now preserves the standard not-found response when a campaign is outside the active buyer account, regardless of that account’s Campaigns Page availability.
5.374.2 — September 6, 2026 at 5:00 AM UTC
- Agency trading teams and in-house media teams enrolled in Campaigns V3 can move from an advertiser to its campaigns in Claude or ChatGPT, review campaign status, budgets, media buys, and creatives, and open Review & go live without losing their place. Hands-on buyers using compatible external hosts get the same workflow. No setup change is required.
- Monetization: none. This improves the existing buyer workflow and adds no charge.
- Rollout:
campaigns-v3remains the registered customer gate. Expand after Campaigns Page opens, campaign loads, and advertiser-to-campaign navigation remain stable. Disabling it returns buyers to the current Campaigns view; unavailable evaluation fails closed to that view. - Measurement: monitor Campaigns Page load and retry rates, advertiser-to-campaign navigation, campaign drill-in and Review & go live opens, and use by enrolled customers.
5.374.1 — September 6, 2026 at 4:22 AM UTC
- Buyers using the MCP
get_productstool or the Product Discovery API atPOST /api/v2/buyer/products/query: when an initial response says results are still in progress and you continue the same discovery, the completed discovery results now remain available even during a temporary cache outage. You also see each refinement result only on the product or proposal from the seller that returned it. How you start a new discovery and its request fields are unchanged; continue with the same execution ID through the MCP tool or API endpoint, with no setup change required. When refining or applying a result, send back the exact ID you received. A bare product ID shared by two of a seller’s Inventory Sources is rejected as ambiguous, so use the returned qualified product ID. Proposals duplicated across those Sources are withheld until the seller returns distinct proposal IDs. - Sellers: This fixes a display issue triggered when two Inventory Sources in one Storefront return the same proposal ID. Buyer-facing MCP and API discovery results now show only proposals that can be attributed to one Inventory Source, so distinct proposal IDs receive reliable buyer visibility once the Storefront finishes responding instead of risking the wrong proposal being displayed. Existing unique proposal IDs need no change; if you reuse an ID across Inventory Sources, update the proposal IDs returned by those Sources to keep every proposal eligible for display.
5.374.0 — September 6, 2026 at 2:34 AM UTC
- Child-account members can use
GET /api/v2/billing/account/inherited-stubto show that billing is managed by their organization without exposing its billing document. The response contains only the organization name, organization scope, and managing customer pointer; full billing access and advertiser, API key, Agent, workload, and service-token restrictions are unchanged. - For enterprise brand and agency buying teams that work from child accounts, an API integration can now explain that billing is managed centrally instead of requesting or inferring the parent billing document. Existing integrations do not change unless they call this new endpoint. Genuine seller child-account members can use the same shared read under the same membership and topology rules; it does not change Storefront billing workflows or what buyers see about a seller.
- This is an additive infrastructure read projection, not a new billable surface, plan, package, entitlement, or charge. It creates no billing write and exposes no contract, rate, standing, payment, account, member, or advertiser data.
- The endpoint ships without a feature flag because this server slice adds no UI entry point or discovery and remains behind existing authentication plus its strict direct-child membership checks. The later in-place rail UI is separately PostHog-gated. There is no endpoint-specific runtime kill switch; rollback is a server deployment revert. UI exposure expands only after the server soak has zero unexpected
5xxresponses and the exact200and denied401/403contracts remain verified. - Existing route-level request counts and latency by status and customer, plus durable REST activity records for
GET /api/v2/billing/account/inherited-stub, measure successful, denied, and failed calls without a new event. For this slice, usage is a successful request by an eligible child account; acceptance is zero unexpected5xxresponses before UI rollout. UI adoption is not claimed or measurable from this server-only endpoint: the later flag-gated rail slice must define and use its actual instrumented exposure and usage signal. - Show the next required setup action in the seller navigation header whenever setup remains incomplete.
- AI Business Rules now recheck storefront profile access under the same lock as profile changes, preventing a simultaneous profile removal from allowing a stale rule creation or activation to commit.
- Buyer agent principal-change notifications now retain one delivery identity across retries, preventing duplicate notifications after a delivery timeout. No action is required.
- Buyer agent principal package types now include the supported reporting ledger-change notification event.
- On the Branding & distribution Page, you now choose Interchange or Public for Distribution — there’s no separate “Hidden” option. A storefront that hasn’t published yet shows as “Not listed yet,” a state, not a third choice to pick.
- Choosing Public now walks you through what’s needed: a public listing domain card at the top of Distribution shows the CNAME to point at your own domain. Add it, and select Verify once your DNS has updated — once your domain verifies, select Public to go live (verifying confirms your domain is ready; it doesn’t switch Distribution for you). You’ll need a published Interchange listing before you can verify.
- Storefronts already publishing to Interchange are unaffected. No storefront besides Interchange’s own could choose Public before this change, so nothing to migrate. Interchange’s own first-party storefront keeps its platform-managed setup automatically — it never shows the domain card.
- Want to take your storefront off Interchange and the public web entirely? Select Unlist below the two-way choice and confirm — your storefront returns to “Not listed yet” until you publish again. Unlist is a separate action, not a third distribution choice, and it’s the same effect the old “Hidden” (
private) value always had — that value still works for any tool that sends it directly. - AI Business Rules now consistently names the seller Page for policy and approval decisions.
5.373.0 — September 5, 2026 at 9:22 PM UTC
- In the Advertisers tab, select the Partner-managed or Self-serve lens to see which buyer relationships require setup. The roster marks relationships as Needs setup — waiting on you, Waiting on buyer, or Awaiting billing; select Review setup to open the same setup case drawer available from Buyer Account Mapping. House rows carry no setup state. Nothing a buyer sees about you changes: the states are derived from setup cases already visible to the seller in the Buyers directory, and no buyer-facing response or page is altered.
- Buyer-organization administrators can now use the buyer REST API to see how a buyer agent is configured, whether its notification and reporting setup has been proved, and what still blocks readiness. Registration, an active credential, configuration proof, advertised capabilities, and business authority remain separate checks. Passing one check never grants advertiser, account, spending, payment, or Terms access. Existing integrations do not need to change, and the configuration UI remains withheld until this API contract is stable.
- Administrators can deactivate one notification subscriber or reporting destination, suspend a buyer agent, or permanently retire it. Each control requires the buyer agent’s exact display name and current state or version. The administration history records the authenticated person who made each change without storing endpoint details, proof material, or secrets.
- Seller-recorded changes appear in a separate
principal.changedhistory and tell the buyer agent to refresh withget_principal. The buyer agent’s own successfulsync_principalcalls do not appear as incoming seller activity. Both histories return the latest 100 records and say when older records exist. - Seller impact: sellers do not need to act, and buyers see no new seller ranking, inventory, packaging, or readiness information. Sellers continue to enforce the buyer agent’s configured lifecycle, while buyer agents can see when a seller records a proof or destination-status change. Monetization impact: none. This adds no billable surface, entitlement, price, Interchange Unit, spending, payment, or Terms authority.
- Availability is limited to directly authenticated organization administrators through the buyer REST API. That server-side authorization check is the release gate; rollback removes these administration routes together. Wider use requires the authorization, organization-isolation, destructive-control, notification-recovery, and authenticated-route checks to pass. Adoption is measured from successful administration audit records. Guardrails track rejected authorization, failed controls, notification-loss alerts, and any unexpected authority response without collecting endpoints, destinations, proof material, or secrets.
- See Buyer-agent credentials.
- Open Agents in Murph and select an Agent to manage its endpoint, certification, and inventory sources from the left rail. First-party Agents omit client onboarding controls; client-serving Agents show them when authorized. Open an exact inventory source for credentials, connection tests, and diagnostics. Existing connections need no setup changes.
5.372.0 — September 5, 2026 at 7:58 PM UTC
- Seller Accounts on Listing can review campaigns, media buys, creatives, approvals, delivery, activity, and reporting in Interchange while a connected sales agent handles selling. The current Campaigns experience and AI Business Rules become available when the account moves to Listing; no action is required to keep using the connected agent, and saving, enabling, or evaluating AI Business Rules is not IU-rated today. To add self-serve advertisers, public listing distribution with an optional CNAME, or customer-branded AdCP and ChatGPT app channels, choose Listing + Distribution in Plan & billing. This paid package does not change the visibility or ranking of the Interchange listing and does not enable Merchandising. Buyers do not see the seller’s account-profile label, and their existing Campaigns V3 exposure remains unchanged.
- Certified plan intent is pre-release and is not yet available to Seller Accounts. The
seller-rfp-plan-intentflag remains disabled until the follow-up trigger-enforcement migration ships, so RFP responses retain the legacy contract. The pre-release capability adds no entitlement, package, or billing meter. - There is no Seller Account action to take for this pre-release foundation.
- If your buyer agent or integration creates media buys from Buyer Proposal JSON, preserve each
productIdandpricingOptionIdexactly as returned when callingcreate_media_buy. Buyer Proposal JSON keeps its published shape and field set, but these values now include their source so identical upstream IDs from different sources stay distinct. - Integrations that already pass returned IDs through unchanged need no code changes. Existing defaults are unchanged. Integrations that map or replace IDs should instead preserve the returned values exactly.
5.371.0 — September 5, 2026 at 1:22 PM UTC
- Preview CSV, XLS, and XLSX tag sheets locally before upload with the new Inspect a Tag Sheet skill. The offline inspector shows the creative-row count and versioned mapping rules without uploading or printing tag content. When a readable tag-sheet shape uploaded through Murph repeatedly produces no creative rows across customers, Interchange sends one deduplicated, content-free signal for team review; nothing else is required from you.
- Route each seller setup checklist item and its next action to the incomplete task that needs attention.
- Sellers can use the left rail in their Seller Account to move between Inventory, Advertisers, and Agents. Setup progress stays in Inventory, and campaigns stay with each advertiser.
- Use
open_proposal_pass({ rfpId, turnId })in the v3 Seller Account MCP surface to open the Proposal Pass Page for an exact RFP turn. The launch returns only those IDs; the Page retrieves private proposal detail after it opens. Invalid pairs and records outside your account do not open, and the existing v2 storefront launch remains unchanged.
5.369.1 — September 5, 2026 at 7:55 AM UTC
- Creatives delivered after storefront review now preserve the downstream platform creative ID in the terminal buyer callback, so provider materialization appears in creative readback. Buyer-visible provenance is also correctly attributed to the seller storefront rather than its private inventory source.
5.369.0 — September 5, 2026 at 6:56 AM UTC
- Creatives on approved future-flight media buys now receive their package binding while the buy is pending start, so delivery no longer waits for the flight to become active.
- Source Diagnostics now explains recognized request-field failures in plain language, shows actionable fields and protocol guidance, and keeps the complete redacted upstream response in collapsed technical details.
- Creatives attached while a seller is reviewing a media buy are now delivered automatically after approval. Buyers no longer need to detach or resubmit them.
5.368.0 — September 5, 2026 at 3:32 AM UTC
- Inventory Sources is now available from the navigation in every seller account. Use it to connect an AdCP-compatible sales agent and open each Source’s settings, credentials, connection tests, and diagnostics. The agent may be operated by your company or by a provider; that choice does not require a different plan.
- No action is required for existing Sources.
- Commercial model: none. Connecting and managing an inventory Source remains included in the free Listing-only setup. Paid Merchandising controls still require a Merchandising plan and its entitlements; this navigation rollout does not change prices or grant paid access.
- Persona impact: seller operators get one consistent place to manage Sources. Enterprise brand, agency, power, and small-business buyers have no new action and see no change from this navigation release.
- Buyer-visible effect: none from the navigation rollout itself. Buyers continue to call the same storefront, and Source eligibility and returned products are unchanged until a seller configures or changes a Source.
- New seller workspaces now start with the tools included in the option selected during signup. Choose Listing only for the free publishing setup, or choose a Merchandising plan for richer product and inventory-management tools. There is no separate support request or hidden account switch after signup.
- Your workspace stays aligned when you upgrade, renew, downgrade, or join an approved beta. A setup change is applied only when every included capability is available, so a failed change cannot leave the account partly updated. The current setup is visible in the account switcher.
- Commercial model: Listing only is the free connection and publishing setup. Merchandising is the paid package for modular inventory and self-service publishing. The accepted Rate Card remains the authority for price and product rights; a feature profile only presents those rights and cannot grant or price anything by itself.
- Persona impact: seller operators choose the setup that matches how they sell. Enterprise brand and agency buyers may discover richer products after a seller chooses Merchandising. Power and small-business buyers use the same storefront interface and do not need to change their workflow.
- Buyer-visible effect: Listing-only does not change how buyers access a seller’s storefront. A seller that selects a Merchandising plan can publish the richer products enabled by those paid capabilities, which buyers may then discover through the existing storefront interface.
5.366.1 — September 5, 2026 at 1:37 AM UTC
- Managed sales-agent health now recovers after a successful status refresh instead of retaining a transient unreachable warning for seven days.
5.366.0 — September 5, 2026 at 12:59 AM UTC
- Source diagnostics can now launch deterministic validation for connected third-party sales agents instead of stopping before validation reaches the agent.
- Preserve package identity in newly generated click and impression tracking when a creative has exactly one package assignment.
- Seller home now starts eligible storefronts at Interview your Merchandising Agent. Choose Teach to add and confirm seller material, or Test to practice a buyer brief. Existing users do not need to change their setup, and each workflow keeps its existing access, review, and evidence requirements.
- FreeWheel media buys now create active placements with the selected inventory, retain the validated currency and connection settings through booking, and attach creatives immediately. No seller action is required.
5.365.0 — September 4, 2026 at 11:38 PM UTC
- External Agent setup now uses shorter, ownership-neutral guidance, and Source Diagnostics opens on a live Source by default while keeping inactive Sources available for deliberate review.
5.364.0 — September 4, 2026 at 10:33 PM UTC
- Buyer Storefront connection reads now include an opaque selection-edge revision, allowing read-only clients to verify repeated selection results while treating revision bumps as fencing changes rather than seller-choice changes.
- Campaign creative uploads now accept CM360 tag sheets in CSV, XLS, and XLSX formats, keep their placement tags ready for review, and let you search all managed campaigns by name when choosing where to use creative.
- Buyer-agent sandboxes that retain their first eligible provider account now remain active when registration expiry cleanup runs concurrently, including during a rolling deployment with an older API or worker. Cleanup still removes truly expired, unbound sandboxes and safely retries interrupted Core deactivation.
- Buyers now see regional market makers under “Selected & default-on” on the Sellers page, and regional market makers with no declared regions join automatically for advertisers targeting their approved markets.
- You can now filter the Sellers page by market and channel, so you can find, for example, every seller selling in the Netherlands or every seller offering CTV. The filters combine with search and the existing status filters. In the web app, share a link with
marketandchannelin the URL to open the page with those filters already applied.
5.363.0 — September 4, 2026 at 7:31 PM UTC
- Restore seller billing links and make empty advertiser and collapsed-widget states recoverable in the seller rail.
- Find approvals and other pending seller work in one Approvals & operations rail destination, with approval routing still reachable from the combined inbox.
- Keep the Agents workspace inside Murph so sellers can browse and create Agents without losing their chats or composer.
- If you’re invited to administer a new Buyer Account, use the Welcome to Interchange email to join the organization and review any outstanding Terms of Service. If your organization already has a Seller Account, it remains available as a separate workspace; no changes are required to keep using it.
5.362.0 — September 4, 2026 at 4:42 PM UTC
- Plan & Billing now presents a Rate Card—the activities and prices included in a plan—with three Intelligence Unit activities for new v4 plans: Brief responses, Social account intelligence, and non-social Interchange media buys that record delivery. Scope3 initiates the transition by offering a v4 plan, and an admin for the organization must explicitly accept it. No customer is migrated automatically; existing v0-v3 plans and historical usage remain unchanged.
- Enterprise brand buyers: compare the three outcome-based rates with your governance and measurement plan before an admin accepts the offer.
- Large agencies and hold-co buyers: update pricing playbooks only for organizations that choose v4; current client plans need no action.
- Hands-on buyers: Plan & Billing shows the exact activity, unit, and rate before acceptance, so experiments can be costed against the same schedule the meter uses.
- SMB and chat buyers: nothing changes unless your organization is offered and accepts a new plan; Murph and Plan & Billing will present the new schedule.
- Sellers: a v4 plan rewards complete storefront responses and trustworthy channel attribution. Only sellers that explicitly accept v4 may incur one IU for a non-social Interchange media buy that records impressions or spend in a billing period; existing seller plans and earlier buys are unchanged.
- This release uses Social account intelligence as the customer-facing name for eligible social-account access. Usage is charged only after the matching customer outcome occurs. A non-social media buy costs one IU in a billing period only when Scope3 records positive impressions or spend for that buy in that period. If corrected delivery data returns both totals to zero before the invoice, the IU is removed. If the correction arrives after the invoice, Scope3 applies the credit or reversal to the original period; the customer does not need to take action.
- There is no separate feature flag: customer exposure is structurally gated by an offered and explicitly accepted v4 plan, and rollout coordinators will not create v4 offers until governance PR #12746 is approved. The immediate kill switch is to stop issuing v4 offers; accepted Rate Cards remain immutable and continue to follow their signed terms. Expand beyond the initial offers only after the first accepted v4 billing periods show zero unresolved attribution candidates, zero duplicate metering keys, and successful recovery sweeps for all three activities. Rollout coordinators will monitor accepted-v4 counts, per-activity metering events, recovery failures, unresolved attribution, and duplicate suppression in the launch tracker and
project-iu-rolloutchannel. - Murph now keeps uploaded creative tag sheets available while buyers choose a campaign in a later message, instead of asking them to upload the same sheet again.
- Creative review rows in Approvals now lead with the creative instead of the caveats. Each row opens to what the buyer sent: an image + copy creative shows its headline, body, and call to action as text; a hosted file shows its format, size, and host; a third-party tag shows who serves it and, in plain words, what it does (loads a script, fetches VAST from a domain, fires tracking pixels). One chip in the row header names the trust level, the tag source sits behind a “View tag source” disclosure, and Approve and Reject are in the same place on every row. Where an interactive preview is available, the button names the provider it will send the creative to, and its expiry is shown in your locale.
- Nothing about the safety boundary changed: buyer HTML, JavaScript, VAST, and media URLs are still never loaded or executed inside Interchange, and the provider preview still opens only through your chat host after you ask for it.
- You can now understand billing figures, update Business Rules from the top of the page, and diagnose ad-server sync failures without hunting across duplicate status panels. Approvals also adds a buyer filter and lists recently approved media buys with the newest decision first. Nothing needs to change on your side.
- The signup chooser appears only when Scope3 enrolls you. You can choose Advertiser, Advertiser Portfolio, Media Company, or Developer. An enrolled Media Company signup then follows the existing seller flow. Seller presentation remains unchanged when enrollment is not enabled.
- Your choice only determines your signup experience. It grants no authority or access and does not change billing, navigation, or capabilities. Nothing to change unless you are enrolled.
5.361.0 — September 4, 2026 at 1:24 PM UTC
- Keep the setup checklist visible after you connect an external sales agent, including while its product mappings and agent link are still being established.
- Fixes media buys that could get stuck in DRAFT status when a storefront (e.g. PubX) calls back with an acceptance before our system finishes writing the correlation record. The webhook handler now retries the lookup briefly to close that window, so buys transition to ACTIVE as expected.
- Modular inventory catalog refreshes now preserve a source-declared guaranteed or non-guaranteed delivery type. This keeps buyer cancellation behavior stable when a static-avails product is regenerated from its backing source.
5.360.0 — September 4, 2026 at 12:23 PM UTC
- Fixed TikTok Video Views (6-second and 15-second) media buys failing readback verification and being rolled back after creation. TikTok auto-populates the ad group’s conversion tracking event to match its optimization goal even when none was requested; the adapter now tolerates that provider-side normalization instead of treating it as a mismatch.
- Approved Media Company applicants can now review a research-backed setup draft in the Murph onboarding rail. The draft surfaces inferred operating role, candidate properties and domains, markets and channels, likely inventory sources, and selling-path guidance — helping you configure your Storefront before your team reviews it.
- Each field is labeled INFERRED, APPLICANT_CONFIRMED, or INDEPENDENTLY_VERIFIED so you know which suggestions to validate. Settlement currency is a suggestion only; set it in Plan & Billing. adagents.json is a draft for your review; you publish it yourself when ready.
- This has no buyer-facing behavior. It does not change pricing, packaging, billing, or paid-tier eligibility; it is an onboarding reliability and time-to-value improvement for enrolled sellers.
- Adoption is measured with
media_company_setup_draft_viewed, emitted on a non-impersonated applicant read. For the asynchronous test cohort, the acceptance target is that every approved applicant with a completed projection can open the draft without assistance; after launch, track the share that reads it within seven days of approval and median time from approval to first read. - Correct native adapter reporting mappings and declarations so cross-platform metrics preserve their standard meanings and supported conversion values are not dropped.
5.359.0 — September 4, 2026 at 10:47 AM UTC
- Keep the Inventory, Advertisers, and Agents workspace labels readable across the seller setup rail.
- Fixed
create_media_buyon TikTok returning a generic, retryable “Upstream request failed” error for requests that were actually missing a required field (app ID, conversion event source, messaging-app destination, platform identity, or a Smart+ creative). These now surface as a correctableINVALID_REQUESTnaming the missing field, so the buyer knows what to fix instead of retrying a request that will never succeed. - Fixed TikTok Video Views (6-second and 15-second) media buys failing readback verification and being rolled back after creation. The ad group now requests the Video Views-specific promotion type TikTok requires, matching the fix already applied to TikTok Reach.
- Icons for your ChatGPT app now come from the logo in your brand.json — nothing to upload. If your storefront doesn’t have a logo there yet, add one; your directory (256×256) and composer (48×48) icons generate automatically the next time you publish.
- A FreeWheel inventory source that was withheld from buyers because its execution currency had never been confirmed with the ad server now clears itself. Interchange reads your FreeWheel network, restates the execution currency already configured on the source, and the source becomes buyable — within fifteen minutes, with nothing for you to do. It never chooses the currency for you: FreeWheel stamps the currency on each insertion order itself, so Interchange only ever restates the one you configured. Two states still need you, and the Ad-server execution currency row on the source names which: credentials that cannot read your network’s insertion orders, and a network whose existing orders book a different currency than the source declares. Google Ad Manager, SpringServe, and AdsWizz sources are unchanged.
- Product discovery now retains the exact inventory-source route for managed Storefront products, so buyers can stage own-inventory campaigns without a route-identity error.
- Creating a seller account is now more focused: company domain, billing currency, and support channel move to the guided setup steps after the account is created, where their purpose is clearer. Legal authorization is still required at account creation.
- Unenrolled accounts are unaffected and continue to see the current dialog.
5.358.0 — September 4, 2026 at 6:58 AM UTC
- Keep seller setup navigation legible and actionable by preventing workspace-tab overlap, naming incomplete inventory sources in the next step, and showing completed go-live steps without a strike-through.
- Keep seller workspace navigation in one rail, including live storefront and Agents-route follow-ups.
5.357.0 — September 4, 2026 at 4:18 AM UTC
- Sellers can request an interactive placement preview during Creative review for eligible third-party or unknown creative. No action is needed unless you choose to request or open a preview. This staged feature is included: it adds no package, entitlement, usage charge, or other billable surface.
- Buyers: requesting a preview sends your exact creative to an authorized preview provider only when a seller requests that preview so the seller can review it. Buyers have no additional action to take, and the provider does not receive your creative for static inspection, approval, or rejection alone.
- After the provider returns an expiring preview, sellers can choose to open it outside Interchange. Static source inspection remains inert, and sellers can approve or reject creative without requesting a preview.
- We will measure staged acceptance and adoption through the fixed lifecycle events
mcp_creative_preview.request,.returned_link,.external_open, and.expired_link: request-to-returned-link completion rate, returned-link-to-open rate, and expired-link rate. These events contain no creative, URL, provider, or buyer identifiers.
5.356.2 — September 4, 2026 at 3:15 AM UTC
- The
test-sales-agentvalidation skill’s advertiser-creation step now retries (up to 3 attempts) instead of failing outright on a rare, transient brand-lookup timeout, so self-validating your sales agent through this skill is less likely to fail for reasons unrelated to your own implementation. Published astest-sales-agent@1.5.1.
5.356.0 — September 4, 2026 at 1:23 AM UTC
- TikTok Traffic media buys now create successfully even when TikTok automatically extends delivery to its search results page — nothing to change on your side. TikTok’s platform doesn’t let advertisers opt out of this for some objectives, so your ad may serve there in addition to your selected placement.
- Media Companies no longer have to approve their own managed campaigns twice. Uploading Creative in an exact own-supply campaign satisfies the Storefront creative review; confirming Campaign launch and requesting a non-cancellation update satisfy the Storefront media-buy approval. Cancellation keeps its separate approval policy. Manual approval settings continue to apply to external and sponsored buyers, while source-native creative approval, readiness, financial, and safety checks remain unchanged.
- The new Buyer agents page shows which automations can call Interchange as your organization, and what proves it. It lists your organization’s own operator identity — with its principal ID and lifecycle state, but no credentials to manage — alongside every buyer agent you administer, each with its Interchange-issued principal ID, lifecycle state, and how many credentials are active. Identity is not authority: holding a principal or a credential grants no advertiser, account, spend, payment, or Terms access.
- From that page an organization administrator can issue a new identity-only credential, register an API key or OAuth client the organization already owns, rotate an API key, or revoke a credential. A secret is shown exactly once, in the response that creates or rotates it, and can’t be retrieved again afterward — not by the console, the API, or support.
- Rotating or revoking a credential asks you to retype the buyer agent’s name first. Revoking also states up front whether you’re removing the buyer agent’s last active credential — doing so suspends it until you add another — and revocation can’t be undone: the same credential can never be registered again.
- The page is backed by a new read,
GET /api/v2/buyer-agent-principals. It returns your operator principal and your buyer agents, each credential’s type, active-or-retired state, timestamps, and the one identifier the rotate and revoke calls accept. It never returns a secret, and it carries no issuer URLs, organization IDs, domains, JWKS URLs, key IDs, or key fingerprints — those describe a credential, never the principal. - Reads and changes both require you to be signed in directly as an administrator of the organization. Support, impersonated, simulated, and delegated sessions, API keys, and OAuth clients are all refused.
- See Buyer-agent credentials.
- Seller names, media-buy details, and creative formats now render in text content for AI agents using the v3 buyer surface.
- Agents on hosts that only pass tool text to the model (Claude web among them) were seeing sellers as bare numeric ids in proposal, media-buy, and
request_proposalsresults, andget(kind: "media_buy")ignoredinclude. Every buyer read now names the seller beside its id,get(kind: "media_buy")reports the campaign, seller, gross budget, and flight, and honoursinclude: ["products"](line items with their packages and human-readable format labels),["creatives"], and["deliverySummary"]. The single-buy REST read (GET /media-buys/:mediaBuyId) now carriescampaignId. Nothing changes for callers that already readstructuredContent; the same facts are simply mirrored into text. - The Sellers page — where you choose which sellers to work with, set billing policy, and manage seller connections — is now available to every buyer account, in Claude, ChatGPT, and the Interchange web app. Seller connection management has moved there from the Settings → Connections pane, which still handles creative, data and measurement, and cloud-drive provider connections.
- Use one left-rail switch to move between Inventory, Advertisers, and Agents. Setup progress stays on Inventory, and each advertiser contains its campaigns.
- Setup checklist counts now show only the steps you still need to do; defaults and optional items no longer count as progress.
5.355.0 — September 3, 2026 at 5:31 PM UTC
- Buyers on the v3 agent surface can now open Advertisers, Campaigns, and a draft campaign’s Review & go live receipt from inside the conversation — nothing to set up. Ask your agent “show my advertisers” or “show my campaigns” and it opens the live, interactive Page in any host that renders MCP Apps — Murph, Claude, or ChatGPT — instead of reciting a list. Ask whether a draft campaign is ready to launch (for example, “is the spring launch ready to go live?”) and it opens Review & go live: the plan, the staged media buys and their budget split, why each buy is not live yet, and the readiness blockers still standing between the draft and launch. Reviewing never launches anything; going live remains the explicit, confirmed step it is today.
- Storefront readiness now reads the execution currency your ad server actually holds instead of inferring one from your storefront settings.
- Two things change for managed ad-server storefronts:
- A storefront that settles in more than one currency is no longer blocked because its ad server executes in a payment currency rather than the storefront default. Your ad server’s own default is what has to be enabled for new buys and settleable.
- A source whose ad server has no execution currency is now reported as blocked, with the reason, instead of appearing healthy in a currency copied from your saved connection settings. Previously a FreeWheel source could show a green execution currency and still fail a buy at booking time.
- Editing an ad-server connection also keeps the execution currency the ad server already uses, rather than resetting it to your storefront default.
- Nothing to change on your side. If a storefront was blocked on this, it clears on its own. If a source now reports blocked, the reason names the exact failed check — follow Ad-server execution currency is not ready in the source troubleshooting guide.
- TikTok Traffic media buys that previously failed to create due to a placement-setting mismatch now succeed in more cases — nothing to change on your side. TikTok’s platform doesn’t always honor the requested placement setting on the first attempt; when it still doesn’t, the buy fails safely instead of partially completing, the same as before.
- You can re-test an ad-server connection yourself again. Sync & diagnostics has a Test connection action that probes your ad server and shows what came back — pass or fail, with the ad server’s own message and what to do about it. Nothing is required of you: if a FreeWheel source was refusing buys because its currency had never been observed, re-testing it now is what clears that.
- Every probe is also recorded, including one that never reaches your ad server. “Last probed” says when anyone last checked, and says Never when nobody has — which used to look identical to a check that ran months ago.
- For sellers reading this over the API: a
geton an inventory source now returnsadServerProbe, so a read reports when the connection was last probed instead of letting stored state pass for a live test result.getalso accepts an ad-server connection id where it previously took only the source id. - In the Buyers directory’s account picker, you can now choose “Use Interchange default” to map a buyer relationship to your ad server’s shared default advertiser instead of mapping a dedicated account for that buyer. It’s offered when every active grant on the relationship settles through agent (Interchange-cleared) billing and the source’s configured default advertiser currently reads back healthy.
- Interchange keeps the mapping healthy on your behalf: if the source’s configured default advertiser later changes or stops reading back, the mapping is marked stale and execution pauses on it until it’s reconciled or you choose a dedicated account instead — it never keeps executing against a default that’s drifted. Relationships billed directly to the operator or advertiser still need a dedicated account mapping; this option isn’t offered for them.
- Buyer-facing surfaces are unaffected — buyers still see one account per relationship, with no visibility into which option you chose.
5.354.0 — September 3, 2026 at 2:26 PM UTC
- Plan & Billing now shows organization setup in the correct order: accept terms, select a plan when eligible, add billing details, then add a payment method. Completed steps stay marked complete if an earlier prerequisite reopens.
- Plan & Billing now separates pending IU offers from accepted plans. Pending offers appear in a dedicated IU offer card with their next action, while Your current plan and Your current terms only show accepted or effective information. Existing prices and agreements are unchanged.
- A new Connected apps page in your account menu shows every AI app you’ve authorized to access your Interchange account — such as Claude or ChatGPT — including when it was first connected and when it last refreshed. You can disconnect any of them from the same page.
- VAST tags registered through the API have never been able to reach a managed ad server without a declared version — now you can supply one and fix that. If that’s you, start setting
vast_versionon your VAST assets. If you don’t register VAST tags, there is nothing to do: hosted video and every other creative type are unchanged. - Set
vast_versionon a VAST asset —2.0,3.0,4.0,4.1,4.2, or4.3— when you create or update a creative: json { "url_asset": { "url": "https://ads.example.com/tag.xml", "url_type": "vast", "vast_version": "2.0" } }- A VAST document is fetched at request time, not at registration, so we can’t detect its version automatically — you have to declare it. Until now a tag registered through the API carried no version at all, so it could never satisfy the check a managed ad-server destination makes before accepting a tag.
- Two sync outcomes are worth telling apart:
destination_profile_rejected, reasonmissing:vastVersion— the tag declared no version. Update the creative withvast_versionand sync it again to get it delivered.destination_profile_not_certified— the version is outside what we hold delivery evidence for on that destination. That boundary reflects what we have proven, not what the ad server refuses, so there is nothing to correct in your creative. Certifying that route is Scope3’s job: we have to establish delivery evidence on the destination before the version becomes eligible, and retrying the sync won’t change the result until that happens. There’s no self-serve status page for it today — ask Murph where the route stands, or raise it with your Scope3 contact.- Declaring a version on a non-VAST URL asset is rejected as a contradiction rather than silently ignored.
- Existing enterprise and small-business customers do not need to take any action: accepted IU plans and billing amounts are unchanged.
- Billing administrators and builder/power buyers can now use Admin → Rate Cards (or the Rate Card API) to set the monthly subscription and included-IU allowance independently for a future offer. For example, a plan can charge a $1,000 monthly subscription with IU usage billed separately, or include 250 IUs with no monthly subscription. After a customer selects the plan, Plan & Billing shows the subscription, included allowance, and IU usage price as separate terms. For novice buyers, the existing plan-selection flow is unchanged; the clearer labels appear automatically and require no action.
- Organization administrators can now open Plan & Billing directly from organization settings without returning to the main account screen first.
- Child-only Seller Account administrators who follow a Plan & Billing link now see that billing is managed by the parent organization instead of being silently sent back to account home.
- Publisher authorization checks now agree with AAO when an authoritative manager file uses
publisher_properties, repeats an agent URL for separate scopes, or mixeswwwand apex domains. When you connect or update a third-party sales agent, Interchange also rejects anadagents.jsondocument as the agent endpoint and asks for the executable URL fromauthorized_agents[].urlinstead. - Keep repeated unavailable Buyers actions visible and open Business Rules during storefront setup before approval capabilities are enabled.
- TikTok Reach media buys now pass readback verification and create successfully. Every TikTok Reach ad group was previously rejected after creation because it requested an optimization location TikTok doesn’t use for Reach campaigns; the ad group now requests the optimization location TikTok’s Reach objective actually expects.
- Wholesale pricing uploads now commit for every ad server’s own selector types. If you price FreeWheel site groups or site sections, SpringServe supply tags, or AdsWizz zones, a clean preview was followed by a commit failure naming an unsupported selector type — even for the selector ids our own pre-filled template gave you. Those feeds now commit, and your selector type is stored exactly as you sent it, so the pricing lands on the products keyed to it.
- Nothing about your file needs to change: upload the template as-is. A
selector_typethat matches none of your products still previews as an unmatched selector and prices nothing — that warning is the signal to check the id and type against the selector browser, and it no longer blocks the rest of the feed. - When your storefront supports composed products, seller home now starts with “Interview your Merchandising Agent” and gives you two direct actions: teach it how your business sells or test it with a real buyer brief. Storefronts without composition capability keep the existing neutral home experience. This changes only the seller home entry point; it does not change what buyers see about your storefront.
- The explanation for an unavailable Fund your account action on Plan & Billing now remains fully visible instead of being cut off at the edge of the Standing & funding card. Nothing changes on your side.
- In the Seller Dashboard’s action row for a storefront that sells through its own sales agent: when merchandising is on your plan and a connected sales agent can supply products but hasn’t finished setup, you now see “Review source readiness,” which opens that source’s diagnostics, instead of “Connect an ad server.” When no connected source can supply products yet, you still see “Connect an ad server.” When merchandising isn’t on your plan, you still see “Upgrade to a merchandising plan.”
- “Listing-only account” now replaces “pass-through” on the plan screens and the Seller Dashboard badge — in renewal and non-renewal status lines, the free-plan confirmation step, and the badge label itself. The merchandising source prerequisite is stated in plain language everywhere it appears: a connected source that is ready to supply products your storefront can sell, such as an ad server.
- Buyer-facing surfaces are unaffected — every changed string is on the Seller Dashboard, the plan screens, or the seller glossary/onboarding docs.
- Source Diagnostics now reports only the discovery calls your diagnostics actually recorded. When a validation test ended without returning a usable result, the Product discovery row previously added a call of its own and showed “Calls 1 / Failed 1”, which read as a Source fault even when no such call had been recorded. The row now leaves the recorded counts untouched and says no test result was returned, so a test that gave you no answer is no longer indistinguishable from a Source that answered badly. Whether the Source was reached in that case is genuinely unknown until the diagnostics refresh, and the Page now says so instead of guessing. Run-specific request, response, and trace controls still appear only when the returned result includes their identifiers.
- Your seller rail stays in place when you open setup widgets, and newly created accounts open directly. Nothing to change on your side.
- For managed ad servers, connection responses now include the linked inventory-source name. Existing integrations continue to work without changes.
5.353.0 — September 3, 2026 at 7:17 AM UTC
- The Buyers account picker offers Use Interchange default for buyers you bill through Interchange, once it’s turned on for your storefront and your connected source has a healthy configured default account. One click settles that buyer through your existing default instead of creating or picking a dedicated native account — no setup required. The option only appears when it’s actually usable; it stays hidden for direct-billed buyers, a source without a configured default, or a storefront where the exit hasn’t been enabled yet.
5.352.0 — September 3, 2026 at 6:15 AM UTC
- Creative creation now commits its manifest, assets, metadata, and completion marker together. Failed saves leave no partial creative records, and a concurrent same-name request removes only its own prepared object batch before returning the existing creative; existing routes and V2 ordering remain unchanged.
- Buyers using their own connected Storefront can now reliably continue selecting products during campaign setup. You do not need to take any action. Sellers and their Storefront settings are unaffected.
- Scrappy builder / power buyer: On a configured Meta connection, you can use the MCP upload Task to add one private JPEG or PNG for the ad account you selected. If image upload is not shown, use a configured Meta connection; do not send the file through chat. Managed MP4 and audio uploads keep their existing account-access and service settings.
- Enterprise brand buyer: No action or governance change.
- Large agency / hold-co buyer: Existing team workflows do not change.
- SMB buyer (novice, chat): Nothing changes in chat.
- Seller check: This does not change seller ranking, inventory presentation, readiness, or setup.
- Fixed several issues on the storefront Listing page’s ChatGPT app and Distribution blocks:
- The generated-icon preview no longer shows a broken-image icon if it can’t load — it falls back to a plain tile instead.
- Directory and composer logo uploads now use an “Upload PNG” button instead of the browser’s native file picker, with the chosen file’s name shown next to it. Choosing the same file again (for example after replacing a logo and wanting to revert) now works correctly.
- The ChatGPT app’s category is now tucked behind a collapsed “Advanced — change category” section, since it’s already defaulted for you and most sellers never need to change it — but the current category always shows as a read-only row above, so you can see and confirm it before saving. If you change the category without saving, “Mark listing reviewed” is disabled until you save, so you’re never reviewing one category while approving another.
- Approving your ChatGPT app listing (“Mark listing reviewed”) now also covers the category shown at that time, the same way it already covers your listing name, subtitle, description, and URLs. If you approved your listing before this change and have since changed the category, you’ll be asked to review and approve it again — a one-time reset closing a gap where a category change alone didn’t require re-review.
- OpenAI Apps verification now appears only when Public web is selected, since that’s the only time there’s a public discovery URL for it to verify.
- Meta Feed Image, Feed Video, Stories, and Reels no longer advertise Call Now as a generic creative CTA. This change does not add a new Call Now option; use the existing Meta Calls product workflow when that product is available and configured.
- Seller impact: not applicable. This changes buyer capability discovery only; it does not change Storefront seller setup or delivery.
- Asking about a modular inventory source now returns its complete module list. Reading modular readiness returns tens of kilobytes of module contracts and per-stage field requirements, and an assistant that could only hold part of that answered from the part it had — reporting a source as having fewer modules than it does, and in one case describing an active trafficking module as absent. Modular source reads now state the module roster and the lifecycle stages it covers up front, so the list is complete regardless of how much of the detail behind it fits, and a partial read now says so instead of reading as a short one.
- Text fields (brand name, headline, etc.) now appear in the Upload tab when creating a creative for social platforms such as Snap, TikTok, Meta, Reddit, Pinterest, Spotify, and LinkedIn. Previously these fields were missing from the upload form, causing creatives to be rejected by the platform as invalid.
- Fixed a bug where creating a TikTok media buy for a non-conversion-tracking objective (e.g. Traffic) always failed with a false targeting mismatch, even though nothing was actually wrong with the campaign.
- TikTok Reach media buys now create successfully. Every TikTok Reach ad group was previously rejected by TikTok as invalid, because the ad group’s frequency settings were only sent when a frequency cap was explicitly requested. TikTok requires a frequency setting for Reach campaigns, so one is now always included — using your requested frequency cap when you set one, or a default sized to your flight dates otherwise.
- The Sellers page in Claude no longer shows a blank surface while it connects and retries automatically if the first connection stalls. Also registers record_widget_telemetry, an app-only, model-invisible observability tool with a closed fixed-code schema; it adds no customer capability, so this stays a fix.
- Technical buyer administrators can now issue a new identity-only credential for a buyer automation, instead of only registering one the organization already owns. Like a registered credential, it authenticates the automation only — no access to advertisers, accounts, spend, payments, Terms, or other business APIs.
- A directly authenticated organization administrator issues it through the buyer REST API, and can replace it later without changing the automation’s identity. Save the one-time client secret when it is returned — it cannot be shown again. If an issuance comes back needing reconciliation, retry the same request with the same idempotency key before trying anything else. There is nothing new for chat-only buyers or sellers to configure.
- The Seller Dashboard for accounts that sell through their own sales agent no longer shows a “Turn on merchandising” button that granted nothing when clicked. It now shows the one control that matches your account: sellers without a merchandising plan see “Upgrade to a merchandising plan” and go straight to Plan & Billing; sellers who already have a plan but no connected ad server see “Connect an ad server” instead. Sellers who already have both see no control here — merchandising is already on.
- Embedded sales agent 1.42.0. GAM-backed storefronts can now target every country GAM itself can target, including region-typed country targets, and a request naming a country the agent cannot map now fails closed instead of being silently narrowed. FreeWheel-backed storefronts are buyable again, and a media buy binds to the FreeWheel account the request names rather than a default.
- Corrected the
update_storefront_capabilitiesdocumentation to match actual behavior: recordingsetupIntent(third_party_connect|sell_through_scope3) is purely descriptive and has never applied a capability preset or been rejected on ad-server-backed storefronts —capabilities(derived from merchandising entitlement and Source product readiness) is the only thing that changes what a storefront can do. Removed the dead, uncalled compatibility helper that previously implemented the (already inert) preset. - Also documented an existing validation rule that already applies today, with the full rule and worked examples in Storefront onboarding → Approval-routing prerequisite. On an existing storefront that is not routed through an adapter, a save is rejected with a
400(field-scoped tomediaBuyApprovalorcreativeApproval) when it results in that approval setting beingmanualand the matching capability (offersCampaignApprovaloroffersCreativeReview) being effectivelytrue— unless that exact pair already held immediately before the save, or approvals of that kind already have somewhere to route: an active primary approval-routing policy for it, or, when none is saved, at least one active organization admin (the default). Routing is opt-out, so most sellers need no setup; configure an approval-routing policy only if approvals should go somewhere other than your organization admins. No behavior changed here — this makes a rule that was already enforced visible. - Shareable buyer invite links have been retired. Opening a saved or shareable buyer invite link now shows a not-found (404) page and does not start signup. To access a seller, open the seller’s verified storefront or find the seller through Discovery. If you do not use saved or shared buyer links, no action is required.
- Sellers: replace any shared buyer-link directions with your verified storefront or Discovery page. Your existing buyer approval settings are unchanged.
- Enterprise and agency buyers: update saved links and team playbooks to use sellers’ verified storefronts or Discovery. There is no replacement invite-link workflow.
- SMB buyers: if a link no longer opens, search for the seller in Discovery or open the seller’s verified storefront. No technical setup is required.
- API and MCP builders: remove calls that create, list, delete, or resolve buyer links, and remove
joinSlugfrom requests. Authenticated calls to retired APIs are not found (404); anonymous requests to the formerly public resolver are rejected by authentication without disclosing context.joinSlugis rejected as invalid input. Send users to the seller’s verified storefront or Discovery instead. There is no replacement targeted-invite API. - Packaging and pricing are unchanged.
- Sellers can now declare the full AdCP MediaChannel vocabulary on their listing — including search, linear TV, radio, podcast, out-of-home, print, cinema, email, gaming, retail media, influencer, affiliate, product placement, and sponsored intelligence — instead of the previous six-channel set. Saving still accepts the legacy
audio/videospellings for backward compatibility;videois now saved asolvandaudiokeeps its established spelling, so nothing already using either alias needs to change.
5.351.0 — September 2, 2026 at 10:35 PM UTC
save_media_buynow stages auction-priced products and tells you plainly when a request cannot be applied.- Auction products can be staged. Pass
bidPrice(in the campaign currency) on anyproducts[]entry whose pricing option is auction-based. Fixed-price products are unchanged; omitbidPricefor them. - Budget changes on an existing draft no longer silently no-op. Calling
save_media_buywithmediaBuyIdand abudgetnow returns aNOT_IMPLEMENTEDerror explaining that the budget set at staging time is preserved, instead of returning success without applying the change. - Same-day and past start times are rejected up front. On the update path, a
flight.startAtthat falls today (UTC) or earlier returns aVALIDATION_ERRORonflight.startAtwith guidance to pass a later date-time or"asap". Media buys start on a future UTC day, so this replaces the previous behavior of accepting the timestamp and then either failing at the seller or quietly starting as soon as possible. - Nothing changes for agents that only stage fixed-price products and never send a
budgetor pastflight.startAton update. - If your agent calls
get_proposals_diagnosticdirectly, you must switch torequest_proposalswith the sameidempotencyKeyto poll a running execution. Agents that do not callget_proposals_diagnosticonly see therequest_proposalserror-message change described below. get_proposals_diagnostichas been removed from the v3 buyer MCP surface. Therequest_proposalstool already supports idempotent polling: calling it again with the sameidempotencyKeyreturns the in-progress or completed result without starting a new execution. That pattern is now the only supported way to poll.- Agents that currently call
get_proposals_diagnosticwill receive anunknown-toolerror after this change and must migrate to therequest_proposalspolling pattern before then. - Also in
request_proposals: when a seller’s agent reports an error, the per-sellererror.messagenow carries a short Scope3-written explanation (for example, “The seller returned PRODUCT_NOT_FOUND. Seller-supplied error text is withheld from this response.”) instead of the seller’s own free text, and thecodeis limited to standard AdCP codes withSELLER_ERRORas the fallback. Errors raised by Scope3 itself (for example a product snapshot that could not be saved, or no connected sales agent for the seller) keep their original code and message. If your agent displayed a seller’s raw message, expect the neutral text in its place. - In Plan & Billing, you will now see your accepted, priced activity in IUs and a breakdown that matches your IU balance. Scope3’s provider costs are no longer shown as your IU activity, and no action is needed.
5.350.3 — September 2, 2026 at 7:31 PM UTC
- Buyers using your own inventory: We fixed an issue that could lose the selected product during activation. This selection fix applies only to own-inventory campaigns; third-party inventory selection is unchanged.
- Buyers with saved creative links: Supported seller destination URL slots now receive the saved clickthrough link instead of dropping it from the seller request.
- Sellers: This restores the buyer-provided destination in supported URL slots. It does not change how your inventory is listed or which buyer campaigns you can see.
- Existing saved campaigns and creatives use the corrected behavior on their next activation; they do not need to be recreated. No setup changes are required.
5.350.2 — September 2, 2026 at 3:30 PM UTC
- Own-supply product discovery now preserves a completed catalog when a seller responds during the first progressive window, so immediate continuation calls return the same selectable inventory instead of an empty result. Nothing needs to change on your side.
5.350.1 — September 2, 2026 at 12:22 PM UTC
- The Company tab’s setup checklist no longer shows a completed “Company identity” step once your company is admitted. The country picker in Branding & distribution groups popular countries first, and its “Add country” control no longer claims to be a search field. The printable-card button explains why it’s disabled whenever the current listing isn’t published, not just in one narrow case. The ChatGPT app icon uploads now state the exact size and file-size limit required, and can reuse your storefront’s own generated icon instead of a manual upload.
- Product discovery continuations now preserve the completed catalog from the original request instead of unexpectedly returning different or missing inventory.
- Product discovery now keeps
supported_targetingstable across provisional and terminal catalog reads, so an undeclared targeting list cannot invalidate an own-supply product selection.
5.350.0 — September 2, 2026 at 10:47 AM UTC
- Preserve the host-neutral Company identity task destination and cover real iframe source-chooser actions in the setup-nav browser regression gate.
- The Company identity & eligibility setup row now displays its label in the seller rail.
5.349.0 — September 2, 2026 at 9:15 AM UTC
- Changing geo targeting on an existing Meta media buy through
update_media_buyno longer fails. A package’s budget, pacing, and bid price on a Meta media buy now actually reach Meta when you change them — previously these appeared to succeed but were silently never applied on Meta’s side. If you changed a package’s budget, pacing, or bid price on a Meta media buy before this fix, resend that update to make sure it took effect. Changing an individual package’s flight dates isn’t supported on Meta; use the media buy’s overall start and end date instead. - Products returned by
get_productsnow include asupported_targetingfield listing the targeting dimensions the product accepts as an overlay (e.g."geo_countries","language","device_type"). Use this to avoid forwarding overlay dimensions a product cannot resolve — absence means the seller did not declare targeting support.
5.347.0 — September 2, 2026 at 6:30 AM UTC
- Sellers can now list VAST-delivered audio, seller-rendered stateful display, and coordinated multi-placement products, and buyers can select them without those formats being rejected or dropped. Sellers who want to offer them must add the matching
audio_vast,seller_rendered_stateful_display, orcoordinated_placementsdeclaration to their products. Existing products, including DAAST and hosted-audio formats, are unchanged. - VAST audio now stays intact from product discovery through selection, validation, pricing, and creative delivery. Collection-based targeting from AdCP 3.2 is also preserved in requests instead of being discarded. Buyers who only use existing formats do not need to take any action.
- Who this is for: Enterprise brand buyers gain access to additional seller inventory without a governance, partner-instruction, measurement, or billing change. Large agencies can compare and select the new formats across sellers without changing playbooks for existing formats. Scrappy builders can use the new
format_kindvalues directly and can pass collection selections without them being dropped. SMB buyers using chat do not need to configure anything; the product adopts compatible seller capabilities automatically. Sellers that opt in should add the matching declarations and monitor catalog completeness and creative-readiness results for those products. - Packaging and monetization: There is no entitlement, plan, price, billable-surface, unit-economics, commercial-package, or Interchange Unit change. These formats and collection fields are additive capabilities inside the existing buyer and seller surfaces.
- Availability and rollback: This ships as one ungated contract update because a partial flag would let discovery, selection, and validation disagree about the same format. Exposure is still opt-in at the protocol boundary: a seller must declare a new format, and a buyer must select it or send collection selection fields. Existing formats remain the default. Broader promotion of each new format requires at least one seller discovery and one successful buyer selection for that format, with no confirmed schema mismatch. The kill switch is an atomic code revert that removes the new SDK/schema version and derived format declarations together; 3.2-only requests then fail closed while existing hosted-audio, DAAST, display, and placement paths continue unchanged.
- Measurement: Track
adcp_3_2_format_discoveredas the first successful product response per seller and buyer customer containing each newformat_kind; trackadcp_3_2_format_selectedfor successful media-buy or creative submissions using those kinds; and trackadcp_3_2_collection_selection_preservedwhen a request with collection selection reaches the downstream canonical request intact. During the first 30 days, establish unique-seller and unique-buyer baselines for each signal, require zero confirmed audio/video VAST misclassifications and zero dropped collection selections, and revert on a reproducible contract mismatch. Brian O’Kelley owns the 30-day review through AI-6639; low adoption creates a discoverability follow-up rather than weakening the contract checks. - Technical buyer administrators can now connect an existing organization API key or WorkOS machine credential to a distinct buyer-agent identity, and turn off that identity from the same API. This helps hands-on teams keep an agent’s authentication separate from a person’s account without granting it access to advertisers, accounts, spending, payments, or Terms.
- Existing integrations do not change. To use this capability, a directly authenticated organization administrator registers a credential the organization already owns. There is nothing new for chat-only buyers or sellers to configure. Creating a new credential or swapping one credential for another is not included.
- Connecting a seller no longer dead-ends silently when an authorization link is opened more than once: the link pages now explain what happened (recently used or expired) and how long links stay valid (10 minutes). Bearer (access-token) submissions remain strictly single-use.
- Agent-visible text for seller and connection reads now includes discovered ad-account names and mapping states (not just a count), says explicitly when an advertiser transacts on account-level seller defaults, shows seller names instead of “Customer NNNN” placeholders, and prints names beside ids.
- We renamed the seller identity/story object buyers see in Marketplace — description, channels, accepted countries — from “media kit” / “Discovery Card” to Listing, and updated every agent-facing tool, error message, and doc to match. The v3
getseller include for it is now spelledlisting— request it withinclude: ["listing"]. The deprecateddiscoveryCardspelling keeps working as an alias with no removal timeline: the response echoes back whichever spelling you sent, so an existing integration readingobject.discoveryCardis not broken by the rename. All other agent- and buyer-facing tool descriptions, error messages, and documentation now consistently use listing / distribution / brand domain vocabulary in place of the retired media kit and Discovery Card names; “operator domain” is retired from seller-facing copy in favor of brand domain (it remains the name for a buying operator’s own domain on the buyer side, e.g. house discounts). - This also fixes a real routing bug in the v3
open_pagenavigation tool, which had fallen out of sync with the rename above:page: "listing"had been opening the legacy Business Profile merchandising page instead of the current Listing page it’s named for. Fixed now, with three concrete behavior changes for any agent or integration callingopen_pagedirectly: page: "listing"now opens the Branding & distribution page (the current Listing) — it briefly opened the legacy Business Profile page instead; that misrouting is what this release corrects.page: "media_kit"(a deprecated spelling oflisting) previously opened that same legacy Business Profile page. It no longer opens anything: the call now returns an explicit, self-describing error naming both successors, so any caller using this key must switch topage: "listing"(Branding & distribution) orpage: "business_profile"(the legacy page, still fully reachable) — the ambiguity between the two meanings this one spelling had accumulated over time made silently picking either wrong for whoever meant the other.page: "discovery_card"(a deprecated spelling that always meant the current Listing page, never the legacy one) keeps working unchanged, now with an on-response note pointing callers at the canonicallistingspelling.- This ships as
improvement, notfeature, because the affected key (media_kit) is a deprecated alias on the v3 seller surface — a young, admin-gated integration path, not the primary customer-facing surface — and the new error is self-describing enough that an agent caller reads it and corrects its next call in the same turn, rather than needing new documentation or a workflow change. The repointing itself was ratified by the repo owner as a bug correction, not a new capability: nothing a seller or buyer does in the product changes. - Sellers using the seller UI: no action needed. The UI does not call
open_pagewithpage: "media_kit", and your listing, distribution settings, and pages are otherwise untouched — only names changed, and every other deprecated spelling keeps working. Developers or agents callingopen_page({page: "media_kit"})directly should switch that one call topage: "listing"orpage: "business_profile", per above. execute_campaignon Spotify, Snap, and TikTok adapter storefronts no longer fails with “ESA create dispatch returned an invalid structured response”. These adapters now return amedia_buy_statusofpending_creativesafter a successful create (campaign paused, awaiting creative assignment), which is the correct lifecycle state and allows the host to record the submission.- Fixed the storefront’s
advertisedCountriesandadvertisedChannelsto only reflect Sources whose product path currently routes through your own external sales agent. A Source that instead supplies Storefront-built (wholesale) products no longer contributes its raw upstream declaration to this coverage — that path’s evidence comes from its synced inventory instead. Storefronts with a mix of agent-supplied and Storefront-built Sources, or a Source pending a required mode selection, may see these fields narrow to the coverage their external agent actually advertises. - The same fix now also applies to market membership and public market readiness: a Storefront-built (wholesale-only) Source can no longer make a storefront falsely appear tagged into a market, or make the public market readiness preview report supply that isn’t actually agent-supplied.
- Snap media buys with country, region, or postal targeting now create and update correctly. Two bugs were fixed: ad squad write requests were missing the
targeting_v2=ENABLEDquery parameter that Snap requires to parse geo targeting, causing all geo-targeted creates to be silently rejected; and the postal-area validation guard did not recognise the{country, system: "us_zip"}shape that Interchange’s schema produces, causing US ZIP targeting to be rejected before reaching Snap. - Spotify media buys with a package budget below Spotify’s 250 per ad set”) before any campaign is created, instead of silently inflating the budget to $250 with no signal to the buyer.
- If sign-in recognizes your verified email but account setup was interrupted, Interchange now returns you to signup with your details prefilled so you can finish. This works for buyer and seller accounts; no action is needed unless you encounter this interrupted state, and you do not need to reset your password.
5.346.1 — September 2, 2026 at 3:03 AM UTC
- Agent operators can now open and complete Configure connection from the Agent page, with a visible error instead of a silent click if the task cannot open.
5.346.0 — September 2, 2026 at 12:54 AM UTC
- Partner operators can now refer a publisher from an Agent’s Sources section. The client workspace opens on that exact Agent, preselects it in the invitation, and keeps the Agent’s pending referrals in view.
5.345.0 — September 1, 2026 at 10:35 PM UTC
- Open Plan & Billing help links on the current Interchange documentation site.
- Show “Not priced yet” instead of “NaN IUs” when an activity rate is unavailable.
- Seller account tiers now have clearer names throughout sign-up, plan copy, and documentation: a Listing-only account gets your listing on Interchange while your own sales agent handles selling, and a Merchandising account adds full merchandising functionality. The old “pass-through” plan wording is retired from sign-up, plan copy, and docs.
- New Media Company signups now land on a short company-confirmation page before they reach account setup. This is a limited early-access rollout — existing accounts aren’t affected and don’t need to do anything.
- Right after you create an account, we show the company name and domain we found from your sign-up email and ask you to confirm or correct them, along with the billing country of the contracting company (not your personal location). That country is the only input to your plan currency: there’s no currency picker, and a country we don’t support yet shows next steps instead of defaulting to USD. Confirming also records your acceptance of the Terms of Service and disclosure of the Privacy Policy.
- Confirming starts a short admission check, usually a few seconds. If it runs longer, you can close the page — refreshing or logging back in picks up the same check instead of starting over. Once approved, your first setup screen already shows “Company identity” as done on the setup checklist.
- Label the account-standing payment arrangement as “Billing method.”
- Media-buy status updates now complete reliably when multiple sellers respond at the same time. No action is required on your side.
5.344.0 — September 1, 2026 at 8:36 PM UTC
- Demo Storefront accounts now provision their synthetic inventory and setup checklist when created from the account switcher.
- Keep scoped Murph workspaces focused on their own canvas, bring newly opened workspace widgets into view, and preserve advertiser scope IDs in shareable URLs.
- Keep enrolled sellers on their setup checklist while it loads or retries, without showing another account’s cached rail.
- Your setup checklist rail and payout status page now reflect your actual account state. If a required payout or setup step is missing, you now see the action to take instead of a completed status. Sellers whose status was already accurate do not need to take any action; this seller-side correction does not change buyer-facing storefront capabilities.
- Prevent seller setup source actions from regressing into dead controls.
- The v3
save_advertiserandsave_campaigntools now acceptgvlVendorIdon tracker inputs. Set this to your GAM TCF vendor ID to enable vendor-scoped consent macros in your ad tags. For sellers: trackers that carry a vendor-scoped macro will now include vendor-specific consent values in the outbound pixel — tags without a vendor ID are unchanged.
5.343.0 — September 1, 2026 at 6:00 PM UTC
- Asking Murph what you need to go live now opens your redesigned Buyer Setup page — the platform go-live checklist, your operator identity, and each seller or platform’s remaining connection, mapping, or billing step — instead of a long text summary. Murph gives a one-line lead-in and lets you act in the page, and no longer answers a buyer go-live question with seller-side readiness detail. The page is rebuilt on the Scope3 design system.
- Fixed a bug where forwarding a media buy to a third-party AGENT storefront source that returns a synchronous acceptance would report “No source accepted the media buy” to the buyer. The source accepted the buy successfully; our own inline handler threw because it looked up a buyer-side media buy record that only exists on the buyer’s tenant, not the storefront’s.
- External-agent storefronts now recognize publisher authorization for their connected sales agents.
- If your storefront sells only through connected external AdCP agents, each publisher’s
adagents.jsonis checked against those agents’ published URLs. The publisher is authorized when the file grants property authority to at least one connected agent, so publishers no longer show a false “adagents.json does not list your sales agent” warning when they authorize the agent that serves their inventory. Existing affected publishers are queued for a new authorization check, and later agent URL or source-status changes trigger another check automatically. Storefronts with operator-run inventory continue to usehttps://interchange.ioas their authorization identity. Nothing to change on your side. - When you change a package’s targeting (geography, audience, or other overlay fields) with
update_media_buy, the call now waits for your seller to confirm the change before reporting success. If the seller can’t confirm it, you get an error instead of a false success. Nothing to change on your side. - Sellers holding a global market-maker authority now qualify for advertisers in every market, even when the seller’s storefront hasn’t enumerated regions. Previously an empty region list silently disqualified every advertiser with a misleading market-mismatch message.
- Sellers with only regional authorities, and sellers with no authority at all, keep their existing region-list behavior.
- Playbook version history no longer displays internal bookkeeping notes.
- The v3 agent surface’s deprecated compatibility singleton for the legacy Business Profile is now spelled
listingonget/open_page, andsave_selleraccepts a groupedlistingwrite field.media_kit/mediaKitkeep working as deprecated aliases for the identical handler — no removal timeline is set. Sending bothlistingand the deprecatedmediaKitalias with different values is rejected; identical values are accepted.
5.342.1 — September 1, 2026 at 1:51 PM UTC
- Sponsored sandbox buyers can now request proposals from their sponsoring storefront while it is still in sandbox readiness.
- Seller integrations can now match each material-candidate, RFP representation, and feedback response to its request more reliably. The service echoes the request, RFP, and turn identifiers you provide and includes generated representation or source-revision identifiers where applicable. When an existing representation is reused,
clientRequestIdidentifies this call andoriginatingClientRequestIdidentifies the request behind the shared representation and its validation receipt. No request format or action is changing, and existing stored records continue to replay for older clients. - Clarify directed campaign subscription instructions while keeping the V3 buyer tool surface within its context budget.
5.342.0 — September 1, 2026 at 12:50 PM UTC
- Creative reviewers can now request a placement-specific preview result when the seller’s completed package response identifies one exact format and placement. Interchange preserves and labels publisher-authoritative and representative seller results, including fidelity and expiry, while keeping raw provider URLs, HTML, submitted third-party tags, and remote VAST inert in the browser. Reviews without an exact authority context continue to show the submitted source only.
- Stage a creative on an advertiser before you have a campaign.
save_creativenow accepts anadvertiserIdin place ofcampaignIdand creates an advertiser-level master. The same call previously failed withcampaignId is required to create a creative, so creative work had to wait for a campaign to exist. The master won’t deliver until you assign it to a campaign, and it still needs both content (message,assets, orclickUrl) and a format —formatKind, unless an image, video, audio, HTML, or VAST asset implies it. Name and scope alone are rejected, and so is a brief with no format. Nothing changes for campaign-scoped creates. - When
save_creativepersists fewer assets than you sent, it now tells you how many attached and setsassetAttachWarningon the response — a saved click-through URL can no longer make a dropped image look like success. Creating a creative on an advertiser also now confirms the advertiser belongs to your account before writing anything. - The Listing page now leads with your storefront’s listing content once, replaces the visibility dropdown and separate Publish button with a single “Where can buyers find you?” control (Hidden / Interchange / Public web), and moves the dedicated-hostname setup behind an “Advanced” disclosure so it only shows up when you’re serving on your own domain. The ChatGPT app section is now a compact status row with a collapsed preview of what ChatGPT shows, instead of a full settings form.
- Nothing to change on your side — your current visibility, listing content, and ChatGPT app setup are unaffected. Only visit the page if you want to adjust who can find you or explore the streamlined layout.
- Buyers: Media buys now remain bound to the exact Storefront and inventory source selected in product discovery. No action is needed in the Interchange UI or Murph, or for API and MCP integrations that already store and return
productIdunchanged. An integration that modifies or rebuilds this opaque value must instead persist the value returned by discovery. If a previously stored value could select more than one inventory source, the request now stops instead of choosing one unpredictably; run discovery again and retry with the newproductId. The field name and string type are unchanged. - Sellers: No action is required. This does not change product setup or how a Storefront publishes inventory; it keeps the buyer’s selection tied to the product route returned through discovery.
- In the updated Buyers view, a relationship held only on billing readiness (no open request left to review) now has a “Resolve billing” action that opens the billing-readiness section directly, so you can assert readiness again without a dead end.
- You can also withdraw your own pending information request without deciding the whole case — the case stays open and returns to your queue, instead of your only option being to decline it.
- The setup-nav checklist rail now appears immediately when you open Murph — no more flash of the old navigation before the checklist loads. A skeleton placeholder appears in its place during the brief load window, and the checklist renders as soon as your storefront status arrives. Your last-loaded checklist state is also persisted locally so subsequent visits render the checklist instantly while a fresh update loads in the background.
- Embedded sales agent 1.41.0: replacing an ad-server connection no longer loses the destination advertiser it was mapped to, FreeWheel advertiser rosters are no longer cut off at a fixed ceiling, and FreeWheel execution currency now bootstraps correctly instead of blocking first use. The agent also now publishes an advertiser-account capability descriptor (starting with Google Ad Manager) that tells the platform exactly which account operations each ad server supports — groundwork for smoother buyer account setup — and runs on the AdCP Python SDK 8 beta.
- The seller Setup page that shows your identity, description, accepted channels, and countries to buyers is now called your listing instead of “media kit.” Sellers with a ChatGPT app still see it referred to as your “ChatGPT app listing,” which is a read-only projection of the same listing. This also fixes a stretched status chip on the Branding & distribution page, removes a duplicated identity display, and rewrites the brand domain explainer in plain language.
- The seller detail drawer now puts a Reconnect action at the top when a connection needs re-authorization, explains market/channel mismatches by naming the mismatched markets instead of a generic line, and adds search and status filters to the advertiser list.
- Buyers on the v3 MCP surface can now discover marketplace-listed sellers they have not yet connected to via
search(kind:"seller", filter:{marketplace:true}). Channel filters accept multiple values with OR semantics: a seller qualifies if any listed channel matches. Existingsearch(kind:"seller")calls withoutmarketplace:trueare unchanged and continue to return only your connected sellers - no migration needed. - To subscribe to a connected seller’s directed campaigns and mirror them into your reporting view, call
save_directed_campaign_subscription. Subscription requires an existing seller connection. On partial failure,errorslists which subscriptions failed; successful subscriptions are not rolled back. Retry failed items individually. - For sellers: marketplace-listed sellers become discoverable by all buyers using the new filter. Directed-campaign subscriptions only mirror campaigns the seller has explicitly listed; no undisclosed seller data is surfaced.
5.341.1 — September 1, 2026 at 8:01 AM UTC
- The Sellers page and other Murph-surface views no longer risk a render loop (React maximum-update-depth crash) when a navigation updates the page’s URL parameters.
5.341.0 — September 1, 2026 at 6:13 AM UTC
- Disconnecting Interchange from Claude, ChatGPT, or any AI assistant now ends your access immediately — before, your connection stayed live for up to 30 days after you disconnected. No changes needed; any AI assistant connected to Interchange picks this up automatically.
- The Sellers page widget now sizes correctly when opened directly on a seller’s detail drawer, instead of clipping the drawer to a short band.
5.340.0 — September 1, 2026 at 4:15 AM UTC
- MCP connections no longer drop when a host refreshes credentials from multiple components at once. A 90-second grace window lets concurrent legitimate clients (such as multiple Claude.ai components sharing one refresh token) receive the same successor pair instead of each one’s reuse triggering family revocation.
- MCP clients that received a grant for
https://api.interchange.io/mcpcan now call/mcp/v3. - Clients (e.g. Codex/openai-mcp) that completed the OAuth flow against
/mcpbefore discovering the versioned endpoint were rejected withresource_mismatchon every/mcp/v3call. The server now accepts that specific grant at/mcp/v3only — no other endpoint is covered by this change. Grants issued for any other resource (including/mcp/v2/admin,/mcp/v2/tars,/mcp/tars,/mcp/creative, or any other child of/mcp) still require an exact-resource match. New grants issued from a/mcp/v3authorization flow continue to bind to the exact endpoint.
5.339.0 — September 1, 2026 at 3:11 AM UTC
- Fixed five issues in the seller setup checklist rail. Branding & distribution now opens your media kit instead of the property roster. Business rules opens in place instead of navigating away to an empty page. Buyers shows a clear “can’t open this right now” message instead of silently opening the sales agent surface when self-serve buyers isn’t enabled for your storefront. Plan & billing now renders with the same card styling as every other checklist item. And a Google Ad Manager sign-in problem no longer shows up as a warning on unrelated modular sources that have no GAM connection to fail.
5.338.1 — September 1, 2026 at 2:16 AM UTC
- Buyer Sellers now recovers on the next request after a temporary access-check failure, instead of remaining hidden for up to five minutes. Explicitly disabled access remains hidden, and customer and parent-account isolation are unchanged.
5.338.0 — August 31, 2026 at 11:27 PM UTC
- Fixed
execute_campaign/create_media_buyandget_media_buysfailing for Meta media buys because Meta’s raw timestamp format was passed straight through intoconfirmed_at/created_at/updated_atinstead of being normalized to the required ISO 8601 format. These fields are now always correctly formatted. - Fixed the seller rail’s “Set up” section sometimes collapsing itself a moment after loading, hiding rows (“Get ready to sell”, “Ad server”, “Sales agent”, “Branding & distribution”, and others) that had just appeared — its collapsed/expanded state could flip once the readiness read settled after the section had already rendered open. The section now defaults to collapsed while that read is still pending, so it either stays put or reveals itself once settled, and never opens a row only to close it out from under you. Explicitly expanding “Set up” while it loads is preserved even if the section would otherwise default to collapsed once loading finishes.
- Seller admins can now download a printable Discovery Card PDF from Branding & distribution after publishing a card. The PDF is generated from the current published revision for manual printing; fulfillment, provider submission, GCS delivery, webhooks, and durable print orders remain out of scope. This is seller-only tooling; buyers do not see a new download action.
5.337.0 — August 31, 2026 at 7:20 PM UTC
- When creating a wholesale product in the inventory-selector widget, you can now set delivery type (guaranteed or non-guaranteed) and a fixed CPM rate. On the product creation form, select “Guaranteed (fixed price)”, then enter a positive CPM amount and the 3-letter currency code that matches your storefront’s settlement currency. Guaranteed products are validated and submitted with the correct ad-server settings automatically - no manual configuration outside the widget. Existing products are unaffected. Buyer-facing inventory availability is unchanged: buyers see guaranteed products when they were previously configured correctly, now with less risk of misconfiguration on the seller side.
- For buyers: Third-party impression trackers configured on an advertiser or campaign (via
PUT /api/v2/buyer/advertisers/:id/tracking-config) now attach automatically to outbound display and HTML creatives on the next creative sync or media buy. The media buy ID is stamped into each pixel request for per-buy attribution. No buyer action is required beyond configuring the tracker. - If a creative’s format does not support tracker attachment (for example, a format that reserves all asset slots), the tracker is skipped for that creative and a
NO_ATTACHMENT_PATHevent is logged. The buy proceeds normally; only that creative’s measurement is affected. - Trackers requiring IAB TCF vendor-scoped consent must include a
gvl_vendor_idin the tracking configuration. If omitted, the IAB consent macro resolves to an empty string in the pixel URL, meaning the pixel fires without a consent signal. VAST (video) tracker support is coming in a separate update; existing click tracking is unaffected. - For sellers: Buyers whose advertisers or campaigns have trackers configured will now include
<img>pixel tags (injected before</body>in HTML display creatives) orpixel_trackerassets (in image and HTML5 ZIP creative payloads). No seller configuration change is required. - This feature ships unconditionally to all accounts. It is backend delivery infrastructure tied to the existing tracking-config resource; no new customer UI surface is introduced and no flag is needed to control rollout. Adoption is tracked via
NO_ATTACHMENT_PATHlog events (skipped creatives) and per-buy pixel delivery rates. Third-party tracker delivery is included in the existing buyer platform tier with no separate charge. - Audio creatives linked by URL now use the media’s probed file size when the origin reports one, instead of always falling back to the URL’s own length. Outbound audio creative delivery also now carries duration, container, codec, and bitrate detail, matching what video creatives already send; file size is not included in that outbound detail yet. This does not add support for any new audio destination; audio delivery through managed sources is still not available.
5.336.0 — August 31, 2026 at 4:59 PM UTC
- When a proposal request finishes, buyer agents using
get_proposals_diagnosticcan now show the returned product names, prices, and formats. Nothing to change on your side.
5.334.0 — August 31, 2026 at 2:13 PM UTC
get(kind: "distribution")now reports a bounded, per-channel readiness summary — starting with your ChatGPT app: whether the listing is ready to submit, how many setup items remain, hostname and verification status, whether the submission bundle is current and approved, and one next-step line. Ask your agent “is my ChatGPT app ready?” without opening the Branding & distribution page. This reports platform-side readiness only — OpenAI’s own review and publish decision still happens on their portal.
5.333.0 — August 31, 2026 at 1:17 PM UTC
- Buyer creative details now show submitted display tags, VAST/DAAST source, tracking tags, and detected macro placeholders as inert text without executing ad code. Seller approval reviews show the same source evidence as a safety and trust signal. This source-inspection slice does not add rendered previews.
- Proposal requests now complete without getting stuck or asking for the same approval repeatedly. Product names, prices, and formats remain visible throughout the request. No changes are required on your side.
- Fixed
execute_campaign/create_media_buyintermittently failing with “ESA create dispatch returned an invalid structured response” for Meta media buys, caused by an unrecognized Meta campaign status silently producing no lifecycle status at all. The buy is now correctly recognized and returned as completed with its real lifecycle status. - When you ask Murph what a publisher needs for a GAM pilot, it now starts by retrieving the public GAM pilot guide and evaluating the particular publisher’s materials against it. The guide keeps audience and contextual signals in the core merchandising setup, checks that media-kit, pricing, and brief inputs can produce a strong response, and prefers real briefs plus the publisher’s responses over invented examples. Murph no longer carries these pilot requirements as client-specific prompt instructions.
5.332.0 — August 31, 2026 at 11:30 AM UTC
- Buyers and sellers can now connect Interchange from Microsoft Copilot Studio and Google Gemini Enterprise, in addition to Claude, ChatGPT, and Cursor. See Connect Interchange to Microsoft Copilot Studio and Connect Interchange to Gemini Enterprise for setup steps.
5.331.0 — August 31, 2026 at 10:30 AM UTC
- Before trafficking a third-party tracker, you can now use the read-only V3 beta
test_creative_macrostool to inspect its vendor, AdCP, recipient, and synthetic final forms. Missing required mappings or values fail closed. Any supplied IAB GVL vendor ID shows Google Ad Manager consent syntax only; the tool cannot verify ownership, so the report remains not preview-ready. Verify the ID separately before production use. Existing creatives and delivery are unchanged: the tool does not fetch the URL, save a report as a platform record, render a creative, or attach a tracker. Standard request auditing retains only status and count metadata, not tracker URLs or binding values.
5.330.0 — August 31, 2026 at 9:09 AM UTC
- Your ChatGPT app listing now comes from your media kit. Name, subtitle, description, and your website, support, privacy, and terms links are managed once on the Branding & distribution page and project into the ChatGPT app automatically, trimmed only where OpenAI’s length limits are tighter. The ChatGPT app section itself now asks only for what’s unique to that channel: category and icons.
- Check your media kit before your next submission. If you’d previously entered a subtitle, description, or support, privacy, or terms URL directly in the ChatGPT app section, that value is not carried over automatically — add the equivalent fields on the Branding & distribution page. If your media kit is missing the subtitle or any of the three policy URLs, your next ChatGPT app submission will fail validation until you fill them in. If your media kit was already complete, there’s nothing to change.
- The dedicated hostname setting now sits next to Public hosting instead of living only under ChatGPT app setup, since it’s a storefront-level setting any future channel can reuse. The OpenAI verification steps were also reordered to match the sequence you complete them in.
- The ChatGPT app section adds a “Mark listing reviewed” step: review the projected name, subtitle, description, and links, then confirm them. Until you do, the submission bundle’s readiness checklist flags the listing as unapproved. Editing those fields again afterward clears the confirmation, so you’ll need to review and confirm once more. If your ChatGPT app previously had a subtitle, description, or policy URL that no longer matches your media kit, you’ll also see a prompt to update your media kit to match or confirm the current value is correct.
- Buyers see no difference: this changes where the listing content is managed, not what it says, as long as your media kit stays complete.
- Widgets now render inside ChatGPT: a compatibility adapter speaks ChatGPT’s native
window.openairuntime alongside our existing MCP-Apps handshake, so a widget that used to time out and show “We couldn’t reach the chat host” in ChatGPT now loads and works normally. Tool results that share a widget with a companion action no longer disappear from ChatGPT’s tool list. - Fixes AI-7637. A seller rail widget that opened while it was still loading — or while the chat had earlier scrollback — could land with most of its content below the fold, showing only empty space and a “Scroll to bottom” affordance. The view now follows the widget into place as its content settles, instead of leaving the scroll aligned to stale geometry.
- Fixed
execute_campaign/create_media_buyincorrectly failing with “ESA create dispatch returned an invalid structured response” for media buys that are accepted but not yet fully active (e.g. still pending creative sync). The buy is now correctly recognized and returned as completed with its real lifecycle status. - Claude Interchange connector widgets now load reliably. A configuration issue was causing widget content to fail with a domain mismatch error, showing “There was a problem displaying content from Interchange” in Claude. No action is needed.
5.329.0 — August 31, 2026 at 5:25 AM UTC
- In your Buyers directory, a new “Needs setup” count tells you at a glance how many buyers still need something from you — an account setup in progress, a pending review, or a billing hold. Click it to filter straight to them.
- Opening one of those buyers now shows everything left to resolve in one place: the request you sent the buyer (with the message, expiry, and a copy-link button), whether you’re ready to invoice them directly, and their account mapping — plus quick paths to map an existing account, start account setup, or decline. A buyer with only a pending review opens the same drawer as before.
- Nothing changes until your account is enrolled in the updated Buyers view; un-enrolled accounts keep the current page.
- Your Buyers directory now shows what’s happening with each buyer, not just what’s set up. Once a buyer is accepted and their accounts are mapped, their row leads with how many open proposals you have with them and what they’ve spent with you this month; buyers still mid-setup show nothing there yet.
- The totals above the table count open proposals and this month’s spend across every buyer on your storefront, whichever page you’re viewing, and the open-proposal count there always matches your demand inbox.
- Nothing changes until your account is enrolled in the updated Buyers view; until then, you keep the current page.
- Interchange Support can now run your Sales Agent validation when you have granted it Admin access. Support remains limited to the Agent and Source being tested and cannot use this workflow with Member access or after you revoke its membership. No action is required unless you want to grant, limit, or revoke that access.
- Server-to-server buyer integrations can now retry Google Ads audience syncs without automatically sending a duplicate write. Resend the identical
sync_audiencesrequest with the sameidempotency_keywithin 24 hours; if the original request completed, the saved response is returned. Buyers using chat or the Interchange UI do not need to change their workflow, and integrations that do not retry continue as before. - Server-to-server clients must inspect the ADCP error code and
adcp_error.details.http_statusbefore issuing another write; MCP transport success does not mean the tool call succeeded.AUDIENCE_IDEMPOTENCY_KEY_REUSEandAUDIENCE_IDEMPOTENCY_KEY_EXPIREDcarry direct-adapter HTTP 409 when a key has different content or is outside the replay window.AUDIENCE_REQUEST_OUTCOME_UNCERTAINcan carry direct-adapter HTTP 503 on the original request or HTTP 409 on its retry; the earlier request may have reached Google, so reconcile that audience in Google Ads and do not automatically resubmit it. Use a new key only for a deliberately different write or after inspection shows another write is safe. - Enterprise brands do not need to change audience strategy, governance, measurement, or partner instructions; route response handling to the team that owns server-to-server reliability. Large agencies and hold-co teams should add these outcomes to cross-account retry playbooks so operators do not blindly repeat an uncertain write. Hands-on power buyers who maintain server-to-server integrations should implement the status handling above; media operators using chat or the Interchange UI do not need to take action.
- This buyer-side change does not alter what buyers see about sellers, including how sellers rank, how inventory is presented, or Seller Account setup. Sellers have no action.
- If your integration reads Murph V2 insight responses, migrate
taskSuccessRatetononEscalationRateandresolvedWithoutEscalationtonotEscalated. The older names remain available as deprecated compatibility aliases. These fields measure whether an interaction escalated; they do not prove task completion. - When your agent calls the V2 REST API or
/mcp/v3, it can optionally send an intent label with its run, workflow, skill, scenario, and step identifiers. Retrieve the skill first, then reuse those identifiers for its scenario steps. Interchange uses these identifiers to connect the retrieved skill version with observed API operations and server-backed completion evidence, so skill changes can be based on actual runs. Existing V2 REST and V3 MCP calls behave the same when this metadata is omitted. The metadata never changes authorization or certifies completion, and skill analysis does not store prompts, search text, retrieved instructions, or request payloads. Interchange correlates Seller Account workflows and Interchange-operated buyer workflows server-side. Only teams operating their own V2 REST or V3 MCP client need to add metadata; sellers and managed buyers have no setup change. This release does not change pricing, packaging, billing units, or plan availability. - Learn how to correlate a skill run.
- Fixes AI-7637. The setup-nav checklist’s “Agents” row opened the Partner Program’s agent roster page, which doesn’t work for an ordinary storefront seller and always showed “Couldn’t load Agents.” It now opens the same sales-agent connectivity view the legacy rail already used. Also: a checklist row that can’t open its destination now shows a clear error instead of silently doing nothing.
- Fixed MCP connections (ChatGPT, Claude.ai, and other MCP hosts) disconnecting and asking you to reconnect well before their authorization was meant to expire. A connection no longer depends on the original sign-in browser session staying alive — signing out of Interchange elsewhere, or that browser session expiring, does not disconnect it. Connections now persist until your account loses access or is signed out everywhere for security reasons, instead of silently expiring.
- Updating a creative’s
template_idvia the API now correctly clears the stale auto-detected template and regenerates tracking URLs for the new template. Previously,template_idoverrides were silently no-ops — the column updated butauto_detected_templatein the response remained stale, leaving the creative with incorrect text slots and tracking. - Fixed a persistent “There was a problem displaying content from Interchange” warning that appeared in Claude for all users connected via the Interchange or Interchange Staging connector. No action is needed — widgets now load correctly.
- Storefronts now use the AdCP SDK 14 compatibility layer while continuing to offer their existing AdCP 3.0 and 3.1 tools. Standard product, proposal, account, creative, and media-buy fields remain compatible.
- Buyers using chat or the standard fields do not need to change anything. Task completion and push notifications are more resilient to service interruptions, so an approval is less likely to remain visibly open after it was decided.
- Sellers do not need to reconfigure their Storefront. Integrations that read custom Storefront metadata should move from
extensions.scope3.storefronttoext.scope3.storefront. Capability responses temporarily emit both paths for existing AdCP 3.0 and 3.1 buyers. Demo disclosures likewise move from top-leveldemoanddemo_disclosurefields toext.scope3.storefront.demoandext.scope3.storefront.demo_disclosure. - Push-enabled task completion and its encrypted webhook recovery record are now committed together. Once an approval settlement checkpoint exists, interrupted registry settlement resumes automatically. During an outbox-encryption-key rotation, operators can provide the previous key through
ADCP_WEBHOOK_OUTBOX_ENCRYPTION_KEY_PREVIOUSuntil pending deliveries drain;ADCP_WEBHOOK_OUTBOX_FINGERPRINT_KEYmust remain stable. - During a mixed-version rollout, a legacy worker may have terminalized a push task without an atomic webhook checkpoint. Recovery now preserves that task’s settlement intent and any retained push configuration for operator remediation instead of silently acknowledging it or inventing a potentially duplicate notification.
- V3 campaign creative continues to use hosted or inline image assets; no buyer action is needed. This release does not add audio attachments or destination delivery.
5.328.0 — August 30, 2026 at 6:31 PM UTC
- If your storefront runs on a third-party (pass-through) sales agent, its account-setup handoff links are now validated and re-issued as Scope3 links instead of being forwarded from your upstream agent as-is — there’s nothing for you to configure. When your upstream agent’s
sync_accountsresponse includes a setup handoff, Scope3 validates it and re-mints its own seller-scoped launch link, matching how a locally-managed storefront’s information requests already work. - One thing you may newly see and need to act on: if your upstream agent returns an invalid setup handoff (a malformed or over-limit link or message), that account now shows up as a failed entry with an
INVALID_UPSTREAM_SETUPcode in your review queue, instead of being silently dropped or passed through. The fix for that is on your upstream agent’s side — the handoff it sent didn’t meet the validation bar. - Buyers will see setup links for these storefronts arrive from Scope3 rather than your upstream agent, with no action needed on their end.
- Sellers can now record — and revoke — an explicit confirmation that a direct-billed buyer (operator or advertiser billing) is billable, separate from the decision to admit them. Going forward, accepting or linking one of these buyers no longer creates their account by itself: it stays pending approval until your finance system (CRM, ERP, a staff member, or an outside workflow) confirms they’re billable, at which point it activates immediately with no further action from you. Buyers you’d already activated keep their current status. Revoking that confirmation on an active buyer immediately blocks new direct-billed activity without touching buys already placed. Buyers billed through Interchange are unaffected. A new endpoint lets you recover a confirmation’s id for an account you already activated, in case you didn’t save it the first time.
- Eligible Seller Account administrators can opt into this relationship-gated alpha to record who may be billed for one exact advertiser relationship or an explicitly reviewed advertiser set. Existing billing, advertiser access, and proposal setup continue unchanged. Seller Accounts outside the alpha have nothing to do.
- A mandate marked ready is only a recorded prerequisite for a later workflow. It does not complete billing, authorize a proposal, Campaign, execution, or spend, or prove that a funded or invoice rail exists. This API cannot move money, charge a payment method, issue an invoice, fund media, pay a seller, or write a ledger entry. It has no structured credential fields. Recognizable card, bank-account, wallet, and provider-credential literals are rejected and must never be placed in its free-text reason fields; semantically unknowable bare identifiers are not treated as credentials. It never returns structured payment details or Organization payment methods.
- There is no new plan, price, billable unit, or automatic charge in this slice; it is a relationship-gated alpha only. Seller-direct invoicing and Interchange-cleared billing remain separate, and changing or revoking a mandate preserves its commercial and audit history.
- During the alpha, the Storefront/payments product owner will review these named signals at 30, 60, and 90 days: first mandate created per eligible Seller Account; readiness-state distribution and created-to-ready conversion; authorization or redaction failure rate; and zero downstream spend or payment-rail use attributable to this slice. Sources are immutable mandate and readiness events, audit records, authorization/redaction telemetry, and the absence of downstream rail claims. The product owner must approve success thresholds before the alpha audience or maturity widens.
- If a widget-launching tool (like Open Connections Page) didn’t render in ChatGPT, it now does. Nothing to change on your side.
- Fixes AI-7579. A cold navigation into the Campaigns workspace scoped to an advertiser with a purely numeric id (e.g. from the setup-nav rail’s per-advertiser row) could land unscoped — “Select an advertiser above.” — even though the advertiser genuinely existed. The URL’s advertiser id was being silently dropped during page load whenever it looked like a number; it’s now correctly preserved regardless of whether the id happens to be numeric or alphanumeric.
- Organization members can now open the Advertisers page to see which advertisers their organization owns or is allowed to work with, who operates each advertiser, and whether it is ready. Authorized admins can change eligible advertisers between managed and self-service operation, revoke eligible self-service access, or open Campaigns from a row. Reusable join links and invitation actions do not appear on this page; targeted invitations are planned separately. No setup or migration is required, and existing direct API and MCP calls continue to work.
- Sellers using this page see only buyer-facing advertiser relationships they already have permission to view. This change does not grant access to seller or buyer accounts, members, billing, or unrelated advertisers.
- Return a content-safe bootstrap stage when deterministic Sales Agent validation cannot start, while retaining the underlying failure as server-side telemetry.
- In Test & certify and Source diagnostics, you can now run the current 1.4 validation skill for a third-party Sales Agent from the Media Company account without a separate Buyer Account. Existing calls that select a Buyer Account continue using it. When a Source uses No auth, Murph moves on to diagnostics instead of reopening the credential form, and a zero-call window remains untested rather than failed. The validation keeps its internal MCP session on one API replica so it also completes in the deployed multi-replica environment.
5.327.0 — August 30, 2026 at 2:34 PM UTC
- Fixed the Campaigns workspace so clicking an advertiser in the setup rail lands you scoped to that advertiser, instead of the unscoped account view.
- The Branding & distribution page has a refreshed look, rebuilt on the Scope3 design system — clearer typography, status chips, and section cards, with better dark-mode contrast on loading and error states. Every control works exactly as before: nothing moved, no permissions changed, and no action is needed.
- Section headers in the setup rail now reveal a filter and, where relevant, an add button when you hover or focus them. Use the filter to narrow a section’s rows by name, or the add button to jump straight to adding an advertiser or inventory source — without opening a separate page.
5.326.0 — August 30, 2026 at 1:01 PM UTC
- In the V3 MCP creative tools, buyers can now attach hosted or inline image, video, audio, HTML, VAST XML, or text assets and a click-through destination when they create a campaign creative, then read that creative to see its ad-platform sync status and ID. Existing metadata-only calls are unchanged, and ZIP bundles still use the inspected HTML5 upload flow. No setup change is required.
5.325.0 — August 30, 2026 at 12:13 PM UTC
- V3 error messages now speak the V3 vocabulary and include the machine-readable code; internal routing details no longer appear in customer-facing errors.
- Murph and other connected assistants can now choose the current instructions that fit your account before they start a supported workflow. Buyers receive buying and campaign guidance; sellers with owned inventory can ask to test a Sales Agent in the advertiser sandbox. Existing integrations continue to work without changes, and there is nothing to configure.
5.324.0 — August 30, 2026 at 11:01 AM UTC
- Widgets now render in ChatGPT: tools that open a page advertise their widget template to the ChatGPT host.
create_media_buyfor Amazon Ads now rejects Sponsored Products Auto, both Sponsored Brands variants, both Sponsored Display variants, and all three Amazon DSP variants with a clearUNSUPPORTED_PRODUCT_CONTRACTerror before any provider mutation. Amazon Sponsored Products Manual remains the only Amazon product family Interchange creates campaigns for;get_productsand the published Amazon Ads compatibility page no longer list the other eight families as available or in testing.- The Storefront and Discovery & distribution tabs in Settings are gone. Your brand domain, media kit, and distribution controls (visibility, publishing, and OpenAI Apps verification) now live together on the Branding & distribution page instead of split across three surfaces. An old link to either retired tab now opens Branding & distribution directly.
- The rest of what those tabs covered has its own home: approval modes for creative review and media-buy approval live in the Business rules widget, and pause/resume for your storefront’s transacting state lives in Settings → Danger zone (see below).
- Your ChatGPT app setup — listing, custom hostname, verification, and submission bundle — moved there too, grouped with the rest of distribution. Ask Murph to open the page and walk you through any step.
- Permissions are unchanged by the move: anyone on your account can view the Branding & distribution page, and every change on it — brand domain, media kit edits, distribution visibility and publishing, and the ChatGPT app setup above — still requires an account administrator, exactly as the retired tabs did. Non-administrators see the page read-only with the controls disabled.
- Pause/resume for your storefront’s transacting state moved to the Danger zone settings tab, next to Archive. Nothing else about how these controls work has changed.
5.323.0 — August 30, 2026 at 8:47 AM UTC
- Sales Agent owners can run brief-only validation when advertiser-specific Seller activation is enforced. The versioned workflow now turns the exact Seller on only for its temporary sandbox Advertiser through the public API, verifies the returned activation state, then restores the advertiser preference to Inherit before archival after a success, failure, or cancellation. Cleanup closes the run’s activation lifecycle so a delayed earlier write cannot re-enable the archived sandbox Advertiser. The Agent Page now negotiates the new workflow through a fresh resource identity; cached prior Pages remain read-compatible and cannot launch a mismatched validation version. No setup change is required.
5.322.0 — August 30, 2026 at 5:39 AM UTC
- Object searches (
searchwith akind, e.g.kind: "seller") no longer carry a docs-unavailability directive in their answer text when the documentation index is not loaded. That status is now reported only when documentation was actually requested — an explicitdocs/specssource or a document lookup — and it is phrased as a status fact rather than an instruction to the model. - Buyers: Available inventory no longer briefly disappears from product discovery when a seller’s catalog and connection updates arrive close together. No setup or workflow change is required.
- Sellers: When an inventory source stays unhealthy, its “Restore the connection” task remains open and updates with the latest instructions instead of disappearing or being duplicated. Continue working from that task. If Scope3 takes over the repair, your seller task closes before our internal repair begins.
searchandgeton the v3 API now render seller, connection, and advertiser results directly into the response text, not just the structured payload. Hosts that only surface a tool’s text response (rather than its structured data) now see the same sellers, connections, and advertiser fields as hosts that read structured data.
5.321.0 — August 30, 2026 at 1:14 AM UTC
- Organization administrators enrolled in the limited beta can now invite another Organization to accept access to specific advertisers through the v2 API or Murph. Use this when an agency or partner needs to work with a fixed advertiser set while the advertiser owner stays in control.
- API-building teams get the same bounded contract through the REST grant endpoints plus the V3
advertiser_grantread noun andsave_advertiser_grantlifecycle tool, so integrations can list, inspect, accept, reject, and revoke grants without account-level owner visibility. - Each grant names the exact advertiser IDs and capabilities, and it must be accepted by an administrator in the invited Organization before access is active. There is no pricing or plan change in this beta; Scope3 must enroll both Organizations before the grant flow or delegated roster entries are available.
- Delegated access stays narrow. Scope3 rechecks the active accepted grant for the exact advertiser and capability each time it is used. The grantee sees only the named advertisers in its roster and does not receive owner account IDs, members, billing data, unrelated or future advertisers, or private configuration. Existing Campaign APIs remain account-scoped, and the advertiser owner keeps ownership and Campaign IDs.
- Measure the beta by first accepted active grant per enrolled Organization, active grants, delegated advertiser roster reads, lifecycle actions, denied cross-organization probes, and stale, expired, or revoked execution denials.
- Nothing changes for Organizations that are not enrolled in the beta, and existing access stays unchanged unless both Organizations’ administrators complete the grant flow. Seller persona check: seller workflows and Seller Account access are not affected. Manage organization advertiser grants.
- Fixed the Advertisers section in the setup rail so it always lists the same advertisers your Campaigns workspace shows. Some sellers were seeing no rows there even though Campaigns listed at least one advertiser.
5.320.0 — August 29, 2026 at 10:43 PM UTC
- A video you already uploaded to Interchange can now become a creative in one call, instead of hand-assembling one around the hosted URL. Call
POST /api/v2/buyer/creatives/adopt-managed-video-sourceover REST, or runadopt_managed_video_sourcethroughbuyer_api_callover MCP. Name a source that finished inspection and you get a creative manifest back, optionally attached to a campaign in the same call. Attaching also pushes the campaign’s live media buys to their sellers in the background; a success means the creative is attached, not that every seller has already accepted it. - Nothing you have already built changes. Hand-built creatives around a hosted video URL keep working, and there is no migration to make.
- You name the source, never a URL. The hosted HTTPS URL on the creative is issued server-side, resolves the exact file that passed inspection, and stays valid while the source is retained and its delivery has not been revoked.
- Adoption is safe to call again. The same source under the same name returns the creative that already exists rather than a duplicate,
createdtells you which call made it, and a managed video source backs only one live creative even when two callers adopt it at once. An adopted creative reserves its advertiser-scoped name for its lifetime; attaching it to a campaign does not release that name. Give a new source an unused one — adoption refuses rather than reusing another creative. Refusals say what to do next; “Bring your own creative” in the buyer docs has the full set, including the retention, revocation, and deletion cases and exactly how a name is freed. - Adoption produces a creative, not a delivery. Sync it to a media buy like any other creative: the destination’s format checks still run at sync, and adoption never produces a VAST tag. Audio sources are not supported yet. Adoption shares direct video upload’s alpha gate — if that is on for your account, this is too, with no separate opt-in.
5.319.0 — August 29, 2026 at 10:23 PM UTC
- The Advertisers section in the setup rail now lists each of your advertisers as its own row, the same way Inventory sources lists each source. Click an advertiser to open it directly in Campaigns, instead of landing on the unscoped workspace every time.
5.318.0 — August 29, 2026 at 7:23 PM UTC
- Sellers can now ask a buyer for information or an outside action — a credit application, a signed contract, a portal login — right from the account-setup review queue, instead of choosing only accept or reject. The buyer’s agent gets a message and a secure link back into the seller’s own process; the account stays pending until the seller confirms the material has arrived.
- Clicking an inventory source in the seller rail opens its source view again. Source clicks were failing with “This view didn’t load” because the app requested the source detail tools from an endpoint that doesn’t serve them; they now go through the MCP tool bridge that does.
- The V3
searchtool’sfilter.sandboxdescription now correctly states thatfalseretrieves the live own-supply advertiser roster whenamc-campaign-managementis enabled, nottrueonly. Agents reading only the published schema can now discover the supported live path.
5.317.0 — August 29, 2026 at 6:13 PM UTC
- Meta directed-campaign media buys that return active Advantage+ audience (
targeting_automation.advantage_audience) now refresh correctly instead of failing as unsupported. The Meta adapter retains validated automation controls in provider readback evidence without projecting them to canonical targeting or granting write authorization; the shared directed-campaign response continues to omit raw provider controls. - Sellers can now fix a missing or ambiguous account mapping without leaving the Buyers directory. Open “Map accounts” on the flagged relationship to pick from suggested matches or search the full account roster for that source — selecting one records the mapping immediately. Mapping accounts through the API or your existing process works as before. This is enabled per account; until yours is enrolled, the page you see today is unchanged.
5.316.1 — August 29, 2026 at 4:17 PM UTC
- Hosted product discovery that previously failed now works correctly, so affected products can be discovered normally. No buyer action is needed.
5.316.0 — August 29, 2026 at 1:26 PM UTC
- What changed
- Buyer REST now shows whether a selected Amazon Sponsored Ads profile has the marketplace and payment information needed for Amazon Sponsored Products Manual. Manual create is available only to explicitly enrolled internal test buyers through the customer flag. Turning access off blocks new creates but keeps readiness, existing receipts, reads, update/cancel, retained containment, cleanup, and internal test attestation available.
- Existing automatic Sponsored Products update and cancel requests are not governed by the Manual create flag. If Amazon may have accepted one of those mutations but bounded readback cannot confirm it, Buyer REST now retains and replays the terminal no-retry receipt for the same request key instead of sending another provider mutation.
- Audience guidance
-
Hands-on buyer
- Surface: Buyer REST account readiness and manual create results.
- Trigger: You select an Amazon Sponsored Ads profile or submit a Manual create using one stored Amazon product family.
- Effect: Read
marketplaceIdandvalidPaymentMethodbefore create. A Manual selection carries its ASIN intargetingOverlay.product_codesand its per-request terms intargetingOverlay.keyword_targets. A partial or uncertain result says not to retry and provides the available campaign or account identity for reconciliation. - Boundary: Only explicitly enrolled internal test buyers can create. Readiness does not grant catalog, ASIN, or broader Amazon eligibility.
-
Agency or enterprise team
- Surface: Shared account-readiness fields, terminal receipts, and campaign cleanup status.
- Trigger: A create stops after Amazon may have created or changed a campaign.
- Effect: The result preserves the authorized account and any known campaign identity so the team can reconcile one provider resource without a blind retry.
- Boundary: This is not external availability. Pilot, eligible-buyer, and GA remain held until every customer cleanup record is acknowledged on time and Account Hygiene has an assigned owner.
-
Small-business or chat user
- Surface: Your existing buying workflow.
- Trigger: Your organization has not been explicitly enrolled in the internal canary.
- Effect: Nothing changes; new Amazon Sponsored Products Manual creates remain unavailable.
- Boundary: Do not infer access from readiness fields or a future date.
-
Seller or cleanup operator
- Surface: Full-buy cancel and
get_campaignstatus for a known campaign. - Trigger: A partial create or activation-uncertain result says cleanup is required.
- Effect: Cancel the whole media buy with its exact stored account and campaign. A confirmed cancel becomes
CANCELED; provider-confirmed containment can remainPAUSED. A cancel-uncertain result is terminal and is not retried automatically. - Boundary: If no campaign identity was returned, reconcile the authorized account through the seller/operator or support path instead of guessing.
-
Prospect
- Surface: Sales and release communication.
- Trigger: You ask whether the feature is generally available or changes your Scope3 commercial terms.
- Effect: The answer is internal canary only, with no incremental Scope3 charge, plan, or entitlement.
- Boundary: No pilot, eligible-buyer, GA, all-market, or on-date availability promise is authorized.
- Terminal result guidance
scope3_partial_creation: Amazon created the campaign but required setup or activation did not complete.failure_stagenames the failed step,cleanup_requiredis true, andretry_safeis false. Do not retry the create. For a known campaign, request a full-buy cancel withmediaBuys: [{ mediaBuyId, action: "cancel" }]and nopackageIds.scope3_create_uncertain: Amazon may have accepted the create, but no trusted campaign identity was returned.cleanup_requiredis true andretry_safeis false. Do not retry or invent a campaign identity; reconcile the exact authorized account through the seller/operator or support path.scope3_mutation_uncertainwithoperation: create_activation: the campaign identity is known, but its enabled state is not.cleanup_requiredis true andretry_safeis false. Do not retry the create; use the same full-buy cancel path. The exact account/campaign check still applies when create access is off.- Every Amazon create request must resolve all packages to one authoritative stored Amazon base product family. Mixed Amazon families are rejected before any provider write.
- Named durable measurements and owners
- These are implemented database signals, not proposed analytics events:
- Eligible adoption —
amazon_sp_manual_create_audit.outcome = 'SUCCEEDED': bokelley owns the widening decision. Conditional targets are 1, 3, and 5 distinct successful eligible buyers at 30, 60, and 90 days after a futureeligible_start, which can be no earlier than September 22, 2026. - Usage —
amazon_sp_manual_create_audit.outcome = 'DISPATCHED'and its terminal outcomes: Supply Integrations (nbanerjee) owns internal-canary dispatch and terminal-result review fromrollout_start. - Duplicate safety —
outcome = 'DUPLICATE_BLOCKED'plus the executable semantic-request provider-dispatch query: acceptance is zero requests with more than one actual provider dispatch. - Terminalization safety —
outcome = 'DISPATCHED'older than 15 minutes and the explicit terminal outcomes: acceptance is zero overdue unterminalized dispatches and 100% terminalization of partial or uncertain outcomes. - Cleanup safety —
amazon_sp_manual_cleanup_slajoined toamazon_sp_manual_cleanup_attestation_audit: Supply Integrations (nbanerjee) owns 100% acknowledgement of internal test cleanup within one Monday-Friday UTC business day. - Any customer
cleanup_requiredaudit row blocks pilot, eligible-buyer, and GA widening until a later implementation durably links acknowledgement and the one-business-day SLA to that cleanup record. Bokelley owns that widening hold and owns filling the vacant buyer-account-hygiene route. Routine customer notifications also remain held. - Existing customers have nothing to change while this limited beta remains dark by default. Named pilot organizations coordinate with Scope3 to receive the entitlement and capacity; Seller self-service must already be enabled for the selected Storefront before an organization can send an invitation.
- In this administrator- and API-facing first slice, organization administrators can use the organization advertiser roster API to create a managed advertiser or a single-use self-service invitation. Managed advertisers are created and administered by an organization administrator. A self-serve advertiser is a confined invited Buyer backed by the selected Seller Storefront and its sponsorship. The roster response reports which mode applies and the lifecycle state.
- Sellers do not operate the organization roster directly. Invitations remain confined to an organization-owned Seller Storefront and behind its existing self-service control. Revocation invalidates an unused invitation or ends the exact sponsorship and access relationship created from it, without exposing or changing unrelated Seller data and without deleting the advertiser, Campaigns, billing history, or lifecycle record. Reading the roster remains available without beta access. A simpler UI and signup path will follow in later work; this slice does not add either surface.
- Your storefront’s Discovery Card is now Branding & distribution, and it does more from the same page: save your operator domain, see exactly why it’s pending verification instead of an unexplained “verify” prompt, and manage Discovery visibility, publishing, and your OpenAI Apps verification token — all without leaving the page. What buyers see doesn’t change until you publish. After you publish, buyers and their agents see the updated Discovery Card — your refreshed identity, description, and channels — wherever storefront discovery surfaces render it. Nothing to change on your side: the same controls in Account Settings still work today.
- Discovery & distribution Settings now clears a previous challenge or bundle error after a successful retry. Switching accounts or leaving Settings during an in-progress action no longer allows that action to refresh another account’s status.
- Meta Video Feed, Stories, and Reels now appear as Testing and are withheld from standard buyer sync and assignment. These formats previously appeared available, but their creative path could not reliably complete a Meta ad. Buyers using currently available Meta formats need no action. The video-only ThruPlay product is now also withheld from standard buyer discovery because all its creative formats are Testing.
- The current Testing path requires a JPEG or PNG
thumbnailthat matches the video’s aspect ratio and is at least 1080 pixels wide. The thumbnail may use ascope3-asset://reference; the video must use a hosted HTTPS URL. Automatic thumbnail selection is not available through standard buyer workflows. - For tested assignments,
ext.manual_action_count: 0appears only after Interchange confirms the paused ad and its creative, account, campaign, and package in Meta. If Meta rejects the ad, the package remains inassigned_to, the response omitsext, andassignment_errorscontains a sanitized Meta review reason. Thumbnail lookup and upload failures return fixed guidance without including raw Meta error messages, codes, or trace IDs. - Assignment now also refuses a creative whose format cannot serve on the placements its target package explicitly targets, such as a Reels creative on a feed-only package. Meta would accept that ad and then never serve it as a Reel. A package that leaves placement automatic is exempt only where the format can serve on the platforms that package runs on; automatic placement on a platform the format declares no placement for, such as an Audience Network-only package, is still refused.
- Promoted Offerings no longer appears in the Meta creative format catalog. No Meta product offered it as a selectable creative format, so it could be discovered but never attached to a buy. Per-offering packages on
create_media_buyare unchanged. - Seller workflows and per-offering package creation are unchanged.
- Storefront connections that cannot activate yet now show as
deferredinstead of appearing failed or retrying indefinitely. Buyers do not need to take any new action for this fix: the status now more accurately reflects that the connection is waiting for the platform to finish activation safely. - Turning a seller’s data-sharing permission off now asks for confirmation, and the dialog states exactly what happens: disabling audiences-and-catalogs or conversion events turns off every advertiser’s existing registrations of that data class under the seller, and re-enabling the permission does not restore them — each advertiser must re-register. Previously only enabling required confirmation, so the destructive direction was one accidental click.
- Ad-server and sales-agent account rosters larger than 1,000 accounts now mirror into your storefront. Previously a roster that size was read, then thrown away in full, so the source mirrored zero accounts on every attempt and no advertiser could be mapped to a buyer relationship through it. Scope3 now follows pagination to the source’s terminal page without imposing an account-count ceiling. Each bounded page is durably staged outside the visible mirror, then the complete snapshot is published atomically without holding the full roster in worker memory.
- An attempt that still stops short now says whose limit stopped it, so a Scope3 time budget is never reported as your ad server’s fault:
ROSTER_DRAIN_TIMED_OUTis ours andINCOMPLETE_LISTINGis the source’s. Scheduled refreshes get a longer reading budget than one you trigger by hand. That budget is propagated to the ESA HTTP client, so the first FreeWheel page can finish its complete upstream cache refresh instead of hitting the generic 15-second GET timeout. - Buyer account creation now honors the existing access decision at submission time, including when signup began from a stale page or an alternate first-administrator path. Named organization invitations continue to apply only to their admitted organization, while Seller Account signup remains unchanged.
- The signup account-type step now keeps its helper text and continue button aligned with the account options shown, so Buyer-only claim flows no longer point users to Storefront setup.
- Your outgoing RFP responses now follow the buyer-requested supported language automatically. English and Dutch responses use localized proposal copy, prices, allocations, and concrete next steps; Dutch platform narrative is deterministic, while authorized source excerpts remain verbatim. Other valid locales fall back truthfully to English. No setup changes are required.
- OpenAI submission packages now carry a complete post-submission workflow. App publishers can record the exact reviewed snapshot, keep the reviewer setup stable during review, respond to a rejection without hand-editing generated files, publish an approved version explicitly, and verify and monitor the first 24 hours of an Interchange or white-label launch.
- No action is required for existing accounts: current defaults, registrations, and Discovery visibility are unchanged. V3
get_statusresponses are now locale-sensitive for every account: when an MCP client supplies a supported locale, account and status labels are localized while each setup blocker and action retains its specific guidance. Clients using the default locale continue to receive English guidance. - Buyer administrators who opt in can open ChatGPT app Settings and download one ZIP with every portal field, prompt, locale review, release note, screenshot, and video requirement mapped in one place. Builders can use the same checklist for a first ChatGPT app, while enterprise teams can use it for reviewer-account and evidence sign-off. Before submitting, resolve any reported logo blockers and complete the remaining manual review items.
- Seller administrators who opt in can use Discovery & distribution Settings to inspect hostname verification, publish an OpenAI challenge token, and check the token served at the public challenge URL. A custom CNAME that is pending or failed continues to block public publication: update DNS to the target shown in Settings and return there after verification becomes active. Platform-managed hosting requires no CNAME action. The versioned publication skill remains available in Murph or another compatible agent, and none of these actions changes buyer discovery or adds marketplace exposure.
- For sellers working in Murph chat, a misplaced inventory-source scope is now repaired before a V3 search runs when that object supports source scoping.
- For V3 tool users, Agent search now distinguishes organization software from sellers. Managed-source signal writes name their complete replacement fields. Business Rules policy errors direct non-admins to an account administrator.
- Buyer admins can now set each advertiser’s Seller preference to Inherit, On, or Off. Inherit follows account selection and automatic market/channel matching; On and Off affect only that advertiser. Seller eligibility and account-wide Always include or Always exclude settings remain authoritative. Seller authorizations and account-wide billing and data-sharing settings are unchanged. No action is required unless you want to change an advertiser’s preference.
- In chat, a request such as “turn Meta on for Acme” now changes only Acme’s Seller preference. Use the all-advertisers Sellers view when you intend to change the whole buyer account.
- SMB/novice buyer: not a direct target for this buyer-admin control in the initial rollout. Murph and the Sellers widget apply the advertiser-scoped choice on the buyer’s behalf; no API knowledge or additional setup is needed.
- Measurement: during staging and the first 30 days of production cohorts, review the durable
Updated advertiser seller activation preferenceaudit event for distinct-buyer adoption and the Inherit/On/Off mix. Expansion requires successful preference readback with no cross-advertiser changes, plus no sustained increase in activation-controller failures or denied seller work. - Seller impact: a buyer can now start or stop using a Seller for one advertiser without changing the Seller for the rest of the buyer account. This does not change the Seller’s storefront, protocol, setup, or required actions.
- Monetization: none. This adds no billable surface, pricing, packaging, or commercial differentiation.
- When a confirmation on the Sellers page fails — removing a seller authorization, changing availability, approving direct billing, or enabling data sharing — the failure message now appears inside the confirmation dialog itself. Previously it rendered behind the dialog, so the action appeared to silently stall. And when a host embeds the Sellers page inline — in a chat card rather than a full working canvas — a seller’s details now open as a full-width sheet sized to the card instead of a partial-width drawer over a sliver of the list.
- In embedded hosts that don’t declare a display mode, opening a seller’s details on the Sellers page now shows the full-width detail sheet instead of a partial-width side panel over a sliver of the list. The side-panel layout is reserved for hosts that explicitly provide a full working canvas.
- “Not open for buying” on the Sellers page now says why. The seller and connection APIs carry a modelled
marketplaceUnavailableReason—seller_opted_out,pending_review,not_published, orcannot_transact— derived from real listing facts, and the Sellers page renders the matching explanation beside the status (“The seller opted out of marketplace buying”, “Under marketplace review”, “The seller hasn’t published this storefront”, “The seller can’t take buys yet”). Cards for not-yet-buyable market makers now carry that meaningful status instead of an unexplained dead end. - Creative asset refusals that point at Scope3-internal private storage now read the same whether the value was a managed handle, an object URI, or an HTTPS URL for a private bucket, so a refusal can no longer be used to test whether a guessed bucket name is one of ours. The message names the refused creative and the remedy; it no longer reports which class of storage was detected, the URL scheme, or which slot of the creative held it.
- Refusals that disclose nothing by being specific stay specific. An unsupported URL scheme still names the scheme — you typed it, and the accepted set is published — and now points you at an
https://URL rather than suggesting an inlinedata:URI, which is not something a buyer can submit. A payload nested past the inspection depth still says so. - If you cannot tell which asset in a multi-asset creative was refused, contact support: Scope3 retains the exact slot and the specific reason server-side.
5.315.0 — August 29, 2026 at 12:29 AM UTC
- When you create a campaign through a connected Meta account, you can now optimize Instant Form lead ads for people likely to become qualified leads — the goal Meta Ads Manager calls “Maximize number of conversion leads.” Select an authorized Facebook Page and one of its active Instant Forms, and you’ll see Meta’s conversion-lead results in delivery reporting. Existing campaigns and other lead products are unchanged. Connecting CRM feedback through Meta’s Conversions API can improve optimization, but it isn’t required to create the campaign.
- Buyers can now link provider accounts to advertisers, configure object-storage reporting buckets, and preview brand domains — all through
save_advertiserwithout separate API calls. UseassignAccountto link a provider account,unassignAccountto remove a link, andupdateReportingBucketto set or clear the object-storage bucket on a linked account. UseresolveBrandto preview what domain a brand resolves to before committing — no advertiser is created. Existingsave_advertisercalls are unaffected; these are additive fields. Retrieve linked accounts inline viaget(kind:"advertiser", include:["accounts"]). - MANAGED buyers can now call
sync_buyer_storefront_accountsandlist_buyer_storefront_accountsas MCP tools on/mcp/v2/buyer, wrapping the sandbox REST endpoints AI-6263 shipped.sync_buyer_storefront_accountsdeclares one or more sandbox account linkages with a MANAGED storefront (every entry must carrysandbox: trueandbilling: 'agent');list_buyer_storefront_accountsreturns the caller’s grants on one storefront, with optionalstatus/sandbox/cursor/maxResultsfilters. Both tools coerce string-form integer identifiers so clients that encode IDs as strings pass validation. - These are Interchange-mediated tools, not vanilla AdCP: the tool wire shape carries a
target.storefrontId(sync) orstorefrontId(list) selector so a buyer can name which MANAGED storefront to route the request to. Vanilla AdCPsync_accounts/list_accountsaddress one storefront through the URL and take a different request shape — a buyer that wants raw AdCP semantics still calls the storefront directly. The tool names reflect this by naming the substrate explicitly. - Production traffic (operator-identity gate, other billing modes,
BusinessEntitypayload) and buyer-side idempotency semantics ship in follow-up slices on the same tool names. - Sellers see no protocol or UI change. MCP-issued grants land in the exact same seller-side linking-service tables as REST-issued grants — this is a transport addition on the buyer edge, not a new substrate.
- Monetization: no billable surface, no packaging change, no differentiation. Sandbox account linkage is free at both the REST and MCP surfaces.
- Rollout — gate: none, atomic launch. MCP tools inherit the REST route’s eligibility (MANAGED-only, external/archived/paused rejected) and sandbox-only fencing. Kill switch is
apps/api/src/tools/v2-buyer/registry.ts(unregister the two tools if we need to disable). Adoption watch: the standard v2 REST metric labels apply verbatim — every MCP call resolves to an internal REST call. - Buyers can request proposals from every seller currently eligible for them in one confirmed
request_proposalsaction. Media teams and agencies get a broader proposal set without assembling a seller list or splitting the marketplace into separate rounds. Murph handles the request, polling, and result pages automatically, so chat buyers have nothing new to configure. - Integrations that call
request_proposalsmust poll with the same idempotency key while status isrunning, then follow everypage.nextCursorafter the execution becomes terminal. Remove the deprecatedsellerIdsfield. Calls that still include it remain valid, but its values no longer narrow the seller cohort. A fresh idempotency key still starts an intentional new round. - Eligible sellers can now receive proposal requests from buyers who would not previously have selected them. This gives each eligible seller’s offer a chance to be reviewed across the marketplace. Sellers do not need to change their setup or response format; existing readiness checks still determine whether they are contacted.
- If Storefront readiness reports missing validation for a Source, run the public validation skill from the Agent or Source diagnostics page, or contact the Agent owner; otherwise, you do not need to act. Successful media-buy validation for the Source’s current Sales Agent version now covers other Sources that use the same version. Each Source still keeps its own credentials, account access, connection health, quarantine, and onboarding status; an older Source-specific exception is never copied to another Source. Sources that are already active keep their completed onboarding state. Buyer-visible certification, catalog listings, and purchasing behavior do not change.
- Creative sync, media-buy execution, and media-buy updates now refuse a creative whose asset URL points at Scope3-internal private storage instead of forwarding it to a sales agent, returning an actionable 422 that names the offending asset.
- Add a fail-closed private-storage boundary to the creative delivery projection.
buildAdaptedPayload/buildSingleAssetPayloadis where a stored creative manifest asset becomes an outbound AdCP asset forsync_creatives, media-buy execution, and creative preview. It now classifies each asset URL and refuses to forward one that addresses private platform storage, raising a 4xxNonDeliverableAssetUrlErrorthat carries only the asset id, the reason, and the URL scheme — never the URL itself. Media-buy execution re-throws that specific refusal rather than falling back to the frozen creative payload, which never passed the boundary.- Non-http(s) values cannot reach a manifest row today — every buyer-facing asset URL field validates through
SafeUrlSchema— but an HTTPS URL pointing at a private bucket can, so the adapted-payload cache key version is bumped to invalidate any pre-boundary entry rather than serve it unchecked for its remaining TTL. Values that are not absolute URLs at all, such as the JSON config aWEBHOOKasset row stores, are explicitly still deliverable. This is the independent output check that keeps the invariant from depending on future writers reusing that one input schema, and it is a prerequisite for adopting managed media sources into buyer creative manifests. create_media_buyandupdate_media_buynow report a failed media buy with the error code that matches why it failed, instead of defaulting toSERVICE_UNAVAILABLE.- Previously, when every inventory source refused a media buy, the response said
SERVICE_UNAVAILABLEwithrecovery: transientand the suggestion “retry once upstream issues clear” — even when the source had deterministically rejected the request as invalid. An agent readingrecoveryorsuggestionas its next action would retry a request that could never succeed, and the wording pointed at the seller’s ad server for a fault that was not theirs. - The response now carries an honest code and a suggestion that names what to change:
- Every source refused the request as invalid →
INVALID_REQUEST(recovery: correctable), with a suggestion to correct the request. - Every source deliberately declined the buy (an explicit rejection or a governance denial) →
POLICY_VIOLATION. - No source authorized the buy →
ACCESS_DENIED(recovery: correctable), noting the seller holds the source credentials. - The buy is awaiting reconciliation of an outstanding upstream order →
INVALID_STATE. - Every source was genuinely unreachable →
SERVICE_UNAVAILABLEand the retry suggestion, unchanged. - When a source refuses without saying why, the code stays
SERVICE_UNAVAILABLE— we cannot tell an unannounced outage from a decision — but the suggestion no longer tells you to wait for upstream issues to clear, because nothing about the request will change on its own. - A creative problem reported by one source no longer makes the whole response look like a bad request when another source failed for a reason a retry could clear; the diagnosis still leads, and the suggestion says both.
update_media_buyalso now classifies failures a source returns (the ordinary AdCPstatus: "failed"response), not only failures that throw — so a deterministic update rejection reaches the buyer as one. When sources fail for a mix of transient and terminal reasons, the suggestion says so explicitly rather than implying a plain retry will clear it.details.per_sourceanddetails.reasonare unchanged.- Media buys against a Scope3-hosted storefront whose source product declared
trusted_match.identity_match: truewere rejected before ever leaving the platform: the storefront-forward pipeline stampedtargeting_overlay.axe_include_segmentas a single-element array ([outbound_package_id]), but the AdCPCreateMediaBuyRequest/UpdateMediaBuyRequestschema declares that field as a bare string. The bundled@adcp/sdkclient-side validator threwInvalid input: expected string, received arrayatSingleAgentClient.validateRequest, the storefront wrapped the throw assource_unavailable, and the buyer sawSERVICE_UNAVAILABLE/recovery: transientwith the guidance to “retry once upstream issues clear” — none of which was true. Every identity-match campaign against an identity-match-enabled storefront failed with this shape. Fix: stampaxe_include_segmentas the bare string the AdCP contract specifies, matching the buyer-leg shape incampaign.service.tsand our ownTargetingOverlaytype declaration. - The Approvals page in the Interchange app again loads the creative reviews and media-buy approvals waiting on you, and its approve, reject, and reassign actions work. Until now that page could show “You’re all caught up” — and approver settings as unavailable — while Pending operations listed the same reviews as waiting, because the page could not reach the approval queue and rendered that failure as an empty queue. It now says the queue could not be loaded when that happens. Nothing to change on your side: open Approvals, or click Review on a pending creative, and the item is there. Approvals opened from Claude or another MCP host were not affected.
get(kind: "media_buy")now surfaces why-fields (pending reason, error code, forwarded timestamp, buyer reference) in both the structured and text response. Anyincludevalues passed to the media_buy kind now returnunavailableIncludeswith guidance to use the parent campaign instead of being silently dropped.get(kind: "campaign")no longer shows a rawnullforadvertiserIdon campaigns accessible to all advertisers — it now shows a human-readable label.- Snap
get_productscountry-inventory failures now return fixed buyer-safe messages and a Scope3-generated UUIDcorrelation_idthat support can match to logs. Empty inventory or an in-band inventory failure remains retryable; a malformed HTTP-200 inventory payload is identified as anINVALID_PROVIDER_RESPONSEand tells buyers to contact support instead of repeatedly retrying. Snap discovery permission failures now name Snap and tell buyers to reconnect OAuth access or resolve business-review or account restrictions. Provider-authored messages and correlation values remain suppressed. - TikTok Traffic (
tiktok_traffic) and App Install Clicks (tiktok_app_install_clicks) now offer optional maximum-CPC bidding. Omitpackages[].bid_priceto keep automatic bidding, or provide a positive value to set a maximum CPC. On creation or update, Interchange validates a supplied bid before changing anything in TikTok, then reads the ad group back and reports success only when the bidding mode and cap match the request. - Before supplying a maximum CPC, rediscover either product with
get_products; a selection saved from an earlier discovery response does not advertise this option. A package created from a response that advertises maximum-CPC bidding can later move from automatic bidding to maximum-CPC bidding or change its cap. Clearing a cap to return to automatic bidding is not supported. This release gives Traffic and App Install Clicks new versioned product and pricing-option IDs, so saved selections for either product from an earlier discovery response must be discarded and rediscovered before use. - Other TikTok products retain their creation-time bidding modes. Interchange rejects
bid_priceon updates to an automatic-bidding package whose selected product did not advertise maximum-CPC bidding, and automatic-bidding package reads no longer return stale bid values. - This path has automated contract and readback coverage. It has not received new live-account certification, and TikTok account permissions and eligibility remain authoritative.
- Claimed Sales Agent owners can now start the public
test-sales-agent@1.2.0brief-discovery workflow from the Agent Page or an exact Source diagnostics page. The Page executes the workflow deterministically through ordinary V3 tools and returns a terminal, customer-safe run receipt without using a model. The validation may use a selected reachable Buyer Account for its isolated sandbox Advertiser and Campaign; its Seller Product reads use that same Buyer scope and preserve the terminal catalog revision and exact Source attribution. Transaction profiles remain available to external hosts but unavailable on the Page until deterministic multi-confirmation support ships. The workflow never exposes Source credentials or grants owner execution from Powered-by or admin projections. - If your LinkedIn connection predates this release, reconnect it to grant
rw_conversions; then callsync_event_sourcesagain and replace any storedevent_source_idbefore your nextlog_eventcall — the old synthetic ID no longer resolves.sync_event_sourcesnow returns one event source per enabled Conversions API rule in your account, each mapped to the closest AdCP event type (an unrecognized rule type maps tocustom), instead of a single synthetic identifier derived from the account ID. Conversion rules are still created, renamed, and deleted in LinkedIn Campaign Manager —sync_event_sourcesrejects attempts to change them there, andlog_eventrejects an event whoseevent_source_iddoesn’t resolve to a rule that exists, is enabled, belongs to the selected account, and matches the event’s type. Each event now requires a lowercase SHA-256 hashed email, a LinkedInli_fat_id, or one advertiser-owned external ID; external IDs are sent through LinkedIn’sexternalIdsfield and never misclassified asACXIOM_ID. A conversion value is accepted only with its explicit currency, so Interchange never invents USD. Invalid identity or value input rejects the complete call before provider I/O. An account with more than 500 enabled Conversions API rules gets a clear error on unfiltered discovery instead of a partial list — request the specificevent_source_idyou need instead, which uses an account-scoped exact read and resolves regardless of account size. Insight Tag rules remain valid for native campaign optimization and association, but this direct-event sync and logging surface does not return them. Exact reads are chunked to 100 IDs, and only an explicit LinkedIn 404 means a rule is absent; permission, throttling, malformed-response, and provider failures remain visible rather than being reported as not found. This is a buyer-side event-tracking correction only: no seller-facing behavior changes, and there is no pricing, packaging, or monetization impact. - Fixed two issues that could leave a Meta Sales/Conversions campaign permanently stuck with no recovery path.
- First, when Meta’s Pixel API call fails during
create_media_buyfor a Sales/Conversions product, the error is now surfaced as an actionable message (e.g., “Could not retrieve Meta Pixels — ensure a Pixel or Dataset is installed and that your Meta connection has ads_management permissions”) instead of the generic “Upstream request failed”. This lets you diagnose and resolve the root cause. - Second,
create_media_buyswithreplace: truenow works on ACTIVE campaigns. Previously, if a media buy failed and left a stuck DRAFT on a campaign that already had ACTIVE media buys, there was no way to replace those DRAFTs. Callcreate_media_buyswithreplace: trueto clear stuck DRAFTs and retry with corrected selections, even while other media buys on the same campaign are running. - Meta-connected media buys using Advantage+ Audience now report their location automation setting consistently when retrieved. No action is required.
- Buyers moving finished video into campaigns can now use large private MP4 upload on every authenticated ad-account connection instead of a single buyer canary. Files up to 2 GB upload directly from the browser into private storage and enter asynchronous inspection; the upload never sends video bytes through chat. Upload completion means the source is queued for inspection, not that every destination can serve it. Destination compatibility and any required managed rendition or VAST publication remain separate delivery checks.
- Seller behavior does not change in this rollout. Sellers continue to declare the AdCP formats and constraints they accept; giving more buyers private source ingress does not add a creative format or widen a seller’s delivery policy.
- Raw upload and source inspection remain included and consume no IUs. Successful managed rendition, retained delivery storage, and delivery egress remain separate measured outcomes and are not billable until catalog and Rate Card pricing is approved.
- The alpha remains reversible through the
managed-video-uploadPostHog flag; disabling or narrowing it removes customer exposure independently of the infrastructure worker switch. Promotion beyond alpha requires stable upload-to- promotion queue time and inspection error rates across multiple buyers, plus a proven destination handoff. Adoption is measured by distinct buyers completing an upload and sources reaching approved or promoted state; delivery success is measured separately. - Google campaign plans now keep product pricing, budgets, live forecasts, and provider execution in the selected Google Ads customer’s currency. Non-USD accounts no longer receive pricing or forecasts mislabeled as USD: live forecast values retain the account currency, template floor guidance zeroes out instead of assuming an exchange rate, and
create_media_buyrejects a request or product whose currency disagrees with the selected account, or a budget that isn’t exactly representable in that currency (for example, a fractional JPY amount). Product discovery also rejects foreign, manager, or invalid-currency customer snapshots before storing products, and inline and catalog-resolved offering-level allocations must reconcile exactly to their requested package budget before Google receives a campaign-budget write. - Managed MP4 upload now finishes as a portable hosted-video creative instead of stopping at a private processing reference. After inspection promotes the exact source, the upload task returns an opaque, revocable HTTPS URL that buyers can use as canonical
video_hostedwith a built-in adapter or an external sales agent. Destination format checks still apply, and upload, inspection, and the source delivery currently consume zero IUs. - Upload, inspection, and source delivery are included at no additional cost. Pricing for future storage or transcoding capabilities will be communicated before any charges apply.
- Persona impact
- Enterprise brand buyers get one governed upload that can be reused across compatible seller routes without weakening each seller’s delivery policy.
- Agency buyers can upload once and hand the same hosted creative to compatible built-in adapters or external sales agents instead of re-hosting per route.
- Power buyers and MCP builders receive
delivery_urlafter promotion and may use it asvideo_hosted; an authenticated owner can revoke it later. - SMB buyers need no technical action: the upload app waits for inspection and returns the usable hosted creative only when processing succeeds.
- Sellers have no setup or buyer-visible storefront change. Their declared formats and media constraints remain authoritative and may reject the file.
- The “Add advertiser” in-chat widget has a refreshed look. When you ask Murph to add or edit an advertiser, the form is now rebuilt on the Scope3 design system — the same fields and behavior, with clearer typography and layout. No action needed.
- Sellers: not applicable — this is a buyer-only surface with no seller-visible change.
- Sales Agent owners can now include an optional
endpointslist when they register an immutable implementation revision. Declaring the Agent’s HTTPS endpoint at registration lets Interchange validate that exact implementation before its first Source test. Existing revisions and registration requests are unchanged; no action is required unless an owner chooses to declare endpoints. - If you previously validated a Sales Agent with the three test-campaign tools, their V2 API endpoints, or the standalone Test Runs launcher, start the supported validation workflow from the Agent page. To validate one specific Source, start from that Source’s diagnostics instead. Historical Test Runs records remain readable, but new readiness evidence comes from Agent validation history and Source diagnostics.
- Sellers who did not use the legacy test tools need take no action, and the ordinary Sales Agent workflow is unchanged. Buyers have no new surface or behavior. This release does not change plans, pricing, entitlements, or billable usage.
- Set your source’s default advertiser yourself, on whichever ad server backs it.
- The ad server source page’s “Set default advertiser” action now lists the advertisers on your ad server and writes the one you pick for Google Ad Manager, FreeWheel, and AdsWizz alike. Previously it only worked on Google Ad Manager, so the Advertiser for live buys readiness blocker told a FreeWheel or AdsWizz seller to contact us — while every buy outside the sandbox kept failing until we set it for them.
- Two things follow your ad server rather than Interchange: Google Ad Manager serves a searchable advertiser cache and lets Interchange create an advertiser for you, so search narrows at the source and a “create a new advertiser” option appears. Other ad servers return a bounded advertiser roster that the picker filters in place — create the advertiser in your ad server first, then pick it.
PUT /esa/{esaId}/default-advertiserandGET /esa/{esaId}/advertisersare unchanged; the page now uses them, and the readiness blocker links every ad server that has a default advertiser to the control instead of to us. See Buyer routing.- If your Media Company is enrolled in live campaign management, your Campaigns workspace now shows live advertisers and campaigns for your own inventory alongside your sandbox campaigns — same list, no separate tab or setup step. Sandbox campaigns are unchanged and stay available to every Media Company, enrolled or not.
- If you connected LinkedIn before conversion support shipped and want to sync event sources, reconnect it to grant
rw_conversions. The connection guide now documents that action and the boundary between LinkedIn campaign reads and measurement. - The Pinterest compatibility page now describes what event-source setup actually does: Interchange discovers the Conversion Tags on your selected ad account and returns Pinterest’s own installation code. It does not create, change, or delete Tags, and server-side event delivery is still not available; nothing changes on your side for Pinterest.
- The connection guide also names where to map advertisers in both the web app and the Connections widget.
- Meta’s compatibility page now explains that native ad-account webhook processing can refresh media-buy status for affected campaigns while delivery reads and reporting remain separate.
- Declare the per-product Scope3 Prebid module state on any
save_wholesale_productcall. Sellers using the V3 tool can now turn the module on or off for a product in the same call that changes name, pricing, or inventory selectors — passprebidIntegrationActive: true(orfalse); omit it to leave the current state unchanged. The tool’s response echoesprebidIntegrationActiveplus aprebidIntegrationChangedflag. The existing route through Murph in chat still works. See the updated setup docs at Storefront → TMP → Prebid setup for both routes.
5.313.0 — August 27, 2026 at 8:40 PM UTC
- Connected TikTok accounts can now buy TikTok Search Ads as explicit wholesale products: Traffic Clicks, Traffic Landing Page Views (each with Maximum Delivery or Cost Cap bidding), and Web Conversions on Target CPA. Select one of these products and provide your keyword set — Interchange creates the campaign paused and confirms success only after TikTok’s exact provider readback matches the keywords, placement, and bid settings you requested. A request with no keywords, or with a keyword or bid setting TikTok Search doesn’t support for the selected product, is rejected before anything is written to your account.
- No action is needed for existing campaigns or other TikTok products — they are unchanged. TikTok Search Lead Generation and negative-keyword targeting are not yet available as wholesale products.
- When Meta reports age and gender automation for an integrated Advantage+ Sales or Leads media buy,
get_media_buysnow returns those controls instead of rejecting the read. Existing requests require no changes; unproven or malformed automation still fails closed. - When live proposal generation is unavailable, seller responses now continue to cite applicable approved positioning and case-study evidence from Materials. If either evidence class is unavailable, the response records that limitation instead of silently omitting it. Advertiser-scoped evidence remains excluded unless eligibility is backed by server-owned authorization; no action is required.
- V3
getcalls for an Agent can now includevalidationRunsto return up to five recent run summaries and an exact follow-up for each. Pass the returnedvalidationRunIdwithinclude: ["diagnostics"]to see the run’s ordered stages and where it succeeded or failed. Existing Agent reads are unchanged, and diagnostic responses omit payloads, credentials, private prompts, creatives, endpoint URLs, and customer object identifiers. - Configured and live Agent owners can now have supported validation runs add catalog-quality evidence to their Agent certification after Interchange verifies the full run and cleanup. The first rollout covers the brief-discovery validation scenario on Agent certification and diagnostics surfaces. Existing evidence stays unchanged and sellers do not need to change their setup. Buyer-visible certification status, badges, labels, and fields do not change in this slice; the new evidence is an internal certification input only.
- Inventory from Trusted Media Brands, Bustle, and Carpenter Media Group can serve through their existing Optimera connections again. No publisher action is required, and their existing Sources, products, campaigns, credentials, and account access stay unchanged.
- Campaign media-buy creation now validates products in the same sandbox or live partition in which they were discovered. This prevents an older expired live quote from blocking a fresh sandbox product with the same seller product ID; no action is required.
- Account-wide seller controls are now clearly separated from advertiser-level work on the Sellers page. When someone on your team views a seller from a single advertiser, actions that would change things for every advertiser — connection authorizations, marketplace availability, and media billing — are shown read-only there. A Manage in account view action switches the panel to the seller’s account-wide settings explicitly, so an account-wide change never happens from an advertiser’s context by accident. What stays actionable in advertiser scope is exactly that advertiser’s own work: mapping it to a seller account (a labeled picker with an explicit Map account action), completing its setup, and resolving its payments. The Sellers header in advertiser context now leads with the advertiser’s markets and channels, and an advertiser view with no available sellers offers Browse all sellers instead of a dead end.
- Opening a seller from the Sellers page now shows its details in a side panel instead of replacing the page, so your search and place in the seller list are preserved. The panel leads with your advertisers — each one’s status with that seller and the action it needs — followed by your account authorizations, with the ad accounts each login discovered listed under it. An unconnected seller shows a single Connect action; once connected, use Add another login for an additional authorization and Refresh account list (renamed from “Refresh accounts”) to re-discover accounts without re-authorizing. Data sharing stays account-wide, so advertiser-scoped views now show it read-only, and test-advertiser creation is offered only when your account has no advertisers yet and is labeled as creating an Interchange test advertiser.
5.312.0 — August 27, 2026 at 5:28 PM UTC
- Buyer and seller organizations can now call
GET /api/v2/organization/advertisersto read one advertiser list across the accounts they are already authorized to access. Each entry says who operates the advertiser, whether it is managed or self-service, and whether it is ready for advertiser and campaign work. Existing advertiser and campaign APIs behave the same, and no setup is required. - The endpoint is available to authenticated organization members in Buyer and Seller account contexts. It does not match names, domains, or external account data to widen access, and advertiser-scoped credentials cannot use it.
- Seller proposal receipts now distinguish freshly generated responses, reused cached responses, and responses produced without live model output. When a live model produces the response, the receipt identifies the provider and model; degraded attempts include those details when available. This helps storefront operators audit proposal quality and spot degraded responses. No action is required.
- For hands-on buyers configuring direct-sold FreeWheel delivery, an untested VAST version is now reported as needing destination certification instead of being described as unsupported. The previously proven HTTPS VAST 2.0 trafficking path remains available; hosted video and Scope3-managed VAST still require separate proof.
- Seller applicability: no seller notification or action is required. This changes only the buyer-facing preflight classification before any seller API call; it does not change seller account setup, account policy, or certified delivery state.
- Murph can now set the advertiser your live buys book against, on FreeWheel and AdsWizz as well as Google Ad Manager. Ask for it in plain language — “map the advertiser for my live buys” — and Murph reads your ad server’s advertiser roster, sets the one you pick, and confirms the write. Setup used to raise “Advertiser for live buys” as a blocker and then tell you the change could not be made from chat, which left the only working route a hand-written API call. Until buys have an advertiser to book against, every non-sandbox buy on that ad server fails, so this was the difference between a storefront that looks ready and one that can transact.
- Buyer agents starting without a credential are now directed to zero-touch Agent Registration before interactive OAuth. The public activation contract and authentication guide advertise the canonical
interchange:readscope and the zero-spend allowance together. - Seller applicability: not applicable. This changes only buyer-agent authentication discovery and does not alter seller storefronts, seller credentials, payouts, or presentation.
5.311.0 — August 27, 2026 at 4:11 PM UTC
- Account analysis has a refreshed look. When you ask Murph to analyze a connected ad-platform account, the in-chat report is now rebuilt on the Scope3 design system — the same sections and data, with clearer typography and cards. Campaign pacing now shows as a colored status chip (on track, behind, ahead); a pacing value we don’t recognize shows as a neutral chip rather than raw text. No action needed.
- Sellers: not applicable — this is a buyer-only surface with no seller-visible change.
- MANAGED buyers can now declare sandbox account linkages with a specific storefront via
POST /api/v2/buyer/storefront-accounts/syncand read their per-storefront sandbox grant status viaGET /api/v2/buyer/storefront-accounts?storefrontId=…. Every entry must carrysandbox: trueandbilling: 'agent'; the request body mirrors the AdCP 3.2sync_accountsnatural key —{ brand: { domain }, operator }. External-adapter, archived, and paused storefronts are rejected up-front. Sandbox grants land on the same seller-side linking-service substrate that the inboundsync_accountshandler writes to, so no seller-visible change ships with this endpoint. - Production traffic (operator-identity gate, other billing modes,
BusinessEntitypayload) ships in a follow-up slice — the sandbox constraint here fences the resulting grants off from production spend, so a caller cannot use this endpoint to hijack another operator’s identity while the gate is still under construction. - This is the buyer-side entry point AI-6190’s
MANAGED_ACCOUNT_LINKAGE_REQUIREDerror points at (once production traffic lands in the follow-up). - Sellers see no protocol or UI change. Sandbox grants land in the existing seller-side linking-service tables exactly as an inbound sandbox
sync_accountswould; no new inbox, no new UI, no new operational step. - Monetization: no billable surface, no packaging change, no differentiation. Sandbox account linkage is free.
- Rollout — gate: none, atomic launch. MANAGED-only (external/archived/paused rejected at the boundary), sandbox-only (fenced off from production spend), and the mutation is idempotent at the linking-service natural-key level. Kill switch is
apps/api/src/routes/v2/buyer-accounts.routes.ts(unmount if we need to disable). Adoption watch: sandboxsync_accountsREST request count per customer via the standard v2 REST metric labels. - Buyer agent integrations can now receive the canonical
interchange:readpermission during Agent Registration setup and credential rotation. Existingbuyer:readcredentials remain supported as a compatibility alias, with no removal date planned, so no immediate action is required. New or rotated registrations should useinterchange:read. - Seller applicability: not applicable. This change is limited to buyer registration credentials; it does not alter seller storefront presentation, seller-visible attributes, seller tokens, seller routes, or seller documentation.
- No action is required for existing wholesale selections or media buys.
- Buyers building TikTok briefs can now name an existing account audience to include or exclude. Interchange uses the audience only when it finds one exact, live match on the selected account. Otherwise, it asks the buyer to clarify before making any provider changes.
- Wholesale discovery remains free. Brief composition is also uncharged while we measure its cost and results. Sellers do not need to act: their inventory, storefront behavior, reporting, and charges are unchanged.
- Marketplace selection now understands the complete AdCP media-channel vocabulary, including sponsored intelligence, while preserving existing audio, Google, and Meta scopes.
- Campaign
allocatedBudgetnow says exactly which media buys it counts. It is the sum of every media buy that still holds budget —DRAFT,PENDING_APPROVAL,INPUT_REQUIRED,ACTIVE, andPAUSED— plus delivered spend on buys that have ended. Previously it was described only as “active” media buy budgets, which led agents to add aDRAFTbuy’s budget on top of the reported total, conclude the campaign was over-allocated, and refuse a budget increase that had room.unallocatedBudgetis likewise the headroom for any allocation, including raising an existing buy’s budget, not just for new buys. The values the API returns are unchanged. update_media_buynow acceptsgeo_countriesandgeo_regionsin a package’stargetingOverlay, matching what adapters already support post-launch — this was rejected outright with a schema error before.- When a media buy request uses a targeting dimension an ad platform doesn’t support, the error you get back now names the exact unsupported dimension and marks it as correctable, instead of a generic “Upstream request failed” that looked like a transient outage.
- For buyer teams that use Pinterest Conversion Tags through AdCP, event-source discovery now returns only Tags verified on the selected ad account and relays only Pinterest-issued setup code. You can revalidate existing Tag configuration, while unsupported Tag changes or removal requests fail visibly. Discovery-only workflows need no action; manage Tag changes or removal in Pinterest instead of requesting them through AdCP. Server-side Pinterest event delivery remains unavailable pending signed live validation. Oversized Tag inventories now fail without truncation or replacement of the last proven binding snapshot.
- Fixed
save_campaign(isArchived: true) so a retried archive call that lands after the campaign was already archived reports the honest already-archived success instead of an error the agent has no way to resolve. Revision-guarded calls fail closed before retry cleanup, and state retries no longer append duplicate archive audit events. - Fixed a bug where creating or updating a TikTok media buy could fail with a generic “Upstream request failed” error when TikTok’s advertiser account snapshot omitted or blanked out presentation fields (balance, timezone, language, create time) that the media buy itself doesn’t use. The account currency, status, and role are still validated before any mutation.
- New Google Search Traffic and Search Conversions campaigns now stop before launch unless Interchange can apply and confirm the requested targeting exactly. Each package needs a target country or region and reviewed positive keywords. Supported demographics—including explicit exclusions for every omitted Google age and gender bucket—interests, governed audiences, and negative keywords are applied without widening; unsupported or lossy choices return an explanation before campaign or budget writes.
- Existing Google campaigns are unchanged. Buyers using seller-managed campaigns should add geography and reviewed positive keywords to Google Search Traffic and Search Conversions templates and playbooks. People buying through chat do not need technical setup; Interchange asks for clarification when a request cannot be applied safely. Enterprise brand teams receive a durable requested-versus-provider targeting record for campaign governance; attribution and reporting metrics do not change. Sellers operating Google-connected storefronts do not need to change their connection. New campaigns start paused, and an exact-readback failure keeps them non-serving, reducing the risk that a buyer’s mistargeted request consumes budget or requires seller cleanup. Other Google campaign types and other ad platforms are unchanged.
- If you publish an Interchange buyer app in ChatGPT, select Scan tools to import three guided workflows: get the account ready to buy, set up and stage a campaign, and manage an existing campaign. Existing buyer accounts and API integrations need no changes. OpenAI imports skills as submission-time snapshots, so scan again before each submission or upload the buyer-skills ZIP included in the submission download. This does not change what buyers see about sellers, and Seller or media-company sessions do not receive these buyer-only skills.
- Nothing changes on your side when card confirmation succeeds.
- Card confirmation status now persists across navigation and sign-in.
- Missed confirmation updates are reconciled automatically. Duplicate submissions are blocked while confirmation is processing.
- If confirmation fails or expires, Plan & Billing shows the outcome and asks you to retry.
- Murph now recovers malformed exact-document searches without an extra failed tool round, reducing avoidable latency when answering seller questions from the public documentation.
- Teach now lets you upload PDF, PowerPoint, Excel, CSV, PNG, JPEG, GIF, and WebP files up to 100 MB that stay private to your Seller Account. Review, accept, reject, or correct the selling points and case-study stories extracted from each file. Accepted or corrected items can inform future proposals sent to buyers; undecided and rejected items cannot. Buyers have no new step or interface, and existing materials keep working. Uploads use short-lived permissions and are validated by file type, size, and content. Upload credentials are used only for the browser transfer; they are never rendered or sent to the conversation.
- Brand and agency media teams can now ask an agent to show available sellers, see which seller authorizations their account already has, or open connection setup for a specific seller. Each seller appears once, with every authorization shown as a separate connection and its provider accounts kept together beneath it.
- The Sellers widget uses this model end to end and presents one consistent experience across supported hosts. Opening setup does not authorize a seller or change account data until the buyer confirms. Existing sellers, connections, provider accounts, and advertiser mappings are unchanged. Seller-visible connection state, readiness, exposure, and workflows do not change, so buyers and sellers do not need to take action.
5.310.1 — August 27, 2026 at 8:19 AM UTC
- Fresh ChatGPT app submission packages for the shared Interchange first-party endpoint now include its missing account-switching tool justification. Download a new package before importing it in OpenAI; no other setup changes are needed. This most directly serves scrappy builder/power-buyer administrators; other buyer personas are unaffected unless an administrator prepares this OpenAI submission. Dedicated customer app hostnames remain account-bound and continue to omit account switching, so seller marketplace presentation and campaign workflows are unchanged.
5.310.0 — August 27, 2026 at 7:50 AM UTC
- Enrolled buyer connections can upload large MP4 creatives directly into private managed-video inspection without sending the file through chat.
- Organizations with a buyer account or Seller Account can now use
save_billingon the V3 agent surface to accept the current Terms of Service or add a card as the organization’s payment authority. - For organization leaders and admins, this adds an agent route without changing contract terms, invoices, transaction records, or seller payouts. Terms acceptance still requires a direct organization admin, and the existing Plan & Billing setup does not change.
- For teams that operate their own agents, card setup follows a request-and-confirm flow. After confirmation, the agent returns a one-time hosted link for the cardholder and can poll for verification; card details never enter MCP. Card setup is available only to enrolled organizations.
- If you use Murph or Plan & Billing rather than operating an agent directly, your workflow does not change. For the seller-impact check, this buyer-side billing change does not alter how a seller’s storefront is ranked, rendered, labeled, or presented to buyers, so sellers have no new storefront setup task or presentation incentive. A Seller Account can use
save_billingonly for its own organization’s billing, and seller payouts do not change. No action is needed unless your organization needs to accept the current Terms or add a card. - Rollout remains behind the parent-inherited, fail-closed
buyer-card-collectionflag, which is also the kill switch. Expansion requires every bounded canary to complete current-Terms acceptance and the card request, confirmation, hosted-link, and verified-status sequence without card data entering MCP, while the existing REST and Plan & Billing paths continue to pass their compatibility checks. - Adoption is the first successful
save_billingoperation per enrolled organization, measured from tool invocation logs and the authoritative Terms and capture-link records. Usage is measured as successful Terms acceptances, confirmed capture-link requests, verified card completions, and terminal status-poll outcomes; error rates and request-to-verification conversion are reviewed at each rollout step before the flag audience expands. - A creative delivery no longer revives a media-buy route that has already gone terminal, and a delivery whose route can never reach its source now fails with a terminal answer instead of waiting indefinitely.
- Reddit media buys now attach an account-authorized Pixel to every new ad group and confirm that the same Pixel remains attached after creation or targeting changes.
- Accounts with one Pixel need no action. If the selected account has multiple Pixels, pass the provider-issued ID in
context.conversion_pixel_id. Missing, foreign, or ambiguous selections stop before campaign creation. - For an older ad group without a Pixel, configure an account-authorized Pixel in Reddit Ads Manager before changing its targeting.
- New campaign names include a short unique suffix in Reddit Ads Manager. Interchange uses it to confirm the newly created, paused campaign before creating an ad group or attempting cleanup.
- Seller and storefront behavior is unaffected: this change only validates buyer-owned Reddit campaign resources, so no seller action is required.
- Let FreeWheel sellers set a default advertiser.
PUT /api/v2/storefront/esa/{esaId}/default-advertiserrejected FreeWheel becauseAD_SERVER_CAPABILITIES.freewheel.supportsAdvertiserMappingwasfalse, on the grounds that the upstream write did not exist. It did: the embedded sales agent has exposedPUT /tenants/{id}/adapters/freewheel/configsince May, andFreeWheelAdapterreads thatdefault_advertiser_idas the fallback whenever a principal has no explicit mapping. The flag left FreeWheel sellers raised as blocked on “Advertiser for live buys” and then refused the only control that clears it, while every live buy failed at adapter construction. Their sole alternative was a full credential rotation, which means re-supplying a client secret Interchange never stores.- The capability record now names where each ad server keeps its catch-all advertiser (
defaultAdvertiserStore) rather than only whether a write is allowed, sosetDefaultAdvertiserdispatches to the right store instead of falling through to the GAM path and persistingdefault_gam_advertiser_id— a tenant column FreeWheel and AdsWizz never read. FreeWheel and AdsWizz resolve to their adapter config, Google Ad Manager to the tenant column, and SpringServe to none, because it models demand as demand tags and has no advertiser entity. - Ask your storefront agent to set the advertiser, or call the endpoint directly. The advertiser picker in the ad-server source page is still Google Ad Manager only, so the readiness blocker keeps pointing FreeWheel and AdsWizz sellers at us rather than at a control that is not on the page. Readiness reads the advertiser destination live from the embedded sales agent, so the blocker clears as soon as the write lands, whoever performs it.
- Your wholesale pricing now stays live for the window you declared. Previously an upload expired 35 days after you sent it whatever
effective_end_dateyour rows carried, so a quarter of pricing went dark about a month in and took its products off the market with it. The dates in your file now set the expiry, the “pricing feed expires in N days” warning counts down to that date, and a single backstop keeps an upload usable for at most 365 days so an abandoned feed can’t price inventory forever. Uploads declaring a window longer than 180 days are still accepted and now come back with an advisory, since CPM guidance that old rarely still matches the market. - For buyers with Sellers enabled, Sellers now appears in the main navigation instead of Settings, making seller availability, account connections, billing, data sharing, and advertiser mappings easier to find. Existing connections and settings keep working, and no action is needed.
- Sellers are affected only through this easier buyer access to the same connections. Sellers do not need to change anything.
- Meta-connected storefronts now retain valid brand-safety content-filter controls when reading media buys, preventing those provider-authored controls from interrupting sync. Invalid or unknown values continue to fail closed. No action is required.
- Seller media-buy lists now show a creative as attached as soon as the buyer submits it to that buy, including while delivery setup is still pending. No action is required.
- Proposal Pass now lets you work an RFP turn, not just view it. From the same portable page you already open in Murph, Claude, or ChatGPT, record buyer feedback and open a revision turn built from it. Request a JSON, HTML, PDF, or PowerPoint file of the response, then watch it move from queued to ready and open or download it — all without leaving the page. Releasing a turn or recording its outcome still happens outside Proposal Pass.
5.309.1 — August 27, 2026 at 4:49 AM UTC
- Campaign cleanup now recognizes a just-written committed-spend ledger entry while its public sequence is still being published, so agents can archive a completed campaign without an internal-error retry loop.
5.309.0 — August 27, 2026 at 3:43 AM UTC
- The campaign drill-in now shows what’s standing between a draft campaign and going live: a plan summary (budget, flight dates, media buys), the budget split across buys, why each buy isn’t live yet, and a readiness checklist of what’s still blocking launch — unapproved creatives, or no media buys yet. Once the campaign goes live, the drill-in goes back to showing delivery. There’s nothing to turn on — draft campaigns show this automatically.
- Download a fresh ChatGPT app submission package before importing it into OpenAI. New packages now use the Apps SDK submission schema required by the portal; the app’s MCP URL, tools, and publication settings do not change.
- Murph now automatically retries a brief, transient hiccup from one of its AI models instead of ending your conversation early. Nothing to change on your side.
- Fixed TikTok account discovery still failing with “0 accounts discovered” for accounts where TikTok returns an empty string (rather than omitting the field or returning
null) for presentation fields like language. Discovery now treats a blank value the same as an absent one instead of rejecting the account. - The Sellers page now follows the account or advertiser selected in the buyer navigation rail. When an advertiser is selected, its Edit button opens setup without leaving the current conversation.
- Selection and data sharing are now separate controls. Data sharing is explained as account-wide consent for a seller, rather than an advertiser-level setting.
- Seller cards open only when there is a useful next step. Sellers that are not available remain passive, and direct-account sellers show direct billing even before they are connected.
- Sandbox advertiser setup is no longer a standalone header action. It appears inside a seller’s workflow when that seller has no eligible advertisers.
- Large agency / hold-co buyer: Moving between account and advertiser views is clearer, and editing an advertiser no longer interrupts the active conversation. No setup change is required.
- Seller: Buyers now see seller readiness, available actions, and direct billing more accurately. No seller action is required.
5.308.0 — August 26, 2026 at 12:56 PM UTC
- When you sign up directly as an Advertiser, your organization starts with one account and one sandbox advertiser. To add another account, choose Contact us to add an account in the account selector; once your account limit is increased, Add account appears without moving your members, billing, or account history. The account limit does not restrict how many advertisers or connected advertising-platform accounts you can manage.
- The in-chat campaign drill-in now shows a live workspace view of a campaign: its media buys, budget split, and real per-seller creative approval status — rolled up to the worst status across sellers, with each seller and its open issue listed on the card. Creative readiness reflects the actual seller review state instead of a placeholder, and delivery bars appear only when there is delivery data to show.
- A dedicated
get_campaign_workspacebuyer read backs the view, returning the campaign’s media buys and creatives projected for the drill-in in a single call. - Fixed TikTok account discovery failing with “0 accounts discovered” right after a successful OAuth connection. TikTok can return
nullfor balance, timezone, creation date, language, or role on a newly-authorized or not-yet-audited advertiser account; discovery now surfaces the account as selectable instead of rejecting the whole connection over presentation fields it doesn’t need.
5.307.3 — August 26, 2026 at 11:27 AM UTC
- Media Company seller accounts can now finish an own-supply sandbox workflow by archiving the exact sandbox advertiser bound to their Storefront. Live advertisers and restore operations remain administrator-only.
5.307.0 — August 26, 2026 at 8:02 AM UTC
- Seller RFP responses can now turn explicitly approved Material selling points and case studies into cited proposal arguments, while keeping price, availability, measurement, confidentiality, and visual rights tied to their canonical sources. The first viable Quick RFP can reuse that truth-gated narrative without another model call, and deliberate passes now return a product-free response instead of offer lines disguised as a decline.
5.306.1 — August 26, 2026 at 7:47 AM UTC
- Seller media-buy lists now show creatives submitted by external buyers as attached, including while source-side trafficking work is still pending.
5.306.0 — August 26, 2026 at 6:35 AM UTC
- The public Sales Agent validation skill now describes evidence exactly as the ordinary V3 tools return it, including Campaign revisions and previews, Seller media-buy timelines, and bounded delivery ranges. The opt-in integrated own-supply acceptance journey executes that same deployed manifest and retains its sanitized, Activity-linked receipt, so catalog or runtime drift fails the journey instead of leaving a second test-only contract green.
- Existing versioned skill links remain immutable. Callers following the stable
test-sales-agentURL receive the corrected version automatically. - Modular-source Media Buys now show their confirmed settlement currency alongside the seller’s net budget and CPM. Nothing changes in seller workflows; newly created modular-source buys carry the complete commercial terms automatically.
- Buyer agents have a more reliable path through an existing Seller Discovery Card: the public page points to its machine-readable card, a reusable guide, and the Seller’s already-published AdCP endpoint. Start from the published card and follow its
adcpaction; do not substitute/mcp/v3. Existing V2 integrations do not need to change. - Sellers with an active public Discovery Card receive the new machine links automatically, so no setup is required. This ships without a feature flag because it adds navigation to information active cards already publish. Publication status remains the exposure control: unpublishing removes the public entry point, and a card without a verified
adcpaction does not advertise a direct buying endpoint. - Public discovery does not grant access or change plans, pricing, entitlements, transaction terms, or commercial authority. A customer hostname changes discovery and routing only, and buyers still authenticate with their own credentials. Interchange remains the agent of record for resulting campaigns and anchors buyer identity, advertiser, contract terms, governance, reporting, and ledger evidence; the Seller Account continues to manage the one-to-one buy.
- The API landing page now identifies the account-resolved V3 preview, the stable V2 APIs, and direct Seller AdCP endpoints as separate surfaces. V3 remains a preview; the Discovery Card’s verified action is the direct, one-Seller route.
5.305.1 — August 26, 2026 at 6:00 AM UTC
- The read-only “Interchange merchandising available” status is gone from Storefront settings, and “Build Discovery Card” setup actions now open the Discovery Card editor instead of the settings modal.
5.305.0 — August 26, 2026 at 5:36 AM UTC
- Buyer agents can now use
searchandgetwith theconnectionkind andsave_connectionto authorize Seller accounts, map or unmap advertisers, and remove connections. Provider credentials stay in a one-time Interchange browser handoff and never enter MCP. Existing V2 integrations do not change; eligible accounts receive this through the Sellers early-access rollout, and no setup change is required. - If you build or operate a Sales Agent, you can now test your own supply through the same V3 tools used for ordinary buying. Start with the public, versioned Test a Sales Agent skill. It guides an MCP-capable agent through brief discovery and, with explicit confirmation, a no-spend media buy against your organization’s own Seller.
- For builders and power buyers: use
searchandgetwithkind: "agent"to inspect software Agents your organization owns, including customer-safe certification status, implementation health, and the recommended validation skill version. Optional run, skill, scenario, and step identifiers connect ordinary MCP or REST calls to Activity diagnostics and downstream seller calls. - For sellers: use a synthetic or non-confidential brief to check what your Sales Agent returns, then review the exact Products, prices, formats, source identity, media-buy state, and seller-side readback. Run the skill only with a sandbox Advertiser and your own Seller.
- Action: point your MCP-capable agent at the skill, choose the least-mutating scenario that answers your question, and review each proposed mutation before continuing. Existing integrations require no change.
- Boundaries: a validation run is evidence, not certification. Agent reads omit credentials, private evidence, relationship identities, and owner-only actions. Caller-supplied correlation identifiers do not grant access or prove certification. The launch fixture library contains metadata only, so creative handoff remains unproven until an approved executable fixture is published. This release does not remove the legacy test wrappers; their retirement is separate.
- Pricing and packaging: none. This adds no billable surface, entitlement, Intelligence Unit usage, take-rate change, or paid package.
- Rollout and rollback: the Skills catalog is public after deployment, while execution uses the existing V3 preview and its ordinary account permissions. The new Agent reads require an organization administrator or account-bound machine credential. Rollback is a code revert: it removes the catalog, Agent noun, and workflow annotations without a schema, billing, or data migration. Any sandbox resources created before rollback remain subject to their ordinary cleanup lifecycle.
- Measurement: adoption is the number of distinct organizations and correlated runs using the published skill version, split by scenario. Completion is the share of started runs that reach the scenario’s terminal read and cleanup calls. Operational acceptance requires zero production-Advertiser or cross-Seller mutations; failures are grouped by the recorded step and server-issued Activity and trace identifiers.
- Allow buyers to traffic an HTTPS VAST 2.0 creative through Talpa’s managed FreeWheel connection. No new buyer setup is required: select the FreeWheel- backed inventory and provide the VAST tag with the creative. Sellers keep the same FreeWheel connection and operating workflow; the connection now accepts this proven creative type instead of rejecting it before delivery. Only the exact enrolled Talpa connection receives this certification; other FreeWheel connections stay fail-closed. Uploaded video files and other VAST versions remain blocked until their delivery paths are separately certified.
- This compatibility capability is included in the existing buying and selling workflow at no incremental charge. Managed transcoding, storage, and delivery for uploaded video files are not part of this release and may be packaged separately when they launch.
- Inventory Sources and Seller Setup now show Not buyable when an ad-server source’s selling currency has not been verified or is incompatible. The source row explains which currency check failed while leaving unaffected inventory available.
- For Google Ad Manager and FreeWheel, run Test connection after correcting the source’s currency configuration. Successful tests now refresh the verified currencies and clear outdated blockers automatically. If the source remains blocked, follow the inventory source troubleshooting guide or contact Scope3 support with the failed check shown in the row.
- SpringServe sources can be connected and displayed, but remain Not buyable until Scope3 certifies their live booking path. No seller action is currently available for that limitation. Buyers and buyer workflows are unaffected by this fix.
- Show the advertiser and buying operator on seller Media Buys for modular-source transactions. Nothing changes in seller workflows; newly created modular-source Media Buys now carry that identity automatically.
- Murph now directs sellers with an ad-server execution-currency blocker to the supported connection test and avoids unsupported credential-reconnect instructions.
- Sales Agent validation now waits for a complete Product catalog and carries the selected Product’s Seller, query, revision, pricing identity, and any returned Source or Sales Agent route together into the sandbox media buy. If that Product disappears or its provenance changes, the run stops before
save_media_buyinstead of reusing a stale ID or borrowing another Product’s identity. - The public
test-sales-agentskill advances to version 1.1.0 with bounded steps, sanitized receipts, and reverse-order cleanup. Existing 1.0.0 links stay immutable; callers following the stable skill URL receive 1.1.0 automatically. - Routed Media Buys now show their confirmed settlement currency alongside the seller’s net budget and CPM. Nothing changes in seller workflows; newly created routed Media Buys carry the complete commercial terms automatically.
- The Sellers page now opens scoped to the advertiser you’re already working in, instead of always defaulting to the account overview. If no advertiser is selected, or the page doesn’t recognize the selected one, it opens on the account overview as before. The page’s own View selector still switches between account and advertiser views the same way it always has.
5.303.0 — August 26, 2026 at 1:11 AM UTC
- Seller storefront Pages now make four everyday tuning tasks more complete:
- Demand Inbox shows saved buyer requests immediately, including drafts that have not started a response, and lets sellers load more requests.
- Proposal Pass keeps a readable recent history of response attempts and clearly says when additional history exists.
- Teach shows accepted selling points from seller material, keeps earlier decisions visible and read-only, and lets sellers load more material and selling points.
- Seller Analytics shows current request-performance measures, recent requests, and the saved detail for a selected request.
- No seller action is required. New launches use explicitly versioned v3 Page resources; previously persisted launches retain their released storefront bundles and controls. This has no packaging or billing change and ships ungated because it uses already released storefront records. Indirect buyer persona disposition: not applicable. Buyers see no change to proposal flow, storefront presentation, or seller-readiness signals because the release changes seller-side reads, history, decisions, and analytics without changing the buyer transaction path.
- The integration surface also adds authenticated, Page-scoped storefront tool bridges and bounded Material continuation fields so external MCP hosts can run the same seller Pages with least-privilege access.
- Measurement uses the existing
mcp_widget_opened,mcp_widget_load_failed, andmcp_widget_runtime_failedevents withwidgetset todemand-inbox,proposal-pass,product-marketing, orseller-dashboard. For the first 14 full days after release, compare with the preceding 14 days: acceptance is at least 90% retention of weekly unique identified seller accounts opening these Pages, with each Page’s load-failure rate and runtime failures per 100 opens no more than one percentage point above its baseline; report opens and unique seller accounts per Page as ongoing usage.
5.302.0 — August 26, 2026 at 12:05 AM UTC
- Seller logo tiles no longer squeeze a wide wordmark into the square tile. When a seller’s brand kit has no square mark, the tile shows initials on the brand color instead.
- Organizations enrolled in IU card charging can now rely on every successful payment remaining tied to the correct billing cycle, including after a retry or a charging rollback. Each payment is recorded as deferred when collected and applied to that cycle’s invoice. Scope3 recognizes collected revenue only after the cycle closes and the invoice is issued.
- Finance leaders and agencies gain a cycle-level audit trail without changing their billing controls or playbooks. Hands-on billing administrators can compare invoice payment applications with usage and the accepted plan when investigating a difference. Smaller teams do not need to learn a new workflow or take any action. This does not change IU prices, plan terms, seller listings, or anything buyers see about a seller.
- Murph now refreshes the approval queue when a saved review reference is stale instead of trying other identifiers. No seller action is needed.
- Setup no longer offers a “connect your ad server” step to sellers whose storefront sells through a third-party sales agent. If you told us how you sell, that choice now drives the setup checklist immediately — before, a fresh third-party-agent declaration could still show the ad-server chooser until a source was connected. Switching your answer still restores the ad-server step.
- Fixed connected Sales Agent discovery and diagnostics for sellers: synchronous wholesale product reads no longer register an async callback, and Refresh capabilities now refreshes the selected Source directly. No setup changes are required; retry the refresh if it previously returned Not found.
- FreeWheel inventory sources can now certify a single vendor-observed execution currency without replacing stored credentials, and advertiser rosters with more than 1,000 accounts can sync completely for authoritative live-buy mapping.
- Fixed the seller detail view in Sellers: it no longer shows two sections both named ” accounts” — your seller-account authorizations and the ad accounts discovered under them now have their own distinct headings. A seller you haven’t added also no longer shows a status chip that contradicted its “Available to add” line; the header now stays quiet until there’s something to act on.
5.301.0 — August 25, 2026 at 9:07 PM UTC
save_advertisernow acceptsisArchived(archive/restore) to archive (true) or restore (false) an advertiser through the v3 buyer surface. Cannot be combined with field updates.- Enrolled sellers can now use V3 MCP tools from their Seller Account to create and manage live campaigns against their own inventory. The tools keep Advertisers, Campaigns, Products, Proposals, and Media Buys within the organization’s own Seller Account; the native Campaigns workspace remains sandbox-only. Live launches still require source currency compatibility, account mapping, publisher authorization, creative approval, funding, standing, and any seller-side approval.
- Buyers can now filter seller search results by classification (
global_market_maker,regional_market_maker, ormarketplace_seller), marketplace readiness, channel, and region. Aget(kind:"seller")call also returns directed campaign subscription state inline (connection.directedCampaignSubscription) when an active subscription exists, so connection state is available in one call without a separate lookup. - Sellers: buyers can now see your classification, whether you are marketplace-ready, and which channels and regions you cover when browsing for sellers to work with. Keeping these attributes current on your storefront makes it easier for the right buyers to find you in filtered searches.
5.300.0 — August 25, 2026 at 6:07 PM UTC
- Official provider cards now show their current logos and recognizable brand colors more consistently. The update is automatic, with nothing for buyers to configure.
- Seller availability and setup requirements are unchanged; sellers do not need to take action.
- With
save_rfpon/mcp/v3, you can request seller JSON, buyer JSON, semantic JSON, responsive HTML, PDF, or editable PowerPoint files. Each file preserves the same products, prices, budget allocations, seller claims, and source citations. Existing RFP calls do not create files unless you request one. - OpenAI submission packages can now be downloaded when the published brand profile has no usable logo. The package includes every ready submission artifact, explains that logo files must be uploaded manually in OpenAI, and links directly from Discovery & distribution to the complete submission walkthrough.
- When a media buy fails because your creative doesn’t fit any of the selected packages, or is missing a required destination URL, the error response now names what to fix instead of the generic “source unavailable, try again later” message.
- The top-line
messageon the failedcreate_media_buyresponse is now a specific, actionable line when we can categorize the source’s rejection — the two categories today are a creative-size mismatch (the response names the sizes the selected packages accept) and a missing destination URL. Categories we can’t recognize still return the current generic message; nothing regresses. - The message is composed from a canonical template, never the raw source string, so no vendor-internal names travel through.
- A machine-readable, structured shape for this reason is on the way in the AdCP spec (adcontextprotocol/adcp#6833). This release keeps the wire contract unchanged and only improves the human-readable message — buyer clients that branch on error
codesee no change. - Your sales agent can now use
/mcp/v3to add and review Materials, complete RFP responses, and download proposals as JSON, HTML, PDF, or PPTX without a separate UI workflow. Every format preserves the commercial details and locale stored with the response. Buyer JSON is available for authorized linked exchanges and keeps the same locale; invalid locale tags are rejected before saving. Nothing to change on your side. - Buyer account administrators can now complete operator setup without leaving MCP. On
/mcp/v3, callget_statusand checkoperatorIdentity.usableForBuyingandoperatorIdentity.scopeStatusbefore starting discovery or other new buying work. Follow a returnedsave_buyer_operatornext action even when the saved domain is already usable. - If
usableForBuyingisfalse, an administrator must callsave_buyer_operatorwith the buyer’s real, non-platformoperatorDomain. Choosewhole_operator, or choosespecific_unitand provide a stableoperatorUnitId. Discovery and new buying operations remain blocked until the domain is confirmed. If the domain is usable butscopeStatusisunclassified, reuse that domain and choose its scope before new AdCP 3.2 provisioning whenlockedisfalse; existing buying remains available. Iflockedistrue, follow the support action fromget_status. No operator setup action is required when the domain is usable and the scope is confirmed. - The scope records whether the account represents the whole buyer organization or one stable operating unit. This tool does not grant login access, change account membership or the login organization, or alter seller inventory or storefront presentation. Buyers who do not administer account setup have no action.
- Snap packages can now target multiple countries when you provide exactly one language in
targeting_overlay.language. Interchange validates the language against Snap’s current targeting inventory, maps it to Snap during create and update, and preserves it in readback. Country changes also stop before mutation when a call or message ad makes that axis immutable. Brief discovery explains that multi-country requests require the AdCP 3.2 structured language discovery surface to be integrated. - Seller product setup and catalog contents are unchanged; this only changes how a buyer’s package targeting is validated and sent to Snap.
- Buyers now see a cleaner Sellers catalog: creative and other non-sales agents stay out of the list, and ordinary Marketplace sellers appear once they can transact. Curated Market Makers remain visible while setup is still in progress.
- For sellers, this means a storefront that is not a sales agent or is not yet Marketplace-ready no longer appears to buyers. Completing Marketplace readiness restores ordinary catalog visibility; curated Market Makers keep their visibility during setup.
- Anonymous buyer agents can now retain their first connected provider account using the standard untrusted registration credential. The activation flow no longer depends on an extra WorkOS permission that operators could not provision.
- Delivery reporting for buys on inventory sources that return cumulative totals without a per-day breakdown (such as GAM adapter sources) now self-heals after deploy. Affected buys catch up one reporting day per poll cycle automatically.
- Media Company campaign workspaces can now find the sandbox Advertisers they just created through the own-supply workflow. The roster remains limited to active sandbox Advertisers bound to the organization’s exact Storefront.
- Fixed Meta Engagement — Instagram Direct Conversations always failing with a generic “service unavailable” error when launching a campaign. Meta returns an extra, disabled default field on this ad type that our verification step didn’t expect and treated as a mismatch. Campaigns using this product now launch successfully.
- Fix signup flow for invited users signing in with Google or SSO. The invitation selection screen was not shown during OAuth/SSO signup, preventing invited users from completing the sign-up process and accepting their invitation.
- Proposal representations now persist in the private Material storage namespace authorized for the renderer, so requested HTML, PDF, and PowerPoint files can finish rendering and become available for download.
- Browse discovery now returns cached products from a prior discover_products call even when the wait tier differs, preventing empty results on quick browse polls. Product details lookup now works for wholesale storefront products that use prefixed IDs, returning details instead of a not-found error.
- Restored daily delivery reporting for media buys routed through a storefront source, and made a report that has fallen behind fill its missing days back in.
- Each missing day is now requested from the source on its own, oldest first, so a gap is filled in order rather than skipped past — a day only counts as reported once the source has actually returned it. Filling a long gap is gradual: expect up to a day or two for the oldest days to appear. If a day is still missing after that, contact support and we can re-collect a specific day on request.
- Fixed a bug where TikTok media buys with an explicit start or end date failed at execution with “The ad platform rejected the request as invalid.” The adapter was sending dates in ISO 8601 format but TikTok requires YYYY-MM-DD HH:mm:ss. Any TikTok buy with a scheduled flight date was affected. Retry affected buys after this release.
- Update the generated ChatGPT submission import to OpenAI’s current canonical schema URL and verify that every customer tool includes the required read-only, open-world, and destructive annotation justifications.
- MCP OAuth metadata now advertises the supported scope consistently, and resource-bound authorization events include enough diagnostics to distinguish an expired grant from a token issued for another MCP endpoint. OpenAI submission packages continue to rely on automatic OAuth discovery instead of duplicating those defaults in a setup file.
- Discovery & distribution now appears only for seller account admins. The page also describes the published account without storefront-specific language. Buyer admins continue to manage browser origins from API keys.
- Meta lead-to-message products (Meta Leads — Messenger, Instagram Direct, and WhatsApp) now return welcome-message-flow candidates in the
discover_products/get_productscatalog response, sowelcomeMessageFlowId(added previously) can actually be filled in with a real value. Previously the field existed but nothing surfaced a candidate to put in it, so every lead-to-message execution still failed with “requires ext.meta_welcome_message_flow_id from account resource readiness.” - Every Media Company can now test an own-supply campaign from its Seller Account without a separate Buyer account or sandbox entitlement. Create a sandbox Advertiser, build its Campaign and Creative, select Products and Signals from your own Storefront, run the no-spend Campaign, and inspect delivery through the V3 MCP workflow or shared Campaigns workspace.
- This does not enable production spend or access to another Seller’s inventory. Live Media Company-managed campaigns and client self-service remain separate, limited rollouts while their production workflows are completed. Independent Buyer Accounts and their existing sandbox workflows are unchanged.
- The setup and discovery assistant now speaks plain language instead of leaking engineering vocabulary. It names a choice and its tradeoffs — “you can pin which sellers this campaign buys from now, or choose them when you request proposals” — rather than surfacing raw field names like
sellerIds, and it no longer narrates internal plumbing (“the schema accepts it but it isn’t wired to the API yet”), which used to make it look like there was a setting you had to change when there was nothing to do. Nothing to change on your side. - Seller-agent search results now round-trip opaque inventory-source and work-item identifiers into follow-up reads, instead of returning false not-found errors for identifiers containing reserved URL characters. Nothing changes in your integration, and no action is required.
- On the Sellers widget, two states now use plainer, more accurate words. Sellers you haven’t added read “Available to add” instead of “Not enabled for your account” — you always had access; the seller just wasn’t added yet. Sellers that aren’t open for buying on the marketplace read “Not open for buying” instead of “Not transactable yet” — a neutral description, since this state also covers sellers that are unlisted, opted out, or paused, not only ones mid-setup. Seller note: this changes only how a seller’s marketplace readiness is worded to buyers; nothing about a seller’s actual status, presentation inputs, or incentives changes.
- Sellers enrolled in self-service buyers no longer see intermittent “Self-service buyers are not enabled for this storefront” responses on the join-link and sponsored-buyer surfaces. The enrolment check now reads a cached evaluation, so listing join links across an organization no longer depends on one live rollout lookup per organization member, and a momentary lookup failure no longer reads as a denial.
- Reconnecting a seller account can now target the exact authorization you meant to re-authorize, instead of always starting a fresh connection. If you authorize a different account than the one you asked to reconnect, we keep it as its own connection and let you know — we never silently swap it in.
- Buyer-agent builders can now retrieve up to 50 exact Sellers in one V3 search, keep the requested order, and see which IDs were not found. Existing Seller searches work as before, and no buyer setup changes are required.
- This read-only shortcut does not change seller visibility or require sellers to take action.
5.299.1 — August 25, 2026 at 12:42 AM UTC
- When your Seller Account has more than one inventory source, an ad-server currency problem on one managed source no longer stops your unrelated modular products from serving buyers. Those modular products remain discoverable and buyable while you repair the affected ad-server connection. Products from that connection stay unavailable, and the account remains blocked if no other buyer-visible inventory source is ready.
5.299.0 — August 24, 2026 at 11:39 PM UTC
- Technical sellers and API builders using v3 MCP can now reuse a Quick RFP response skeleton across repeated live RFP requests without reusing commercial facts. Set
origin.kindtoquick, provide a typedorigin.preset, and usepurpose: "live"; every response reloads current products, pricing, and availability and applies current request details. Existing Quick draft/evaluation calls and bounded legacy presets remain compatible but bypass caching, while non-Quick calls compose normally. Buyers receive the same response shape, representation, provenance, and current commercial facts on cache hits and full compositions. This beta capability is included with existing v3 Seller Account access with no new entitlement, package, or billing meter;receipt.cacheModereports each outcome. - Sellers using
/mcp/v3can now compare grouped RFP response quality, processing efficiency, and commercial outcomes withget_rfp_performance. Choose metrics, optional groupings and exact-match filters, and an inclusive UTC date range. Results distinguish unavailable values, report when small buyer or advertiser groups were withheld, and support snapshot-stable pagination. Every metric reports its own eligible, observed, and excluded population, named exclusion reasons, freshness, and finality. - The default report covers turns from live RFPs that reached a terminal response state. Add
draftorevaluationtopurposefor quality and efficiency analysis; commercial metrics always use released live turns. Usegetwithkind: "rfp"or"rfp_turn"for individual records. Existing integrations require no changes:record_outcomestill preserves any nonempty result. Aggregate reporting uses a closed, case-insensitive taxonomy after trimming whitespace and converting spaces and hyphens to underscores: accepted (accepted), won (booked,delivered,won,closed_won), lost (lost,closed_lost,rejected,declined,declined_fit,declined_policy), and pending (pending). Any other nonempty result makes affected commercial metrics unavailable withunknown_outcome. Money is unavailable if an included booked value is negative, nonnumeric, not exactly representable in its currency’s minor units, above JavaScript’s safe numeric maximum, lacks outcome-level currency, produces an unsafe aggregate, or mixes currencies. Valid values are summed as exact integer minor units before a safe numeric result is published. - Responses are capped at 40,000 UTF-8 bytes and 10,000 estimated tokens. The largest supported response—five rows, six metrics, three dimensions, maximum labels, filters, and cursor—measures 37,282 bytes and 7,136 estimated tokens. Buyers receive no new field, ranking input, or workflow; they may benefit only indirectly when a seller uses these facts to improve future responses. This capability is part of the existing authenticated Seller
/mcp/v3surface with no new package, entitlement, price, or usage meter. The Seller Analytics page is unchanged in this release and any future UI must render this contract without hidden calculations. See the RFP performance guide. - A currency-verification problem on one managed ad-server source no longer blocks campaigns against unrelated sales-agent inventory. Interchange now counts current public Agent products when deciding whether the affected ad-server source can be withheld on its own, so buyers keep seeing and buying healthy products while the Seller repairs that source. The unverified source remains unavailable, and this check remains blocking when no other buyer-visible source can serve.
5.298.0 — August 24, 2026 at 10:52 PM UTC
- Prevent concurrent provider-account binding requests from failing while an adapter credential mirror is in progress.
5.297.1 — August 24, 2026 at 10:04 PM UTC
- Modular inventory-feed products now preserve their guaranteed delivery terms when storefronts compose RFP responses, so eligible products are no longer omitted from proposals.
5.297.0 — August 24, 2026 at 8:52 PM UTC
- You can now choose how every buyer joining a new sponsored-buyer invite link is billed: Interchange-cleared or Seller direct. Interchange-cleared billing uses the buyer’s existing invoice arrangement or deposited funds; with Seller direct billing, you invoice the buyer under your own agreement and Interchange moves no media funds. The choice appears on the invite link and buyer roster. Sponsored buyers see the resulting readiness path but cannot change your choice. Existing links and links created without a choice remain Interchange-cleared, so you do not need to update them.
5.296.0 — August 24, 2026 at 8:37 PM UTC
- Sellers can now use
save_materialto register a PDF, presentation, image, site, or spreadsheet without reducing it to extracted text. Interchange keeps the original upload or source reference in a new immutable Material revision and processes supported pages, slides, sheets, text, tables, and visual assets with their source locations and reuse rights. For an upload, provide its digest and metadata, upload the bytes to the returned expiringPUTURL, then callreplace_sourcewith the returnedassetRef. Existing Material calls require no changes. get(material)returns bounded rendition summaries by default. Request semantic blocks, visual assets, extraction diagnostics, or expiring source access explicitly; large collections page independently, and large binaries stay out of model context. Unsupported or degraded extraction is reported instead of presenting the Material as complete, and a source refresh retains the previous revision and its evidence.- This release prepares Material for future proposal composition. It does not change proposal rendering, and Material candidates still cannot update Products, inventory sources, pricing, or Business Rules. See Seller V3 workflows for the upload and retrieval flow.
5.295.0 — August 24, 2026 at 7:14 PM UTC
- Authenticated seller assistants and API clients can now save and read RFP work through
/mcp/v3. A seller can submit a buyer request, read the saved request-to-response record while it moves from queued or processing to a final response, add feedback as a new follow-up, and record the commercial outcome. Each turn is a locked record of one request and its generated response; revisions create another turn instead of editing the prior one. - No action is required for sellers using existing Interchange pages today. Those pages do not show this workflow yet; direct integrators can use
save_rfpplussearch/getforrfpandrfp_turn. The RFP response is saved directly in this workflow, so there is no separate proposal-save call for sellers to run. See the Seller RFP lifecycle guide for catalog prerequisites, terminal-state semantics, revisions, and audit reads. - Rollout: this ships ungated to authenticated seller accounts because the change only adds tenant-isolated server facts and portable tool access; existing account authorization is the exposure boundary. Removing the RFP tool/read entries from the seller tool registry is the kill switch while UI adapters remain deferred.
- Monetization: no pricing or packaging change in this slice.
- Measurement: track RFP create, revision, replay, conflict, terminal response state, response latency, representation requests, feedback, and recorded outcomes before expanding the workflow beyond the headless contract.
- Facilitated Agreement Terms v1.1 is now the current version, effective 2026-08-24, and governs transactions between buyers and sellers on the Platform. Read it at interchange.io/agreements/facilitated-agreement-terms.
- No action is needed. Scope3 gives 30 days’ written notice before updating the Facilitated Agreement Terms; continued use of the Platform after that notice period is acceptance of the update. A Transaction Order (the agreement for an individual deal between a buyer and seller) formed before an update’s effective date stays governed by the version in place when it was formed. v1.1 applies only to new Transaction Orders and new Relationship Agreements (the standing agreement between a specific buyer and seller) formed on or after 2026-08-24.
- Buyers: v1.1 sets your payment timing, invalid-traffic credit treatment, and measurement/dispute process for every new transaction. Nothing changes about what you do today.
- Sellers: v1.1 incorporates two new documents by reference. Marketplace Policies sets out how your standing is tracked (delivery performance, dispute history, buyer ratings, IVT rates) and what happens if it falls below the required level. The Payment Operations Schedule spells out how Scope3 recovers invalid-traffic credits from your remittance. If a clawback isn’t resolved within 30 days of notice, Scope3 may suspend you from accepting new Transaction Orders — Transaction Orders already in place keep running.
- You can now read a preview of Terms of Service v4.0 at interchange.io/agreements/terms-of-service/v4-0. It replaces the current percentage-of-transaction fee model with a flat Platform License Fee plus metered Usage Fees. It is not yet active: the current Terms of Service (v3.0) still governs, unchanged, until v4.0 is separately made current with its own notice.
- Questions about any of these documents: support@scope3.com.
5.294.0 — August 24, 2026 at 4:34 PM UTC
- If a buyer’s media buy fails on your ad server side with an order that couldn’t be cleaned up, a retry of the same buy will no longer create a second live order on the ad server. The unresolved order surfaces in your Pending Operations list, where you can archive or manually resolve it — that’s the single place to close it out, and once you do, buyer retries succeed normally.
- For buyers: if a retry hits this state, the response says the source is temporarily unavailable and the buyer can retry — no duplicate orders are created on the ad server side.
- Sellers can now manage storefront visibility, public-hosting and CNAME status, OpenAI verification, and the submission package together in Settings → Discovery & distribution. Submission packages use the currently published public storefront and its brand logo; existing sellers can continue their current setup, and no action is required unless the page shows a status that needs attention. Buyers will find browser-app origins in the same section instead of API keys; existing origins and API keys are unchanged.
- Official ad-platform sellers now show their provider’s brand color on storefront identity and discovery cards too, matching the Sellers view.
- Fix Meta Engagement — Instagram Direct Conversations failing every
execute_campaigncall once the connected Instagram account is authorized. The adapter no longer asks Meta’s ad set to carry an Instagram identity field it doesn’t support for this destination; the identity now travels only on the ad creative, matching Meta’s Click-to-Instagram contract. - The Media Buys page on your storefront no longer offers a clickable timeline for buys that live only in your ad server — those that were trafficked directly and never routed through Scope3. The row still shows the buy and its ad-server id so you can find it on your side, and calls out that its full history is in the ad server, instead of opening a timeline that reads “No buy with id X exists on this storefront.”
- execute_campaign now works for media buys targeting external storefront sales agents such as pubX. Previously, these campaigns failed with a “Could not verify compatible account modes” error and could not be executed. No changes are needed on your side; campaigns that were blocked will now execute successfully.
save_campaignwithdesiredPhase: "active"now requiresconfirmLaunch: trueandexpectedRevision— calling withoutconfirmLaunch: truereturns a preview showing campaign name, budget, flight dates, media buy count, and revision. The confirmation call requiresexpectedRevisionfrom the preview to detect any concurrent changes between preview and launch.- New tool
get_proposals_diagnosticreturns sanitized per-seller outcome detail from arequest_proposalsexecution — allowlisted error codes, outcome counts, and media buy IDs — to help diagnose why sellers did not respond with proposals. - When your agent creates its first advertiser mapping in its Agent Registration sandbox, Interchange retains the registration and connected provider account beyond the 30-day trial—no WorkOS claim required. The retained sandbox is limited to that one provider account and remains zero-spend; paid capabilities, media buying, and customer-wide access still require customer authorization.
- In v3 MCP, when you add Product marketing material with
save_material,get(material)returns suggestions with the exact source passage behind each one. Each suggestion names the save tool that owns the proposed change. Nothing changes in your selling setup until you confirm a writable suggestion through that tool. Private advertiser material stays limited to that advertiser. After a confirmed save,get(material)shows which saved record came from which source revision and suggestion. - Suggestions that cannot safely preserve a complete Playbook or Business Rules document are marked as unable to save instead of replacing the document with a single extracted line. If the named tool saves successfully but the Material receipt is interrupted, repeat the same confirmation to finish the receipt; the saved record is not created again. If the service cannot tell whether a save finished, it stops instead of retrying and tells you to verify the saved record. A corrected suggestion can then be confirmed once without hiding the earlier attempt. Disconnecting after a save starts does not cancel or duplicate it.
- If a Playbook or Business Rules confirmation saves only some of the requested parts, the response lists what is already live and what remains. Save only the remaining parts through the same named tool. Then use
save_materialwithaction: "reconcile_candidate", the returnedapplicationId, and the saved record in place to finish the Material receipt. The service reads that record from its named save tool and refuses identities supplied by the caller. This step does not repeat the save, and repeating it returns the same receipt. Suggestions cannot be corrected while their save is still running or waiting for verification. A late success is retained, and receipt retries never repeat the seller-setting change. If the named save or its verification exceeds the service deadline, Interchange stops waiting, records the result as uncertain, and does not automatically send the seller-setting change again. During an incident, operators can pause suggestion confirmations without hiding your Material, evidence, or review results. - Buyers do not see Material suggestions or confirmation receipts. Confirmed changes affect buyer-facing behavior only through the existing Seller record and workflow that the named save tool already controls.
5.293.0 — August 24, 2026 at 2:51 PM UTC
- If your Seller Account is enrolled in this V3 preview, you can now test a no-spend campaign against your own wholesale Products from setup through reporting. In V3, create and inspect Advertisers, Campaigns, and Creatives; browse Products and their available targeting Signals; request and inspect Proposals or stage a Media Buy directly from a Product; activate the Campaign in the sandbox; and confirm whether the Media Buy and its targeting were forwarded.
- You can also query Campaign delivery by selecting the metrics and groupings you need for an inclusive date range of up to 90 days. Results remain confined to Advertisers, Campaigns, and Media Buys that use Products from your Seller Account.
- The preview cannot spend or access another Seller’s inventory. Enrolled Seller Accounts can use the organization workspace selector to move between Inventory and a sandbox-only Campaigns workspace; Agents appears there when separately enabled. Marketplace, Connections, Buyer Setup, and production Advertisers are not included.
- This preview has no billing impact and does not introduce a billable surface. It does not change what any external buyer sees about your Seller Account or inventory.
5.292.0 — August 24, 2026 at 2:15 PM UTC
- Official ad-platform sellers (Meta, Google Ads, LinkedIn, Pinterest, Reddit, Snap, Spotify, TikTok, Amazon, OpenAI Ads) now always display their provider’s curated brand color on the Sellers and Connections tiles. When the live brand lookup can’t confirm the provider’s logo, the tile shows the provider’s initials on that brand color instead of a blank black tile. These built-in adapter tiles always use the provider’s canonical identity — any operator-stored colors or logos on an adapter row are not used, so a stale or mismatched asset can never render under a provider’s name. Publisher storefronts and all other non-adapter sellers are unchanged.
- If your buyer operator identity is incomplete, finish Buyer Setup step 1 before starting new discovery, account, or media-buy operations. No action is required when your identity is already correct or for existing media buys. Seller-facing presentation and ranking are unchanged.
- The Connections view no longer flashes an old layout while loading.
- Meta lead-to-message media buys (Meta Leads — Messenger, Instagram Direct, and WhatsApp) now accept a
welcomeMessageFlowIdfield on product selections so buyers can specify the welcome message flow used to greet new leads. PasswelcomeMessageFlowIdincreate_media_buysselections,add_discovery_productsselections, orupdate_media_buyproduct entries, using one of the welcome-message-flow candidates returned by account resource readiness in the discovery/get_productsresponse — previously there was no way to supply this value and execution always failed. - Creative synchronization now keeps a creative in Processing when a seller only confirms that it was created, updated, or unchanged. The creative becomes Approved only after the seller sends an explicit approval. No buyer action is needed while the final status callback is pending; if no final status arrives within the normal operation timeout, retrying the synchronization starts a new attempt safely.
- The Sellers page now tells you what to do instead of showing a bare status word. A seller you haven’t enabled shows why — excluded, not yet transactable, out of your advertisers’ markets, or simply not turned on — and opening it lets you enable it, instead of reading “Inactive.” Market makers now show as one combined list instead of two, since which kind a seller is never changes what you can do about it. In a seller’s detail view, each platform account you’ve authorized gets its own row with its own reconnect and remove controls, so removing one authorization can’t be confused with another.
5.291.0 — August 24, 2026 at 12:50 PM UTC
- Meta Instagram Direct media buys (Instagram Direct Conversations, Instagram-based Lead Generation) now accept an
instagramActorIdfield on product selections so buyers can specify which Instagram account to use when the connected Meta ad account has more than one authorized Instagram account. PassinstagramActorIdincreate_media_buysselections,add_discovery_productsselections, orupdate_media_buyproduct entries. When the account has exactly one authorized Instagram account, the field remains optional and the server now selects it automatically — previously, execution always failed with an unhelpful error even in that case. - Buyers managing creative and AI provider connections in the new Sellers view again see Update API key for providers that authenticate with an API key. The action opens the existing secure connection page and selects the API-key flow even when the provider also offers OAuth; the Sellers widget never handles or returns the key.
5.290.0 — August 24, 2026 at 11:31 AM UTC
- After you add or remove account access with a connected provider, refresh the account list without reconnecting.
- If you use the new Sellers view, choose Refresh accounts next to Reconnect. Your current sign-in stays in place. Accounts you can no longer access remain in history but cannot be used for new activity. If the provider requires you to sign in again, Sellers tells you to reconnect.
- Teams that automate connection management can call the new refresh operation through REST or MCP. The response distinguishes temporary provider failures from grants that require reconnection, so agency and enterprise workflows can retry safely or send the right person to reconnect.
5.289.1 — August 24, 2026 at 9:29 AM UTC
- Fixed the Discovery settings screen for the Interchange first-party account so its platform-managed publication can be loaded and configured.
5.289.0 — August 24, 2026 at 9:04 AM UTC
- Seller operators using the v3 MCP surface can now teach their seller agent by saving source materials from URLs, uploaded files, crawl manifests, inline notes, or historical references, then search and read those Materials by name, source, processing state, and relevance tags. This is for seller-side setup and catalog-quality work in agent or script integrations; buyers do not see a different proposal or product presentation from this slice, and existing Product Marketing upload flows continue to work.
- This release does not add a new billable package or pricing meter. Rollout is ungated because the capability is limited to authenticated seller v3 MCP calls and does not expose a new UI; existing upload and content flows remain unchanged while background Material processing can be disabled operationally without deleting saved Materials. Adoption will be measured by
save_material,search(kind: "material"), andget(kind: "material")usage, created Material and source-revision counts, and ingestion terminal-state rates forready,partial, andfailedrevisions. - In buyer discovery, official adapter Storefront cards now show the channels each provider actually supports instead of outdated channel settings. Buyers see the correction automatically—for example, Google Ads no longer appears as social inventory and Spotify no longer inherits an unrelated social channel. Adapter operators do not need to change their Storefront settings.
5.288.6 — August 24, 2026 at 8:05 AM UTC
- OpenAI Ads product discovery now returns buyable products instead of discarding them when validating reporting metrics. Delivery reports include canonical cost-per-click and CPM values for totals and breakdowns.
5.288.4 — August 24, 2026 at 7:13 AM UTC
- Keep slow seller products discoverable when an optional forecast timestamp is an empty object, including cached and in-flight discovery executions. Production verification now correlates asynchronous dispatches by their durable trace and completed request window instead of requiring the outbound request ID to equal the buyer request ID.
5.288.2 — August 24, 2026 at 6:34 AM UTC
- Discovery cards for official adapters now show buyers the advertising platform they represent, such as Meta or TikTok, while keeping the operator account as separate provenance. Sellers using an official adapter should expect buyers to see that platform name; there is nothing to change in the storefront.
- Online-video sellers can now be reviewed in OLV as a channel separate from display and connected TV. Existing country markets start closed. Marketplace Governance must open a market using public supply evidence before an eligible seller can appear there. The seller’s reviewed scope and commercial entitlement must also include OLV; approval for display or connected TV does not carry over. Buyers and sellers do not need to configure anything for this change.
- Teach V3 agents to list the Seller’s products with the typed
wholesale_productsearch and to avoid invalid empty search calls. - The first-party Interchange account now shows Discovery settings instead of the retired ChatGPT-specific setup screen. Discovery remains admin-only and its management API now accepts that account’s buyer-classified administrators while continuing to reject other buyer accounts. Publications continue to use the brand-derived identity at
api.interchange.io. - Official provider connections in Sellers now show the provider’s name and logo instead of the connector operator’s brand. Buyers see the correct provider identity, and sellers operating these connections are no longer presented as the provider. Existing connections update automatically; no action is required.
5.288.1 — August 24, 2026 at 5:34 AM UTC
- Keep seller inventory discoverable when an optional forecast timestamp arrives as an empty JSON object, while preserving the seller’s original wire payload for any later purchase.
5.286.0 — August 24, 2026 at 3:16 AM UTC
- Your Buyer Account Mapping page is now a Buyers directory. Each buyer is one row; expand it to see the advertisers they buy for. Requests waiting on your review open a panel showing the policy outcome, who handles billing, and any CRM match, so you can accept or reject the buyer in place. Accepting doesn’t wait on account mappings. If a connected sales agent manages buyers for your storefront, the page says so and shows what that agent has reported instead of asking you to act. Each inventory source appears with a refresh action, and search, CSV export, and the import feed work as before. This view is enabled per account; until yours is enrolled, the page you see today is unchanged.
- Seller admins can now publish a storefront Discovery Card from a dedicated
- Discovery settings section. Identity, colors, and generated app icons follow
- the storefront brand automatically, while the first-party storefront is served
- from
api.interchange.iowithout DNS setup. - To use it, open Storefront settings → Discovery, choose private,
- Interchange, or public visibility, and publish. The prior one-off ChatGPT
- category, support/legal URL, and icon-upload fields are no longer part of this
- workflow; existing V1 drafts keep their reusable subtitle, identity overrides,
- and generated assets while those channel-specific values are ignored.
- The direct user is a seller admin. Buyers and buyer agents are the indirect
- audience because they consume the resulting verified identity and public card;
- the removed ChatGPT category does not control Discovery ranking or matching.
- There is no new monetization, entitlement, or charge associated with this
- settings surface.
- Public hosting is deliberately admin-gated and limited to Customer 1 at
api.interchange.io; other customers can still publish private or Interchange- visibility. No feature flag is required for that narrow rollout. Operators can
- withdraw a card by returning it to private visibility, and the hostname service
- fails closed on suspension, revocation, or expired verification. During a
- replacement publish, the last verified revision stays live until the new one
- passes verification.
- Rollout health is measurable from publication/revision counts, hostname
- activation and verification status, challenge status, and the existing audit
- records. Initial acceptance is one active Customer 1 public origin with all
- public routes resolving the same verified revision; adoption is the count of
- seller-initiated publications and revisions from the Discovery settings
- surface.
- Keep seller inventory discoverable when a forecast instant arrives in an unambiguous single-value JSON wrapper, while preserving the seller’s original wire payload for any later purchase.
5.285.0 — August 24, 2026 at 1:08 AM UTC
- Buyer discovery now accepts unambiguous ISO forecast timestamps and treats null optional timestamps as absent while preserving the original seller payload for forwarding.
- Your proposal passes now show the pitch sentences that were dropped because nothing backed them: a “What didn’t make it” section lists each one with the facts it was judged against. You can resolve each sentence — mark it a fair reading of those facts, confirm the drop was right, or teach the missing fact in your product marketing and link it once confirmed. Resolving only ever adds to your product marketing; the check itself never loosens. Nothing to do unless a pass shows the section.
5.284.3 — August 23, 2026 at 11:41 PM UTC
- Buyer discovery now accepts seller forecast timestamps that use an equivalent RFC 3339 timezone offset while preserving the original seller payload for forwarding.
5.284.0 — August 23, 2026 at 9:27 PM UTC
- The proposal pass now shows which sentences the truth gate dropped and the facts each was judged against.
5.282.2 — August 23, 2026 at 7:45 PM UTC
- Buyer developers using REST or MCP
get_productscan now setext.interchange.response_contracttointerchange_product_compatibility_v2to include products from verified AdCP 2.x sellers. These products markreporting_capabilitiesunavailable instead of inventing reporting details. Existing calls keep the original required-field response schema. Sellers on a verified 2.x contract can become visible to opted-in buyers without changing purchase forwarding; returning the current reporting block removes the compatibility marker.
5.282.0 — August 23, 2026 at 7:05 PM UTC
- If your buyer account is enrolled in the alpha canary, you can turn a ready destination video rendition into one stable, revocable VAST 4.2 URL for ad-server trafficking. Google Ad Manager is the first canary destination; FreeWheel is not yet certified for this path. Raw video upload remains included, and there is no charge for the canary.
5.281.1 — August 23, 2026 at 5:16 PM UTC
- Seller account reconnects now show progress while authorization opens and display a retryable error if the provider handoff cannot be launched.
5.280.0 — August 23, 2026 at 4:03 PM UTC
- Storefront administrators can now manage browser origins directly beneath
- member API keys in API Access. Empty API-key and browser-origin states use a
- more compact layout so the remaining credential sections stay visible.
- Published Discovery Cards can now have a verified public web address with a
- shareable page, structured JSON, and an embeddable view. Interchange’s
- first-party card uses
api.interchange.io/discovery, while a dedicated customer - hostname can serve its card at the hostname root. The same verified hostname
- can support OpenAI Apps domain verification at OpenAI’s required challenge URL.
- Existing storefronts do not change automatically: publication and hostname
- activation remain an explicit setup step. Once active, Interchange rechecks the
- hostname and current published revision; the public card stops serving if that
- verification expires or no longer matches.
- Meta buyer connections now use the user-token Business Login configuration so approved Marketing API permissions are present during account discovery.
5.279.0 — August 23, 2026 at 1:37 PM UTC
- Buyer account requests now land in a review queue with the evidence you need to decide: which buyer and brand are asking, how the account will be billed, and any match against your CRM. Accepting a request is what grants access — a pending request no longer implies authorization — and your existing pending reviews carry over unchanged, with the same review IDs and nothing for you to redo. The Buyer Account Mapping view now shows which accounts were observed from each ad server or sales agent, how fresh that information is, and which actions are actually yours to take: where an external sales agent runs your storefront, that agent keeps ownership of acceptance and billing, and actions that belong to the agent are never offered to you. If an account list from a source comes back incomplete or fails, you keep the last complete picture instead of a partial one, with its age shown.
- For buyers, nothing changes about how account requests are made:
sync_accountsworks as before, and the releasedgrantIdandapprove_interchangeAPI spellings remain valid. A request may now show as pending until the seller (or the seller’s sales agent) accepts it, because access is granted at acceptance rather than at request time.
5.278.5 — August 23, 2026 at 1:10 PM UTC
- Fixed seller join-link signup so sponsored buyers keep their join context through email checks and OAuth, skip non-buyer account choices, and route to seller-specific admission or seller-branded waitlist state instead of the generic buyer waitlist.
5.278.1 — August 23, 2026 at 11:30 AM UTC
- Fixed proposal pitches sometimes composing with no argument even though the seller’s storefront had real inventory and a Playbook configured — a claim citing the seller’s Playbook is now checked against the Playbook’s own text, instead of an empty placeholder that made such a claim impossible to verify.
5.278.0 — August 23, 2026 at 11:07 AM UTC
- Product discovery now keeps compatible seller products visible while preserving the seller’s exact original response for downstream buying.
- Buyers: No request changes are needed; compatible inventory no longer disappears after successful discovery.
- Sellers: No configuration changes are needed; catalogs served by agents with older protocol response fields are now presented completely to buyers instead of silently losing compatible products.
5.277.0 — August 23, 2026 at 10:21 AM UTC
- Buyer product discovery requests now use the buyer’s declared operator domain when contacting sellers. Sellers now see the correct requesting buyer operator instead of the generic Interchange fallback when the buyer has declared one. Seller storefront previews retain their simulated Interchange preview identity, and buyers without a declared operator domain continue to use the existing platform fallback.
5.276.0 — August 23, 2026 at 10:01 AM UTC
- Meta Business Login connections now request the valid Marketing API permissions needed to discover the selected ad account while excluding the unsupported Instagram permission.
5.275.1 — August 23, 2026 at 9:39 AM UTC
- Keep valid publisher-hosted formats available while the community registry is still checking a newly discovered publisher, so Property Roster refreshes do not temporarily replace the live catalog with an empty indexing placeholder.
5.275.0 — August 23, 2026 at 9:13 AM UTC
- If readiness withholds a managed ad-server source, refresh or reconnect it from Inventory Sources so its execution currency can be verified. Storefront readiness now checks each source’s currency contract before allowing new buys; sources with an empty, incompatible, or temporarily unavailable contract are withheld. Buyers will see fewer products while that source is unavailable, or their buy will be blocked when no other buyer-visible source can serve.
- Keep unchanged progressive discovery polls idempotent, and make explicit
refresh=falseavailable-account reads return cached data without contacting or mutating the source. Existing live-refresh behavior remains the default. - Seller impact: Your storefront presentation, account approvals, and available inventory remain unchanged, and buyers using the normal flow continue to see live state. Only buyers who explicitly request
refresh=falsemay see cached account data that is stale or empty. You do not need to change your setup or tune your storefront.
5.272.2 — August 23, 2026 at 7:31 AM UTC
- Sign-up and password reset now show the same live password guidance and accept strong passphrases and password-manager-generated passwords without arbitrary character-composition rules.
- Account administrators can reach browser-origin controls at the top of API
- Access even when the member API-key provider fails. The embedded API-key error
- state now uses its content height instead of filling the settings pane.
5.272.1 — August 23, 2026 at 7:11 AM UTC
- Meta connections now use the configured Facebook Login for Business grant instead of requesting a retired Instagram permission directly.
5.272.0 — August 23, 2026 at 6:42 AM UTC
- Buyer connection handoffs now show secure API-key entry when provider OAuth is unavailable.
- Sellers can now use
save_selleror the Storefront update API to publish or opt out of Marketplace discovery after Scope3 approves their Storefront. Opting out removes the seller card from buyer discovery and automatic selection without changing its eligibility; no action is required to stay published. Buyers will see only seller cards that are both Scope3-approved and published, and a Market Maker label applies only in approved markets and channels with active commercial or Scope3-granted Critical Supply access. Related businesses appear as separate seller cards even when one organization contract covers them, so each card keeps its own approved coverage. Production writes remain disabled until every web and worker process is running these rules.
5.271.0 — August 23, 2026 at 6:12 AM UTC
- Murph’s answer no longer streams in real time while it’s being generated. An earlier release added this behind a rollout flag, but it could let unredacted or in-progress text reach the chat before Murph’s safety and redaction checks finished running. We removed it — Murph’s answer still appears in full as soon as it’s ready and checked, the same as before that release.
5.270.1 — August 23, 2026 at 5:28 AM UTC
- Creative readiness now reflects two separate checks: the seller’s review of
- the exact creative content, and confirmation that every required destination
- accepted its current media-buy assignment. Existing requests and setup do not
- change.
- Enterprise brand buyers. A creative reported as
approvedby sync_creativesnow provides stronger governance evidence: the seller reviewed- that exact content and every required destination accepted its current
- assignment. No strategy, partner instruction, or setup change is required.
- Agency and hold-co buyers. A reused creative may remain Pending separately
- for each media buy while its required destinations accept the current
- assignment. The seller’s decision carries over when the content and seller are
- unchanged. When
sync_creativesreportsapproved, delivery was accepted for - that assignment; it does not mean serving or impressions have begun. No
- playbook or setup change is required.
- Power buyers and technical integrations. No request changes are required.
sync_creativesresponses and task notifications keep a creative Pending until- the seller approves its exact content and every required delivery destination
- accepts it.
- SMB buyers using chat or campaign widgets. A creative may stay Pending
- longer while these checks finish. This is expected, and no action or setup
- change is required.
- Sellers. The Approvals widget and creative review queue now show changed
- creative content as a separate review. Approving one version never approves a
- later content change. Identical content keeps its existing decision, so
- unchanged creatives do not return to the queue.
- Some older approvals did not record enough information to match the decision
- to one exact content version. Those affected creatives will appear once as
- Pending after this release. Open the Approvals widget, filter to Pending
- creative reviews, and approve or reject each resurfaced item. Until reviewed,
- the creative cannot deliver and its buyer sees it as pending. There is no
- separate deadline; this one-time check does not recur for unchanged content.
5.270.0 — August 23, 2026 at 5:02 AM UTC
- Navigation within Interchange now stays in the app shell, preserving account context and reducing page reloads as you move between pages.
5.268.0 — August 23, 2026 at 3:58 AM UTC
- Account admins can now prepare a customer-branded ChatGPT app in Settings → ChatGPT app. Add the approved listing and icons, verify a dedicated hostname, publish the OpenAI verification token, and download the submission bundle. Your organization must still submit the bundle to OpenAI; Interchange does not submit or publish the app.
- In ChatGPT, buyers with existing Connections access can now open Connections, and sellers can open Approvals. Existing ChatGPT connections need no setup changes, and buyer-visible seller inventory is unchanged.
- For MCP integrations,
open_pageno longer advertisessellersorapprovals. Useopen_connections_pageoropen_approvalsfor those Pages. Direct calls to the old destinations remain compatible, and all otheropen_pagedestinations are unchanged.
5.267.0 — August 23, 2026 at 3:24 AM UTC
- Buyer Account Mapping can now explicitly bind an approved advertiser relationship
- to one inventory source, or confirm that a source-native account is not required.
- The version-guarded decision controls whether that source can offer products and
- accept buys for the approved account.
5.265.0 — August 23, 2026 at 1:35 AM UTC
open_proposal_passnow explains WHY no pitch composed, not just that one didn’t. When a proposal pass’s pitch resolves absent because the model’s draft answered but nothing survived grounding (pitchAbsentReason: nothing_grounded), the pass now carries apitchAbsentDetailalongside it — counts only, never claim or brief text — showing how many of each ingredient kind (products, inventory bundles, signals, pricing facts, affordances, brief references, playbook, corpus) fed the pass, and how many claims the model drafted versus how many were dropped by citation grounding and by the entailment check. Every other pitch status is unaffected, and a pass without this diagnosis simply carriespitchAbsentDetail: null, as before.- Demand now keeps the buying operator and advertiser relationship visible when
- a brief uses an approved linked account. The onboarding staging walkthrough
- also proves that exact account through the brief, buy, creative, delivery, and
- seller-operated completion.
5.264.0 — August 23, 2026 at 1:10 AM UTC
- Murph can stream its answer as it’s generated instead of waiting for the full response, for accounts enrolled in the rollout.
5.263.3 — August 23, 2026 at 12:42 AM UTC
- Fixed brief runs (
test_storefront_brief,run_practice_brief, andconfirm_uploaded_brief) on a curator storefront — one that resells other Interchange storefronts’ inventory instead of its own — losing access to that resold inventory whenever the run named a specific buyer’s operator/brand domain. These runs now compose from the same catalogue whether or not a buyer domain is supplied, so an uploaded RFP response also draws on resold inventory; live buyer discovery is unchanged.
5.263.2 — August 22, 2026 at 11:51 PM UTC
- Seller account-mapping links now open the Buyer Account Mapping Page instead of being discarded by the Murph route.
5.263.1 — August 22, 2026 at 11:38 PM UTC
- Discovery and purchase now keep products that contain at least one usable creative format even when another legacy reference or sibling product cannot be translated. Unsupported references remain visible as non-blocking Seller Setup diagnostics, and
display_160x600now maps to a canonical 160×600 image instead of suppressing the product.
5.263.0 — August 22, 2026 at 11:03 PM UTC
- Creative-library cards and API summaries now identify an HTML5 ZIP as the
- bundle creative instead of classifying it by its backup image.
- Meta accounts with a large number of upcoming, promotable Facebook Events
- could see the Meta Engagement — Event Responses product’s Event
- candidate list truncated with no way to reach the rest.
get_productsnow - returns Event candidates one page at a time and names
meta_after_event_id - as the field to pass on a follow-up call to continue, matching how Meta
- Sales — Website Catalog Sales already paginates its product-set candidates.
- Accounts with 200 or fewer eligible Events are unaffected.
- Fixed “Try a brief” from the product-marketing Teach page sometimes showing no pitch even though the identical brief produced a full pitch through brief testing — the practice run and the test run now compose the pitch from the same brief facts.
5.262.10 — August 22, 2026 at 9:25 PM UTC
- Product discovery continuation requests now return a retryable temporary
- unavailable response when loading the saved query exceeds its preparation
- deadline, instead of reporting an internal server error.
5.262.1 — August 22, 2026 at 3:40 PM UTC
- Before this fix, buyers connecting a Meta ad account with more than one
- Facebook or Instagram Shop-enabled Page had no way to tell Interchange which
- Page’s Shop to buy against when using **Meta Sales — Facebook or Instagram
- Shop Purchases**. The product’s readiness now names
page_idas the field - to set, matching how every other Meta product with more than one eligible
- account resource already works. Accounts with a single eligible Shop-enabled
- Page are unaffected.
5.260.5 — August 22, 2026 at 12:36 PM UTC
- Buyers can keep discovering and purchasing valid products from an active seller catalog while other products need format repair; sellers do not need to republish the storefront.
5.260.4 — August 22, 2026 at 11:24 AM UTC
- Upload an HTML5 banner ZIP in buyer chat and Murph keeps its files together as
- one creative. It reads the banner size and keeps a matching backup image when
- included. Before syncing the media buy, add the destination to the creative’s
- click-through URL field. If the bundle does not meet a seller’s HTML5
- requirements, Murph names what is blocking delivery so you can correct the ZIP
- or choose a compatible placement. Sellers receive a complete banner package
- they can serve as intended.
- Keep external sellers request-eligible when cached products need format repair, and use trusted cached seller projection catalogs to interpret private legacy formats without a live setup probe.
5.260.2 — August 22, 2026 at 10:42 AM UTC
- Buyer and seller MCP connections now keep each credential restricted to the
- exact Interchange endpoint it was authorized to use. After rollout, existing
- ChatGPT, Claude, and other MCP connections using legacy credentials will stop
- at their next token refresh and require a one-time reconnect. Reconnect and
- sign in from that client’s connector settings when prompted; until then, the
- legacy connection remains disconnected. New and reconnected clients use
- resource-bound, rotating credentials automatically.
5.259.1 — August 22, 2026 at 9:14 AM UTC
- Buyer discovery no longer waits for storefront readiness calculations or source-account setup before contacting sellers. Sellers’ already-published products become available to buyers promptly; this does not change product contents, ranking, or seller setup, and no action is required.
5.259.0 — August 22, 2026 at 9:00 AM UTC
- Buyer API clients can now configure third-party impression and click trackers for an advertiser or campaign through the V2 tracking-config endpoints or the V3 MCP advertiser and campaign nouns. Send the vendor URL to the advertiser or campaign tracking field; the response retains that exact input, returns its validated AdCP-macro translation, and shows which advertiser defaults a campaign inherits or overrides.
- Existing integrations may keep sending the original
name,url, andtracker_typeshape; stable tracker identity and retained vendor input are recovered automatically. Nothing changes in creative delivery yet. Creative mapping, preview, and upstream adapter expansion remain separate follow-up work.
5.258.0 — August 22, 2026 at 8:39 AM UTC
- The white-label ChatGPT guide now uses the app owner’s private-label identity
- and exact assigned MCP URL throughout Developer-mode setup, links an example
- review video, and separates the generated submission bundle from the publisher
- steps that still require manual approval.
5.256.0 — August 22, 2026 at 7:41 AM UTC
- Use the new white-label ChatGPT app guide to
- connect Interchange in ChatGPT Developer mode, confirm the intended account,
- record review evidence, and prepare a public-submission handoff. This is private
- testing: a separate public customer-branded app still needs either a
- customer-controlled MCP hostname or an explicit arrangement approved by
- Interchange and OpenAI.
- You can now upload a CM360 tag sheet in buyer chat and keep its placement names,
- declared sizes, and raw tag variants without retyping them or changing vendor
- macros.
- Murph preserves the parsed tags, but no tag-sheet creative can be delivered to
- any seller in this release. VAST pre-fetch and Internal Redirect rows also stay
- blocked. Sellers do not need to change their setup.
5.254.0 — August 22, 2026 at 6:24 AM UTC
- Storefront sources no longer stay unhealthy when per-product effective coverage
- confirms that every active product is manually priced. With that coverage
- available, mixed automatic pricing remains protected and unresolved manual
- pricing still prompts you to upload a current feed.
- Creative preview guidance now covers every storefront advertising adapter
- available to buyers and shows the exact saved, transient, and fail-closed
- boundaries before a buyer tries an unsupported preview.
- Hosted video URLs are now checked against the storefront’s managed ad server
- before creative sync. Certified Google Ad Manager storefronts can accept
- compatible H.264/AAC MP4 files up to their recorded profile limits; FreeWheel
- video remains unavailable until that integration is certified. Unsupported
- video now returns a compatibility error before the ad server is changed.
- Non-video creative behavior is unchanged.
5.253.0 — August 22, 2026 at 6:02 AM UTC
- Google Ads
preview_creativecan now show Google’s own expiring Performance Max preview for a creative already saved and synchronized to the selected Google Ads account. This lets buyers review the saved creative before it is used, with no setup changes required. - Interchange returns the link only when it can match one saved creative to the exact account and campaign and validate Google’s URL and expiry. Because Google does not provide placement choices, dimensions, or an embeddable view for this preview, requests for those details fail safely instead of returning an approximation.
- Source Health now uses Healthy, Degraded, Erroring, and Unknown consistently across customer diagnostics, agent summaries, and admin views. Existing diagnostics APIs retain
unhealthyas a compatibility wire value, presented as Erroring; typed timeouts remain degraded observer-budget evidence rather than error responses or eligibility decisions. - Practice pitches show up again: running a practice brief was silently dropping the composed pitch, so the opened proposal showed only the plain product view. The pitch is saved with the practice run once more.
5.252.0 — August 22, 2026 at 5:12 AM UTC
- Approved storefront creatives now report the downstream ad-server creative ID
- in buyer creative readback when every destination returns the same ID. No buyer
- changes are required; multi-destination approvals omit the field when any
- destination fails, omits its ID, or reports a different ID.
5.251.0 — August 22, 2026 at 4:58 AM UTC
- Your existing member API keys already use their owner’s current access, including buyer advertiser access and seller Storefront access. The shared settings page now says that each key uses its owner’s permissions in the organization. Later permission changes continue to apply without rotating a key; no authorization behavior changed, and no action is required.
- OpenAI Ads compatibility guidance now explains why
preview_creativeremains unavailable: the provider’s prose-documented, OpenAPI-absent preview operation has no published response contract or verified public HTTPS URL, the nullable account preview URL is only a favicon, and dynamic product templates cannot be faithfully approximated. Existing OpenAI Ads campaigns and creatives are unchanged; no action is required. - Buyer and storefront agents now refresh the live request list before answering status questions, so answers reflect the latest available progress. No action is required.
- The account-resolved v3 MCP API is now available to every authenticated buyer and seller account at
/mcp/v3. Buyers receive buyer workflows and sellers receive Storefront workflows, with each catalog filtered by the account’s permissions and resource access. Existing entitlements still apply to every operation, and existing v2 APIs remain supported.
5.250.5 — August 22, 2026 at 2:11 AM UTC
- Wholesale product listings now carry the same placement, availability, and audience facts that composed proposals do. Previously only proposals built from a brief included them.
5.250.0 — August 21, 2026 at 11:15 PM UTC
- Every placement in a proposal now shows what you’re buying: the property it runs on, the placement’s available delivery for the window (with an effective CPM shown next to flat rates), and — where the seller has provided them — audience facts with their source. Where the seller hasn’t provided a fact, the proposal says so instead of talking around it. Today the property and delivery resolve for inventory fed through a static avails feed; products sold through other connections show them as not yet resolved. Nothing to change on either side.
- Sellers: gaps like “Property not yet named” and “No audience facts yet” are now visible directly on the buyer’s proposal, so they’re your cue to confirm property mapping in the Property Roster and add audience facts via Teach — the more complete your data, the more your proposals show.
- Source Health now shows buyer-request selection and observed operational health as separate statuses for every inventory Source. A call that does not finish inside the observation budget is reported as a typed timeout with the budget and last success where available; it is not described as an error response or proof that the Source is unreachable. Eligible, compatible Sources continue to participate in discovery after a timeout or health degradation, and create or update operations route through the persisted owning Source.
- No setup change is required for existing connected Sources. Explicit Source and Agent holds, storefront pause/archive, required setup, Agent mapping, and request compatibility remain gates where they apply. Health observations remain diagnostic evidence, while account sync and other recovery checks remain callable. Canonical per-request routing is the deployed default; storefront eligibility snapshots remain an independent optimization and do not decide Source selection.
5.249.4 — August 21, 2026 at 10:46 PM UTC
- Buyers can now open the V3 Sellers Page, view seller connections, and complete its existing management actions without errors. Available seller logos now appear in seller discovery; sellers do not need to take any action.
5.249.0 — August 21, 2026 at 8:33 PM UTC
- You can now distinguish Global Market Makers, Regional Market Makers, and
- Marketplace Sellers from marketplace readiness, selection, and advertiser
- activation, and complete setup, authorization, direct-billing, and payment
- actions from the Sellers experience. Existing selection, billing, and
- activation data and defaults do not change; no action is needed unless a card
- shows Action required. For sellers, no action is required: approved
- contract and admin facts now make eligible sellers easier for buyers to
- understand and connect with, without exposing new seller data or requiring a
- setup change.
- Storefront setup now clears corrected pass-through sales-agent catalogs without being held by older buyer-specific product observations. Buyer requests still validate their relevant account catalog before products can serve; sellers do not need to clear historical setup data.
- Forward full campaign cancellations to managed sales-agent destinations instead
- of incorrectly treating those destinations as archived modular inventory.
- Agents now remains visible in the workspace rail for every organization that
- can use the Agent page. Clients appears beneath it only when the organization
- has client-management access.
- OpenAI Ads connections can use an account API key while provider OAuth access is unavailable. The connection flow prefers API-key setup until OAuth is configured, then makes OAuth the preferred option without invalidating an existing key. If your API key is already connected, no action is required.
- Preview an already-synced TikTok in-feed video from the selected advertiser account. There is nothing to change in your buyer workflow: Interchange opens TikTok’s expiring preview link after confirming that the saved video belongs to that account, keeps historical
DOWNLOADcreatives compatible with TikTok’s currentDOWNLOAD_NOWrequest value, and declines unsupported creative types instead of showing an approximation. Buyers gain this preview for an existing TikTok-connected storefront; sellers do not need to change storefront setup, creative sync, or delivery workflows.
5.248.1 — August 21, 2026 at 7:13 PM UTC
- Buyers can now discover your storefront reliably even when they check an older
- format interface. No action is needed, and your current product formats remain
- unchanged.
5.248.0 — August 21, 2026 at 6:58 PM UTC
- Buyers can open Snap’s hosted preview for image and video creatives already
- synced to their selected Snap ad account. No setup change is needed. If a
- preview does not load, confirm the creative has finished syncing to the
- selected account and try again; Interchange shows an error instead of opening
- a preview it cannot safely confirm.
- Once OpenAI enables your organization for its OAuth beta, connect an OpenAI Ads
- account from Settings → Connections without copying an API key. Each grant
- links one advertiser account. Existing account-scoped API-key connections keep
- working, so there is nothing to change until OpenAI and Scope3 confirm your
- OAuth enrollment.
- Partner organizations now find Agents in the account menu and move between
- Agents and their nested Clients from a persistent workspace rail instead of
- one-off top-header buttons. Entitled Agent pages also load consistently when
- the separate Agent Page rollout flag is disabled.
5.246.1 — August 21, 2026 at 4:35 PM UTC
- Storefront listing now loads reliably even when the marketplace is large. Previously, a shared internal timeout across many storefronts could occasionally fail the entire request; each storefront now falls back to its last-known status instead.
5.246.0 — August 21, 2026 at 4:14 PM UTC
- Check Pending Operations for any new manual modular-source tasks that need your
- team now. Booking, creative sync, and final reporting work is grouped by buyer,
- media buy, and source, with a direct link to each task; when the queue says no
- action, there is nothing to do.
- Media-buy and modular-source pages now separate setup readiness, supported
- capabilities, transaction inputs, and open human work. They show seller-authorized
- net terms only when that evidence exists, keep accepted distinct from trafficked
- or delivered, and retain buyer or source-connection identity when two buys use
- the same media-buy ID.
- Buyers do not need to change anything, and buyer-facing amounts are unchanged.
- Inbound buyer gross budgets remain buyer context and are never presented to a
- seller as net terms.
- Managed ad-server media-buy mutations now preserve private-service transport policy when applying per-call timeouts.
- Approved media buys now reach managed ad-server-backed sales agents instead of failing before delivery begins.
- Buyer and seller chat clients now receive explicit safety metadata for every V3 tool, including accurate confirmation and external-action boundaries. This host-side change does not alter what buyers or sellers can see about each other, and requires no action from them.
5.245.0 — August 21, 2026 at 11:55 AM UTC
- Allow OpenAI Ads storefronts to finish provisioning so buyers can connect an
- approved OpenAI Ads account through the standard adapter flow. New adapter
- setup starts hidden; safety demotions happen before routing, while promotion to
- listed waits for routing to succeed.
5.244.2 — August 21, 2026 at 11:39 AM UTC
- Demand Inbox and seller-response passes now lead with the advertiser brand, show the buying operator separately, distinguish product offers from persisted Proposals, and replace ambiguous pending outcomes with the most specific recorded lifecycle state.
5.244.0 — August 21, 2026 at 10:22 AM UTC
- Buyers and sellers can now open Your requests from Help to see support
- requests for their own account and whether a fix is ready. Murph also brings a
- resolved request into the next update it shows them. There is nothing to
- configure, and neither side can see the other’s requests.
5.243.0 — August 21, 2026 at 8:54 AM UTC
- In Settings → API Access, new user API keys now inherit their owner’s current account and advertiser access. Buyers, sellers, agencies, and integration builders no longer choose a separate read, write, or admin scope when creating one. Existing keys continue to work unchanged, so no action is required; when you choose to rotate a key, its replacement uses inherited access. This does not grant access beyond the owner’s permissions or change what buyers can see about sellers.
- When
storefront-connectionsis enabled, buyers get one Sellers page instead - of separate Marketplace and Connections pages. Buyers can browse every eligible
- Storefront, see why it is selected, and take any connection or billing action in
- the same place; no action is required for sellers in this release. Sellers are
- presented as Global Market Makers, Regional Market Makers, or other sellers,
- without exposing how their connection is implemented.
- Scope3 will measure distinct buyer accounts that open Sellers, change a
- Storefront preference, and complete a required action. Activation remains in
- shadow mode, so this release does not provision accounts, change billing,
- pricing, packaging, or spend.
5.242.1 — August 21, 2026 at 7:43 AM UTC
- When a publisher’s ad platform rejects a media buy submission, the error you get back now names the actual reason — such as an invalid request, missing account credentials, or rate limiting — instead of a generic “upstream request failed” message. Nothing to change on your side; this only makes certain error responses more specific.
- Fixed Meta Estimated Ad Recall media buys failing to launch. Meta retired the
BRAND_AWARENESSoptimization goal in favor ofAD_RECALL_LIFTfor the same estimated-ad-recall measurement; this product now writes the current goal soexecute_campaignno longer fails with “Performance goal isn’t available.”
5.242.0 — August 21, 2026 at 7:17 AM UTC
- Before using Meta Engagement — Facebook Event Responses, confirm in Meta
- that your connected ad account can access an authorized Facebook Page that
- owns an upcoming, promotable Event. In connected Meta buying, choose the
- product, then select the Event you want to promote. Interchange creates the
- campaign paused, optimizes for Event Responses, and verifies the Event, Page,
- and creative bindings in Meta before leaving the campaign live. If any check
- fails, Interchange reports the failure without leaving a new campaign behind.
- Existing Meta buys do not change. Sellers do not need to take action.
5.241.0 — August 21, 2026 at 6:26 AM UTC
- Advertiser creation now accepts an
Idempotency-Keyheader, so safe retries within 24 hours return the original advertiser instead of creating a duplicate. Reusing a key with a different request returns a conflict.
5.240.0 — August 21, 2026 at 5:38 AM UTC
- Before using Meta Sales — Facebook or Instagram Shop Purchases, confirm in
- Meta that your connected Page has an active Shop with commerce merchant
- enabled. In connected Meta buying, choose the product and select the Page
- hosting that Shop. Interchange creates the campaign paused against Meta’s
- automatic on-site purchase setup, then verifies the Shop destination, Page,
- purchase event, and automatic bidding in Meta before confirming the buy. If
- any check fails, Interchange reports the failure without leaving a new
- campaign behind. Existing Meta buys do not change. Sellers do not need to take
- action.
5.239.0 — August 21, 2026 at 5:29 AM UTC
- Pinterest
preview_creativenow returns Pinterest’s expiring shareable link for a saved creative with one verified assignment in the selected ad account. Interchange checks the account, ad group, Pin, ad, and placement before returning URL-only output; unsynchronized or ambiguous creatives fail closed, and no transient or approximate fallback is used.
5.237.4 — August 21, 2026 at 4:59 AM UTC
- Resetting a demo storefront now also restores its pricing currency to the profile default, so sample products can’t be hidden from buyers by a stale currency setting.
- On both buyer and seller account-settings screens, existing organization-owned service keys continue to work and remain visible for migration and revocation, but API access settings no longer offer new service-key creation. Buyer and seller admins should create a user API key for new integrations.
5.237.3 — August 21, 2026 at 3:12 AM UTC
- Fixed resetting a Demo Storefront that had already processed sandbox trades: it could fail with an internal error instead of completing. Resetting refreshes the sample inventory and settings in place — your exchange history and any real activity are preserved, never deleted.
- Deleting a demo storefront that has real activity now either completes cleanly or tells you specifically what still depends on it. Most activity (like notifications) is cleaned up automatically. If the demo holds live commitments — a booked buy’s currency lock, an active adapter canary, or a provider capability attachment — the delete is refused with a message naming each one; those are safety locks on real obligations, and our support team resolves them with you rather than the delete silently destroying them.
5.237.2 — August 21, 2026 at 12:55 AM UTC
- Storefront delivery reporting now catches up automatically after a brief reporting interruption, instead of permanently showing zero delivery for the days it missed. If your reporting connection has a temporary gap, the next successful update backfills up to 14 days of missed data on its own — nothing to do on your side.
- If your Meta Engagement — Video Views campaign was failing to launch with an upstream error, that’s fixed. Nothing to change on your side — existing campaign setups will go through on the next attempt.
5.237.1 — August 21, 2026 at 12:31 AM UTC
- Fixed Meta Estimated Ad Recall media buys failing to launch with “Performance goal isn’t available.” These campaigns now send the required Facebook Page to Meta, and a media buy without an authorized Page for this goal now fails fast with a clear error instead of silently submitting a request Meta always rejects.
5.236.3 — August 20, 2026 at 10:31 PM UTC
- Disabling a sales-agent inventory source now stays disabled. Previously, a background reconciliation job could silently reactivate a manually disabled source within a couple of minutes with no error or signal to the seller.
5.236.0 — August 20, 2026 at 9:25 PM UTC
- Nothing changes until Sellers is enabled for your buyer account. Every enrolled
- buyer receives the complete workflow; the existing widget rollout only controls
- whether it uses the current or refreshed visual treatment.
- For smaller buyer teams, Sellers provides one place to browse the network and
- see which sellers are available, how billing works, and whether each advertiser
- is active. Account-wide changes require confirmation.
- For agencies and enterprise buyers, the workspace separates account policy from
- per-advertiser activation. Agent-auth sellers support Automatic, All
- advertisers, or Off. Manual platforms expose account linking, reconnection,
- confirmed removal, reusable advertiser mappings, and preserved mapping history.
- For technical teams and buyer agents using the v3 preview, the
sellernoun - exposes the same canonical selection, billing, and activation state through
searchandget. The Sellers page supports the commercial and authorization- changes that require an interactive workflow.
- This release does not add a fee or change packaging. Direct billing acceptance
- applies to current and future advertisers. Consolidated media appears on your
- Interchange invoice. Billing becomes read-only when Interchange dispatches the
- first eligible advertiser activation; changing a locked policy requires a
- future migration process.
- Sandbox advertisers remain clearly labeled and can be created from advertiser
- setup. This is a buyer-only workspace change; sellers do not receive a new
- surface or required action in this release.
- Demo storefronts now transact and show their sample products to buyer agents without any manual setup. Previously a freshly-created demo storefront could stay blocked from transacting because its Discovery Card (description, channels, countries) was never filled in, so a buyer’s request failed outright. Demo storefronts’ sample inventory availability window now refreshes on every create, reset, and lease extension, so an actively-used demo never ages out — instead of carrying a fixed calendar date that would eventually expire. Every synthetic sample publisher a demo declares — including a Mixed Publisher demo’s second publisher domain — is also now registered the same way a real publisher is, so the seller-side inventory-readiness view no longer reports any of them as blocked.
- Existing account-owned and legacy API keys keep working until you rotate or
- revoke them. New keys follow the creating user’s current access within the
- organization selected at creation, so role and resource changes carry through
- without another key rotation. A read, write, or admin permission level can
- narrow access further. Organization admins can review and revoke user-owned
- keys. For long-running integrations, create the key from a dedicated service
- user.
- This applies equally to buyers and sellers: buyer automation follows buyer and
- advertiser grants, while seller automation follows its seller and storefront
- grants. Each account remains a separate organization boundary, including linked
- parent and child accounts.
- There is no pricing, packaging, or billable-surface change. The feature ships
- ungated because it narrows authorization for newly created keys while preserving
- every existing key as a rollback path. Expansion requires successful staging
- checks for member self-management, administrator review, read/write/admin denial,
- membership removal, cross-organization denial, and revocation; the kill switch is
- to revert the new-key widget/default path while leaving existing credentials live.
- Adoption is measured when a member opens the user-key widget and when a user-owned
- key first authenticates a REST or MCP request. Success requires the motivating
- integration to complete an end-to-end staging call, read keys to be denied writes,
- and membership removal or key revocation to take effect without cross-organization
- access.
- Storefront test campaigns now keep product discovery on the selected inventory source and send the verified advertiser domain to that source.
- Try a brief now opens the full story-first proposal. Practice runs were composing the pitch and then dropping it, so the opened pass showed only the plain product view — the pitch your practice run composes is now saved with it.
5.234.0 — August 20, 2026 at 4:55 PM UTC
- Meta lead campaigns bought through Interchange can now run Meta’s own
- Advantage+ automation as a state of your existing campaign, instead of a
- separate product. This applies to every executable lead destination:
- Instant Form, website, Messenger, Instagram Direct, WhatsApp, and calls.
- If you already run any of these, nothing changes: there’s no new setting
- to configure, and this only takes effect once Interchange turns it on for
- your account.
- When it’s on, Meta can manage your campaign budget automatically and
- expand delivery beyond the audiences you selected. Your Page, lead event,
- destination, creative, country targeting, and audience exclusions don’t
- change — country targeting and exclusions stay hard limits Meta won’t
- cross, so compliance and brand-safety rules you’ve already set still
- hold. Included audiences become a starting point Meta expands from, not a
- ceiling. If you compare this campaign’s cost per lead or lead volume
- against a manually run one on another seller, expect a difference: that’s
- the audience expansion, not a setup error.
- Interchange creates every campaign paused and only launches it once Meta
- confirms the automation matches exactly what was requested. If it
- doesn’t match, Interchange removes the campaign rather than running it
- misconfigured.
- This ships as a staged, per-account rollout, expanding as we confirm
- Meta’s automation readback keeps matching the request across more
- accounts; if the match rate holds, we widen to the remaining accounts.
- Accounts not yet enabled keep today’s manual behavior — no action
- needed.
- This is a buyer-side change only: it doesn’t change anything a seller
- sees about their storefront, campaign readiness, or automation state, and
- it doesn’t change what a buyer sees about a seller’s storefront or
- inventory either. Pricing, fees, and packaging for every Meta product
- stay exactly as they are today — this is a capability change, not a
- monetization change.
5.233.3 — August 20, 2026 at 3:22 PM UTC
- If your storefront routes buys through AdsWizz, FreeWheel, or SpringServe: a metric your delivery reporting couldn’t confirm against the source’s own per-day figures (for example clicks, when a source states it for the period but omits it from the per-day breakdown) could still show its old, possibly inflated value alongside an already-corrected spend or impressions figure — this is now fixed, and no action is needed on your part.
- Buyers will now see that specific metric as blank rather than a number that can’t be trusted, while spend and impressions for the day remain correct.
- Sellers/operators will see the same clearing behavior on a storefront overview’s realized margin for a metric irrelevant to a package’s pricing model (for example clicks on a CPM package) — it is left at its original value there, since it was never part of what the ledger books and clearing it would only discard informational context for no reason.
5.233.2 — August 20, 2026 at 2:44 PM UTC
- The Media Buys page on your storefront no longer offers a clickable timeline for buys that live only in your ad server — those that were trafficked directly and never routed through Scope3. The row still shows the buy and its ad-server id so you can find it on your side, and calls out that its full history is in the ad server, instead of opening a timeline that reads “No buy with id X exists on this storefront.”
- If your storefront routes buys through AdsWizz, FreeWheel, or SpringServe: a single reporting day’s spend and impressions could show an inflated multi-day total mislabeled as that one day’s figure — this is now fixed, and no action is needed on your part.
- Buyers will now see the correct spend and impressions for each reporting day in your delivery reporting.
- Sellers/operators will see a day’s contribution to your storefront overview’s realized margin clear rather than stay wrong when the source’s own per-day figures can’t confirm it — including a day an earlier report already booked incorrectly. A cleared day is not something you need to fix; nothing is required on your part.
5.233.1 — August 20, 2026 at 1:20 PM UTC
- Meta creative preview staging proofs now validate the AdCP 3.1 response envelope emitted by the SDK while retaining strict account, identity, and URL safety checks.
- When Meta rejects “Meta Sales — Maximize Website Conversion Value” because your ad account isn’t yet eligible for value-based optimization,
create_media_buynow tells you exactly why instead of a generic upstream failure. Meta unlocks this optimization goal once an account has been actively advertising for several weeks, or once its business is verified — use “Meta Sales Campaign” in the meantime. - Fixed Meta Estimated Ad Recall media buys failing to launch. These campaigns now always run with Meta’s required automatic bidding for this optimization goal, instead of failing when a fixed CPM price was selected.
- Documentation is now organized around using Interchange or building an
- integration, instead of exposing buyer, seller, and API surfaces as separate
- top-level products. The developer section keeps v2 as the stable default and
- adds the enrolled v3 preview to its version picker. The preview now has a
- dedicated quickstart, concepts, buyer and seller workflows, tool catalog, and
- limitations reference instead of one long implementation guide.
5.232.4 — August 20, 2026 at 11:46 AM UTC
- Sellers with a connected advertising platform can now see that platform’s complete wholesale catalog on the Storefront Products page and in
GET /api/v2/storefront/products, alongside products from managed ad-server sources. These products become visible to buyers after the first complete catalog read. Existing pricing, policies, and connection settings still apply, and no seller reconfiguration is required. See the Storefront product composition guide for how products from connected sources are combined. - Buyer agents using a valid provider OAuth credential can now call
get_productswithbuying_mode: "wholesale"to read the seller’s complete direct-platform catalog. Brief and refine behavior, account-scoped product IDs, and authorization for write operations do not change. See the wholesale catalog and pricing guide for the buyer-facing contract. - Routed media buys now keep attributing delivered spend to the correct seller after a seller connection is upgraded. Buyers regain complete reporting for delivery temporarily recorded under an older buy identifier without double counting overlapping days; sellers do not need to take any action.
5.232.3 — August 20, 2026 at 9:39 AM UTC
- Meta creative preview checks now recognize completed platform responses, so valid rendered previews can finish verification successfully. No action is required from buyers or sellers, and creative publishing and delivery are unchanged.
5.232.1 — August 20, 2026 at 8:28 AM UTC
- When you pause or unpause your storefront, buyers now see the change within
- seconds instead of waiting for a background re-check. Previously, a busy
- re-check queue could leave buyers seeing your storefront as unavailable for
- hours after you opened it.
- Meta creative preview checks now verify the platform-rendered output before it reaches buyers, protecting the review experience from broken previews. Sellers’ creative continues to preview correctly for buyers, and creative publishing and delivery are unchanged. No action is required from buyers or sellers.
5.232.0 — August 20, 2026 at 6:50 AM UTC
- Your proposal now reads like a pitch, not a spec sheet. When your agent
- composes a pitch, the proposal pass opens with what the buyer asked for, why
- you’re the right seller for it, the plan built around that argument, proof
- from your own case studies, the terms, and the ask — in that order. Product
- rows lead with the reasoning your agent gave for including them, with price
- and delivery terms right behind. A brief with no matching case study says so,
- plainly — no stand-in, no near-miss example. Buyers see no change from this
- release — the proposal your agent sends them is exactly what it was; this
- changes how you read it.
- You can also try it yourself: paste a brief on the product marketing (Teach)
- page and run a practice pitch to see your storefront’s story-first proposal
- before a real buyer ever sends a brief. It opens right away so you can read
- it. Practice runs are tagged as practice — never billed, never sent to a
- buyer, and never shown in your demand inbox alongside real buyer activity.
5.231.0 — August 20, 2026 at 6:13 AM UTC
- Buyer account administrators can now save an account-wide include or exclude
- preference for one exact Storefront. Scope3 also records why a qualified
- Storefront is selected by default, including its Premium Publisher setting or a
- seller market-maker entitlement. These selection decisions do not activate
- accounts, spend money, or accept billing terms; connection setup and any
- required billing, linking, or mapping action ship separately.
- Seller operations teams can see when a qualified Storefront is selected by
- default because Scope3 marks it Premium Publisher or grants the seller
- market-maker authority. No seller action is required in this release.
- Monetization impact: none. This release records selection intent only and does
- not change packaging, fees, billing eligibility, or account activation.
- Rollout: this control plane ships ungated because the buyer mutation is
- authenticated and reversible, while downstream activation remains disconnected.
- Expansion to activation requires a separate reviewed release. The kill switch is
- to keep activation apply mode disconnected and stop the selection reconciliation
- job; durable queued work remains retryable when processing resumes.
- Adoption is measured by distinct buyer accounts that set an override in the
- durable selection audit history. Rollout health is measured by desired-edge
- outbox transitions, zero failed or stale reconciliation events, and zero
- selection-reconciliation Sentry errors before activation expands.
- Murph report assessment and confirmation exchanges no longer consume filing
- quota before a report is actually submitted, preventing ordinary back-and-
- forth from producing repeated throttling messages. When the separate 24-hour
- runaway cap is reached, Murph now gives a reset time after the complete usage
- window has expired instead of a potentially premature retry time.
5.230.0 — August 20, 2026 at 5:50 AM UTC
- Buyer product discovery now keeps safely persisted products available when a different seller/source identity cannot be persisted. Unsafe products and proposals are withheld with a bounded storefront diagnostic; a total persistence failure remains retryable instead of looking like an empty catalog.
- Sellers do not need to take action. Buyers may now see that bounded diagnostic when a seller’s inventory is incomplete instead of seeing the storefront as empty.
- OAuth refresh retries from one expired session no longer block other integrations on the same shared network. Nothing needs to change on your side.
- The note under each selling point on your marketing page now tells you how your agent will present that line to buyers. A selling point from your website is carried as your own claim, in your words; a quoted line names the material it came from. And when a selling point states a number with no source, the page suggests adding one — “per Comscore, March 2026” — so the claim reaches buyers with attribution behind it.
5.229.5 — August 20, 2026 at 4:09 AM UTC
- Campaign search and list now correctly return campaigns that predate advertiser-linking, instead of silently excluding them from every advertiser-scoped result. Reading one directly by id already worked; it just couldn’t be found through search.
5.229.4 — August 20, 2026 at 3:47 AM UTC
- Snap brief-mode discovery now explains why 0 products were returned. When a brief targets multiple countries or no country, the product group description includes an actionable message (e.g. “Snap campaigns target one market at a time. Retry discovery with a single country.”) instead of the generic “No matching products from Snap.”
5.229.3 — August 20, 2026 at 3:26 AM UTC
- Fixed reporting for a small number of media buys where delivery data could not be denominated into a reportable currency because settlement-currency records were missing or incorrect. Nothing to change on your side — reporting for the affected buys should now return normally.
5.229.2 — August 20, 2026 at 3:04 AM UTC
search(kind:"advertiser")no longer silently returns an empty list when your search text doesn’t happen to match an advertiser’s name — the response now says the name filter matched nothing and tells you to omit it to see every advertiser you have.request_proposalsandsave_media_buynow declare a machine-readable output schema, so MCP clients can validate and surface the structured product, pricing, and media-buy data these tools return instead of falling back to a bare text summary.
5.229.1 — August 20, 2026 at 1:51 AM UTC
- After sellers complete a no-spend test campaign, their storefront and products
- now become visible to buyers promptly instead of waiting for a background
- refresh. No action is required from buyers or sellers, and storefronts that are
- paused, archived, or still missing setup requirements remain unavailable.
5.229.0 — August 20, 2026 at 1:36 AM UTC
- Agent owners can now publish a versioned, non-secret connection setup from the
- Agent Page, so every publisher sees the same exact endpoint, protocol,
- authentication, and credential guidance for connecting. Publishing a version
- doesn’t activate any publisher connection — publishers still complete their
- own authorization, credentials, and readiness checks before going live.
- Existing publisher setup keeps using the generic
external-sales-agent - connection contract; it does not yet resolve an owner-published version.
- Referral selection, certification, connection validation, and activation gates
- do not change in this release.
- This feature adds no billable surface or packaging change and is available at
- no incremental charge to customers enabled for the Agent Page.
- Responses from Demo Storefronts (Scope3’s synthetic, disclosed sample
- inventory used for demonstrations) now carry
demo: trueand a demo_disclosuresentence inget_products, so your agent can tell sandbox- inventory apart from a real seller’s and avoid acting on it as a genuine
- offer. The disclosure also appears in the response’s human-readable summary
- text.
5.228.0 — August 19, 2026 at 11:35 PM UTC
- Make a storefront available to buyers immediately after its successful transaction validation is recorded, without waiting for the eligibility cache’s periodic refresh.
5.227.2 — August 19, 2026 at 11:09 PM UTC
- MCP connections no longer drop every four minutes. The load balancer in front of the API capped any single response at 240 seconds — counted from when the request started, whether or not data was flowing — so a long-lived MCP stream was severed on the clock and a tool call that ran past four minutes lost its result with nothing to show for it. Keep-alive traffic never helped, because the limit was never about idleness. MCP traffic now has its own limit of 30 minutes, while ordinary REST calls keep the shorter one.
5.227.1 — August 19, 2026 at 10:42 PM UTC
- Product selection and campaign staging now use the exact pricing option in the
- buyer’s current discovery result, so a separate catalog refresh cannot reject a
- fresh selection as stale. Older result sets continue to use current catalog
- validation until discovery is run again.
- Seller applicability: not applicable — seller storefront setup, catalog
- visibility, and settlement configuration do not change. Buyers continue to see
- and select the price the seller returned for that discovery result.
5.227.0 — August 19, 2026 at 9:58 PM UTC
- Fixed
update_media_buyfailing on media buys whose inventory is bought through a storefront. Editing budget, flight dates, packages, or creatives on one of these buys returned a server error, and although the change was recorded on your buy it was never sent to the seller — so it sat pending indefinitely. These updates now reach the seller, and stored creative assignments are carried across correctly. Both the REST endpoint and the buyer MCP tool are fixed, along with campaign edits that update a media buy. - If you have a pending change on one of these buys that never took effect, resubmit it.
- New modular-source storefronts can complete their first no-spend test while readiness finishes updating, instead of timing out before inventory discovery. Nothing changes on your side.
5.226.0 — August 19, 2026 at 9:10 PM UTC
- Release validation for Meta creative previews now verifies the already-synced creative on the selected ad account without creating or changing ads. Buyer preview behavior is unchanged.
5.224.1 — August 19, 2026 at 8:06 PM UTC
- Meta creative previews now reject authorization-shaped query values when spaces use standard URL form encoding or a literal plus. Ordinary non-authorization literal-plus values remain accepted. No buyer action is required.
5.224.0 — August 19, 2026 at 7:38 PM UTC
- MCP connections are no longer cut mid-call when we deploy. Previously a deploy gave every connected client a fixed 15 seconds before closing its connection, so any tool call still running — a product discovery sweep, a campaign creation — was severed and surfaced in Claude or ChatGPT as “MCP server connection lost”. A deploying server now waits for in-flight tool calls to finish, on the same allowance long-running discovery already had, and hands your event stream to a healthy server up front so your client reconnects instead of waiting on one that is going away.
- If a legacy advertiser’s brand update was blocked by mixed terminal-campaign currencies, retry the update with
primaryCurrencyset to the intended historical currency. Active campaigns and current seller-account links still prevent incompatible currency choices; do not create another advertiser to bypass the repair.
5.223.0 — August 19, 2026 at 6:57 PM UTC
- Meta website campaigns bought through Interchange can now run Meta’s own
- Advantage+ automation as a state of your existing campaign, instead of a
- separate product. If you already run Meta website conversion,
- conversion-value, or catalog campaigns, nothing changes: there’s no new
- setting to configure, and this only takes effect once Interchange turns it
- on for your account.
- When it’s on, Meta can manage your campaign budget automatically (the same
- Advantage+ campaign budget behavior you’d see in Ads Manager) and expand
- delivery beyond the audiences you selected (Advantage+ audience and
- placements). Your Pixel event, Page, creative, country targeting, and
- audience exclusions don’t change — country targeting and exclusions stay
- hard limits Meta won’t cross, so compliance and brand-safety rules you’ve
- already set still hold. Included audiences become a starting point Meta
- expands from, not a ceiling. If you compare this campaign’s reach or cost
- against a manually run one on another seller, expect a difference: that’s
- the audience expansion, not a setup error.
- Interchange creates every campaign paused and only launches it once Meta
- confirms the automation matches exactly what was requested. If it doesn’t
- match, Interchange removes the campaign rather than running it
- misconfigured.
- This ships as a staged, per-account rollout, expanding as we confirm
- Meta’s automation readback keeps matching the request across more
- accounts; if the match rate holds, we widen to the remaining accounts.
- Accounts not yet enabled keep today’s manual behavior — no action needed.
- This is a buyer-side change only: it doesn’t change anything a seller
- sees about their storefront, campaign readiness, or automation state, and
- it doesn’t change what a buyer sees about a seller’s storefront or
- inventory either. Pricing, fees, and packaging for every Meta product stay
- exactly as they are today — this is a capability change, not a monetization
- change.
5.222.0 — August 19, 2026 at 6:28 PM UTC
- Your storefront test campaign can now launch immediately after setup, even while its readiness status updates. You do not need to change anything, and regular buyers remain blocked until setup is complete.
- Reporting can resume for one older media buy after its seller updates how it
- authenticates reports sent to the existing callback. Buyers do not need to
- change anything. Only the seller for this media buy needs to update the
- callback; all other media buys and reporting paths are unchanged.
5.221.0 — August 19, 2026 at 5:35 PM UTC
- Buyers can now discover and select all compatible creative formats from seller
- catalogs that publish both legacy and current SDK representations. Previously,
- compatible formats could be withheld when one representation included extra
- options. Existing legacy identifiers are still forwarded to the seller, and no
- seller action is required.
- Before using Meta Sales — Website Catalog Sales, confirm in Meta that your
- connected ad account is owned by a Meta Business Portfolio and has access to a
- commerce catalog with at least one non-empty product set, a Pixel/Dataset, and
- a Facebook Page. You also need an HTTPS destination and creative. In connected
- Meta buying, choose the product, then select the catalog and one of its
- non-empty product sets. Interchange keeps optional audience signals and
- targeting overlays separate from the product, creates the campaign paused, and
- verifies the catalog relationship, product set, identity, destination,
- optimization, and measurement setup in Meta. If any check fails, Interchange
- reports the failure without leaving a new campaign behind. Existing Meta buys
- do not change. Sellers do not need to take action.
- get_products calls that hit the default wait budget before every storefront finishes now return a normal, pollable page marked incomplete instead of an error. Poll again with the same
ext.interchange.execution_idto pick up the rest; nothing to change on your side. - A background catalog refresh that returns nothing now leaves your existing products in place instead of emptying your catalog and blocking your storefront from transacting.
- Media buy create and update requests now return a clear error when a selected inventory source cannot verify that it will apply exact state or province targeting, instead of accepting and ignoring the setting. Buyers can remove
geo_regionsandgeo_regions_excludeor choose a product whose source supports the requested regions. - Seller impact: no action is required. Sources without verified exact-region support will reject these requests until that support is available.
5.220.0 — August 19, 2026 at 3:37 PM UTC
- Storefront account synchronization now reports an explicit version error when a buyer sends AdCP 3.2 account-identity fields to a storefront that supports only AdCP 3.0 or 3.1. Integrations should read the storefront’s advertised capabilities and omit those fields for older versions.
- This release applies to buyer teams building direct API or agent integrations, including hands-on builders and agency platform teams. Enterprise brand and chat-only buyers do not need to change their workflow unless they maintain one of those integrations. Seller configuration and buyer-visible storefront ranking, labels, and inventory presentation do not change.
- Reporting now tells you honestly when it cannot denominate spend, and names the media buys involved. When one or more media buys have delivery spend with no resolvable currency,
GET /api/v2/buyer/reporting/metricsreturns the newSPEND_DENOMINATION_UNRESOLVEDerror (HTTP 422, recoveryterminal) instead ofFX_RATE_UNAVAILABLE(HTTP 503, recoverytransient). The old response advised “retry after a short wait” for a failure that is deterministic and reproduces on every call, and reported only a count — so there was no way to tell which buys to ask about. The error message now names the affected media buy IDs directly, alongsidedetails.mediaBuyIdsanddetails.unresolvedCount, and its suggestions tell you to exclude those buys to keep reporting on the rest of the account. FX_RATE_UNAVAILABLEkeeps its original meaning — the exchange-rate feed could not price a currency pair — and remains a retryable 503. If you branch on error codes or auto-retry 503s from this endpoint, update that handling: this condition is now a 422 you should surface rather than retry.- With a connected Meta ad account, self-serve buyers, agencies, and enterprise
- teams can now choose Post-install Event or Maximize In-app Value for an
- app campaign. Interchange lists the exact apps and events Meta authorizes for
- that account and verifies the same selection after creation, so teams can use a
- governed account choice without copying provider identifiers. Existing
- app-install buying and seller storefronts are unchanged. Before using value
- optimization, make sure the event sends value and currency through the Meta SDK
- or your measurement partner; otherwise, no setup changes are required.
- Responses in the agentic setup and discovery chat are now shorter by default. The assistant leads with the answer — the ID, the status, or the blocker — and stops, instead of wrapping a one-line result in extra paragraphs of caveats and commentary. Ask for detail and it still gives you the exact steps or the full breakdown. Nothing to change on your side.
5.219.0 — August 19, 2026 at 2:25 PM UTC
create_media_buysnow accepts per-productoptimizationGoalswhen selecting a product. For Meta Lead Generation, this lets you set the “Maximize number of leads” performance goal at creation time — matching what Meta Ads Manager itself offers for that goal, without needing a performance-mode campaign. “Maximize number of qualified leads” and a cost-per-result bid target are not yet available through this field.- Buyers now receive safe, stage-specific errors from the Meta
preview_creativeAPI and MCP operation when a read-only creative preview cannot complete, instead of an opaque validation failure. Successful creative previews and default preview behavior are unchanged. If an existing Meta connection cannot validate Instagram access, an account admin must reconnect it; otherwise no buyer action is required. - Seller impact: not applicable. This change has no seller-visible effect on storefronts, ranking, rendering, labeling, inventory, or workflows.
5.218.0 — August 19, 2026 at 1:51 PM UTC
- Buyer accounts using WorkOS org API keys can now list their own advertisers via
search(kind:"advertiser"). Previously, these tokens returned an empty advertiser list even when advertisers existed — the scoping function did not recognise buyer tokens without a user identity (full_accesspermission oruserRole), silently returning no accessible IDs and short-circuiting the database query. - The duplicate-advertiser conflict message now names the conflicting
advertiserId, giving you a concrete value to look up via whichever surface you’re on, instead of a dead end. get(kind: "campaign")now states budget, flight window, brief, and advertiser id in its response text, so a buyer agent can verify what a priorsave_campaignactually persisted instead of taking the creation response’s word for it. Passing anincludethat doesn’t apply to a campaign (e.g.diagnostics) is now reported back rather than silently dropped.- Buyer setup now preserves each seller’s last verified availability when a marketplace-wide readiness refresh runs longer than its deadline, instead of incorrectly showing that seller as unavailable. Completed current checks still take precedence, and buyers do not need to take any action.
- Agents using the V3 buyer surface now correctly surface product names, pricing, and formats returned by
request_proposalsinstead of dead-ending at a bare count. The V3 buyer skill document teaches agents to readstructuredContent.perSeller[].productsand present the full product list to the user before staging a media buy.
5.217.0 — August 19, 2026 at 12:47 PM UTC
- RFC 9421 identity-signed delivery reports sent to previously issued third-party seller callback URLs now continue through the seller’s current storefront route, so reporting stays current after a seller source is re-registered or migrated.
5.216.1 — August 19, 2026 at 12:31 PM UTC
- Meta Traffic, Video Views, and App Installs campaigns now default to impression-based billing instead of an outcome-based billing model (clicks, ThruPlay, or installs) that Meta only allows on ad accounts that have cleared its spend/eligibility threshold. Buys on new or unaged ad accounts no longer fail with a generic “Billing Option Not Available” rejection.
- Campaign search now tells you when results are limited to non-terminal campaigns (draft, active, paused) and how to see completed, canceled, or archived ones too — so an empty or short result is never mistaken for “no other campaigns exist” under an advertiser.
- When one of your inventory sources goes quiet or recovers, Murph’s note in your
- channel now names the source the way you named it, instead of showing an
- internal identifier. Nothing to change on your side.
- Completed creative and media-buy reviews now leave the approval queue in a consistent decided state. Previously stuck reviews return to the queue for an explicit decision; nothing changes in the seller review workflow.
5.215.0 — August 19, 2026 at 10:39 AM UTC
- Meta creative previews now reject mismatched Facebook Page and Instagram
- identities before contacting Meta and return safe errors when Meta cannot render
- a preview. No buyer action is required.
- “Continue setup” on a modular inventory source now opens the step the checklist
- names — importing an avails feed, resolving the Property Roster, or setting a
- Playbook or acceptance policy. It previously reported “That source did not open.
- Try again.” The Discovery Card opens from this checklist again too.
- You can now send raw email addresses and international phone numbers to the v2 audience-sync API. Interchange normalizes and SHA-256 hashes email and phone values at the API boundary; existing pre-hashed inputs continue to work and are canonicalized to lowercase. Requests fail when supplied raw and hashed values do not match. Existing integrations that send valid hashes do not need to change.
5.214.1 — August 19, 2026 at 8:19 AM UTC
- Improved the reliability of large property-list creation under load.
5.214.0 — August 19, 2026 at 7:33 AM UTC
- Partners enrolled to operate sales agents for clients can now invite a publisher from Partner, monitor each authorized Source’s setup, health, products, and active campaigns, and open Source-scoped delivery reporting. Partner administrators can see operational status but cannot enter the publisher’s account or read its secrets.
- Invited publishers sign up or sign in to their own organization, choose the exact Source to authorize, and complete their own credentials and payout setup. The invitation creates no account or Source, and authorization never bypasses Agent certification or grants the Partner access to another publisher Source.
- The client-operations workspace is packaged behind the paid
operate-agents-for-clientsentitlement or an explicitly approved, time-bounded beta; referrals do not add a separate fee or change publisher payout economics. Initial exposure is limited to entitled design partners and can be stopped by revoking or expiring that entitlement without deleting publisher-owned Sources or consent history. - Launch measurement follows the referral send → publisher acceptance → exact-Source authorization → Partner acceptance → validation → activation funnel, including conversion, p50/p95 completion time, reporting use, rejected cross-Source replays, and delivery failures. Expansion requires every completed referral to remain tied to one exact Source and zero cross-organization authorization or secret-exposure incidents.
- Billing periods in Plan & Billing → Usage & Credits now display as “August 2026” instead of the raw “2026-08” string. No action needed — the numbers and your balance are unchanged.
- OAuth setup for external sales agents is now safer and easier to recover.
- Set or change an OAuth audience. When registering a new inventory-source
- identity or updating an existing source, set
oauthAudienceonly when the - agent gateway does not publish a public OAuth audience. Open the authorization
- link returned by the source request to finish consent.
- If an update succeeds without returning a link, send the same source update
- again. The audience is already saved, and the retry starts a new consent flow.
- If a new OAuth identity is registered without a link, call the Storefront REST
- API’s Start agent OAuth operation at
POST /api/v2/storefront/agents/{agentId}/oauth/authorize, then open its- authorization link.
- Keep OAuth credentials in the consent flow. Do not send
authwhen a - source create or update uses
OAUTHorNO_AUTH; those requests now reject - the field. For OAuth, set
oauthAudienceonly for the gateway case above, then - use the returned authorization link.
- If the seller updates an OAuth source while agent-level consent is open,
- discard the old link and use the link returned by the latest source update. If
- that update returns no link, retry it. If a per-account consent flow was open,
- discard its old link and repeat the Buyer REST API’s **Register source
- credentials** request at
POST /api/v2/buyer/storefronts/{storefrontId}/sources/{sourceId}/credentials.- Use the same
accountIdentifier, omitauth, and open the new authorization - link. This replaces only the existing
PENDINGconsent attempt; active - credentials remain unchanged.
- Read source-version diagnostics. Diagnostics now explain that an AdCP
- 3.0-only agent can still answer live buyer briefs, but its products remain out
- of the Interchange component catalog until its server supports AdCP 3.1. If
- catalog warming reports
VERSION_UNSUPPORTED, upgrade the agent server. - Who this affects. The primary audience is sellers configuring external
- sales agents. A buyer or operator is affected only when their per-account
- consent is already open as the seller changes that source’s OAuth setup; they
- must repeat Register source credentials for that source. Existing valid
- sources and requests need no changes. Normal buyer-agent API contracts,
- storefront discovery, and buying results are unchanged.
- Your billing rates are now easier to find. Buyer media billing rates (public list and effective rate by billing type) are shown in the dedicated Media Billing tab, and seller rates are shown in the Plan & Pricing tab — so each rate type lives in one canonical place with no duplicates. Your actual rates have not changed; only where you find them in the UI has.
- The Plan & Billing page no longer shows contradictory next-action states. Previously, the top banner could say “No action needed” while the Plan & pricing tab simultaneously showed a pending action (such as “Select plan”) for the same account. Both surfaces now derive from the same authoritative signal and always agree. The duplicate “Next action” label in the Account standing card has also been removed.
- Meta
preview_creativereliability checks now validate all three Facebook and - Instagram preview links when a connected ad account has multiple eligible Pages
- or Instagram profiles. No action is required: standard previews still ask for
- an identity when the choice is ambiguous.
- When Murph says it did not find something, it now tells you where it looked.
- Murph’s tools reach your account, your requests, and the product
- documentation — a slice of the answer space, not all of it. A miss in that
- slice used to come back sounding final: “there is no such feature.” Now it
- comes back scoped — “nothing in the documentation I searched” — so you can
- tell the difference between not here and nowhere.
- When the answer sits somewhere Murph cannot reach, it says so and points you
- at what can answer instead of reporting an absence.
5.213.12 — August 19, 2026 at 5:59 AM UTC
- No action is required. When comparing Reddit Ads options, buyers now see whether
- each product delivers toward impressions or clicks, so teams can choose media
- and measurement plans without mistaking conversion-intent traffic for
- purchase-optimized delivery. App and community traffic also show their click
- delivery boundary.
- Dynamic Product Ads prospecting and retargeting will not be offered until the
- integration can verify catalog setup, purchase measurement, creative,
- placement, and Reddit’s saved campaign configuration. Hands-on buyers receive a
- clear setup boundary instead of an option that cannot be created. Seller
- storefronts and what buyers see about sellers are not affected.
- Fixed Meta Traffic (LINK_CLICKS) ad-set creation so it no longer fails with a “Promoted Object Invalid” error when the buyer doesn’t select a specific conversion event.
- Buyer product discovery can now return its fast partial page when you ask for a short wait. A
get_productsrequest carrying a smallwait_secondsortime_budget(under about three seconds) could fail with an internal error instead of the documented first wave, because the request’s own guard expired before the partial page was assembled. Short waits can now returnresults_complete: falsewithpending_agents; sellers that finish before the original buyer deadline may appear in later revisions. Seller-facing deadline calculation is unchanged: each seller receives only the remaining portion of the buyer’s original budget at dispatch. - TikTok product discovery now stops before product selection when a brief asks for unsupported audience exclusions, unresolved interest targeting, unverified creative localization, or instruction-like prompt text. The response lists the clarification needed. Smart+ Website and Catalog products remain unavailable until the selected account proves eligible; no setup change is required.
- Temporary contract-verification outages no longer tell organizations to accept Terms of Service. Protected REST requests now return HTTP 503 with
SERVICE_UNAVAILABLE, while MCP calls return a retryableSERVICE_UNAVAILABLEtool error. Child-account creation preserves its existing success response contract and returns the same retryable 503 when post-create verification is unavailable; its durable provisioning receipt makes that retry idempotent. Genuine missing-contract and unaccepted-terms states continue returning403 TOS_ACCEPTANCE_REQUIREDon REST surfaces and the corresponding contract or acceptance-required tool error on MCP surfaces. - The full-plan proposal card now leads with the composed pitch instead of technical plumbing: sellers reading a proposal (from a demand-inbox row’s “View full plan”) see the storefront’s argument first — or a plain line stating that the pitch is still composing or wasn’t composed, when there isn’t one. Each product row now shows its own name and description before its delivery/rate/price terms. Technical details (artifact IDs, digests, Copy JSON) stay collapsed, one tap away.
5.213.11 — August 19, 2026 at 4:28 AM UTC
- Meta Page Likes (
meta_engagement_page_likes) campaigns now return a clear pre-flight error instead of failing at Meta’s API, and the product is no longer advertised as executable in product discovery. Meta no longer acceptsPAGE_LIKESas an optimization goal forOUTCOME_ENGAGEMENTcampaigns (error 100/2490408). Usemeta_engagementfor general page engagement while a replacement configuration is investigated.
5.213.10 — August 19, 2026 at 4:01 AM UTC
- If your support Slack channel was archived, select Slack again in account
- communication settings to restore it. No action is needed for active channels,
- and the setting confirms success only after the active channel binding is
- durably saved.
- Buyer accounts can now open Plan & Billing through v3 to review and complete
- billing setup.
5.213.5 — August 19, 2026 at 1:59 AM UTC
- Buyers now get more of their selected discovery time to receive results. Discovery starts the same way as before, with no action required; the faster path will roll out gradually while we monitor reliability.
- Sellers now receive a deadline based on the time actually left when their request arrives. No seller integration changes are required.
5.213.3 — August 19, 2026 at 1:06 AM UTC
- Meta creative previews now carry a self-contained read-only staging proof that
- renders the protected creative manifest without relying on mutable saved
- creative state.
5.213.1 — August 18, 2026 at 11:42 PM UTC
- Saved Meta creatives now preview from their tenant-scoped ledger identity even
- when the original asset was localized into private storage. Supplied assets
- still require an exact match, and missing identities fail closed.
- Boolean query parameters now preserve
falseand reject invalid values across - reporting, service-token, test-cohort, and system-token endpoints. Their
- published OpenAPI types remain boolean. Media-billing uniqueness conflicts now
- cross the transaction boundary, preserving the existing explicit conflict
- response only after rollback, and the shared wrapper rejects callbacks whose
- commit PostgreSQL converted to a rollback. Existing endpoint names, response
- shapes, and accepted
true/falsespellings are unchanged.
5.212.0 — August 18, 2026 at 10:50 PM UTC
- Plan & Billing → Plan & pricing now shows “Not priced yet” for a rate-card activity whose cost is still being measured, instead of rendering “NaN IUs”.
- In Campaign Creative Assets or through
preview_creative, buyers can now see the submitted asset and open Meta’s authoritative render before activation. No campaign setup changes are required. Previews stay bound to the selected account, open safely outside Interchange, and fail closed when the creative or placement cannot be verified. - Delivery reporting now continues for active direct media buys after their seller moves to typed storefront routing. No buyer action is required.
5.211.3 — August 18, 2026 at 9:27 PM UTC
- Large property lists now resolve their inventory identifiers through count-,
- byte-, and time-bounded bulk requests, so creating a list with thousands of
- domains no longer depends on one registry request per domain, long identifier
- values do not overflow the bounded registry response reader, and queued lookup
- waves cannot outlive the mutation. Slow or unavailable registry lookups remain
- safe and do not trigger a wave of registration attempts. No request or response
- fields changed.
- Spotify audience discovery now labels provider audiences as non-activatable until campaign targeting supports attaching them. Provider audience inventory remains visible, custom-audience deletion remains available, and no action is required.
- Inventory-source test planning now gives slow but responsive sales agents more time to return products and keeps them testable when a capability refresh fails. Last-known capabilities and successful product traffic are labeled as separate evidence. Nothing changes on the sales-agent side.
- Pinterest video and Standard Pin retries are now safer and easier to reconcile. If an upload or provider read times out, Interchange resumes the same Pinterest media, Pin, and assignment instead of creating duplicates. Creative listings preserve the original format and identity, paginate large accounts, and no longer mistake changing Pinterest rendition details for a changed creative. If Pinterest’s response is uncertain, the creative stays paused and support is alerted; a missing ad is rechecked for 15 minutes before replacement. Generated 2:3 creative remains planned, while ordinary Standard 2:3 Pins remain available. This buyer-side reliability update does not affect seller storefront ranking or exposure. No action is needed.
- Older unchanged pending approvals can now be decided when their historical routing record is incomplete or missing, provided the person deciding is in the storefront’s current eligible approval audience.
- Buyer API and MCP brand updates now repair older advertisers with missing settings instead of returning 404, while preserving currency already established by campaigns or seller accounts. Retry the same v2
update_advertiseror v3save_advertisercall; no request changes are needed, and advertisers with existing settings are unchanged.
5.211.0 — August 18, 2026 at 6:59 PM UTC
- Google Ads Search conversion campaigns can now be tested with one exact website or phone-call event goal. The selected conversion actions must be enabled, primary actions that cover their complete Google category and origin groups; partial groups, value targets, and target CPA remain unavailable. Interchange creates the campaign paused and returns an error unless Google reads back the same advertiser, effective conversion customer, campaign goal, and conversion-action set.
- Responsive search ads and keywords still require a separate creative-sync call, and this change does not make Google Ads Search conversions generally available. Existing campaigns need no action.
- Murph now answers from the whole of what you gave it.
- Ask Murph about a long page, a document you uploaded, or a long Slack thread,
- and it used to receive only the beginning of it — then answer as though that
- were everything. It now gets the whole thing. If something is still too long to
- fit, Murph says its view is incomplete and asks you for the missing part rather
- than guessing at it.
- This applies to Murph wherever you talk to it, in the Interchange app and in
- Slack. There is nothing to change on your side, and nothing about your
- storefront, campaigns, or reporting changes.
- Several v3 agent surface improvements to reduce buyer confusion and agent verbosity:
- Permission prompt titles are now buyer-readable:
searchshows “Search campaigns, sellers, proposals, and more” (was “Search”) andgetshows “Look up a specific item” (was “Get one object”). save_advertisersandbox description now explains the choice in plain language before the buyer is asked to decide, and notes the choice is permanent.- Tool descriptions for
save_campaign,save_advertiser,request_proposals, andsave_media_buyare shortened to reduce agent response length.save_campaignnow instructs agents to ask the buyer three questions (goal, audience, what is being promoted) before writing the brief, and the brief field notes thatnullis a no-op. - When you use product discovery to plan a Snap campaign, complex purchase briefs now keep the exact Snap product, price, currency, targeting, and creative asset selected for execution. If a brief asks for an existing Public Profile post, an audience exclusion that is not available for Snap, or an unsupported placement, it asks you to revise the brief instead of silently choosing a different setup. Nothing changes on your side, and the Snap products available today are unchanged.
- When buyers review a LinkedIn campaign plan, they now see the proposed objective, geography, creative, placement, and required setup before execution. Delivery requests now return an error instead of potentially incorrect totals when LinkedIn’s account or campaign data conflicts with the recorded package; retry after that data is repaired. Existing campaigns need no migration, while Lead Gen activation remains restricted pending signed staging validation.
5.210.0 — August 18, 2026 at 3:32 PM UTC
- Meta Lead Generation campaigns that reference an optimization event source which isn’t the account’s authorized Facebook Page now fail with a clear, correctable error instead of a misleading “temporarily unavailable” one. Retrying won’t help here — the event source needs to match the authorized Page before resubmitting.
- Meta Traffic (Landing Page Views) campaigns will now go through. The fix for the missing
custom_event_typeon this ad set’s promoted object (shipped in #10870) used a value Meta doesn’t accept for that field; the conversion event now maps to Meta’s own closest accepted value. Nothing to change on your side. - Several v3 buyer surface improvements based on offsite testing:
request_proposalsnow includes per-seller detail in the response text: failed sellers show the error code (e.g.PRODUCT_NOT_FOUND), and sellers that return bare products show the product count, theproductQueryIdneeded to callsave_media_buy, and a pointer tostructuredContent.perSellerfor full product details.save_campaignnow includes the current revision number in the response text so buyers can passexpectedCampaignRevisiontorequest_proposalswithout an extra round-trip. Required create fields (name,flight,budget) are now validated together and returned in a single error instead of one at a time.save_advertisernow explicitly warns whenprimaryCurrencyis omitted (the field still defaults to USD — no existing callers need to change anything). The warning makes the lock visible:primaryCurrencycannot be changed after the first campaign or after any seller account binding, and a EUR budget on a USD advertiser is immediately rejected at campaign creation.searchwithkind: "advertiser"is a new capability: buyers can now list their own advertisers (with optional name filter and cursor pagination) instead of receiving an unsupported-search error.- Each health check on an inventory source now raises and clears its own “needs attention” item. Previously all checks shared a single item, so one check recovering could clear an item another check’s unresolved problem still justified. A source with two separate problems now shows two items, and each closes when its own problem is fixed.
5.209.1 — August 18, 2026 at 12:26 PM UTC
- Meta Traffic (Landing Page Views) and Engagement campaigns will now go through. Traffic ad sets were missing a required conversion-event field on the promoted object; Engagement ad sets were billed on an event type Meta no longer accepts for that optimization goal. Nothing to change on your side.
5.209.0 — August 18, 2026 at 12:01 PM UTC
- Existing progressive-discovery clients need no changes. In incomplete initial
- REST discovery and later browse-poll responses, SSE revision events, and
discovery.revisionwebhooks,pendingAgentsis now always an array; when no- seller is currently pending it is
[]instead of being omitted. Complete - responses are unchanged.
5.208.0 — August 18, 2026 at 11:36 AM UTC
- Older approvals that were already waiting before approver routing was recorded can now be decided by the storefront’s current approvers. An active approver can clear these stale items without resaving the routing rule; approvals still fail closed when no eligible approver exists.
5.206.0 — August 18, 2026 at 10:14 AM UTC
- Meta Engagement, Traffic, and Sales campaigns will now go through when interest targeting is configured in the campaign brief. Meta’s ad-interest search results carried extra provider metadata (audience size estimates, taxonomy path) that was being echoed back into the ad set’s targeting spec, which Meta rejects on write. Only the interest ID and name are sent now. Nothing to change on your side.
- When a campaign launch fails because a seller’s media buy cannot be executed, the error now includes the ADCP error code and recovery hint (for example
SERVICE_UNAVAILABLE, transient) so the buyer knows whether to retry. Previously the message said only “execution failed” with no actionable detail. - Meta city targeting now ignores non-city entries returned by Meta’s city search while continuing to require an exact city type, name, and country match and rejecting malformed city data. Nothing changes for buyers whose city targeting already resolved successfully.
- Buyers now see billing status and guidance that match the live payment rails: they can still fix card failures, and Media Billing is clearly labeled preview-only. Sellers now see payout-setup activity drawn only from payout-specific audit events. The Media Billing preview label does not change seller settlement or pay-when-paid behavior; those policies are still being defined. No integration changes are required.
5.205.0 — August 18, 2026 at 8:21 AM UTC
- Connections now shows each provider account’s effective reporting time zone and flags when it differs from the advertiser preference, so reporting-day boundaries are clear before buying.
5.204.1 — August 18, 2026 at 7:28 AM UTC
- Google Ads creative image uploads now accept only bounded GIF, JPEG, or PNG files from public HTTPS URLs and protect provider connections from private-network requests, redirects, stalled downloads, and mismatched file content.
- Meta live geo diagnostics now report the failing provider response schema path, expected category, and received JSON type without exposing provider values.
5.204.0 — August 18, 2026 at 6:31 AM UTC
- Sellers adding their first modular source now remain in its workspace after creation, ready to upload availability. If the workspace cannot open, the setup task stays available to retry.
- Restore first-party inventory Sources whose binding snapshot proves they were active before Agent identity classification, including the two affected Triton Sources.
5.203.1 — August 18, 2026 at 5:52 AM UTC
- Updated self-contained HTML creatives now keep measurement working after an edit by using browser-ready tracking URLs without unresolved identity placeholders.
5.203.0 — August 18, 2026 at 5:34 AM UTC
- Meta buyers can now resolve city targeting when Meta returns the city’s parent region identifier as a number, including briefs targeting Paris. The identifier is normalized without changing the requested or provider geography.
- Existing posts from connected ad platforms now appear as Existing post in Claude, ChatGPT, and Murph while keeping the same creative identity as uploaded ads. Uploaded creatives and existing posts remain together in one list, and post-only views use the shared creative asset shape instead of provider-specific controls. No action is needed unless Meta asks you to reconnect for Page permissions.
5.202.3 — August 18, 2026 at 4:28 AM UTC
- Meta Awareness campaigns will go through even when interest targeting is configured in the campaign brief — Meta does not allow it with the Awareness objective, so it is now automatically excluded for those campaigns. Nothing to change on your side.
5.202.2 — August 18, 2026 at 4:08 AM UTC
- Your marketing email preference is now retained when you create an Interchange account. Nothing to change on your side.
5.202.1 — August 18, 2026 at 2:58 AM UTC
- Meta ad set creation no longer fails when brief-derived interest themes (e.g., “web browsing”, “video”, “social media”) cannot be matched to Meta’s interest taxonomy. Interest themes that resolve to a taxonomy entry are applied to the ad set; themes with no match are skipped gracefully. Previously, any unresolvable theme caused the entire buy to fail with a 400 error before reaching Meta. No seller action required — interest theme targeting from briefs is best-effort and does not change how products are configured.
5.202.0 — August 18, 2026 at 2:26 AM UTC
- Your product marketing now has its own page in the Teach section of the seller rail, so you can see what your agent has learned from your own marketing material. It opens with how many claims are teaching the agent, how many your live inventory backs, how many are gaps, and how many haven’t been checked, each with the time those verdicts were measured. Below that, one card per piece of material under the name you gave it, showing its version history and every claim in your own words with the provenance it actually has: the verbatim quote and where it sits, the stated reason there is no quote, or a plain note that the claim is your own account of a page we did not fetch. Each gap comes with both ways to close it: open your setup to bring the inventory, or retract the claim behind a confirmation. Each claim also shows the proposal passes it fed, named by buyer and date. The rail row shows your gap count so you learn a decision is waiting without opening anything, and when a proposal’s fed-by detail names “Your marketing”, tapping it opens the page on that exact claim. Nothing is written to your corpus from the page except a retraction you confirm; adding material still goes through Murph’s existing confirmation step, and site claims are still stored as your own account rather than a quote, because we don’t fetch that page.
5.201.3 — August 18, 2026 at 1:52 AM UTC
- The inventory source example pack now downloads as a ZIP from both seller setup guides. No setup behavior changed, and nothing needs to be updated on your side.
5.201.2 — August 18, 2026 at 1:30 AM UTC
- Meta Facebook Page Likes ad sets now correctly include
promoted_object.page_id, resolving HTTP 400 errors (subcode 1487079) that previously blocked delivery for OUTCOME_ENGAGEMENT / PAGE_LIKES campaigns.
5.201.1 — August 18, 2026 at 1:10 AM UTC
- Sellers can now download a synthetic onboarding pack and carry the inventory sources created in guided onboarding directly into a buyer-and-seller transaction test. Buyers do not need to change their workflow. Cancelling a media buy now releases its reserved inventory even when an earlier cleanup only partly completed.
- Seller account deletion now returns a safe identifier for the linked resource that blocked removal. Scope3 operators can use that identifier to complete cleanup without exposing raw database error details.
5.201.0 — August 17, 2026 at 11:29 PM UTC
- When your organization already has a designated account owner, the signup page now asks additional teammates to request an invitation from that owner. This prevents a later signup from taking over the organization; existing members and invited teammates can continue to sign in or accept their invitation as usual.
- A seller that passes the wiring check but has no active routing agent is now classified as
seller_unavailableinget_statusinstead of appearing asreadyand then failing withACCOUNT_NOT_FOUNDat proposal time. - When a buyer creates a wholesale media buy from a discovery result, each line
- item now keeps the seller’s accepted image, video, and other creative formats.
- Media-buy API responses return those requirements in
format_options, and - creative validation and delivery use the same requirements—even when the same
- product is selected more than once or its pacing changes. Buyers do not need
- to change existing requests.
- Sellers’ published format requirements now remain attached to the buy through
- validation and delivery, so buyers see the formats sellers intended to accept.
- Sellers do not need to republish catalogs or update their format declarations.
- Wholesale media buys created before this change may not include
format_options. To assign creatives using current requirements, run discovery- again and create a new media buy.
5.200.4 — August 17, 2026 at 10:21 PM UTC
- Feed-backed modular inventory sources now release their booking-ledger capacity when a buyer cancels a media buy. Cancellation retries converge safely, and a source cannot be removed while an active typed media-buy route still depends on it.
- Ad platform compatibility pages now use one consistent Feature / Availability / References / Comments layout, with plain “Available / Partial / Testing / Planned” status instead of the old “who sets the limit?” column. Every page also explains how the connection works (OAuth vs. API key, account mapping), what Interchange actually does for webhooks versus polling, and reporting freshness and currency handling — with raw provider codes and object-field mappings moved into an optional “Technical mapping” section instead of the main tables. Roadmap references are now shown as plain text instead of linking to Scope3’s internal issue tracker.
5.200.3 — August 17, 2026 at 9:52 PM UTC
- Agency buyers creating Meta campaigns for Île-de-France or Paris can rely on exact location targeting: campaigns stay paused unless Meta returns the requested geography exactly, and a failed verification cannot spend. No workflow changes are required.
- This buyer-side assurance does not change how seller inventory appears or operates.
5.200.2 — August 17, 2026 at 9:32 PM UTC
- Sellers enabled for modular inventory sources can now finish setting up feed-based inventory in Murph. Add a source creates the booking ledger and manual fulfillment workflow required to accept buyer bookings, then opens the new source workspace for availability upload. Existing sources require no changes.
- Buyers can now archive a campaign when a seller has already removed its full media buy. Cancelling selected packages still surfaces the seller’s error instead of changing the local buy; no action is required for full campaign deletion.
- Inventory sources that were already active when their seller-owned Sales Agent identity was recorded now stay active while the newer connection-authorization setup is completed. Agent readiness is shared across that Agent’s Sources once any governed Source completes a transaction. Pre-split readiness is retained as an explicitly labelled compatibility grandfather, without claiming that a transaction or certification occurred. Sources incorrectly moved to pending are restored automatically; sellers do not need to reconnect them or repeat setup.
5.200.1 — August 17, 2026 at 8:49 PM UTC
- Reconnect your Google Ads account if account discovery failed during setup. New
- and reconnected accounts can now discover accessible ad accounts normally;
- existing successful connections need no action.
5.200.0 — August 17, 2026 at 8:25 PM UTC
- Ad platform compatibility pages now link every incomplete capability to a named roadmap ticket and explain what is missing. Pinterest’s generated 2:3 Pin is now correctly described as an incomplete generation-to-Pin workflow, while the ordinary 2:3 Standard Pin remains available.
5.199.0 — August 17, 2026 at 7:11 PM UTC
- Existing advertisers and integrations continue to work with the same defaults for Countries, Reporting time zone, Channels, and Sandbox. No action is required.
- When you create an advertiser in Interchange, one guided task now collects Brand domain, Countries, Currency, Reporting time zone, Sandbox, and Channels. Confirm the buyer account’s Operator in Buyer Setup, then link sales-agent accounts in Connections. Events and Audiences switches appear only when the sales agent declares support, and remain off until you turn them on.
- After creation, you can edit the advertiser name and Channels. Reporting time zone stays editable until the advertiser is first used by a campaign or linked sales-agent account. In the Interchange UI, Brand domain, Countries, Currency, and Sandbox stay fixed; direct v2 API integrations can update Brand domain, Countries, Currency, and Reporting time zone before first use. Sandbox stays fixed in both surfaces. A seller may use a different effective reporting time zone.
- Sellers do not need to act. Buyers now see each sales agent’s declared Events and Audiences capabilities in Connections; seller setup and transaction behavior do not change.
5.198.0 — August 17, 2026 at 6:20 PM UTC
- Products with Meta interest theme targeting now resolve correctly at buy time. Previously, any product configured with interest themes (e.g. “running”, “social media”) would always reject buys before reaching Meta — regardless of whether those themes exist in Meta’s interest taxonomy. That blanket block is removed.
- How it works now: When a buyer submits a buy, each interest theme is looked up against Meta’s interest taxonomy and applied to the ad set. If every theme resolves, the buy proceeds. If any theme has no match in Meta’s taxonomy, the buy is rejected pre-flight — no ad set is created — and the
create_media_buysresponse returns an error identifying the unrecognised theme (e.g.Interest theme "obscure_niche" has no match in Meta's interest taxonomy and cannot be applied). The buyer sees this error in the tool response; the seller sees buy failures on that product until the unrecognised theme is corrected. - What to check: If your Meta products have interest themes configured and buys have been failing, they will now succeed on the next attempt — as long as the configured themes match terms in Meta’s interest taxonomy. If a theme is too niche or misspelled, update the product’s interest configuration to use a term Meta recognises.
- When creating an advertiser and the brand domain is already in use, the error now includes the existing advertiser’s id so you can reuse it immediately without an extra lookup.
searchwithkind: "advertiser"in a buyer account now returns a clear message explaining how to recover the advertiser id, instead of a generic wrong-account error.request_proposalsfailures for unconfigured sellers no longer point back atreadyDestinationsas the fix — the error now directs to your account manager.- Media buys on your approval queue now say whether they can actually deliver. Each pending entry carries a
readinessblock naming every package that would be forwarded with no creative, why each of the buyer’s campaign creatives could not fill it — the measured value against your declared requirement, or an ambiguous format identity naming the options the buyer has to choose between — and any creative whose sync to your storefront failed. The Approvals Page shows the same facts on the card and flags the row before you expand it. - Nothing is blocked. An unready buy still forwards when you approve it, because a creative can be attached after booking. What changes is that you see the problem before spending a decision on it, and can hand it back to the buyer instead of approving a buy the destination will refuse.
- This is a seller-side view only. Nothing changes in the buyer’s own tools, so a buy you hand back still reaches them as an ordinary rejection with whatever note you write — tell them what you saw, or they have nothing to act on.
5.197.3 — August 17, 2026 at 12:48 PM UTC
- Storefront adapter connections stay usable while media buys wait for operator approval. Pending approval handles are no longer sent to providers as campaign IDs, so sellers are not asked to reconnect a healthy account.
5.197.2 — August 17, 2026 at 12:34 PM UTC
- Fixed Meta Traffic (LINK_CLICKS) ad set creation failing with a 400 error due to a missing
promoted_object.pixel_id, and Meta Engagement Page Likes ad set creation failing due to an invaliddestination_type. - A “15 second” audio or video creative is no longer turned away from a 15-second slot for being a few milliseconds off. Nothing for you to do: creatives that were rejected this way now attach, and the length a product asks for has not changed.
- This affected slots where the seller publishes their formats in the older style, as ids like
audio_15s— the duration is part of the name, and we were treating it as an exact target. Measuring a file’s duration is not precise to the millisecond, so an ordinary 15-second master could measure 15047ms and be refused. Those slots now accept anything within 100ms of the stated length, and a rejection quotes the length the slot asks for so it is clear what to deliver. A genuinely wrong-length file is still rejected: 100ms is a tiny fraction of the gap between standard spot lengths. - If you want the detail: an MP3 without a Xing header is measured from its byte rate, so re-tagging the same audio changes the number, and with a Xing header the value snaps to the MPEG frame grid — at 44.1kHz a value like 15000ms is not even representable, since 574 frames is 14994ms and 575 is 15020ms.
- If you sell inventory: a
duration_ms_exactyou declare directly in a product’s canonicalformat_optionsis unchanged — it is your stated requirement and is still matched exactly. The 100ms applies only where we derived the pin from a legacy format id’s name, which we can no longer treat as an exact constraint you asserted. If you accept a range of spot lengths, declareduration_ms_range: both ends are enforced exactly as written, with no tolerance.
5.197.1 — August 17, 2026 at 12:12 PM UTC
- Meta media-buy updates now distinguish failures that happened before any
- provider write, so buyers can retry those transient failures safely while
- ambiguous post-write failures remain fail-closed.
5.195.0 — August 17, 2026 at 10:00 AM UTC
- When a buyer attaches a JPEG or PNG while working with any connected sales-adapter storefront, their agent can use the storefront’s private image-upload task instead of putting the file contents in chat. The uploaded file is stored privately in Interchange and is accessible only within that buyer account. Delivery currently works only through the Meta sales adapter; other adapters reject it before sending the file to an ad platform. Sellers do not need to change their storefront setup.
5.194.8 — August 17, 2026 at 9:29 AM UTC
- Google Ad Manager setup guidance now distinguishes the base trafficking grant
- from optional automatic-approval permissions and explains how externally
- approved orders return to active status.
- No seller action is required; this documentation-only update does not change
- runtime behavior.
- Meta French region and city campaigns now carry signed proof of their exact provider geography without claiming unrelated audience targeting.
5.194.7 — August 17, 2026 at 8:48 AM UTC
- If your managed sales-agent integration submits a custom signal-pricing option,
- include a non-empty
metadataobject that explains how the charge is calculated. - Requests without that metadata are rejected at submission. CPM,
- percent-of-media, flat-fee, and per-unit pricing options are unchanged.
- Campaign launch failures now name each failing media buy and seller with the reason in the response text, plus the campaign’s current revision so a retry can be composed without re-reading. Previously the details were only in a structured field many hosts do not display.
5.194.3 — August 17, 2026 at 7:01 AM UTC
- Clarify that agents should use
assets.published_postto identify an existing-post creative in Claude, ChatGPT, or Murph. Host controls are not yet uniform, and ordinary buyer availability is unchanged; no action is required.
5.194.2 — August 17, 2026 at 6:12 AM UTC
- Meta campaigns with an immediate start time (“start now”) now create and update successfully. Previously, the “asap” scheduling sentinel was passed literally to Meta’s API, which requires a datetime value and rejected it with a 400 error.
5.194.1 — August 17, 2026 at 4:56 AM UTC
- Meta adapter permission errors (e.g., Facebook Page not authorized for the ad account) now surface with a clear
PERMISSION_DENIEDerror message instead of the generic “Upstream request failed” response.
5.194.0 — August 17, 2026 at 4:19 AM UTC
- If Scope3 has already mapped your sales agent to your organization, your Agents page now shows it as “Needs confirmation” instead of “No Agents yet.” Organization administrators can review the mapping evidence and claim the agent in one step — or flag it to support if it isn’t yours. The create-agent flow also surfaces these unclaimed agents, so you won’t accidentally create a duplicate.
5.193.1 — August 17, 2026 at 3:37 AM UTC
- When you view a Meta campaign after creating or updating it, disabled placement controls now remain shown as disabled even if Meta omits the empty value from its response. No action is required.
5.193.0 — August 17, 2026 at 3:09 AM UTC
- If your organization runs its own sales agent, you no longer wait on Scope3 to wire it up — you can connect your agent to your inventory source yourself, and the connection records your organization as the agent’s operator with no separate verification step. This is API-only today (
POST /api/v2/storefront/inventory-sources/{sourceId}/agent-binding, organization administrators, in preview): the agent must belong directly to your organization, an existing connection returns a conflict instead of being overwritten, and connecting a partner’s agent from another organization is still arranged with Scope3. - Separately, the powered-by-agent lookup (
GET /api/v2/storefront/inventory-sources/{sourceId}/powered-by-agent) now works at its documented path instead of returning a 404.
5.192.2 — August 17, 2026 at 2:53 AM UTC
- No action is needed. Meta media-buy readback now preserves explicit proof of
- disabled placement controls, including Messenger, and verifies device
- placement exactly so targeting checks cannot mistake missing or drifted
- placement evidence for an exact match.
- Paused Meta campaign budget updates now appear on the media buy as soon as Meta accepts them, while the campaign remains paused and cannot spend. This does not activate the campaign or change how buyers submit updates, so buyers do not need to change their workflow.
- Seller integrations now receive a retry if Interchange cannot safely record an accepted media-buy update, rather than a success response while buyers may still see stale data. Successful webhook acknowledgements are unchanged, and sellers do not need to change their integration.
5.191.4 — August 17, 2026 at 1:33 AM UTC
- No action is needed. When buyers view package targeting on a Meta media buy, French regions that Meta represents with multiple locations now show an exact targeting match instead of an unproven result. This does not change anything sellers see.
5.191.3 — August 17, 2026 at 1:18 AM UTC
- Meta ad set creation with
create_media_buysno longer fails with a “page_id is required” error on ad accounts with multiple authorized Facebook Pages.
5.191.2 — August 17, 2026 at 12:52 AM UTC
- The seller setup “Partner sales agent” option now explains how to connect a certified partner’s agent through Scope3, instead of showing a disabled button.
5.191.1 — August 17, 2026 at 12:38 AM UTC
- No action is required for existing partner-agent connections. New storefront connections must start and finish authorization in the same browser; if that flow is interrupted, restart it in that browser.
- Buyers comparing sellers now see the individual-brand price until both brands confirm their brand-house relationship. Quotes that previously used an unconfirmed house discount may therefore increase; the discount returns automatically after confirmation.
- Sellers need no storefront setup changes. Buyers see a seller’s house discount only after both brands confirm the relationship, and otherwise compare that storefront at the individual-brand price.
5.191.0 — August 17, 2026 at 12:25 AM UTC
- Agent pages now link straight to Source diagnostics for owners, and inventory sources label their Agent connection state accurately — including your own agents as “Your Agent”.
- Isolate creative-delivery proof from independent targeting equality while preserving actionable broad-canary diagnostics.
5.190.2 — August 16, 2026 at 11:55 PM UTC
- Keep Meta no-spend canaries independent of the buyer reporting feature gate,
- attribute governed CRM readiness failures to their measurement stage, and
- publish safe pre-dispatch cohort diagnostics.
- Meta product discovery now keeps the exact French region or city you asked for attached to the product it returns, so create and update can verify the same location before spending. This is for API and MCP buyers who target France; sellers and other buyers are unaffected. Nothing to change on your side.
- Use the Ad platform compatibility guide to compare every active direct
- ad-platform adapter before planning or reviewing an integration. Each provider
- page shows what the current implementation supports, what has deterministic
- contract-test coverage, whether fresh signed provider evidence exists, and
- which account or relationship gates still apply. Existing REST and MCP calls
- behave the same, so no integration changes are required.
- The primary readers are buyer engineers and agency operators integrating over
- REST or MCP. Sellers and provider partners should expect these pages to expose
- review-ready, not-provider-endorsed readiness states and named gaps to buyers;
- partner corrections are treated as compatibility feedback, not certification.
- Monetization: none. This documentation adds no billable surface, packaging, or
- unit-economics change; brief composition remains a separate product surface.
- Rollout: ungated documentation-only publication with no runtime feature flag or
- kill switch because adapter behavior does not change. Reverting the docs commit
- removes the publication if a factual correction requires withdrawal.
- Measurement after 30 days: each newly listed provider page has at least one
- external unique view, all partner feedback is triaged within two business days,
- and no known factual correction remains untracked.
- Use the AudioStack creative-tool compatibility page to see exactly what can be
- built and what requires separate work. AudioStack can render one hosted audio
- creative at a time, but it does not support preview-only auditioning, provider
- creative-library round trips, or multiple output lengths from one brief. To
- audition or produce both 15-second and 30-second versions, run separate full
- builds. No API behavior changes and no action is required for existing builds.
- The primary readers are buyer engineers and agency creative operators using
- AudioStack through Interchange. Sellers and AudioStack partners should expect
- the public page to expose review-ready, not-provider-endorsed limitations;
- corrections are treated as compatibility feedback, not certification.
- Monetization: none for this documentation. It introduces no new billable
- surface, packaging, or pricing change. A full AudioStack render continues to
- use the buyer’s mapped provider account under the existing provider terms.
- Rollout: ungated documentation-only publication with no runtime feature flag or
- kill switch because runtime behavior does not change. Reverting the docs commit
- withdraws the page if a factual correction is required.
- Measurement after 30 days: the page has at least one external unique view, all
- AudioStack partner feedback is triaged within two business days, and no known
- factual correction remains untracked.
5.190.1 — August 16, 2026 at 11:11 PM UTC
- You can now use the Ad platform compatibility guide to compare OpenAI Ads, Meta
- Ads, Snap Ads, and Pinterest Ads when planning or reviewing an integration. It
- shows exact AdCP-to-provider object mappings, distinguishes implementation and
- contract-test status from fresh signed live evidence, and covers account
- permissions, market and beta-access constraints, known gaps, and public review
- endpoints. Existing REST and MCP calls behave the same, so no integration
- changes are required.
5.189.0 — August 16, 2026 at 10:07 PM UTC
- Pinterest
log_eventis no longer listed or callable through the storefront MCP tool surface while safe Tag setup is incomplete. Earlier calls could mistake an event-source ID for an advertiser account and report events processed before Pinterest confirmed them. If you relied on an earlier Pinterest processed result, verify it in Pinterest Ads Manager. Seller-facing storefront behavior is unchanged. The tool will return only after account-scoped Tag setup and live provider validation are complete. - LinkedIn-connected storefronts now show only campaign types the adapter can
- create successfully. Buyers can inspect account-scoped professional traits,
- such as job seniority or company size, as non-live inventory, but cannot select
- them for ordinary campaign creation until protected provider certification is
- retained. Invalid, conflicting, or ambiguous choices are stopped before
- anything is created.
- If you are newer to LinkedIn ads, the campaign menu may look shorter. This is
- expected: choose from the options shown, and no settings change or other action
- is required. Existing LinkedIn campaigns are not changed.
- Brand teams and agencies get account-scoped inventory with explicit activation
- status. Builders receive exact signal identifiers for inspection and a clear
- pre-provider error if an ordinary create request attempts to target them.
- Sellers do not need to reconnect LinkedIn; hiding unsupported campaign and
- targeting choices prevents buyers from selecting options that would fail later.
- This does not change prices, billable units, fees, or packaging. It is a
- reliability and catalog-accuracy improvement, not a new monetization surface.
- Inventory follows the existing LinkedIn connection and approved campaign list;
- there is no new switch to configure. Operators can remove a campaign type or
- disable the connection to stop new campaign creation. Professional targeting
- activation remains unavailable to ordinary buyers until the protected test
- account completes a paused create, read, update, cancel, and cleanup cycle with
- matching targeting and no resources left behind.
- We will monitor campaign selections, successful creations, validation errors,
- differences between requested and returned targeting, cleanup failures, and
- LinkedIn rejections. Availability expands only after the protected test passes,
- returned targeting matches, and cleanup leaves no resources behind. Operators
- will narrow availability if any of those results get worse.
- When you create a Meta Instant Form Leads campaign, Scope3 now keeps the
- selected Page, form, audience, location, age range, and creative together
- throughout the campaign. No setup changes are required.
- Sellers: not applicable. This changes only the connected Meta buying workflow
- and does not change storefront ranking, inventory labels, or readiness shown
- to buyers.
- Fixed a precision bug in the Amazon Sponsored Products adapter where very
- large campaign, ad group, product ad, keyword, and targeting-clause ids could
- be silently rounded, and a DSP order id could be miscoerced into a Sponsored
- Products campaign id during create_media_buy. Amazon provider ids are now
- kept as exact strings end-to-end, and a newly-created id that doesn’t look
- like a valid Amazon id now fails the request instead of being trusted.
- Snap’s published creative-format catalog (the AAO community mirror) no longer lists the “existing post” format as generally available — it requires a separate provider allowlist most accounts don’t have yet, and
create_media_buy/sync_creativesalready rejected it for everyone else. This catalog fix makes the published capability list match that existing behavior; it does not change what any account can already do, and Awareness and Traffic campaign creation are unaffected.
5.187.3 — August 16, 2026 at 7:51 PM UTC
- Account and Partner workflows now recover when staging’s cancellable Core database reader cannot verify the certificate chain.
5.187.2 — August 16, 2026 at 7:20 PM UTC
- Account creation now rejects unconfirmed organization conversion cleanly, while explicitly confirmed onboarding flows can provision their first account.
5.187.0 — August 16, 2026 at 6:29 PM UTC
- New Seller accounts can now complete their confirmed no-spend source test through the Buyer campaign stack without gaining general Buyer access.
- Google Ads API buyers should update new campaign requests to use Search website traffic.
get_productsno longer lists conversion, Display, Performance Max, Demand Gen, Video, Shopping, or App products, andcreate_media_buyrequests for those product IDs now returnUNSUPPORTED_PRODUCT_CONTRACTbefore Google Ads changes. Continue managing those campaign types directly in Google Ads; reconnecting your account will not unlock them in the API. Existing campaigns need no action, and this does not change what buyers see about a seller. - Search website traffic requests now keep quoted wording and apostrophes intact when Google selects the matching product. Adding or replacing an ad on a running Search campaign no longer pauses the campaign or removes its current ad before the replacement is ready. If Google rejects the new ad or its safe removal cannot be verified, the request fails and alerts the operations team while the existing campaign remains available.
- Publisher catalog refreshes now keep using explicit creative formats from the publisher’s live file when the registry is temporarily unavailable. Nothing changes on your side, and registry community catalogs retain their existing precedence when the registry responds.
- For enterprise brands and agencies, adding another Buyer or Seller account from
- a standalone account now requires an explicit governance decision. Before
- Interchange creates the organization, an administrator confirms that contract
- and billing authority will move to it and that they will become an organization
- administrator. Account resources and direct memberships remain scoped to each
- account; account-specific standing still overrides organization standing. No
- existing account changes unless an administrator starts this flow.
- People using the Interchange UI do not need to update anything. When they add
- the account, the UI presents the disclosure and sends the confirmation after
- they accept it.
- Seller impact is indirect and limited to Seller administrators or integrations
- that use this account-creation flow. It does not change what buyers see about a
- seller, storefront inventory or demand, media-buy execution, settlement,
- pricing, billable units, packages, or commercial approval.
- Integrations that call
POST /api/v2/accounts/create-childfrom a standalone - Buyer or Seller account must present the disclosure and send
confirmOrganizationConversion: true. Omitting the field or sendingfalse- on a new conversion returns
409 Conflictbefore anything changes. Calls from - an account already managed by an organization should continue to omit the
- field.
- Use the same
idempotencyKeyonly to retry the same account-creation request. - If Interchange already saved the organization and account structure before a
- later setup step failed, a retry with that key finishes the missing
- administrator access, contract transfer, Buyer access setup, and account-view
- repairs instead of creating duplicates. This remains true if the retry omits
- confirmation or sends
false: confirmation can stop a new conversion, but it - cannot undo one already committed. The retry still requires the appropriate
- administrator authority, and reusing the key for different account details
- returns
409 Conflict. Separating the account again requires a supported - migration.
- Enforcement starts only after the confirmation-compatible API and UI release
- (#10473) is fully deployed across the fleet and 100% of Interchange UI
- conversions send explicit confirmation. Rollout health is measured from the
create_child_accountorganization-attachment audit- (
confirmationStatus: explicit), responses from POST /api/v2/accounts/create-child, and audit-relay dead letters. After- enforcement, pause or roll back if conversion
409responses exceed 1% for 15 - minutes or if any attachment audit is dead-lettered.
5.186.0 — August 16, 2026 at 5:36 PM UTC
- Approved design partners can receive audited, automatically expiring beta access before billing begins, while paid support, service commitments, and tenant authorization remain separate.
5.185.0 — August 16, 2026 at 5:16 PM UTC
- You can now teach your Merchandising Agent how you sell, from the marketing material you already have. Point Murph at your media-kit page, or upload a deck, one-sheet, package menu, case study, audience card, or spec sheet. Murph reads it and proposes the merchandising claims it found; nothing joins your product-marketing corpus until you confirm it. Confirmed claims change how the products your agent composes are named and described, and never change price, floors, eligibility, or availability. Each response in your demand inbox names “Your marketing” among the ingredients that fed it, alongside the claim that shaped it. A claim that promises something checkable — a channel, a creative format, a named audience signal — is reconciled against your live inventory, and anything your catalog can’t back is marked a gap and held back from shaping proposals until you add the inventory or withdraw the claim. A claim with nothing checkable carries no verdict; it is never marked backed. Claims from an upload keep the exact quote and location they came from, or the stated reason that part of the document had nothing quotable; claims from a URL are kept as your own account of the page — we don’t fetch it — and all three kinds are labelled distinctly everywhere they appear, so they are never confused or treated as equally proven. Withdrawing a claim stops it shaping new proposals and keeps the source material and the record of what it already shaped, and re-confirming updated material lands as a new version instead of a duplicate — a page is matched by its address and an upload by the name you give the material, so re-uploading a refreshed deck under the same name replaces the old one and its claims stop feeding proposals right away.
5.184.0 — August 16, 2026 at 4:49 PM UTC
- Buyer and Seller administrators using Create account from a standalone
- account in Interchange now see the organization consequences and must confirm
- them before continuing. Interchange creates an organization and adds the
- existing account to it. Existing Buyer advertisers and campaigns stay with
- their current account, while existing Seller storefront and inventory
- resources stay with theirs. Contract and billing authority move to the
- organization, the confirmer becomes an organization administrator, and current
- direct members remain members of the account rather than the whole
- organization. Hands-on administrators need no setup change; they review and
- confirm only when they create another account from a standalone account.
- An account’s own credit limit, payment terms, and verification status continue
- to override the organization’s defaults; otherwise the account inherits those
- settings. If the account later needs to be independent again, Scope3 Support
- can plan a dedicated migration; this is not a self-service action. See the
- Buyer account overview or [Seller account
- overview](/v2/storefront/account/overview).
- Existing REST account-creation calls that omit
confirmOrganizationConversioncontinue to work in this preparation release.- Integrators ready to adopt the new flow can present the same disclosure and
- send
confirmOrganizationConversion: trueafter a standalone administrator - accepts it. For a fresh standalone conversion, sending
falsereturns `409 - CONFLICT` without changing the account hierarchy. Omission remains compatible
- until the separately released enforcement phase.
5.183.4 — August 16, 2026 at 4:27 PM UTC
- Allow governed Meta cleanup to prove zero spend from exact non-dispatch evidence and authoritative zero local inventory, including safe normalized failure reasons while rejecting unbounded diagnostics.
5.183.3 — August 16, 2026 at 4:12 PM UTC
- Storefront product discovery now checks explicit, currency-qualified hard CPM ceilings against server-calculated pricing, including localized price formats and dollar signs resolved from a known dollar currency. Offers above the maximum are declined without falling back to an unfiltered catalog.
5.183.1 — August 16, 2026 at 3:38 PM UTC
- Buyer agents now receive safe AdCP recovery fields when an in-process storefront rejects
create_media_buy; raw provider details remain hidden. Existing requests require no changes.
5.183.0 — August 16, 2026 at 3:02 PM UTC
- Existing accounts do not need to change. Signup now asks what you want to do
- first, then creates the matching Buyer or Seller account or starts sales-agent
- registration. It explains that an organization can have multiple accounts,
- that Buyer or Seller accounts can be added later, and that buying and selling
- use separate accounts.
- Enterprise brand buyers. Choose Buyer when registering your brand to
- plan and run advertising. A verified work email can make you the first
- administrator of the one matching ownerless Buyer account or organization for
- your domain instead of creating a duplicate. Otherwise, your existing account
- and access remain unchanged.
- Agency buyers. Choose Buyer when your agency will buy on behalf of
- clients. The signup choice creates or claims your agency’s Buyer workspace; it
- does not create a Seller storefront or change any client’s existing access.
- Scrappy and power buyers using REST. Send
accountType: "BUYER"when your - integration creates a Buyer signup.
accountTypecontrols the workspace that - is provisioned;
companyTyperemains a company-classification field. A - matching verified domain may claim one ownerless Buyer account, otherwise the
- request follows the normal Buyer signup path.
- SMB and novice buyers. Choose Buyer if you want to advertise your own
- business. You do not need to understand account structures: this creates or
- opens your buying workspace. It does not publish inventory or create a
- storefront.
- Sellers. Choose Sell inventory only when you publish, represent, or
- manage inventory for buyers, and only where public Seller signup is enabled.
- That choice creates or claims the Seller account and then continues to
- Storefront setup. Choosing Buyer or Partner does not create a Storefront. This
- changes identity and administrator signup only: it does not change Storefront
- inventory, buyer-facing rendering, ranking, or what buyers see about any
- seller.
- Partners and commercial access. Choose **Offer a sales agent to other
- sellers** only when your organization provides a sales agent that other sellers
- use to sell media. Signup creates or reuses the organization and its free
- Partner workspace, then continues to sales-agent registration and certification.
- It does not grant the paid right to operate the agent for clients; that still
- requires separate commercial approval. No pricing, entitlement, or Seller
- commercial status changes with this signup update. The Partner choice remains
- behind the independent
partner-account-signuprollout flag until the additive - API support is deployed across the full API fleet; operations must enable it
- only after old pods have drained.
- Meta EU campaign setup failures now explain that the selected account needs default DSA beneficiary and payor identities. The message remains account-safe, confirms that no provider write was sent, and gives the account administrator a clear next step.
5.182.1 — August 16, 2026 at 1:27 PM UTC
- Pricing, billing, plan, and payout surfaces now call seller-owned commercial setup a Seller Account, including when sellers view or manage their own commercial account, and call buyer-facing counterparties Sellers. Legacy v2
storefrontAPI identifiers keep working unchanged, and no pricing or billing behavior changed.
5.182.0 — August 16, 2026 at 1:12 PM UTC
- Account creation and switching now make it clear whether you are working in an
- organization or a Buyer, Seller, or Partner account; whether people and API
- clients can enter it; and, for Buyers, whether it is sandbox-only or eligible
- for live spend. Existing accounts, memberships, contracts, and access stay as
- they are.
- Enterprise brand buyers. In Interchange, administrators can distinguish the
- organization that governs their accounts from each Buyer workspace before they
- create or switch accounts. No action is needed for existing accounts. A newly
- created Buyer account starts sandbox-only and needs separate approval before it
- can create or execute live-spend work.
- Agency buyers. When you add an account for a client or operating team,
- Interchange shows whether it is a Buyer or Seller workspace and whether it can
- be entered. Choose the workspace that matches the work you need to do; existing
- client access is unchanged. New Buyer workspaces begin in the sandbox, so do
- not plan live spend until they are separately approved.
- Power buyers and REST integrators. Account-creation and account-switching
- responses now provide the canonical
nodeKind,accountType, andenabled - fields, plus
buyerAccessPosturefor Buyer accounts. Use these fields for new - reads; the existing
customerRolefield remains compatible for Buyer and - Seller integrations. Partner has its own registration and commercial-status
- fields:
enabledonly means the account can be entered, not that it is - commercially approved.
- SMB buyers. If your administrator adds a new Buyer account, you can use it
- for sandbox work right away. You do not need to change your current account or
- campaigns, and you cannot use the new account for live spend until it has been
- approved.
- Sellers. In Interchange and storefront account responses, Seller accounts
- are now clearly separate from the organization that governs them. Existing
- storefronts and inventory remain where they are; only a newly created Seller
- account receives a new storefront. No action is needed unless an administrator
- is creating or switching accounts.
- Availability, packaging, and measurement. Buyer admission and entry remain
- behind the
alpha-opt-incustomer gate; turning that gate off retains the - current Buyer waitlist, while Seller access is not gated this way. This change
- adds no plan, entitlement, price, or contract change. Adoption is a Buyer
- successfully creating or switching into a new account and reading its account
- context; ongoing usage is a sandbox media-buy lifecycle run. We will review
- those signals at 30, 60, and 90 days before expanding Buyer availability.
5.181.4 — August 16, 2026 at 11:45 AM UTC
- Meta media buys targeting EU locations now use the selected ad account’s DSA beneficiary and payor defaults, and stop before creating a campaign when Meta has not configured both.
5.181.1 — August 16, 2026 at 9:37 AM UTC
- Archived media buys remain discoverable through campaign media-buy references while their substantive details stay omitted. Meta canary cleanup uses that terminal reference only when the immutable exact-run artifact proves the failed write was never dispatched upstream.
5.181.0 — August 16, 2026 at 7:35 AM UTC
- Publisher catalog refreshes now report a retryable failure when the registry
- lookup is indeterminate, instead of incorrectly reporting that no catalog
- applies while retaining the publisher’s last known formats.
- Meta campaigns now resolve exact region and city targeting across every provider search page while preserving fail-closed validation.
- Existing live inventory sources in your storefront now stay available to buyers when Interchange records the sales agent that already operates them. Nothing changes on your side and no action is required; provider account ownership, certification, and activation remain separate setup steps.
5.180.0 — August 16, 2026 at 6:33 AM UTC
- Campaign delivery no longer fails to load for platform-managed media buys created directly or approved through an embedded provider. No buyer action is required. Seller approval status and reporting behavior are unchanged.
5.179.0 — August 16, 2026 at 5:48 AM UTC
- Nothing changes for existing TikTok campaigns. Eligible buyers can now create
- app campaigns that prioritize the value of purchases or advertising revenue,
- instead of optimizing only for installs or actions. Choose whether to seek the
- most total value or work toward a specific return goal. Return-goal campaigns
- can count either same-day or first-week results.
- To use these options, connect an eligible advertiser account, select the app,
- and provide a positive return goal when requested. Interchange shows only the
- choices available to that account, creates the campaign paused, and verifies
- the saved goal before reporting success. It never swaps purchase value and
- advertising revenue or silently chooses a different bidding approach.
- Teams managing several brands can review each value strategy as a distinct
- wholesale product, making results and prerequisites easier to compare across
- accounts and channels. Campaigns for returning app users are also supported
- when the account has an eligible app event and a suitable existing-customer
- audience. Unsupported return-user strategies remain unavailable rather than
- being replaced with a different campaign.
- This buyer-side addition does not change seller inventory or reporting, and
- sellers do not need to act.
- From connected TikTok buying, choose **TikTok App Install Purchase Value —
- Target ROAS (Day 0)**, select an eligible app, and enter a positive
- return-on-ad-spend target. Interchange creates an app-install media buy
- optimized for same-day purchase value, then verifies the saved app, Purchase
- Value goal, exact target, Target ROAS bidding, and Day 0 window before
- reporting success. It will not substitute Highest Value or Day 7. Existing
- TikTok campaigns and the behavior of other TikTok products do not change.
- Seller storefronts and reporting do not change, and sellers do not need to
- act.
- From connected TikTok buying, choose TikTok Smart+ App — In-App Event,
- then select an authorized iOS or Android app, one of its available post-install
- events, a TikTok identity, and one uploaded or Spark asset group. Interchange
- preserves TikTok’s Every or Once event-counting setting, creates the Smart+
- campaign paused with automatic placement and the matching operating system,
- and verifies the exact app, event, counting setting, identity, assets, and
- optimization before reporting success. The app, event, identity, and assets
- are activation resources. Compatible audience signals remain optional;
- geography and age remain targeting overlays.
- The product can execute only when TikTok reports the selected app and event as
- eligible. Selecting and executing it directly adds no brief-composition or
- account-analysis charge; normal media spend and existing connected-account
- charges still apply. Smart+ App Value is separately available as seven products
- with distinct value events, bid strategies, and measurement windows.
- Interchange will not substitute Install or In-App Event for a Value request.
- Existing TikTok campaigns and the behavior of other TikTok products do not
- change. Seller storefronts and reporting do not change, and sellers do not need
- to act.
- From connected TikTok buying, choose TikTok Smart+ App — Install, then
- select an authorized iOS or Android app, TikTok identity, and one uploaded or
- Spark asset group. Interchange creates the Smart+ campaign paused, optimizes
- for installs with automatic placement and the matching operating system, and
- verifies the exact app, identity, assets, and optimization before reporting
- success. The app, identity, and assets are activation resources. Compatible
- audience signals remain optional; geography and age remain targeting overlays.
- Smart+ App In-App Event and the seven Smart+ App Value products are available
- separately. Interchange will not substitute App Install for any of them.
- Existing TikTok campaigns and the behavior of other TikTok products do not
- change. Seller storefronts and reporting do not change, and sellers do not need
- to act.
- From connected TikTok buying, choose one of seven TikTok Smart+ App Value
- products spanning Purchase or Ad Revenue Value, Highest Value or Target ROAS,
- and Day 0 or Day 7 where TikTok exposes the choice. Select an eligible app,
- TikTok identity, exact value event, and one uploaded or Spark asset group;
- Target ROAS products also require a positive ROAS target. Interchange creates
- the Smart+ campaign paused and verifies the exact app, event, bid strategy,
- value window, ROAS bid when applicable, identity, assets, and automatic
- placement before reporting success.
- Apps and events appear only when TikTok reports that they are eligible for the
- selected Smart+ value contract. Provider-account and buyer-synced audiences
- remain optional signals; geography and age remain targeting overlays. Selecting
- and executing a product directly adds no brief-composition or account-analysis
- charge. Normal media spend and existing connected-account charges still apply.
- Existing TikTok buys do not change.
- These products are available to connected TikTok accounts with eligible app and
- event pairs. Interchange verifies the required resources and eligibility before
- spend; a write or readback mismatch is reported as a failure and triggers
- cleanup. Rolling back removes the seven products from new buying. Seller
- storefronts, seller reporting, and buyer-visible seller data do not change;
- sellers do not need to act.
- Nothing new is available for buyers to try yet, and no customer action is
- required. We prepared TikTok Smart+ Catalog Conversion and Purchase Value, but
- kept both choices hidden until TikTok can confirm that an advertiser’s Pixel is
- eligible for Purchase optimization and, for Purchase Value, sends usable value
- and currency data.
- This is intentionally
gate: none: the products are structurally excluded - from discovery and execution, so there is no exposed audience for a feature
- flag to meter. That same exclusion is the kill switch. A separate reviewed
- change may expose them only after we capture eligible and ineligible real TikTok
- responses, cover partial and malformed responses in tests, and complete a
- signed paused live canary with exact readback for each product.
- Before exposure, the acceptance metric is zero discovery results and zero
- execution attempts for both product IDs. The enablement change must measure
- discovery, create attempts, successful paused creates, prerequisite failures,
- readback substitutions, and cleanup by product. Existing TikTok buys, seller
- inventory, and seller reporting do not change.
- From connected TikTok buying, choose TikTok Smart+ Traffic — Clicks or
- TikTok Smart+ Traffic — Landing Page Views. Select the required geography,
- TikTok identity, destination, and creative; compatible audience signals remain
- optional. Use either uploaded assets or Spark posts in one buy, not both.
- Interchange creates the campaign paused and verifies the optimization,
- targeting, identity, destination, and creative before reporting success.
- Existing TikTok buys do not change. Smart+ Web Conversion and Purchase Value
- remain explicitly blocked and undiscoverable until TikTok Pixel event/value
- eligibility can be read from provider evidence.
- This is an atomic, ungated addition to the connected-account TikTok catalog:
- each product fails closed unless every required resource can be proved, and
- removing the two product registrations is the rollback path. A human release
- approver must accept that gate-none plan before merge. The products use the
- same billing path as existing direct TikTok buys; this release adds no new fee
- or SKU. Paid brief composition and advanced account analysis are separate from
- these wholesale products.
- Seller check: these are buyer-side direct-platform products. They do not alter
- seller inventory, seller reporting, or anything a buyer sees about a seller,
- and sellers do not need to act. Launch measurement will track discovery and
- selection of each product, successful and fail-closed creates by prerequisite,
- readback and activation failures, and cleanup containment. Beta promotion
- requires signed live-canary evidence for a representative Traffic composition.
- Nothing changes for existing campaigns. Buyers and agencies can optionally use
- TikTok Sales — Website Catalog Ads to launch a paused, purchase-focused
- catalog campaign from a connected advertiser account. Interchange verifies the
- selected catalog, group of products, tracking connection, and video before it
- reports success, making the campaign easier to review alongside work on other
- channels.
- To use it, connect an advertiser account that your organization administers and
- provide an eligible catalog, product group, tracking setup, and video. Automated
- Smart+ catalog campaigns and TikTok Shop campaigns are not included. This
- buyer-side capability does not change seller-visible information or expose
- seller data; it uses only resources from the buyer-connected advertiser.
- You can now manage connected TikTok Smart+ campaigns from Interchange: list
- them alongside manual campaigns, then pause, resume, rebudget, change
- end dates, update targeting or package status, and cancel them. Completed
- changes are confirmed against TikTok before Interchange reports success.
- Nothing changes for existing manual TikTok campaigns, and no setup action is
- required. If TikTok returns the same campaign ID in both its manual and Smart+
- inventories, Interchange stops the change and reports the ambiguity so you can
- choose an unambiguous campaign instead.
5.178.6 — August 16, 2026 at 5:37 AM UTC
- Organization administrators can reliably open governed Agent pages, while other members no longer see an Agents link they cannot access. No client configuration changes are required.
5.178.5 — August 16, 2026 at 5:24 AM UTC
- Card-paying businesses now see a simpler Plan & Billing page: billing details,
- receipts, and invoices remain visible, while credit and payment-term controls
- stay collapsed unless requested or already active. Credit approval and payment
- authority remain owned by the business, including for a single-account setup.
5.178.4 — August 16, 2026 at 5:10 AM UTC
- Child storefronts now honor their organization’s merchandising entitlement when serving products from ready modular inventory sources.
5.178.3 — August 16, 2026 at 3:13 AM UTC
- Let sellers complete no-spend sandbox campaign tests against their own pre-launch storefront, including product discovery and media-buy dispatch.
5.178.0 — August 16, 2026 at 12:16 AM UTC
- Let modular inventory sources satisfy publish validation through a Storefront-owned no-spend booking test without requiring an external Agent sandbox.
5.177.0 — August 15, 2026 at 11:54 PM UTC
- Feed-backed modular sources configured for manual execution now accept buyer media buys through a provider-neutral seller workflow. Interchange creates work items for upstream booking, creative handoff, and final reporting, and records the completed evidence through delivery without requiring a custom ad-server adapter.
5.176.2 — August 15, 2026 at 10:16 PM UTC
- Align AAO-slugged publisher format scopes with exact live AdCP property IDs.
5.176.0 — August 15, 2026 at 8:50 PM UTC
- Buyers can now request account-level credit and payment terms from Plan & billing. Requests start at Net 60; sellers can approve, reject, or send different terms for an account administrator to accept. Existing terms stay effective until a counteroffer is accepted, and card or prepay accounts do not need to act.
5.175.0 — August 15, 2026 at 8:14 PM UTC
- The unpublished v3 Seller API now uses Seller Account terminology end to end: connect to the
selleraccount kind, readget({ kind: "seller" }), and save configuration withsave_seller. V3 has no live external customer traffic, so no existing integrator needs to migrate from the preview vocabulary. - V2 Seller APIs are unchanged. Existing
/mcp/v2/storefrontpaths, operation names, and fields remain supported as the legacy v2 contract. - Buyer-facing behavior is not affected by this seller-side account and tool rename. The separately owned v3 buyer terminology work is outside this change.
5.174.0 — August 15, 2026 at 8:00 PM UTC
- French agencies and enterprise media teams can now carry the geography in a brief through to Meta without translating today’s régions into Meta’s older regional map. New and updated media buys can target all metropolitan French régions, supported départements, and verified cities such as Paris. Interchange checks the exact provider geography before reporting success and rejects unsupported or ambiguous places instead of substituting a broader area.
- Existing media buys do not change unless their geography is updated. Hands-on buyers can use the documented region, département, and city targeting fields; buyers working through Murph or a widget need no setup. Support for the forthcoming AdCP 3.2 place format is compatibility-only and will remain unavailable to buyers until Storefront negotiation, authenticated place lookup, and signed canary proof are live.
- Seller impact: Not applicable. This changes buyer-side Meta campaign targeting and does not change how a seller, storefront, or inventory appears to buyers.
- Monetization: None. This is included in existing media-buying access with no pricing, packaging, fee, or unit-economics change.
- Rollout and control: This ships without a PostHog flag because it is structurally limited to explicit Meta geography requests; defaults and untouched media buys are unchanged, and invalid geography fails before any provider mutation. The current buyer-visible path expands only after the Île-de-France and Paris signed no-spend canaries both prove exact readback. AdCP 3.2 exposure additionally requires successful Storefront negotiation and an authenticated place resolver. Rollback of this adapter release is the kill switch; withholding the 3.2 place capability keeps that compatibility path disabled independently.
- Measurement: Release acceptance is 100% exact readback in the signed Île-de-France and Paris create canaries, with zero provider-key mismatches. Adoption is measured from successful
create_media_buyoperations carrying French Meta region, département, or city provenance; ongoing usage is measured from successfulupdate_media_buyoperations carrying the same evidence. For the first 30 days, report distinct buyer accounts, successful media buys, the région/département/city split, rejected unsupported requests, and any exact-readback failure. Any exact-readback failure stops expansion and triggers rollback review.
5.172.7 — August 15, 2026 at 6:34 PM UTC
- Keep Meta delivery reads inside the API response boundary, avoid unnecessary placement lookups for totals-only reports, and retry bounded read-only readiness failures.
5.172.4 — August 15, 2026 at 5:57 PM UTC
- Hosted Seller endpoints now use
/seller/{platformId}/mcpin discovery and OAuth metadata. The retired hosted/storefront/{platformId}/mcppath now returns 404. - Sellers will see the new hosted URL in discovery and OAuth metadata, but there is no catalog or dashboard action to take and no need to notify buyers: these per-Seller URLs were changed before they were issued externally, and Interchange rewrites its stored hosted URLs automatically.
- REST and MCP buyer-agent builders receive the new URL through discovery. If an unpublished preview URL was copied manually, replace its
/storefront/segment with/seller/. - Platform-direct, enterprise, and agency buyer workflows are unchanged. V2 Seller Account data and third-party Seller endpoints are also unchanged.
5.172.3 — August 15, 2026 at 5:37 PM UTC
- Start the directed-delivery deadline at request entry so provenance and adapter setup cannot consume the client response buffer.
5.172.0 — August 15, 2026 at 4:54 PM UTC
- Connecting your own organization’s inventory Source to your own Sales Agent now
- confirms that Agent as owned and operated. You do not need to sign in again to
- claim both sides of the same connection, and an already-active Source stays
- active while its durable Agent identity is added. Normal serving-readiness
- checks remain authoritative afterward. If the accounts later split, only the
- claim and approvals created by that owned-and-operated shortcut are removed;
- explicit provider claims and pre-existing client requests remain intact. Agents
- operated for another organization still follow the Partner connection workflow.
5.169.1 — August 15, 2026 at 1:36 PM UTC
- Sellers can now run a no-spend sandbox test on their storefront at any time, even after they’ve already passed one successfully before. Previously, once a storefront passed its first sandbox test, it could never run another one — so a seller who fixed a broken inventory connection had no way to verify the fix without exposing the storefront to real buyers. A sandbox test still fails if the inventory source it’s testing is genuinely unhealthy.
5.169.0 — August 15, 2026 at 1:14 PM UTC
- Buyer administrators can now correct an account’s operator domain, scope, or
- operating-unit ID after setup and after connecting storefronts. The identity
- becomes locked only when a complete advertiser account is created or bound
- under it; changing the key after that point requires an advertiser-identity
- migration.
5.167.0 — August 15, 2026 at 9:55 AM UTC
- Connecting your own organization’s inventory Source to your own Sales Agent now counts as claiming that Agent. Parent and child accounts in the same organization are treated as owned-and-operated, so existing sellers do not have to sign in again on the Partner page. Historical active O&O Sources stay active while support adds their durable binding; the next health, certification, validation, product-mode, and quarantine reconciliation is still authoritative. Agents run for another organization still require the explicit Partner claim and connection workflow.
- TikTok campaign creation now proceeds when the selected advertiser has no existing campaigns. Existing campaigns and non-empty provider inventories are unchanged.
- In Account Center, a buyer administrator can now confirm whether each buyer
- account represents the whole operating domain or a specific operating unit.
- Interchange and connected storefronts then use that seller-visible identity to
- map the account consistently. Existing accounts can continue buying without
- immediate action, but remain marked as needing identity confirmation. After the
- confirmed identity is first used for an advertiser or storefront binding, it is
- locked; support must migrate those bindings before the identity can change.
- Full-term prepayment choices now preserve their exact amount and currency from proposal through acceptance instead of rounding to a whole number of monthly payments.
5.165.4 — August 15, 2026 at 8:48 AM UTC
- V3 buyer preview fixes. Writes now scope to your current account without a
- redundant
switch_accountconfirmation.save_creativevalidates formatKindagainst the canonical enum before dispatch and returns the same- camelCase creative detail as
get, including update warnings and a dedupe - signal when a same-name creative already exists. Campaign list rows show the
- advertiser name instead of its id.
open_pagefor release notes returns a - structured page marker.
get_statusnow listsreadyDestinationswith the - seller ids
request_proposalsaccepts, and thesellerIdsfield documents - that source.
5.165.2 — August 15, 2026 at 8:12 AM UTC
- TikTok campaigns and creatives can now proceed when an account has an empty provider inventory. Nothing changes for accounts with existing provider resources, and no action is needed.
5.164.0 — August 15, 2026 at 6:29 AM UTC
- Storefront operators with an approved OpenAI Ads account can now connect it to
- Interchange with one account-scoped API key per ad account and offer both
- current ChatGPT formats: chat cards and product ad templates. Campaigns support
- CPM, CPC, and conversion-optimized CPC, with country, region, DMA, ready
- custom-audience, context, and product filtering; new campaigns start paused, and
- Interchange verifies creates, updates, and reporting against OpenAI before
- reporting success. The dated availability snapshot covers nine markets, while
- OpenAI’s live account-scoped catalog remains authoritative when a campaign is
- created. Product ad templates require an existing feed: connect the feed and
- make its initial upload in OpenAI Ads Manager or over SFTP before using the feed
- ID in Interchange.
5.163.2 — August 15, 2026 at 5:37 AM UTC
- Storefront Setup now clears the intake hold through an explicit Go Live action,
- and completed setup can no longer make a held storefront appear previously live.
- If Setup says your storefront is ready but new business is on hold, click Go
- Live once after this update. Storefronts already accepting transactions need no
- action. Buyer integrations need no changes; storefronts that are still held or
- blocked will no longer be presented as available until the existing readiness
- and marketplace checks pass.
5.162.0 — August 15, 2026 at 4:47 AM UTC
- Seller administrators can now review and accept current platform terms and
- enter primary payout authority inside the private Plan & Billing Page, without
- bank details passing through the assistant. The v3 product contract now covers
- the modular feed onboarding, Ask lifecycle, and bounded storefront setup paths
- needed by the journey certification harness. A clean live staging run remains
- a separate deployment gate. Buyer agents reading the shared billing account
- also receive the current terms version and review URL; buying behavior and
- seller eligibility remain unchanged.
5.160.0 — August 14, 2026 at 9:14 PM UTC
- Activating a provider-connected inventory source now checks that source’s current health evidence directly, rather than a stored status value that several unrelated checks all wrote to. A source is allowed to activate when it has been observed and nothing currently reports a problem with it; a source that has never been checked, or whose newest evidence reports a problem, is held back until that is resolved.
- This closes a case where a source could be activated on stale evidence: previously a single failed check older than a week was ignored, so a source whose only recorded problem had aged past that window could be brought live without anything having re-verified it. Freshness is now measured against that source’s own most recent check rather than the calendar, so an old failure keeps blocking activation until a newer check supersedes it.
- If activation is refused, resolve the source’s health problem and let it be re-checked, or trigger a re-check yourself; the refusal names the source and the reason.
- Fix: accepted media buys with real delivery now appear in reports
- Buyer and storefront reports previously excluded media buys that the seller had accepted and was delivering, when those buys were still awaiting a final status confirmation from the seller. This hid real spend for these buys from both buyers (who could not see the delivery activity) and sellers (whose own storefront reports omitted the same buys).
- The reporting queries now include accepted buys in this state. Historical spend that was previously hidden may now appear in your reports. No action is needed on your end.
- The status-sync job also now advances these buys to completed after their flight end date passes, so they surface correctly in any views that show only finalized buys.
- V3 buyer proposal rounds now preserve seller-returned products that are not
- allocated into a Proposal. To stage one directly with
save_media_buy, use its - seller-scoped
productQueryIdand preserveproductIdplus any inventorySourceIdandsalesAgentId. Seller-facing behavior does not change,- and sellers do not need to take action.
- When buyers create or update a media buy through the API or MCP, subdivision targeting is now checked against the selected inventory source and advertiser account. This prevents one seller source’s region support from being applied to another source when they share a connection. No setup changes are required; unsupported targeting is still rejected before the seller is changed.
- Re-syncing a creative with corrected content (for example, fixed dimensions)
- under the same idempotency key now reaches the inventory source instead of
- being answered from its cached response for the earlier request. Retrying an
- unchanged
sync_creativescall still dedupes the same way it always has.
5.159.0 — August 14, 2026 at 8:44 PM UTC
- Canceling a media buy now immediately reflects as canceled on the seller side,
- rather than waiting for the next poll cycle (which could be minutes later).
- Previously, sellers would see the buy as still active or pending after a buyer
- canceled it.
- Fixed a bug where Murph in Slack could reject advertiser-scoped requests (e.g. sandbox test campaigns) from a real member of the connected account with “No user context available for advertiser permission check,” even though the same request worked fine from the in-product chat.
- Newly committed modular products can reach buyer discovery without waiting for
- the next catalog refresh. The Inventory Feed API now attempts that refresh
- before returning and reports
catalogRefresh.invalidatedand catalogRefresh.warmed. Feed publication still succeeds if this best-effort- refresh cannot finish;
warmed: falsemeans buyer visibility may lag. Existing - seller integrations do not need to change. Buyers may discover newly committed
- products sooner, but their workflow, API contract, and setup do not change.
- In the Merchandising Simulator, briefs that need human review no longer look
- like policy declines or hide otherwise eligible products. This changes
- seller-side simulation evidence only: it does not approve a buy or bypass
- seller review, and buyers need no setup change.
5.158.0 — August 14, 2026 at 8:18 PM UTC
- Terminology now distinguishes Interchange seller accounts, their one-to-one storefronts, connected provider accounts, and seller-side Buyer Account Mapping records. Active documentation and model-visible API descriptions call externally mirrored accounts connected provider accounts and campaigns mirrored from them tracked campaigns; legacy operation identifiers remain unchanged.
- Sellers using modular sources can run a no-spend test campaign through their
- storefront after committing a catalog. External sales-agent sandbox
- requirements are unchanged, and existing modular sources need no reconfiguration.
- Seller agents using V3 can now open the portable modular source setup flow, create a feed-backed source, and continue into the existing inventory-feed upload and preview task without sending feed bytes through the model.
- Pinterest-connected storefronts now publish their current exact state and region catalog per storefront source and provider account. Unsupported ISO 3166-2 inclusion values can be refused before dispatch; exclusion behavior and other providers are unchanged.
- In the storefront Property Roster, sellers can explicitly re-check a publisher after publishing adagents.json and immediately see refreshed authorization, property identity, and creative-format catalog states. If the re-check cannot persist fresh state, it now asks the seller to retry instead of presenting the previous catalog as refreshed.
- A “needs attention” item raised for one failing check on an inventory source now stays open until no check reports a problem, instead of being closed the moment any single unrelated check succeeds. Previously a source with a real, unresolved problem on one check could have its item auto-completed by a different check’s success, so the problem silently left your queue while still being broken.
- Two related improvements come with it:
- Repeat alerts are quieter. A check that reports the same failure twice no longer re-raises, because each check is now compared against what that same check last saw, rather than against whatever check happened to write most recently.
- An item can no longer be raised for a source that has already recovered. If a source comes back while the item is being prepared, the item is skipped.
- Items are also reconciled against current evidence on a regular sweep, so one that no longer has any failing check behind it is closed within the hour rather than waiting for unrelated activity on the source.
- There is nothing to configure, and sources with no open issues see no change.
5.157.0 — August 14, 2026 at 6:10 PM UTC
- From connected TikTok buying, choose TikTok App In-App Event Optimization,
- then select an authorized app and one of its available in-app events.
- Interchange creates an app-install media buy optimized for that exact event,
- retains TikTok’s counting setting, and verifies the app, event, and counting
- setting before reporting success. Existing TikTok app-install buying remains
- unchanged.
- From connected TikTok buying, choose TikTok App Retargeting In-App Event,
- then select an authorized app and one of its available in-app events.
- Interchange creates a retargeting media buy for existing app users, optimized
- for that exact event, and verifies the campaign type, app, event, and TikTok
- counting setting before reporting success. Existing TikTok app-install buying
- remains unchanged.
- Ask Murph to see your advertisers — “show my advertisers”, “where do I start” — and it now opens your advertisers view directly instead of listing them back as text.
5.156.0 — August 14, 2026 at 2:16 PM UTC
- Add executable TikTok Instant Messaging App Clicks buying for Messenger,
- WhatsApp, Zalo, LINE, and custom HTTPS messaging destinations, with exact
- provider readback and full-composition certification.
- When a buy against a managed storefront couldn’t serve its creatives because
- your account wasn’t linked with that storefront, the error you saw said only
- “an underlying managed inventory source is unavailable” — nothing about how
- to resolve it. Now the same failure surfaces as a
MANAGED_ACCOUNT_LINKAGE_REQUIREDerror with a copy-pasteablesync_accounts- request that points you at the linkage step: run it with that storefront to
- request an account, then wait for the seller’s approval. If you already have
- an approved account,
sync_creativesaccepts your opaqueaccount_id - directly, and the retry after approval proceeds even for buys created before
- linkage.
sync_creativesalso now authorizes an opaqueaccount_idagainst the- calling buyer principal — a caller cannot sync creatives against an account
- they don’t hold an active grant on. Buyer-side callers automatically resolve
- the calling principal’s opaque account for each MANAGED storefront route, so
- you don’t need to send it explicitly; if no active grant exists, the same
- actionable error surfaces.
- Source health and diagnostics now report what each individual check most recently found, rather than a single shared value that any check could overwrite. A source with an unresolved problem on one check no longer reads as healthy just because a separate, unrelated check succeeded. Sources with no open issues see no change, and there is nothing to configure.
- If you or a system you operate reads source health from the storefront readiness or diagnostics API rather than viewing it in the dashboard, three response fields change meaning (the shape is unchanged):
lastSuccessAtnow reflects the last success of whichever check is currently reporting the worst status, not the most recent success across all checks. If that check has never succeeded,lastSuccessAtcan be empty even though a different, healthy check has a success history.lastErrorAtnow clears as soon as the source is healthy overall, instead of continuing to show the time of an error that has since been resolved.- On the storefront readiness endpoint, source health timestamps are now full ISO-8601 (for example
2026-06-18T12:45:00.123Z) instead of a plain-text database format (for example2026-06-18 12:45:00.123+00). If your integration parses these as strings rather than dates, account for the format change. Diagnostics endpoint timestamps were already ISO-8601 and are unchanged.
5.155.0 — August 14, 2026 at 1:18 PM UTC
- Connected ad platforms now return a stable, certified adapter-executable wholesale seed without running brief interpretation, performance ranking, forecasts, or proposal generation. Each catalog identifies its static Scope3 pricing source, keeps retailer-specific products distinct, can be versioned reliably across repeated reads, and states that provider-UI parity is not yet certified.
- The inventory source example pack is now organized by the question each file
- answers, so you can distinguish production-importable inventory files from
- merchandising material, optional CRM context, lifecycle evidence, and proposal
- tests at a glance. Every file has a plain-language explanation and a copyable,
- collapsed example. The guide also clarifies that Scope3 creates seven-day Demo
- Storefronts, only a commit activates capacity, and
channelis descriptive — - declare the matching creative format for whichever channel you sell.
- The Prepare inventory source inputs guide now shows where it fits in storefront
- onboarding, numbers each step, and distinguishes required work from recommended
- supporting evidence. Its checklist names and lifecycle vocabulary now match the
- status your source actually reports. The campaign rehearsal also records stage
- modes separately from readiness, so an automated but blocked stage cannot be
- mistaken for a proven path.
- When you open a Sales Agent from Agents, the new Who this Agent can serve card shows whether it is ready for Partner operations and guides you to any required setup. Your existing first-party Sources keep working, and buyer-facing storefronts and labels do not change.
- Direct-adapter wholesale catalogs are now generated and certified against adapter execution manifests rather than their own template counts. Coverage metadata distinguishes product archetypes, audience signals, activation resources, and targeting overlays; classifies known blocked configurations; and makes clear that adapter execution coverage is not provider-UI completeness.
- Meta and TikTok brief plans now show the connected account resources needed to execute each product—including eligible Pages, forms, Pixels, identities, destinations, events, and creatives—and distinguish a safe unique selection from missing setup, buyer input, ambiguous choices, or unavailable provider inventory.
- Stop an approval from being offered for a file upload that could never run. When
- an action referenced an attachment that was not on the conversation turn, the
- Approve control still appeared, accepted the click, and then reported a failure
- that no retry could get past. Murph now catches the wrong reference before asking
- for approval and names the file it can actually use, so the upload can be
- corrected and committed in the same conversation.
- Murph now follows direct links between canonical Storefront guides and honors
- linked section anchors, improving answers that require evidence from more than
- one documentation page.
- When you upload a wholesale pricing feed in Murph chat and a row is rejected —
- whether on the preview or when a commit is refused — Murph now names the row
- number, the field, and the value that would pass, such as `row 7:
- effective_start_date must be an ISO date (YYYY-MM-DD)
orrow 2: p75_cpm must be - 1,000 or less`. A refused commit previously reported only how many rows failed, so
- you had to run another preview to find out what was wrong. A row priced in a
- currency your storefront cannot settle in now says which currency it needs.
- Correct the named rows and upload the file again; nothing else about your existing
- pricing changes.
- Snap and TikTok now interpret campaign objectives semantically instead of matching objective phrases with platform-local regular expressions. Recommendations fail closed unless the model returns a supported goal with evidence quoted directly from the advertiser brief and deterministic validation maps it to an executable catalog product.
- Gemini-backed brief planning and creative review now default to Gemini 3.7 Flash with low thinking. Flash-Lite is rejected as a planner override, and 3.7 low/medium remain paired in the recurring model frontier so quality, latency, and attributed cost can be compared.
- Connected TikTok product discovery now returns relevant products when a clear objective only needs geography, instead of presenting an empty catalog. Ready Meta and TikTok brief plans also carry the exact product, price, targeting, objective, and optimization snapshot needed to execute the returned choice safely.
5.154.1 — August 14, 2026 at 8:06 AM UTC
- The source input and authority worksheet now tells you what to put in it. Every input it asks about — inventory identity, availability, creative formats, reporting, and the rest — has a plain-language definition, each column says what belongs in it, and the page opens by explaining where in setup the worksheets are used. Every blank worksheet is now a copyable CSV you can paste straight into a spreadsheet instead of rebuilding the table by hand. Nothing you have already sent us needs redoing.
- When buyers choose post-engagement optimization for a Meta storefront media
- buy, the paused ad set now uses Meta’s required destination and can be created
- successfully. Nothing changes for buyers or sellers, and Instant Form lead
- buys continue to use their existing destination.
- Connected Pinterest accounts now expose provider-ready and eligible audiences
- as live signals. A complete account inventory with no live signals remains
- visible as non-live evidence instead of failing the conformance report; empty,
- incomplete, or cross-account feeds still fail. Nothing changes in buyer setup.
5.154.0 — August 14, 2026 at 7:24 AM UTC
- Plan & Billing now shows readable names and descriptions for every activity under calibration instead of raw translation keys.
- TikTok audience discovery now returns Customer File audiences for the selected
- advertiser as stable buyer audience IDs, with canonical pagination and
- account-scoped readback. Provider audience IDs remain private, giving buyer
- agents a consistent audience selection surface. Applying those audiences to
- TikTok media buys remains limited to the governed rollout while staging
- conformance completes.
5.153.0 — August 14, 2026 at 5:28 AM UTC
- Selecting an Agent from Organization → Agents now opens that Agent’s canonical page. Certification and Source destinations are unchanged, and there is nothing to change on your side.
5.152.1 — August 14, 2026 at 3:37 AM UTC
- If your Meta Traffic or Engagement campaign was failing to launch with an upstream error, that’s fixed. Nothing to change on your side — existing campaign setups will go through on the next attempt.
5.149.2 — August 13, 2026 at 11:34 PM UTC
- Third-party storefront discovery no longer goes empty for sellers that answer on the legacy AdCP wire. Account-scoped catalog fetches now use the SDK’s canonical
get_productssurface with the seller’s own format catalog (matching the wholesale catalog warm), including async task completions, so persisted catalog evidence always carries interpretableformat_optionsand the canonical-format readiness audit no longer withholds the storefront over raw legacyformat_idsit cannot map.
5.149.1 — August 13, 2026 at 11:03 PM UTC
- HTML5 creatives attached directly to a media buy now carry their width and height, matching creatives synced through the creative library. Sales agents that check a creative’s dimensions before accepting it no longer reject a buy for missing width/height, and resubmitting a media buy no longer clears dimensions a sales agent had already stored for that creative.
5.149.0 — August 13, 2026 at 10:47 PM UTC
- You can now register a supported inventory feed through the Storefront API or your agent, then use the returned upload steps to send inventory. Registering the same feed again returns the same feed, so retries are safe. If your storefront is set up to send inventory automatically, registration returns the push path; otherwise, it returns preview, upload, and commit paths. Existing feeds need no changes. Registration alone does not change what buyers see; buyer-visible inventory changes only after submitted feed data is committed.
- From the Agents page, your team can now open an Agent to see who operates it, whether it is certified and healthy, and what to do next. Sales Agents also show the Sources you are allowed to see, with links to Source diagnostics for health and mappings; private certification evidence and other organizations’ Sources stay hidden. Nothing changes in your current setup.
- Interrupted Google Ads Customer Match syncs now recover without creating duplicate audiences. Existing connections need no changes; Google account eligibility is still required.
- Google Ads Search and Display campaigns can now include or suppress synced Customer Match audiences and return the same buyer audience IDs in campaign readback. Existing connections need no changes; Performance Max and Demand Gen remain unsupported for this targeting.
- For buyers: Universal Ads now returns a clear error before making changes when a media buy includes unsupported region or package targeting, instead of misapplying or dropping those settings.
- For sellers: Storefront capability responses now reflect the targeting support of the connected inventory source, so buyers see accurate country and region availability. Billing support and defaults follow the explicit storefront or connected-provider contract rather than a legacy routing label.
- No action is required. Existing supported country targeting continues to work.
- Snap media buys can now include and suppress tenant-owned Customer List audiences by buyer audience ID, with exact targetability checks and buyer-ID readback. The signed staging canary remains disabled until the protected no-spend proof passes; existing legacy
signalsrequests continue to work when canonical audience fields are absent.
5.148.0 — August 13, 2026 at 6:53 PM UTC
- Prospective buyers can now say whether they need a campaign management system or plan to use an AI agent, identify that agent when applicable, and describe their markets, channels, and timing. The commercial team uses those details to route the request. Submitting the form does not create an account, connect an agent, or grant access; access follows only after review and approval. Existing buyers do not need to take action.
- Universal Ads connection capabilities now show CRM audience sync as unsupported, and sync attempts stop before changing provider data. Existing connections need no reconfiguration; if you need CRM audience activation, choose a connected ad platform that reports audience sync support.
- Sellers with the modular sources capability can now send inventory feeds through authenticated Storefront API endpoints. You can preview pasted or uploaded static avails before committing them, commit a signed preview when it looks correct, or use the push endpoint for a single authenticated submit. Static avails and wholesale pricing feeds use the same source, contract, and tenant checks as the existing modular source setup.
- Action: no action is required for existing sellers. Existing sources, existing feed defaults, buyer-facing fulfillment, and runtime buyer behavior are unchanged. Nothing is converted automatically, and a seller must still have the existing
modular-sourcesentitlement before creating or extending modular source feed workflows. Buyer impact is not applicable: this changes seller-side feed ingestion only and does not change buyer APIs, discovery, pricing, or media-buy behavior. - Monetization: this does not introduce a new fee, buyer charge, billing meter, or UI package. Access follows the existing Enterprise
modular-sourcesentitlement; any commercial value is through that existing entitlement and agreement path, not a new per-feed or per-request charge. - Rollout and controls: rollout is gated by the existing
modular-sourcesentitlement, not a new PostHog flag. Expansion means granting that entitlement through the existing admin entitlement ledger for approved seller cohorts. The kill switch is to stop granting or revoke themodular-sourcesentitlement for affected customers, which blocks new modular source composition and module attachment while leaving existing buyer fulfillment and runtime operations unchanged. Operational adoption is measured before expansion: at least one entitled pilot seller must complete preview, upload, commit, and push on a real modular source; stale baseline and invalid-token rejects must return the documented validation codes; and support must be able to diagnose any rejected row from the returned feed diagnostics without manual log inspection. - Media buys across every storefront now reject an ISO subdivision before dispatch when a seller’s value-aware capability explicitly marks that inclusion or exclusion value unsupported. Buyers do not need to change valid targeting requests; an unsupported value now returns a validation error before spend begins. Existing seller boolean region declarations require no change. Sellers who want value-level preflight enforcement can publish structured inclusion and exclusion evidence under
ext.scope3.storefront.geo_region_evidence; the standard AdCPmedia_buy.execution.targeting.geo_regionsfield remains boolean. Storefronts without namespaced evidence keep their current behavior. The deprecatedsupportedRoutingTypesv2 field now returns the same behavior-free compatibility values for every storefront;ROUTEDandDECISIONEDdo not classify storefronts or control targeting.
5.147.0 — August 13, 2026 at 5:49 PM UTC
- Sellers can now price display and video inventory independently, even when both formats share the same ad-server selector. Add a format reference to each row in your wholesale pricing feed and the platform applies the matching rate; buyers then see the price intended for the specific format they requested. Existing selector-only pricing feeds continue to work unchanged — format references are optional and only needed when you want format-specific rates.
- Reporting no longer converts delivered spend on a media buy that was never booked cross-currency. When a source reports delivery in a currency it is not paid in, that is a labelling defect, not an exchange: applying a rate to it multiplied correct spend by a real exchange rate and returned a plausible, wrong number. Delivery spend is now converted only where the buy’s own booking evidence says the source is paid in the currency it reported. Where it isn’t, the daily view keeps the row in the reported currency and the summary view returns
FX_RATE_UNAVAILABLEinstead of a converted figure.
5.146.0 — August 13, 2026 at 4:54 PM UTC
- Fixed a crash that caused WAV and other large audio file uploads to fail with “No creatives could be saved from the upload.” The failure was a Node.js call stack overflow in the base64 validator when processing files larger than ~7.5 MB. Files are now accepted correctly.
- Fixed two defects in managed ESA media buy forwarding. HTML5 creatives now include their display dimensions when forwarded, resolving invalid creative rejections. Brand-safety signal exclusions now route to the correct targeting fields instead of being dropped by the GAM adapter.
- Merchandising Simulator proofs can now stay bound to one modular inventory
- source, with matching source evidence in API responses and the portable Page.
- Existing storefront-wide scenarios remain readable.
- When a buyer requests an account with your storefront, you can now approve
- them into an existing record in your ad server — the GAM Company, FreeWheel
- advertiser, or equivalent you already use for other advertisers you traffic.
- Their campaigns land against that record from their next media buy on. When
- you approve this way, you also state whose legal entity should be invoiced
- (the operator or the advertiser), so the invoice recipient matches the party
- you agreed to bill. Approving through Interchange billing and rejecting still
- work as before; this adds a third option for sellers who prefer to keep
- buyers inside their own account tree.
- Direct-billing is dark-by-absence until each seller opts in per the
- settlement-election spec, so ungated day-one behavior is unchanged for every
- buyer whose sellers do not use this decision. Buyers whose linked account
- flips from Interchange to direct billing will see the new invoice recipient
- when their sellers opt in and use this decision.
5.144.0 — August 13, 2026 at 9:52 AM UTC
- Buyer and seller reports now retain real delivery regardless of a media buy’s lifecycle status. Control-state buys without delivery remain absent from summaries, preventing unapproved or pre-seeded budgets from affecting pacing while ensuring contradictory delivery is never hidden.
- Sales agent webhooks now return 410 Gone when the sending agent is disabled, instead of being silently accepted. If your integration receives a 410, verify that your webhook sender is using your current active agent ID. You can look up your active agents via the AdCP API or contact support.
5.143.5 — August 13, 2026 at 8:41 AM UTC
GET /api/v2/buyer/creative-dashboard-urlnow accepts an optionalmanifestIdquery parameter. WhenadvertiserId,campaignId, andmanifestIdare all provided, the returned URL navigates directly to that specific creative manifest in the Interchange UI rather than landing at the campaign level.- Power buyers and agency teams using the buyer REST API can now update
packages[].targetingOverlay.audience_includeandaudience_excludeon an existing media buy. Only the named package’s audience lists change; its other targeting and sibling packages stay unchanged. Existing requests need no changes.
5.143.2 — August 13, 2026 at 6:12 AM UTC
- Fixed seller-adjusted demand revisions failing when an automatic approval tried to send the revised proposal.
5.141.12 — August 13, 2026 at 2:54 AM UTC
- Release the exact pre-fix Spotify rejection lease after verifying its reviewed zero-mutation evidence and immutable source.
5.141.11 — August 13, 2026 at 2:12 AM UTC
- Fixed Meta Engagement campaigns failing with “Upstream request failed” after setting
pageIdviaupdate_media_buyon a multi-page account. The explicit page ID stored in the media buy is now correctly resolved and forwarded aspromoted_object.page_idon the ad set. Meta API rejection details are now also surfaced in error responses to aid diagnosis.
5.141.10 — August 13, 2026 at 1:48 AM UTC
- Preserve Spotify’s safe audience-upload rejection code through the adapter boundary.
5.141.9 — August 13, 2026 at 1:00 AM UTC
- Pin the legacy Spotify canary’s text flight timestamp by digest before confirming paused containment.
5.141.8 — August 13, 2026 at 12:36 AM UTC
- Recover the exact interrupted staging Spotify canary only after fresh paused, zero-delivery containment is verified.
5.141.5 — August 12, 2026 at 10:46 PM UTC
- Sales agent registration and disabling now write an audit log entry, including for storefront-hosted agent rows that previously left no record. These entries appear in the storefront activity feed and record
adcp_agent.updated_byso the row itself shows who last touched it.
5.141.3 — August 12, 2026 at 9:54 PM UTC
- Fixed two pacing period bugs that artificially constrained spend on replacement draft media buys (AI-6096).
- First, clearing per-buy pacing periods on a DRAFT or PENDING_APPROVAL media buy was incorrectly blocked when any period had already started. Since pre-execution buys have no deployed packages, clearing is always safe and is now allowed.
- Second, when a draft buy with per-buy pacing periods is executed mid-campaign, elapsed periods’ budgets are now redistributed into the remaining active periods rather than being silently dropped. This matches the behavior of the campaign-level pacing fallback path and ensures the buy’s full product budget reaches the seller.
- Meta governed CRM staging canaries now recognize the protocol’s explicit idempotent-replay marker while still requiring the replayed audience payload to match exactly.
5.141.1 — August 12, 2026 at 8:56 PM UTC
- Your one-time 100-IU credit now expires exactly 60 elapsed days after acceptance, regardless of billing-cycle dates. Settings → Plan & Billing and MCP Apps show the same stored expiry, and existing credits keep their original dates.
5.139.0 — August 12, 2026 at 7:48 PM UTC
- Your storefront can now decide whether a brief is worth answering, before your Merchandising Agent composes anything. Set a selling doctrine on your Playbook: a minimum category fit to respond, how readily you counter-pitch instead of walking away, and what to do when a stated budget meets an unpriceable catalogue. Your Merchandising Agent then pitches the brief in full, counter-pitches with a credible reframe, or passes with a short, branded decline. Adopt a named starting point (
premium_scarcity_house,volume_partner,consultative) or set your own numbers. Doctrine rides the same Playbook versions you already author, so reverting means activating the previous version, and every decision is recorded on the proposal pass with the doctrine version and the rule that reached it. On a pass your storefront withholds the composed proposal and returns its existing no-fit response shape, so a buyer can’t tell a decline from nothing having matched; passthrough inventory and already-finalized proposals still ship. The decline is recorded for you, not sent to them. - Signing out now fails safely: if the sign-out request doesn’t reach the server, you stay signed in and see an error instead of a false “signed out” screen. This matters most on a shared or public computer, where the previous behavior could leave your session active even though the screen showed you as logged out.
- A brief that a storefront’s Merchandising Agent genuinely has nothing for now returns a normal empty product set instead of an
INVALID_REQUESTerror. AdCP has one shape for “no bid” — an empty catalog — and this aligns the composer’s silent no-fit with it, so your agent can treat every empty discovery the same way. A seller who deliberately authors a decline note in their rulebook still sends it; only the default silent no-fit changed. An empty catalog is also, by design, all your agent sees when a seller’s own selling rules chose not to answer a brief — the two are deliberately indistinguishable, so treat any empty discovery as “nothing here for this ask” and move on or re-brief.
5.138.0 — August 12, 2026 at 6:42 PM UTC
- If your operator domain was saved with an
https://prefix, that prefix is now stripped automatically. Nothing to change on your side. - Agencies and consultants verifying a client domain: you can now self-serve verification from account settings instead of filing a support request. Two paths are available:
- Verify via AAO: If your agency’s work-email domain matches the operator domain you’re claiming, sign in through your AdCP Alliance Organization account. Verification completes automatically.
- Request manual review: If the operator domain belongs to a client whose email domain differs from your agency’s, submit a review request from account settings. Scope3 reviews within one business day and follows up on the outcome. This path resolves email-domain mismatches only. If the stored operator domain itself is wrong for your account (for example, it points to the wrong client), contact Scope3 support to have it corrected — manual review will not resolve that case.
- Already verified and transacting? No action needed. Verification status and transacting access are unchanged for existing accounts.
- A verified operator domain is a transacting prerequisite. There is no separate charge for verification.
5.137.0 — August 12, 2026 at 5:47 PM UTC
- Seller Setup and modular source diagnostics now show the same setup progress and next action for each modular source. If a feed row’s publisher properties or creative formats cannot be verified against that source’s current Property Roster, the row is rejected; resolve the shown issue before committing the feed. Existing valid feeds need no changes.
- Your organization now receives its one-time 100-IU setup credit when it accepts its first IU plan through Plan & Billing or Murph, including for an existing account. Retries and later plan revisions do not create another credit.
5.136.0 — August 12, 2026 at 4:31 PM UTC
- The inventory source input guide now provides copyable files through a public example-pack page, distinguishes complete external-agent pass-through from sources that need inputs supplied separately, names the built-in provider paths, and organizes setup around five customer questions plus explicit operating tracks.
5.135.0 — August 12, 2026 at 3:38 PM UTC
- Account analysis now presents campaign health, format performance, and metric labels in consistent sentence case — status values like “Needs attention”, “Behind”, and “Above benchmark” read cleanly instead of raw lowercase, while metric acronyms (CTR, CPM, ROAS…) keep their standard casing. No action is required.
- Agent collection rows now open their canonical Agent Page in the web app.
- Buyer discovery no longer withholds a third-party pass-through sales agent
- because a product from an older, brief-specific response remains in its local
- history. Interchange now evaluates the source’s newest live response alongside
- its seller-authored catalog. Unresolved products in that current evidence are
- still withheld.
- Previously returned product IDs remain protected: if a buyer later tries to
- purchase one, Interchange checks that exact product’s format declaration before
- forwarding the media buy.
- Enrolled sellers can open the legacy Source mapping workspace reliably again. Access remains limited to enrolled customers, with nothing to change on your side.
- v3 search for
creativeandcreative_collectionnow supports cursor-based pagination. Previously the result was capped at 100 rows withhasMore: trueand nonextCursor, leaving items past the first page unreachable. Passlimit(up to 200) and the returnednextCursorto page through large sets.
5.134.0 — August 12, 2026 at 2:41 PM UTC
- Approved storefront media buys with no creatives attached now reach the sales agent instead of being rejected. Forwarding added an empty
creative_assignmentslist to each package, which AdCP does not allow — the field must name at least one creative or be omitted entirely. Buys that are booked before their creatives are ready now forward with the field omitted, and the seller reports them as awaiting creatives. Assignments the buyer has since cleared are no longer forwarded from the frozen request, and a package carrying inline creatives forwards untouched while its creatives still match the buy. - Creative syncs to a storefront no longer fail when the seller has accepted a creative but has not yet placed it on an ad server. A seller’s platform creative ID is now recorded as evidence whenever it arrives — on the sync acknowledgement or on a later creative webhook — rather than being required up front. A seller that echoes the buyer’s own creative ID back as its platform ID is still reported as unconfirmed.
- For buyers: a creative you sync to a storefront before assigning it to a package now reports as synced instead of failed, and its platform ID fills in once the seller’s ad server issues one. Nothing changes in how you call
sync_creatives, and no action is needed on your side. - For sellers: a creative you have accepted but not yet trafficked now registers as synced on the buyer’s side instead of showing as a failed sync against your storefront. Nothing changes in what you send — report your platform creative ID once your ad server issues one, and keep sending it on the acknowledgement when you have it there.
- Campaign delivery now loads correctly after a single-storefront media buy is created through Interchange. No action is required.
5.133.1 — August 12, 2026 at 12:54 PM UTC
- Provider-backed campaigns now return delivery and accept updates using the correct platform campaign while keeping the same buyer-facing media-buy ID. Nothing changes in buyer requests or responses.
- Third-party storefront catalogs no longer go stale indefinitely on the buyer
- discovery path. Cache-only product reads now revalidate a stale catalog in the
- background instead of serving the same cached products forever. Previously, a
- third-party source whose live discovery calls chronically timed out could
- serve month-old products, which newer creative-format validation then filtered
- out entirely - surfacing as empty discovery results and failed media buy
- submissions for otherwise healthy sellers.
5.133.0 — August 12, 2026 at 11:38 AM UTC
- Audience syncs now fail safely unless a connected platform can prove it can create, update, use, and remove the exact customer list. Meta, Snap, and TikTok receive continuous lifecycle verification; Spotify refuses unverified uploads; and Google, LinkedIn, Pinterest, and Reddit remain unavailable for governed sync until their safety checks are complete. Buyers do not need to take action. Seller storefront display and readiness are unchanged.
- Meta Sales media buys now accept a
pixelIdfield on product selections so buyers can specify which Meta Pixel / Dataset to use for conversion tracking. PasspixelIdincreate_media_buysselections,add_discovery_productsselections, orupdate_media_buyproduct entries. UnlikepageId, there is no auto-select: every Meta Sales (OUTCOME_SALES) buy must explicitly specify a pixel. - Partner organizations can now use one accepted Offer to operate a certified sales agent for explicitly authorized client organizations. In the Partner page and Partner access API, accepting the Offer grants the paid operating right after payment, ownership, registration, and certification are current. An existing Partner needs an Offer that expressly includes this right before operating for an unrelated client; free Partner registration, testing, and certification are not converted or removed.
- This pilot does not add a buyer-visible badge, directory placement, promotion, or ranking change. Certified Partner listing remains a separately verified manual program, and any Featured Partner placement is labeled and cannot affect organic ranking or Murph recommendations. Existing Partner API integrations do not need to change immediately:
featureKeykeeps its legacy value during the v2 rollout, while the additiveentitlementFeatureKeyidentifies the paid right. New and existing Partners can review the operating boundary in Partner Program and agent operations.
5.132.0 — August 12, 2026 at 10:50 AM UTC
- Use the Prepare your inventory onboarding materials guide to separate
- operational source truth from merchandising decisions. Sellers can download
- CSV and JSON compatibility templates validated against
static-avails-feed:v1, complete a source-authority worksheet, and rehearse a- fictional campaign while seeing
- exactly which files are production-importable, supporting evidence, manual
- pilot steps, or gaps. Existing inventory-source behavior is unchanged.
- The compatibility templates retain the parser’s exact legacy
collectionId, collectionName, andcollectionDescriptionfields; those values do not- establish AdCP Collection identity, and the templates are not the target
- Inventory Feed schema.
- Activating, archiving, or renaming a product in Inventory Components works again. The widget sent the change as a full product replacement while carrying only the field you touched, so the sales agent rejected it for the name and inventory such a body leaves out — the product stayed in Draft behind a
REST call failed (400). Edits now send only what this surface edits — Activate and Archive send the status alone, the edit form sends name, description, and status — so the pricing, coverage, and formats it never shows you keep their stored values. The edit form also opens with the product’s current name, description, and status filled in instead of blank. - For anyone changing a product through the API: the partial-update endpoint is now reachable over REST as
PATCH /api/v2/storefront/esa/{esaId}/products/{productId}, and both it and thepatch_esa_productoperation take the partial-update body the sales agent documents — a field sent asnullkeeps its stored value instead of being rejected. The Storefront API reference now shows that body. - Meta CRM audiences now keep their buyer identity when provider metadata is
- temporarily omitted, and governed test fixtures are deleted and verified by
- their exact provider identities.
- Creatives you submit to Meta now appear in list and get responses exactly as
- submitted, with nothing to change on your side.
5.131.0 — August 12, 2026 at 8:43 AM UTC
- Storefront health now reports Available, needs attention when one external
- sales-agent source is withheld for unresolved product formats while another
- source continues serving buyers. The affected source keeps its independent
- connectivity result, so a successful Agent response is not mislabeled as an
- outage.
5.130.1 — August 12, 2026 at 6:17 AM UTC
- Meta media buys now accept a
pageIdfield on product selections so buyers can specify which Facebook Page to use when the connected Meta ad account has more than one authorized Page. PasspageIdincreate_media_buysselections,add_discovery_productsselections, orupdate_media_buyproduct entries. When the account has exactly one authorized Page the field remains optional and the server selects it automatically.
5.129.1 — August 12, 2026 at 5:03 AM UTC
- Buyer discovery no longer withholds a third-party sales-agent source merely
- because its last interpretable product-format declaration crossed the catalog
- cache freshness window. Catalog refresh continues independently. Unresolved
- formats and sources with no persisted declarations remain withheld. Other
- healthy sources in the same storefront continue selling.
- Sellers do not need to republish an otherwise valid canonical declaration or
- exact shared-catalog legacy reference just because its cached snapshot aged. A
- corrected declaration takes effect on the next readiness evaluation after the
- refreshed product is recorded.
- New Rate Cards now omit human expert support, audio/video understanding, and modular source management as separate Intelligence Unit activities. Human support and modular-source access remain Enterprise contract terms, while audio transcription used with Murph stays included in the Murph session. Sellers do not need to update existing accepted Rate Cards or Offers: their immutable activity schedules remain unchanged.
5.128.0 — August 12, 2026 at 3:16 AM UTC
- When a buyer or seller/storefront organization has an IU plan offer, its organization admins can review the exact terms of the selected Rate Card plan in Settings → Plan & Billing and in the portable IU-plan authorization task. Each offer shows whether it uses the plan’s standard terms or explicit customer-specific customizations.
- No action is required. Existing accepted offers, including accepted 250-IU terms, remain unchanged, and existing V2 API requests continue to behave as before. This release does not republish or change the staging Rate Card.
5.120.0 — August 11, 2026 at 8:49 PM UTC
- TikTok creative inventory drift errors now include a precise, identifier-free
reason, helping buyer integrations distinguish stale inventory, format provenance, and provider digest conflicts without changing requests. - Set a fixed CPM when you create a product
- You can now give a product a fixed rate as you author it. Asking for one in Murph chat used to fail with
unsupported product fields: pricing_options, and the only way to create the product was to drop the price — which shipped it as an auction with no floor, so buyers never saw it. - This matters most when one ad-server selector needs more than one price. An uploaded pricing feed keys each row on the selector, so a single ad unit serving both display and video gets the same price for both. A rate set on the product is per-product: create one product per format and price each one on its own.
- The rate must be in your storefront’s settlement currency — there is no FX. If it isn’t, the product is still created but stays hidden from buyers, and the response now tells you which currency was wrong instead of leaving you to find an invisible product.
- TikTok carousel creatives remain available when the provider’s broader image search takes longer to publish their readiness details. Nothing changes in buyer requests.
- When a buyer’s OAuth connection to an adapter storefront (such as Meta Ads) becomes invalid,
discover_productspreviously returned 0 results with no explanation — indistinguishable from a genuine empty inventory response. Buyers now receive aconnectionIssuessignal in the response indicating that the connection needs re-authentication, so the problem is visible rather than silent. - No action is required beyond reconnecting the affected account via Settings > Connections. Once re-authenticated, product discovery resumes automatically.
- TikTok creative inventory now ignores non-reusable external-identity assignments regardless of the material fields TikTok reports for them, preventing those account-owned ads from blocking buyer media-buy creation. No request changes are required.
- When TikTok rejects creative image evidence, buyer integrations now receive a precise
validation_reasonfor invalid single-image counts, carousel counts, or image formats. No request changes are required. - The Murph agent debug-calls lookup (
GET /api/v2/murph/agent-debug-calls) now honors and echoes the lookback window it applied. Every response includes awindowobject reporting the hours covered, the hours you requested, and the exact start/end timestamps — so a short lookback can never be mistaken for a longer one.windowHoursis now documented and bounded to 1–720 (30 days); values above 720 return400, and omitting it defaults to a 7-day window instead of an unbounded most-recent scan. - AdsWizz-connected storefronts now keep order status and booked-flight checks
- working when their agency credential has limited order-read permissions.
- Existing buy dates are unchanged, and no action is required.
- Make storefront discovery previews and source tests distinguish a completed empty seller catalog response from discovery that stopped before a seller
get_productsround-trip. - A storefront no longer hides its entire product catalog when one inventory source cannot be format-audited. A single source with stale or uninterpretable product-format evidence used to block everything:
get_productsreturned no products and every media buy was refused, including for healthy sources whose formats were perfectly valid. That source is now withheld on its own, so the rest of the catalog stays discoverable and buyable. A buy that does route to a withheld source is refused with a distinct reason rather than an unknown-product error, so a buyer agent can tell “try again later” from “wrong product id”. - For sellers, this changes what one troubled source costs you: the rest of your storefront keeps selling instead of going dark, and only the affected source is held back until its formats can be read again. Product-format evidence for third-party sales agents now refreshes on its own as well, so it no longer expires while your storefront waits for the buyer request it was being blocked from serving. Nothing to change on your side.
5.119.1 — August 11, 2026 at 1:08 PM UTC
- Ignore externally managed TikTok Spark assignment formats that are not reusable advertiser creative inventory.
5.119.0 — August 11, 2026 at 12:58 PM UTC
- Buyers can now ask Murph to open Notifications and review campaign and account events. Sellers can open the same Page to review storefront events and manage Product Updates and source-health alerts in their primary Slack channel. No setup is required. Read and acknowledged states remain separate for each recipient. Slack, email, and webhook delivery never changes either state. Release history remains in the separate Release notes Page.
- Keep TikTok reusable creative inventory available when an advertiser also contains ads backed by provider identity types that cannot be reassigned through authorization-code inventory.
- Reconnect your existing Reddit Ads connection once in Settings → Connections so it can keep working after the initial one-hour token expires. New and reconnected Reddit Ads connections refresh automatically.
- Murph can now look up your storefront’s published brand identity without asking you to approve a read-only action or losing the action between turns. Direct storefront API behavior is unchanged.
5.118.0 — August 11, 2026 at 11:49 AM UTC
- Enrolled sellers can use
get_deliveryon/mcp/v3to query up to 90 days of seller-reported delivery or cumulative storefront margin in pages of up to 100 rows; the response makes unavailable values and pagination explicit, and neither buyer measurement nor/mcp/v2behavior changes. - Keep TikTok reusable creative inventory available when an advertiser also contains linked-account Spark ads that cannot be reassigned through authorization-code inventory.
5.117.0 — August 11, 2026 at 10:58 AM UTC
- Meta Engagement campaigns can now be created successfully. Previously, any attempt to launch an Engagement campaign failed with a generic “Upstream request failed” error. No storefront configuration changes are needed — previously failed campaign creation requests should be retried.
- If your storefront uses AdsWizz and you want to open new buys, confirm the
- currency in your ad-server setup with your Scope3 contact. Interchange applies
- that currency to every AdsWizz campaign and checks any optional CPM ceiling
- before sending it. New buys remain closed until Scope3 independently verifies
- that AdsWizz accepts the currency; existing live buys keep running and need no
- action.
5.116.0 — August 11, 2026 at 10:34 AM UTC
- Accept TikTok’s empty non-applicable ad material fields without weakening validation of reusable creative evidence.
- The v3 agent surface now supports the
creative_collectionnoun for non-executable grouping and joint review of creatives. Buyers can search, read, create, update, and manage collection membership throughsearch,get, andsave_creative_collection.
5.115.2 — August 11, 2026 at 10:16 AM UTC
- Keep TikTok reusable creative inventory available when an advertiser also contains provider-managed catalog carousel or live-content ads.
5.115.1 — August 11, 2026 at 9:16 AM UTC
- Keep TikTok creative inventory usable when an advertiser contains externally authored carousel ads, while preserving strict ownership checks for adapter-managed carousel assets.
5.114.5 — August 11, 2026 at 6:57 AM UTC
- Murph now shows storefront product results as they arrive in one live discovery view, labels provisional totals as “so far,” and waits for completion or the buyer’s explicit choice to continue before showing recommendations. Wait explanations stay specific to an individual storefront’s observed outcome instead of generalizing latency across countries, regions, or groups of sellers. For sellers, buyer-facing status now uses neutral storefront-specific outcomes without characterizing the seller, its geography, or its peers as slow.
discover_productsandbrowse_discoverynow surface aconnectionIssuesfield when an adapter OAuth credential (e.g. Meta, Snap) has expired. Previously, products from that storefront were silently omitted with no indication that re-authentication was needed. The new field names the provider and affected storefront so the buyer can navigate to Settings > Connections to reconnect.
5.114.4 — August 11, 2026 at 6:30 AM UTC
- Background meeting reconciliation now leaves exhausted, unchanged Zoom transcripts terminal instead of retrying them indefinitely. Source-health notifications can also recover when Murph can join a public customer channel but the provisioning bot cannot invite it. No action is required.
5.112.0 — August 10, 2026 at 11:57 PM UTC
create_media_buysandupdate_media_buynow warn as soon as a media buy is staged or updated if the owning campaign’s pacing schedule has no period covering today or later — instead of only failing later when you try to execute. The warning tells you to callupdate_campaignwithpacingPeriodscovering the new dates before executing.
5.110.0 — August 10, 2026 at 9:55 PM UTC
- Sellers now get notified about a few more storefront issues they can actually fix, like rejected delivery reports or a sales agent responding with errors, instead of only finding out by checking the storefront dashboard.
5.108.0 — August 10, 2026 at 6:48 PM UTC
- Organization account admins enrolled in Organization Agents can open the Agents collection and choose Create Agent to register a private Agent. Choose a claimed operator or name a new one, then continue in Agent Overview. This does not connect a Source, publish the Agent, or change existing Agents.
- Spotify connected account sync now reuses media buys created through its legacy direct adapter flow instead of failing on a duplicate. No action is required.
- Preserve authenticated Spotify account identity when reading media buys so account sync can safely reconcile legacy direct-adapter campaigns.
- Delivery reporting no longer records a zero-impression day when a publisher’s sales agent reports that it has no delivery data for that day yet. Previously the day was stored as zero, and because a past day is never re-read, that zero was permanent — a campaign that was delivering could report zeros indefinitely. The day is now left absent until real figures arrive, and the source’s reporting is no longer counted as healthy on the strength of a response that reported nothing.
- Publishers need take no action, and nothing changes in what they are asked for or shown: their own reporting is unaffected, and a day their ad server could not report yet is now recorded as pending rather than as zero delivery. The one indirect effect is that a sales agent whose reporting is genuinely not returning data will no longer be counted as healthy on those responses, so a real reporting outage becomes visible instead of looking like a campaign that simply did not deliver.
- Creative sync now reports the state your seller actually sent, instead of a
- state we filled in. A seller may acknowledge a creative without stating a review
- status — the ad protocol allows it, and it means “accepted, nothing further to
- report”. We substituted “processing” and then read our own guess back as a
- seller-side stall, so a creative the seller had accepted showed as failed with
- “is processing and is not live”. That invented status is gone.
- Several related misreports go with it, all in the same direction: a creative
- that was not ready being shown as ready. A creative is still only reported live
- once the seller names it on their delivery platform.
5.107.0 — August 10, 2026 at 5:17 PM UTC
- Buyers now see clearer storefront language that distinguishes a seller’s wholesale price from your price and explains advertiser routing, with no workflow change. Sellers now see plain mapping and coverage labels across setup, exports, and guidance, making it easier to confirm which catalog details are ready for buyers; no setup or API behavior changed.
- Organizations enrolled in the Agents preview can now review the software
- Agents they operate, including their certification and implementation-health
- summaries. A storefront can also see the Agent that powers its own Source
- without exposing other organizations’ connections or credentials.
- Connected account sync no longer fails or creates a duplicate when it finds a media buy placed through an older adapter route. No action is required.
- Expanded buyer and seller chat widgets now scroll through their full content without requiring per-widget host configuration.
- Fixed
get_storefront_reporting_metricsreturning zero impressions and spend for media buys delivered through managed ad-server sources. Reporting now correctly includes delivery data for all source types on a storefront. - Storefront logos now come only from identity asserted through
brand.jsonor the AAO registry. If no authoritative identity exists, the storefront shows no resolved logo instead of substituting one inferred from a website or enrichment service. Murph also keeps unsupported flat-rate, time-based, click, and engagement pricing in their original commercial units rather than translating them into invented CPM or impression figures, and explains that a storefront run by experts uses the canonicalhttps://interchange.iopublisher-authorization identity rather than its buyer-facing MCP endpoint. - The v3 agent surface now supports the
creativenoun. Buyers can search, read, create, update, and archive creatives through the standard v3 verbs (search,get,save_creative). Campaign creatives are also available viaget(kind: 'campaign', include: ['creatives']). This is the BYO-first slice: generation sessions and collections are separate follow-up nouns. - Storefront media buys now reject stale or invalid creative-format selections before entering manual approval, instead of failing only after seller review.
5.106.0 — August 10, 2026 at 3:38 PM UTC
- Connected account sync now reuses the buyer’s existing campaign when the provider returns the same media buy, instead of failing while attempting to create a duplicate.
5.105.0 — August 10, 2026 at 2:56 PM UTC
- When you upload a zip containing files that Murph doesn’t recognize (for example, an HTML5 ad bundle packaged as a nested zip), those files now appear in a notice telling you which ones weren’t added and why. Previously they were silently dropped with no feedback.
5.104.0 — August 10, 2026 at 1:01 PM UTC
- Add an advertiser right in chat. Click + Add advertiser or just ask Murph
- (“add an advertiser called Acme at acme.com”) and a guided form opens,
- pre-filled with whatever you said — fill in the rest, and it creates the
- advertiser and links its brand. When it’s done, Murph confirms and can switch
- you straight into the new advertiser, with Switch into it and **Add
- another** actions right on the form.
5.102.0 — August 10, 2026 at 10:21 AM UTC
- Creative sync status now includes the publisher’s public AdCP agent or inventory
- source identifier in
sourceId. The existingagentIdremains unchanged for - compatibility. Approvals, history, and seller workflows are unchanged, and no
- action is required.
- Discovery Card and Business Rules now use the full available Page width, keep long content reachable through one dependable scrollbar, link brand management to the identity’s real owner, and make worldwide country coverage explicit when editing legacy cards.
5.100.0 — August 10, 2026 at 8:55 AM UTC
- Managed ad-server sources now prove their execution currency before they can be connected or accept a new buy. The storefront checks that currency against the seller’s settlement currencies, rechecks it after credential changes, and no longer assumes USD when an adapter has not supplied a currency. Existing buys keep their original currency while a mismatch is repaired.
5.99.0 — August 10, 2026 at 7:16 AM UTC
- Canonical product discovery and forwarding now use the SDK’s supported additive projection and durable legacy-route sidecars while keeping advertised format options URL-free.
5.98.0 — August 10, 2026 at 6:36 AM UTC
- Reddit campaigns without an update timestamp now sync correctly; no buyer action is required.
5.97.0 — August 10, 2026 at 6:01 AM UTC
- LinkedIn connections now ignore legacy personal ad accounts during discovery, so setup completes when supported business accounts are available. Nothing needs to change on your side.
- Reddit media-buy sync now remains compatible when Reddit adds a new raw campaign status, using the campaign’s configured lifecycle status for buyer-facing state and actions.
- When buyers create a media buy through a provider-policy-owned social storefront (LinkedIn, Meta, Pinterest, Reddit, Snap, or TikTok), the storefront no longer reports itself unavailable solely because it has no Interchange acceptance policy. The social platform continues to apply its own review rules, while adapter and managed storefronts configured for Interchange approval still require an active policy and approver routing. Nothing to change on your side.
5.96.1 — August 10, 2026 at 5:42 AM UTC
- Snap storefront account sync and media-buy reads now complete when Snap omits redundant account ownership or returns empty demographic targeting. No action is required.
- Fixed
execute_campaignfailing with “This storefront is blocked and cannot accept media buys” for adapter storefronts on accounts that own multiple storefronts. The eligibility check now evaluates the specific target storefront rather than an arbitrary storefront belonging to the seller.
5.96.0 — August 10, 2026 at 5:25 AM UTC
- Before connecting a new ad server, confirm the default and payment currencies in Storefront setup. The connection then verifies its execution currency instead of assuming USD:
- For AdsWizz, enter the agency billing currency in the ad-server connection form.
- Google Ad Manager discovers its supported currencies automatically.
- FreeWheel and SpringServe use the confirmed storefront default.
- Already live? Existing buys keep their original currency. If the ad-server connection reports a missing or mismatched currency, update the Storefront currency settings or reconnect the ad server before accepting a new buy.
5.95.2 — August 10, 2026 at 4:42 AM UTC
- Buyers can update creatives while a media buy awaits storefront approval without losing those changes when the buy is forwarded. Storefront operators receive the forwarded media buy with the buyer’s latest creative assignments intact. Neither audience needs to take action. Background reconciliation and source-health checks now retry transient provider failures without repeated alerts.
- When you buy through a connected Reddit account, product discovery now returns the full wholesale catalog without a brief, and campaign syncs use the credential attached to the selected account. Nothing to change on your side.
5.95.1 — August 10, 2026 at 4:21 AM UTC
- Forced publisher-agent discovery refreshes now return the latest authorization directly from the publisher’s live
adagents.json, including newly added or removed agents, while the registry mirror catches up. The response keeps the registry’s last-validation timestamp and identifies the live origin as its freshness source, so a stale crawl timestamp no longer means the refreshed authorization was ignored.
5.95.0 — August 10, 2026 at 4:13 AM UTC
- Discovery Card logos with transparent backgrounds now receive a contrast tile in both seller setup and Marketplace, so light or dark artwork remains visible instead of disappearing into the card.
5.94.0 — August 10, 2026 at 3:16 AM UTC
- Murph now presents updates to an existing ask with the correct ask reference and requester state instead of describing them as a new, unrecognized ask.
- Pass-through media buys now preserve source-authored canonical creative format selections when forwarding, preventing valid buys from failing before they reach the source sales agent.
5.93.11 — August 9, 2026 at 4:32 PM UTC
- Preview accounts can now use the Inventory sources selector at the top of the seller rail to switch between the overall Storefront and an exact source, or add another source. Each source opens its established detail page. The mapping-workspace preview is no longer shown in the UI, while existing API compatibility reads continue to work. No setup or integration change is required, and product delivery, pricing, and packaging are unchanged.
5.93.10 — August 9, 2026 at 4:12 PM UTC
- Storefront composition now preserves selectable creative formats and their exact delivery routes when a wholesale source publishes legacy formats only.
5.93.9 — August 9, 2026 at 3:17 PM UTC
- Media buys against pass-through inventory now reach their source when the buyer picks a creative format from a source that publishes its formats in the legacy form. Product discovery already offered those formats as canonical options, but the forwarding step did not recognise the option ids it had just advertised, so an approved buy failed with
invalid_format_selectionand could not be retried. Discovery and forwarding now read a source’s legacy formats identically, so this holds however the source declares them. A package that selects several of a source’s legacy formats now forwards all of them.
5.93.3 — August 9, 2026 at 12:41 PM UTC
- Buyers now see reliable Discovery Card logos, a consistent description label, and the seller’s complete description instead of a trapped scrolling field.
- Sellers editing a managed Discovery Card in Seller Setup must now choose at least one accepted country or select every country before saving. Existing cards remain visible until they are edited, and sellers who already listed countries do not need to do anything.
- Buyers filtering Marketplace by country will still see a storefront when that seller has not yet finished listing where it sells, so existing sellers do not disappear during this update. A storefront that names supported countries appears only in those countries, and one that explicitly supports none stays hidden. Buyers do not need to take action.
5.92.2 — August 9, 2026 at 10:37 AM UTC
- Reddit audience signals and campaign syncing now complete reliably instead of failing on valid Reddit responses. No action is needed.
5.92.0 — August 9, 2026 at 6:48 AM UTC
- Meta creative retries after a rate limit or rejected sync are now safer: they avoid duplicate ads and reuse existing uploads when possible. No action is needed on your side.
5.91.0 — August 9, 2026 at 5:18 AM UTC
- Your storefront now writes the argument behind a proposal, not just the plan. When a brief arrives, your Merchandising Agent composes a pitch that leads your proposal pass in the demand inbox: a thesis for why this plan fits this buyer, each product’s role and its fit, what will and won’t be measured, the case for the price, and an honest note on anything the brief asked for that your catalogue doesn’t cover. The product table moves below it, unchanged, as the plan appendix. Every sentence in the pitch cites the brief, your inventory and product data, your Playbook pricing, or your Playbook instructions — an unsourced sentence is dropped before you see it. That’s why a thin setup reads plainer: audience-size claims and superlatives have no source in the platform today, so they never compose, while a maintained rate card and a written Playbook give the pitch more to argue from. The pitch is included in your existing storefront plan — no new billable surface. Buyers still receive products and prices exactly as before; the argument is on your side of the exchange for now.
5.90.0 — August 8, 2026 at 9:05 PM UTC
- When you assign creative to a Meta media buy, temporary provider failures are now retried automatically without risking duplicate ads. Terminal failures no longer expose raw provider details. Nothing to change on your side.
5.89.1 — August 8, 2026 at 8:10 PM UTC
- Signing in to Interchange now remains available when an OAuth integration repeatedly retries an expired session. No action is needed on your side.
5.89.0 — August 8, 2026 at 7:39 PM UTC
- For completed v3 requests, Activity call records now list each buyer or storefront API operation routed through the compatibility layer, in order. This makes retries and downstream failures easier to diagnose; cancelled requests report the evidence as unavailable instead of showing a partial history. Nothing to change on your side.
- On each Source page, you can now review coverage separately for Storefront-built products and products supplied by a connected Agent. Existing Sources need no action. A Needs attention section names the owner and next step: Storefront catalog or routing gaps identify what to provide to Scope3 support, while Agent-owned product gaps must be corrected in the connected Agent and resynced. A catalog that has not synced successfully is shown as unavailable instead of empty. Direct mapping edits are not yet available in these workspaces, and Agent-supplied products remain read-only in Interchange. Switching product modes keeps inactive mappings for later without applying them to current products. Product paths are not separately priced, and buyer API fields, product labels, ranking, and delivery behavior do not change.
- On the Connections page, you can now unlink an ad platform connection from its card or detail view. Unlinking stops future syncs and campaign subscriptions for every advertiser using the organization-level grant. Historical reporting and advertiser mappings remain.
5.88.0 — August 8, 2026 at 6:02 PM UTC
- Buyer and seller REST integrations can now pass
clientRunIdto GET /api/v2/activity/calls; list and detail responses also expose nullableclientRunIdand server-observedapiVersion.clientRunIdis caller-supplied- correlation, not independent provenance: cross-check
workloadUid,runUid, apiVersion, and the time window. Results remain account-authorized, and- service tokens remain restricted to their workload. Existing integrations
- require no changes unless they adopt the optional filter or fields.
5.87.2 — August 8, 2026 at 5:20 PM UTC
- Buyer supply requests now save against the authenticated Interchange account even when it has no Linear customer association. Repeating a withdrawal safely reports that there is nothing left to remove. No customer action is required.
5.87.0 — August 8, 2026 at 4:15 PM UTC
- Pausing Meta media buys now succeeds when Meta omits disabled manual-placement controls from its response. Nothing needs to change on your side.
- Product authoring now presents every publisher coverage option declared by the inventory source, including property tags, without implying that publisher verification is required. This seller-authoring change does not affect buyer-facing storefront rendering.
5.86.2 — August 8, 2026 at 3:44 PM UTC
- Pausing Meta media buys now succeeds when Meta omits an optional placement setting from its response. Nothing needs to change on your side.
5.85.0 — August 8, 2026 at 1:57 PM UTC
- Enrolled sellers can now open an Inventory Source page to see whether Scope3 builds products from that Source’s inventory or the connected Sales Agent supplies finished products. This is operational context only: it does not change how buyers discover, rank, name, or buy the seller’s products, and neither option is priced separately. Existing active Sources keep their current behavior and need no action. If an inactive Source says its product setup is unresolved, ask the Sales Agent provider to confirm what it supports; Scope3 support owns the follow-up selection when both approaches are supported. The Source remains inactive until that setup is resolved. Buyer API fields, product labels, and delivery behavior do not change.
- You can now see delivery reporting problems as a diagnosis on your source, alongside the inventory problems that were already there. If a source returns a delivery report we can’t accept, the diagnosis names the exact field that failed validation, so you can fix the cause instead of guessing from a generic failure. Selling is unaffected while one of these is open: inventory, pricing, and orders keep working, and only the reporting for that source is incomplete.
- Two new troubleshooting sections cover what to do: Delivery reports rejected and Delivery reports not returned.
5.84.2 — August 8, 2026 at 9:24 AM UTC
- Large third-party sales-agent catalog responses no longer stall while diagnostic logging captures a preview of the response.
- Buyer Setup now recognizes active media pricing inherited from your billing
- organization. Missing Organization IU pilot terms no longer appear as a missing
- media rate card, and a confirmed buyer operator no longer needs domain
- verification to go live. Nothing to change on your side. Seller availability,
- authorization, and setup are unchanged.
5.84.0 — August 8, 2026 at 8:15 AM UTC
- Seller navigation now keeps the binding Discovery Card alongside Business Rules and inventory setup under Connect. Business Rules also renders policy, disclosure, and approval controls on one consistent card surface.
- Storefront operators using an agent with the gated v3 preview can now get more reliable answers from Interchange documentation. The agent can follow a cited page to the relevant guidance and stop once it has enough evidence, helping it preserve field names and safety steps. Nothing changes in buyer-facing storefront responses, and sellers do not need to update their setup.
5.83.2 — August 8, 2026 at 7:01 AM UTC
- The Discovery Card editor now presents its identity and buyer-facing fields together on one clear card surface.
5.83.0 — August 8, 2026 at 5:53 AM UTC
- Buyer teams can now use the Calls view in Activity to see whether connected workflows succeeded, how long they took, and what happened when one failed. They can share the details with a technical teammate when they need help. Seller teams get the same view for requests handled by their storefronts. Existing history remains available, and no setup or integration changes are required.
- Anyone using Murph can now choose Google Drive files without enrollment. Buyer teams can also choose Drive files in campaign creative uploads. Each import requests access only to the files selected in Google’s window; it does not create persistent Drive access.
5.82.2 — August 8, 2026 at 5:27 AM UTC
- Connections now show the full integration grid on page and Settings surfaces instead of clipping the bottom of the list. Sellers can also save Discovery Card descriptions, channels, and accepted countries from the current storefront surface.
5.82.0 — August 8, 2026 at 4:06 AM UTC
- Buyers can now compare storefronts by the countries and channels they accept, with Advertising Policies when disclosed by the seller or connected sales agent. For pass-through sellers, each connected source’s standard AdCP
primary_channelsandprimary_countriesform one binding, correlated declaration; separate sources are never combined. Sellers manage how they appear in Marketplace from one Discovery Card in Setup. Managed sellers keep Brief Acceptance, Creative Policy, and human approval settings separate; external pass-through sellers continue to use coverage and policies from their own sales agent. Existing V3media_kitintegrations remain available as deprecated compatibility surfaces. - Your generated
adagents.jsonfiles are now ready to copy or download: Murph - uses valid property IDs and current timestamps, reports exactly what it checked,
- and attaches each file to its Slack reply. No setup change is required. If you
- copied a file from an earlier Murph response, generate it again before publishing.
- Parent organization admins now manage payout destinations for child storefronts. In Plan & Billing → Payouts, select a direct child storefront to create or replace its destination, or use the REST billing API with
targetCustomerId; child-account admins can no longer change payout routing. Standalone storefront payout management is unchanged, and inventory, reporting, and other storefront operations remain child-scoped. Generic MCP payout operations do not support direct-child targeting.
5.81.1 — August 7, 2026 at 10:38 PM UTC
- The ”+ Add advertiser” button on the Advertisers overview is temporarily
- unavailable while we finish improving the in-chat add-advertiser flow. To add
- an advertiser in the meantime, use ”+ Add advertiser” in the advertiser menu at
- the top of the left sidebar, or just ask Murph to add one.
5.80.0 — August 7, 2026 at 9:19 PM UTC
- You can now create an advertiser without leaving the chat. Use the **+ Add
- advertiser** button on your Advertisers view, or ask to add one — then name it,
- look up its brand by domain, and set its primary currency. When you’re done, you
- land in the new advertiser’s campaigns. Nothing changes for advertisers you’ve
- already set up.
5.79.1 — August 7, 2026 at 7:55 PM UTC
- Opening Billing in an advertiser’s settings no longer yanks you to the organization billing page and silently switches your active account. Advertisers now see an inline note that billing is handled at the organization level, with an explicit button to open it — the account context only changes when you choose to.
5.78.0 — August 7, 2026 at 3:44 PM UTC
- Your agent can now request fresh offers from named sellers against a campaign with
request_proposals. Each seller’s answer is stored as a Proposal: list a campaign’s Proposals withsearch, and read one withget, including the resolved detail of every product the seller allocated. Accepting one by passingfromProposalIdtosave_media_buystages a draft media buy built exactly from that offer, and records which version of the Proposal was accepted even if the seller later revises it. Evaluation instructions onrequest_proposalsare accepted but not yet applied to results, and the staged media buy follows the normal draft flow: nothing is sent to the seller when you accept. - Property exclusion lists are now enforced when buying: products on excluded properties are filtered out of discovery results, and executing a campaign fails with a clear error if a selected product conflicts with the advertiser’s exclusion list.
- Brand logos now stay fresh when a brand replaces the bytes at a stable logo URL. Previously, once a logo was cached, it was served indefinitely. The cache now uses ETag/Last-Modified conditional revalidation: a
304 Not Modifiedresponse keeps the cached copy; a200re-downloads and replaces it.
5.77.0 — August 7, 2026 at 1:11 PM UTC
- The buyer agent skill now teaches the multi-storefront
get_productsprogressive-response contract: poll untilresults_complete: true, replace provisional snapshots instead of appending them, paginate with the cursor only after completion, and readstorefront_results[].messageon successful empty results. Agents built on the skill no longer risk presenting an early partial snapshot as the whole marketplace.
5.76.0 — August 7, 2026 at 10:32 AM UTC
capabilityHealth.inventory.statusandcapabilityHealth.reporting.statusonGET /api/v2/storefront/readinessandGET /api/v2/storefront/inventory-sources/{sourceId}/diagnosticskeep the same field name and position, butstatusis now nullable: it isnullwhen nothing has ever reported on that capability, where it previously read the stringunknown. The other five fields on each axis change entirely.lastError,lastErrorCode,lastErrorAt,lastSuccessAtandlastCheckedAthave been removed, because a single set of them could only ever describe one check. The equivalent detail now sits on each entry inobservations, described below:lastErrorbecomesdetail,lastErrorCodebecomescause,lastCheckedAtbecomesobservedAt, andlastSuccessAtbecomeslastOkAt. There is no direct replacement forlastErrorAt; for a check that is not healthy,observedAtis when it recorded that result.- Each axis now also carries
observations: one entry per health check that reported on that capability, each with its ownstatus, plusobserver,cause, andobservedAt. Several checks can watch the same capability and disagree, for example one confirming the connection is fine while another reports the reporting feed failing. Before, you could only see whichever check happened to run most recently; now you can see all of them. statusitself is more trustworthy for it: it is computed across every check that reported, discounting one that has gone stale, instead of reflecting only the last write. An axis nothing has ever reported on now readsnull, not healthy.- If you want one verdict, keep reading
status: do not build your own collapse fromobservations. If you want to see checks disagree, readobservations. - For a managed ad-server source, a failure reported by any check now shows up in that source’s health, the same as for every other source type: for example, a creative-sync failure now flips the badge even while the pipeline check itself reports healthy.
- If you look at your storefront’s health from the seller-setup widget or the account switcher, nothing changes: the health badge and its wording are the same as before. Only someone reading the raw API response sees these new fields.
- This is a data-model and API-contract correctness change, not a change to pricing, packaging, or your plan.
5.75.3 — August 7, 2026 at 5:18 AM UTC
- Sellers approved for the modular inventory source pilot now receive its setup
- and management surfaces directly from their
modular-sourcesentitlement. A - separate rollout flag is no longer required, preventing pilot access from
- drifting between two customer lists.
5.75.0 — August 7, 2026 at 12:29 AM UTC
- No action is required unless your organization is invited to the controlled Enterprise Contract pilot. Existing integrations also need no changes:
get_iu_rate_card_offerandget_storefront_rate_card_offercontinue to return the same contract details and response structure. - If invited, an organization administrator can open Settings → Plan & Billing to see purchased product rights, premium support, package history, and current status. Enterprise brand administrators can confirm their organization’s governance, product, and support rights in one place. Agency teams use the same organization record to verify exactly what is included. Power buyers and builders can use
open_iu_plan_taskto open the authenticated view through MCP with standard labels and safe links. Small-business buyers do not need to act; the page remains hidden unless their organization joins the pilot. - Invited seller administrators see the same purchased rights, premium support, package history, and status for their organization. This gives sellers one authenticated record for confirming what they purchased and whether it is active. It does not change how buyers discover or rank seller storefronts.
- Packages awaiting payment appear as “Payment required” and remain inactive. A billing hold marks a purchased package as “Paused.” Once a prepaid package’s payment is confirmed, using the package will not return it to “Payment required.” A refund or payment reversal changes the package to “Payment required” until funding is restored.
- We will expand the pilot only after Plan & Billing and MCP show the same contract state, private terms remain limited to authorized organization administrators, and failed next actions and support requests stay within the approved pilot limits. Turning off
iu-rate-card-pilothides the new views without changing accepted contracts.
5.74.2 — August 6, 2026 at 3:02 PM UTC
- The Modular source workspace now opens reliably instead of failing when a redundant access check on its static app shell is temporarily unavailable. Source data and actions remain protected by authenticated customer and tenant authorization checks.
5.74.1 — August 6, 2026 at 2:41 PM UTC
- Advertiser property lists now attach to new media buys only when the seller declares property-list targeting support in its capabilities. Sellers that do not support the dimension no longer receive it, which prevents them from rejecting the buy outright.
5.74.0 — August 6, 2026 at 1:35 PM UTC
- Accept exact legacy
{agent_url, id}product-format references indefinitely - when the shared AdCP catalog can interpret them. Product-format enforcement now
- blocks only unresolved custom references and missing catalog evidence; it no
- longer requires direct canonical
format_options[]based on source age or a - September 1 deadline.
- Sellers using shared-catalog references do not need to duplicate canonical
- options on their products. Sellers with custom references must move them into a
- shared interpretable catalog entry or publish an interpretable custom canonical
- declaration before their storefront can transact under the flag.
- Buyers need no setup change. They continue to discover products whose formats
- are interpretable. A storefront with unresolved custom formats returns no
- products to buyers until the seller repairs those formats, preventing buyers
- from selecting inventory that cannot be trafficked.
- Fixed a failure where a live storefront’s products could be discovered but not bought. Storefronts that were created before going live carried a stale internal status that two execution steps still checked, so
execute_campaignrejected the storefront’s own products with “Sales agent not found”, and creative attachment reported the agent as inactive. Nothing was ever sent to the seller, so no orphaned orders were created. A storefront’s availability is now read only from its live pause and readiness state, everywhere in the buying path. - If your Reddit connection is already marked expired, reconnect it once in Settings → Connections. Active Reddit connections now refresh OAuth credentials automatically before they expire.
5.73.0 — August 6, 2026 at 11:39 AM UTC
- The Murph Storefront rail now lets enrolled sellers open every inventory source on its own Source Page, including Scope3-managed adapters and sources still being connected. No migration or buyer-side action is required, and buyer discovery, ranking, labels, and delivery do not change. Switching sources clears the prior source’s work, while shared links restore the exact source instead of falling back to another connection. Add and manage sources from Seller Setup, which now presents one collection with Scope3-managed, certified-partner, operator-managed, and advanced modular paths.
- Connections now explains when Scope3 must configure a provider app and disables the unavailable connection action instead of sending buyers into a broken authorization flow. Nothing is wrong with the buyer’s provider account, and no buyer action is needed until the provider app is available.
5.72.0 — August 6, 2026 at 11:04 AM UTC
- Storefront administrators can now list pending buyer account requests in Buyer Account Mapping through the storefront REST API or MCP, then approve Interchange-cleared billing or reject a request with a reason. Requests stay pending until an administrator decides them; existing grants, source bindings, and billing defaults do not change automatically.
5.71.5 — August 6, 2026 at 7:44 AM UTC
- Buyer-facing adapter errors now retain bounded, host-authored diagnostics for malformed audience inventory and TikTok response envelopes. Provider messages, numeric response codes, request identifiers, and account data remain suppressed.
- Connected Pinterest, Spotify, and LinkedIn storefronts now distinguish audiences that exist but are not ready from accounts with no audiences. Non-ready audiences remain visible with a non-live deployment and cannot be mistaken for targetable inventory. Failed adapter reads also retain bounded, allowlisted diagnostics for readiness probes without exposing provider messages or identifiers.
5.71.0 — August 5, 2026 at 10:09 PM UTC
- Media buys now carry the advertiser’s property list from the moment they are sent to the seller. Previously, a property list only reached media buys that were already active when the list was created - a buy executed after the list existed shipped without it until it was manually attached.
- Creatives produced by generation sessions are now stamped with
creative_source: "generated"instead of the default"uploaded". All other creation paths are unchanged. The"connected"value remains reserved for a future inbound-import path. - Geo targeting specified as
countries(instead of the canonicalgeo_countries) now flows through to media buy packages correctly. Previously, campaigns stored with the legacy field name had their geo constraints silently dropped at execute time. - Products created from ad-server inventory now declare the publisher inventory they cover, so buyers can see whose inventory a product sells. The Inventory Selector task asks for coverage alongside the delivery formats, offering your ad server’s own authorized options — typically all properties on a publisher domain, or the specific properties it has verified. One option is prefilled; with several you choose. Previously coverage could only be set when the draft started from a publisher format, so drafting from ad units or placements produced a product the ad server rejected with no way to fix it from the task.
- Because the options come from your ad server, the domain shown is the publisher that authorized you — for a representation network that is the network, not each represented site — and the product declares the properties underneath it. If the task offers nothing, that source has no authorized publisher properties yet, which is a publisher-side step to resolve.
- Validation findings are also grouped now by whether they stop you. Advisory warnings appear under their own heading instead of below “Fix these items before creating”, so a recommendation no longer reads as a blocker.
- Normalize TikTok’s documented human-readable custom-audience detail types into canonical adapter signal types while continuing to reject unknown provider values.
- Media buys discovered from a linked account now stop background status checks as soon as the source reports them completed or canceled. No action is required.
- Treat TikTok custom-audience list types as advisory and validate the authoritative detail type before projecting signal inventory.
5.70.0 — August 5, 2026 at 6:26 PM UTC
- TikTok storefronts now discover custom audiences when the provider returns the
audience_typelist-field variant. Conflicting, malformed, or unsupported audience types still fail closed. - Open Partner to activate paid operations for unrelated clients. If the Partner activation pending banner appears, follow its Plan & Billing action to add a verified card, fund prepay, or resolve a billing hold. In Partner, claim your provider and complete production certification for its current revision. Operations open when your accepted Partner Program contract is in force and every requirement is current.
- Provider registration and production certification remain free while paid operations are pending. Buyers do not get an automatic connection: Partner-only operations and attribution activate only for eligible Partners, while buyer consent and client authorization remain separate requirements.
- Fixed inventory-source test-campaign diagnostics so the run record’s seller calls now match the storefront activity log. When a test campaign reached a seller during discovery but then failed at product selection or media-buy dispatch, the run record previously showed no seller calls — making it look like the seller was never contacted. The completed discovery round-trip now appears in the run’s diagnostics, so an empty seller-call list reliably means discovery never reached a seller.
5.69.0 — August 5, 2026 at 4:15 PM UTC
- Campaigns that have been archived now correctly block new creative operations. Attaching or creating a creative against an archived campaign returns 404 (the campaign is treated as no longer present). Sales-agent sync no longer fires on behalf of archived campaigns. The advertiser creative library no longer counts archived-campaign attachments in each creative’s campaign usage count.
- Buyer-facing adapter errors now retain bounded, host-authored diagnostics for malformed audience inventory and TikTok response envelopes. Provider messages, numeric response codes, request identifiers, and account data remain suppressed.
customer_get_usersnow includes administrators from parent accounts in your organization. Previously those users had access to your account but were not returned in the response.- No permissions have changed. If your account is part of an organization, you will see additional users in the response. Nothing to update on your end. Sellers are not affected.
- Connected social storefronts now expose real audience lists reliably instead of failing only after an account has inventory. Large lists are paginated, and invalid or cross-account inventory fails visibly. Sellers do not need to take action; buyer agents targeting these audiences should use each result’s
signal_agent_segment_id. - Creative sync now reports failure when a sales agent accepts a creative but refuses the package assignment that puts it on your media buy, rejects it through its review status, or returns no result for it at all. Previously those synced as succeeded while the creative stayed pending, so a creative that never reached the buy looked live. The reason now travels with the failure, quoted from the sales agent in their own words — including any package they name — instead of a bare sales-agent name.
- Storefront source test campaigns now attach the buyer-facing pricing option returned by their own discovery run, preventing valid account-scoped products from being rejected during selection.
- Buyer Account Mapping imports can now bind uniquely matched sandbox relationships to authenticated inventory-source accounts. If sandbox and live relationships share the same operator and brand domains, the import quarantines the row instead of choosing one.
- Pacing plans now enforce budget limits on live buys. When you write a
pacingPeriodsschedule on a campaign, each active buy’s package budget cap is updated to match where you are in the current period - and a background worker advances those caps at each period boundary going forward. - What this means in practice: Budget cap updates go through each seller’s standard approval flow. Sellers with auto-approval apply the change near-immediately; sellers with manual review apply it after their team acts. Check your approval queue if you expect delivery to change quickly.
- Previously, pacing schedules were accepted and stored but never applied to buys already running. Existing stored schedules on active campaigns will begin enforcing when the next period boundary is crossed.
- Connected Pinterest, Spotify, and LinkedIn storefronts now distinguish audiences that exist but are not ready from accounts with no audiences. Non-ready audiences remain visible with a non-live deployment and cannot be mistaken for targetable inventory. Failed adapter reads also retain bounded, allowlisted diagnostics for readiness probes without exposing provider messages or identifiers.
5.67.0 — August 5, 2026 at 10:37 AM UTC
- Organizations can now review and accept a private Enterprise Offer in Plan &
- Billing. The Offer clearly shows what is included, the contract term and
- renewal rules, and monthly or discounted prepayment choices. Customers can
- download the same proposal as a PDF for internal approval, accept one payment
- choice online, and continue to payment setup.
- Offer administrators start from the standard activity pricing and change or
- waive only the exceptions agreed with the customer. Existing plans, prices,
- and billing terms do not change unless an administrator issues a private Offer
- and the customer accepts it.
- Persona pass
- Enterprise brand buyer: gets one approval-ready record of scope, term,
- renewal, entitlements, support, and payment choices.
- Agency / hold-co buyer: can take the same proposal through approval
- across client stakeholders without reconciling separate documents.
- Power buyer: can inspect the exact accepted pricing and product rights in
- Plan & Billing after acceptance.
- SMB novice: sees a plain-language proposal and does not need to configure
- anything unless their organization receives one.
- Seller: a seller organization can receive the same private Offer for its
- own plan; this does not change how a storefront or its inventory appears to
- buyers.
- Rollout and measurement
- This is an atomic GA launch with
gate: none. Exposure is inherently limited - to organizations for which an administrator issues a private Offer, and no
- commercial terms change until an organization administrator explicitly
- accepts it. Rolling back the authoring and acceptance surfaces stops new Offers
- without changing immutable terms that customers already accepted; an unaccepted
- Offer can also be revoked.
- We will review Offers issued, proposal PDF downloads, acceptance events,
- monthly-versus-prepayment selection, and payment-setup starts each week. For
- the first ten issued Offers, success means every accepted binding preserves the
- selected payment choice and requires no manual document or billing correction.
- Those first ten Offers establish the conversion and time-to-acceptance baseline
- for the next adoption target.
- Creative delivery to legacy sales agents now translates both canonical format
- identity and package assignments into the seller’s supported wire shape. This
- prevents a seller from accepting the media buy but rejecting every creative
- because its required legacy format ID or assignment container was missing.
5.66.1 — August 5, 2026 at 8:42 AM UTC
- Meta connections now use Page authorization for Page-native event-source discovery and send schema-valid audience discovery requests, allowing targeting and Instant Form checks to complete reliably.
5.66.0 — August 5, 2026 at 8:14 AM UTC
- A proposal pass now shows what fed each product. Expand a product row and you see which of your own ingredients your agent consulted when it built that line — the inventory it selected, the audience it layered on, and the rate-card entries it priced against — plus, under the table, what fed the whole response: the Playbook version it composed under and the terms resolved for that buyer. Tap an inventory, audience, rate-card, or Playbook chip to open the thing that owns it and change it there; a chip with no place to go — buyer terms, or inventory from another seller’s storefront — says so instead. Nothing to set up: your agent records this while it composes, so it appears on responses from here on. Passes composed before this simply do not expand, and a chip for something you have since deleted says so rather than sending you to a stand-in. This is included in your existing storefront plan — no new billable surface and no packaging change.
5.65.4 — August 5, 2026 at 6:14 AM UTC
- Storefronts that are still completing launch requirements now open Get ready to sell as one focused page, even when the legacy transaction switch was enabled early. Pre-chat widget navigation also removes stale tucked pages instead of restoring them over the active setup task.
- Seller Setup source cards now show a consistent status and explanation across connection, products, and health. No action is needed; pass-through cache gaps and health that has not yet been observed stay out of required setup work.
5.65.2 — August 5, 2026 at 5:06 AM UTC
- Third-party sales-agent storefronts now use the inventory source’s status as the single lifecycle signal, preventing a stale internal agent copy from blocking readiness, discovery, or seller-owned test campaigns.
5.65.1 — August 5, 2026 at 3:47 AM UTC
- OAuth-protected sales agents now use the AdCP client’s standard web OAuth flow, including protected-resource discovery for identity providers hosted separately from the agent. When authorization cannot start, the secure credential form shows the actionable reason instead of a generic retry message.
5.65.0 — August 5, 2026 at 3:22 AM UTC
- Opening Plan & Billing from Settings now starts parent and standalone organizations on Overview, so buyers and sellers see their plan, next action, usage, and account standing before choosing a billing task. Child storefront payout setup and other task-specific links still open the relevant tab directly.
- For each active third-party sales-agent source created on or after August 4, 2026 at 05:17 UTC, publish a URL-free canonical
format_options[]declaration on every product. Enrolled storefronts now see source-level legacy and unresolved format details in Seller Setup > Inventory sources; sources awaiting current cached evidence remain blocked while a non-serving buyer brief refreshes them. Before September 1, exact legacy mappings from older sources remain temporarily grandmothered while observed non-canonical products from newer sources and unmappable declarations block storefront transactions. On September 1, the grandmothering period ends and every active external sales-agent source must publish direct canonical declarations. - Buyer impact: buyers do not need to change their requests. While a seller is blocked by this check, buyer discovery returns no products and media-buy admission rejects the storefront; service resumes after the seller publishes canonical declarations and readiness passes.
- Monetization: none. This changes neither pricing, packaging, billable units, nor marketplace economics.
- Measurement: use the named readiness check
source_product_format_complianceto track the percentage of enrolled active sources that pass, the count of storefronts blocked, and median time from first warning to compliance. Launch acceptance is 100% enforcement for newly created sources with no non-serving refresh failures left unresolved; September 1 acceptance is 100% of enrolled active sources passing direct canonical declarations, with the flag-off kill switch retained for incident response. - Approving a creative now records your decision instantly and delivers it to your sources in the background. Previously, a slow sales-agent response during an approval could hold the request open long enough to time out — making a saved approval look like it failed, and a retry then surfaced a misleading “no valid routing policy” error. Approvals are now acknowledged the moment they’re saved, delivery finishes on its own within seconds, and retrying an already-decided creative reports its real status.
- In the Interchange web app, buttons that open a related tool from inside a panel — for example Import seller feed, or opening campaigns and diagnostics from a widget — were failing with “Couldn’t open that workspace. Try again.” Those actions work again. Nothing to change on your side.
- Attaching a CSV to set wholesale pricing in Murph now works even when your browser sends the file as plain text — a common case that previously failed with “the attached pricing feed could not be read.” And when a referenced file can’t be found, Murph now names the attachments it can see instead of a generic error. Nothing to change on your side.
5.64.0 — August 5, 2026 at 1:19 AM UTC
- Check your storefront status in Murph for next actions instead of waiting for a storefront nudge. When you ask Murph for status, it lists each setup or source-health step as required or recommended and links to the relevant tool or page when one is available. Complete required steps to make your storefront available, and use recommended steps to improve readiness; if no action appears, nothing needs attention. The separate always-on storefront nudge ladder has been retired, so these next actions are no longer pushed to the in-app feed, email, or Slack. Existing source-health alerts remain separate and continue to follow your notification preferences. This does not change the storefront information buyers see.
5.62.0 — August 4, 2026 at 10:58 PM UTC
- If you are an organization administrator and see Scope3 mapped · unclaimed
- in Partner, review the provider name and sales agent, then select **Claim this
- operator**. Claiming confirms the mapped identity belongs to your organization
- and preserves its existing agent identity and history. It does not grant Partner
- Program access, certification, client authorization, or commercial activation.
5.61.0 — August 4, 2026 at 6:38 PM UTC
- Reporting responses now carry conversion value, CPA, and ROAS alongside the
- existing metrics, at every level — totals, campaign, media buy, package, and
- timeseries — and in the CSV export. CPA is spend divided by conversions; ROAS is
- conversion value divided by spend. Both follow the surface’s own spend
- denomination, so buyer figures are computed against gross fee-inclusive spend and
- storefront figures against net spend. These fields populate only for buys whose
- seller reports conversion data; where a seller reports none, conversion value is
- zero and CPA and ROAS are null.
referencecreatives stored in the advertiser library can no longer be accidentally assigned to campaigns or synced to sellers. To use a reference creative in a campaign, promote it toevergreenvia save-to-library first.
5.59.0 — August 4, 2026 at 3:00 PM UTC
- The advertiser filter on the Activity page now correctly scopes the Changes feed and the Calls feed. Previously the picker was visible but not forwarded to either data fetch.
- Behavior change:
DELETE /campaigns/{campaignId}/creatives/{creativeId}now detaches the creative from that campaign only — it no longer permanently archives the creative. Existing integrations calling this endpoint will receive the same204response, but the creative and its assets remain live in the advertiser library and any other campaigns it belongs to. Active or paused media buys still block the operation. To permanently archive a creative across all campaigns, use the newDELETE /advertisers/{advertiserId}/creatives/{creativeId}endpoint. - If you manage creatives through Murph or the Interchange UI, removing a creative from a campaign keeps it intact in your library and available for reuse.
- For enterprise buyers and agencies: campaign-level removal no longer risks destroying a creative shared across campaigns. Global archive is now a separate, explicit advertiser-scoped action.
- Daily delivery reporting now reports each day separately when a seller returns a reporting window covering more than one day. Previously, if the seller split the days only within each package and reported the media buy as a single whole-window total, all of that delivery was recorded against the window’s first day: that day read roughly double its real delivery, and the remaining days of the window read as blank. Each day now carries its own spend, impressions, and other counts, taken from the per-package figures the seller reported for that day. Realized spend on the storefront margin ledger is attributed by day the same way, so the two agree on which day earned what. Re-running a report for a past date repairs any days already affected.
5.58.0 — August 4, 2026 at 2:08 PM UTC
- Advertiser brand logos now show in the All Advertisers view instead of falling back to initials.
5.57.0 — August 4, 2026 at 1:07 PM UTC
- Organizations that operate a sales agent can now register the provider and agent from Partner before commercial approval. Registration begins the free technical certification path for an exact implementation revision; it does not grant Partner operations access, connect clients, or award certification.
5.56.0 — August 4, 2026 at 11:58 AM UTC
- Storefront readiness now checks that live buys have an advertiser to book against. A storefront could previously report itself ready to transact with no advertiser configured — inventory synced, credentials passing, sandbox tests green — while every buy outside the sandbox failed. Sandbox buys skip advertiser routing entirely, so a clean smoke test was never evidence that live buys would work.
- If you sell through several ad servers, this blocks going live only when none of them can route a live buy. When one ad server is missing an advertiser and the others can still transact, readiness names that ad server as a warning and your storefront stays live.
- What the check asks of you depends on your ad server, and it says which on the check itself:
- Google Ad Manager and AdsWizz — choose the advertiser yourself. The check reads it back from your ad server rather than a stored copy, so it clears on your next readiness read with nothing else to do.
- FreeWheel — the advertiser is real but cannot be set from the storefront yet, so the check asks you to contact us and we map it for you. There is no self-service step to wait for.
- SpringServe — no advertiser exists to map, so the check never applies to your storefront.
- Your sandbox test still runs while this check is open: a no-spend test books against your sandbox advertiser, which is a different advertiser that never touches live routing. The separate sandbox advertiser check stays advisory as before.
5.55.0 — August 4, 2026 at 11:26 AM UTC
- The Partner page now shows the Scope3 Embedded Sales Agent as a registry-backed reference agent, including its currently deployed production version and current certification status. The reference never exposes deployment digests, evidence, clients, or health data, and Scope3 is not shown as certified until the exact production revision has current evidence for every requirement, including the zero-spend creative canary. No action is required from buyers or storefronts; companies offering an agent to others can use the example to understand the Partner certification path.
- This has the same awareness-only posture for enterprise brand, large-agency, builder, and novice buyers. Seller check: not applicable—the reference does not change storefront ranking, catalog facts, inventory presentation, or anything buyers see about a seller.
- Rollout uses the existing Partner entitlement for private operations and ships the customer-safe reference atomically without a new flag; a registry read failure falls back to the existing explanatory copy, and third-party expansion still requires the current provider registration and certification boundaries. Measure reference-card reads, Partner applications following a read, release-registration freshness, certification currentness, and any private-data exposure (target: zero).
- This adds no billable surface and changes no packaging, price, or entitlement tier. Partner approval remains an enterprise application, while technical certification remains evidence-based and cannot be purchased.
5.54.0 — August 4, 2026 at 10:45 AM UTC
- From the organization account selector or Add account, companies that offer a sales agent to other businesses can now open Partner, learn the certification path, and apply to the Partner Program. Buyers and storefront operators that only use another company’s agent do not need to act. Opening the page does not grant operational access: buyer identities, source health, incidents, and debugging stay hidden until Scope3 approves the organization’s Partner entitlement, while existing entitled operators keep their agent cockpit. No self-service purchase or pricing is added; approval remains an enterprise commercial decision.
- Fix invitation acceptance broken for all customers. Accepting an invitation was failing with a PostgreSQL type mismatch caused by parameter inference in the grant_lock CTE.
- Fix creative tracking URLs keeping the previous campaign’s ID when a creative is assigned to a new campaign. Impression and click tracker URLs are now regenerated against the campaign being assigned, so click and impression attribution reports against the correct campaign instead of the one the creative was originally created under.
5.53.0 — August 4, 2026 at 8:43 AM UTC
- Organization admins can now choose Partner from Add account, and new
- organizations can choose it during signup. If your organization already has
- Partner Program access, Partner opens normally and there is nothing to change.
- If it does not, Apply opens a Contact Us path so your organization can
- request approval; it does not create an account before approval. Buyer and
- Storefront accounts, provider health, and pricing are unchanged.
5.52.1 — August 4, 2026 at 7:53 AM UTC
- Fixed two copy issues on the demand inbox and proposal pass: the ledger’s scoreboard caption led with internal roadmap caveats instead of what the win-rate figure means, and the proposal pass could show two contradicting sentences about whether a brief’s condensed facts were captured. Both now lead with the fact the seller needs, with any caveat moved into a Technical details disclosure.
5.52.0 — August 4, 2026 at 7:29 AM UTC
- External-agent pass-through storefronts now show the connected sales agent and its endpoint in a billing-first overview instead of presenting an empty seller analytics dashboard. Sellers can open Plan & Billing or confirm a switch to Interchange merchandising from the same surface.
- Organization admins now open their Partner account from the account switcher,
- alongside Buyer and Storefront accounts. Partner operations no longer appear as
- an organization setting, and customer-facing pages use Partner terminology
- instead of “Fleet.”
- Sellers who haven’t yet turned on merchandising can now see what it unlocks.
- The Demand, Test runs, Components, Signals, and Merchandising rules rows in
- the storefront navigation show as locked — with a short explanation — instead
- of disappearing entirely. Clicking a locked row opens the same “Get ready to
- sell” setup step used today to turn merchandising on. Storefronts that have
- explicitly chosen to route through their own third-party sales agent are
- unaffected: those rows stay hidden, as they do today.
- The proposal pass now offers the right verb for the exchange it’s actually looking at, instead of one “Send” button everywhere. On an exchange your agent already answered, Adjust composes a correction you save as training guidance for your agent — it’s labeled honestly, since there’s no buyer to notify. On a sandbox or simulator run, there’s no send affordance at all: run it again or compare it in the Merchandising Simulator instead.
5.51.0 — August 4, 2026 at 5:22 AM UTC
- Before account setup, buyers can check whether requested ISO countries and
- channels are open for a pilot, with domestic and global supply reported
- separately. Failed supply reads are shown as unknown rather than empty, and
- this preview does not change alpha access or enroll an account.
- Interchange now preserves the countries and channels your sales agent advertises
- in
get_adcp_capabilities.media_buy.portfolio. These primary values are positive - evidence, while your storefront’s separate accepted-country setting is the
- exhaustive brief-routing policy. When connecting a new sales agent, confirm
- either the complete country list you accept or that you accept briefs globally;
- you can clear that choice later to return to an unconfigured scope. Existing
- unconfigured storefronts continue to receive briefs while setup reports the
- missing confirmation. Interchange never infers acceptance from your Media Kit
- or treats an AdCP primary-country list as an exhaustive deny list.
5.50.0 — August 4, 2026 at 4:49 AM UTC
- You can now revise a proposal your storefront has already sent, from the demand inbox. Open the proposal, choose Adjust, and set any of three overrides: negotiation posture, price, or a cap on how many products the revision carries. The Merchandising Agent composes a draft revision from what you declared, and you review it before anything leaves your storefront. There is no new setting to turn on.
- A draft is yours alone until you send it. Your buyer sees nothing while it is a draft, and discarding it leaves the proposal they already have untouched. Sending obeys the same media-buy approval setting your storefront uses today. If that setting requires manual review, someone other than the person who drafted the revision approves the send — you can reject or withdraw your own draft, but not approve it.
- Sending does not reach your buyer’s agent. There is no delivery channel for a follow-up proposal yet, so a sent revision reads as sent, not delivered. Your buyer is not notified, and their agent sees nothing new — this is a seller-side change only. If your buyer needs to see it, reach them the way you do today.
- This is included in your existing storefront plan behind the
demand-inbox-ledgerpilot flag — no new billable surface, no packaging change. - Asking Murph to list, show, or browse your advertisers now opens the visual All Advertisers view instead of a plain text list, so you can see campaign and draft counts, brand identity, and pick one to work in right from the same reply.
5.48.0 — August 4, 2026 at 1:55 AM UTC
- Registered Partner organization admins can now use the Partner account to see
- an overall production certification status for each sales capability, the seven
- checks behind it, and when its evidence expires. The status follows the
- capability’s current implementation revision and appears next to the existing
- creative canary. Partner terms, client connection approvals, deployment health,
- marketplace listing, and pricing are unchanged. No action is required unless a
- check is missing, expired, or revoked. Availability remains limited to
- organizations already configured and entitled for agent certification; this
- does not widen Partner access.
5.47.0 — August 4, 2026 at 12:11 AM UTC
- Partner sales-agent connections now stay available only while the seller’s setup
- is approved, healthy, and ready to serve. If approval is withdrawn, the setup
- stops responding, or the Partner account is paused, the Partner account shows the
- connection as inactive and keeps its previous activation time for audit history.
- For buyers: In the Interchange signup form, select every country where you plan to run a pilot. If buyer pilots are not yet available in a selected country, we keep the application for follow-up and use that country-level demand to guide market expansion. This demand signal does not change which Storefronts are shown or how they are ranked.
- For Storefront prospects: If you were waiting to open a Storefront, you can complete signup now under Scope3’s standard Terms of Service. Accepting those Terms creates the account’s standard agreement. Organization IU plan selection, signup codes, and pricing previews remain unavailable until the Organization IU Rate Card rollout opens. This release does not publish a Rate Card, enroll your organization in a paid IU plan, enable IU charging, or change current prices.
- Registered Partner organization admins can now retrieve a bounded statement of
- AI usage produced by assisted testing and Partner-authored debugging for their
- explicitly bound client sources. Every line retains the exact capability,
- implementation revision, client, Storefront source, and Partner-safe session
- reference; full-period totals stay complete when detail rows are truncated.
- This first stage is tracked operating evidence, not a charging path. All
- Partner-attributed rows remain platform-bearer and settle zero IUs until a
- separately accepted Effective Rate Card term and entitlement authorize a debit.
- Normal client workloads remain with the client, deterministic checks emit no AI
- usage, and confirmed Scope3 defects carry incident-backed zero-rating provenance.
- Persona check: this is for third-party Partner admins, not the standard seller
- persona. It does not change what a buyer sees about a seller or what a
- Storefront-owning client sees about its provider. Commercial screen: the
- statement exposes no price, accepted term, invoice line, or client charge, and it
- cannot debit either organization’s wallet.
- Adoption acceptance starts with at least one registered Partner retrieving a
- statement containing attributed assisted-testing or debugging usage. Measure
- statement request count, distinct Partner organizations, attributed event count,
- zero-rated event count, and truncation rate; the launch target remains zero
- client-bearer Partner events and zero non-zero IU settlements.
- Roll back by disabling the Partner AI usage statement and producer seam, then
- reversing the attribution migration. Monitor attribution conflicts, unexpected
- non-platform bearers, zero-rating guard rejections, statement truncation/latency,
- and cross-tenant privacy-test failures.
5.46.0 — August 3, 2026 at 10:35 PM UTC
- Registered Partner organization admins can now retrieve a bounded support-effort
- statement attributed to the exact capabilities and client inventory sources they
- operate. The statement separates included support, overage candidates, and
- incident-response effort zero-rated because of a confirmed Scope3 platform
- defect. Full-period totals remain complete when detailed lines are truncated.
- The ledger is append-only and derives every Partner, client, capability,
- Storefront, and source identity from the explicit provider binding. Zero-rating
- requires an authoritative Scope3-owned provider incident affecting that binding.
- Only Partner-safe descriptions and references are returned; credentials, raw
- incident details, internal notes, and unrelated clients remain private.
- Persona check: this is an operating statement for third-party Partner admins and
- the Scope3 staff who record support evidence, not the standard seller persona.
- It does not change what a buyer sees about a seller or what a Storefront-owning
- client sees about its provider. Buyer campaign users do not see it. Commercial
- screen:
OVERAGE_CANDIDATEis reconciliation evidence only—not a price, invoice - line, accepted term, or client charge—and deterministic reads spend zero IUs.
- Roll back by disabling the statement and recording routes, then reversing the
- support-effort migration. Monitor recording conflicts, zero-rating guard
- rejections, statement latency/truncation, and cross-tenant privacy-test failures.
5.45.0 — August 3, 2026 at 9:54 PM UTC
- Seller administrators with a future-dated Enterprise package can keep operating
- their existing inventory sources, while adding a new modular inventory source stays
- unavailable until the accepted contract term begins. The setup unlocks from that
- same contract automatically when its effective date arrives.
- Existing sources, readiness, diagnostics, and bookings are unchanged. Buyer
- administrators and customers without a negotiated Enterprise package have no
- workflow change, and no action is required.
- In the Storefront API, a seller account admin can now invite the certified
- Partner already connected to one inventory source to inspect that source’s safe
- diagnostics. The admin selects the exact provider binding UID, chooses an expiry
- of up to seven days, and can revoke the invitation immediately. A Partner admin
- uses the Partner API routes to list live invitations and open the permitted
- source diagnostics.
- Access covers read-only, redacted source health. It never exposes credentials or
- other clients, and it does not grant source changes, test execution, client
- account membership, or shared-room access. Every read rechecks the live source
- connection, Partner status, production certification, expiry, and revocation.
- Persona check: the seller admin grants access and the third-party Partner admin
- uses it. Buyer campaign users do not see this surface, and this seller-side
- change does not alter anything a buyer sees about a seller. Commercial screen:
- delegated diagnostics is an operating benefit of the existing paid Partner
- relationship, not a new SKU or paid add-on; deterministic reads spend zero IUs
- and never charge the client.
- Roll back by disabling the four provider debug-grant routes, then reversing the
- new migration. Monitor grant creation/revocation counts, denied or expired reads,
- diagnostics latency, and any cross-tenant privacy-test failure.
5.44.0 — August 3, 2026 at 9:06 PM UTC
- Your advertisers now open on a single landing view — every advertiser you work with in one place, each showing its brand, how many campaigns it has, and a one-tap way to jump back into an advertiser you left mid-setup. It’s the starting point for choosing which advertiser to work in, and it loads in one step instead of stitching the list together as you go. Per-advertiser spend totals aren’t shown on this view yet — that’s coming.
- Enterprise customers with a negotiated package can now see exactly what their
- subscription includes in Plan & Billing and the IU-plan task. Packages can include
- Partner Program participation, agent certification, SSO setup, publisher
- self-serve, modular inventory sources, and either unlimited named support or a
- monthly support allowance with an IU rate for additional hours.
- Included features become available when the Enterprise offer is accepted and
- remain tied to its contract term. Existing Enterprise access continues through
- this upgrade. No customer action is required, and customers without a negotiated
- Enterprise package are unaffected. This does not change seller storefronts or
- seller workflows.
- Unassigning a creative from a campaign now safely reconciles downstream state. Media buys in DRAFT or PENDING_APPROVAL are updated to remove the creative. Attempting to unassign while the creative is on an ACTIVE or PAUSED buy returns a validation error. The join row is now soft-deleted (status: INACTIVE) rather than hard-deleted, preserving audit history.
PUT /api/v2/buyer/campaigns/:idnow returns a fully hydratedmediaBuyRefsarray in the response, matching whatGETreturns. Previously the field was always empty, causing AI callers to incorrectly infer that media buys had been removed.- Three fixes to the flighted pacing contract:
- Setting
pacingPeriodswhere every period has already ended now returns a validation error instead of silently accepting an inert schedule. - The
update_campaignresponse now includes apacingApplicationNotefield when you writepacingPeriods, telling you how many DRAFT buys will use the schedule on the nextexecute_campaigncall and that live buys are unaffected. - DRAFT media buys with
start_time: "asap"that have never been dispatched to a seller can now have theirstart_timeupdated to a specific future date. Previously this was blocked by a validation error even on never-forwarded buys, which made per-buypacingPeriods(which requires a concrete window) impossible to configure on the normalasapdefault. - Provider-organization operators now receive always-on open and recovery
- notifications for provider-attributed incidents. Each notification links
- to the Partner account and includes the capability, safe classification, confidence,
- detection time, and aggregate affected-client count without exposing client
- identities, connection IDs, credentials, or raw errors.
- This extends the existing Partner workspace and adds no billable surface or paid
- tier gate. Buyer interfaces and buyer notifications are unchanged; each affected
- publisher continues to receive only its own tenant-scoped source-health status.
- Seller-persona check: new provider-wide status is not applicable to an affected
- publisher because it could reveal other clients; that publisher sees only its
- own source state and next action.
- The routing ships with the existing provider-organization admin cohort because
- it closes an operational alerting gap without changing serving, quarantine,
- support, or billing decisions. Rollback disables the worker delivery call while
- the append-only incident evidence remains inert. Measure delivered open/recovery
- edges, delivery errors, acknowledgement time, and incident recovery time before
- adding delegated diagnostics or support metering.
5.43.0 — August 3, 2026 at 7:08 PM UTC
- Fixed a case where sellers who declared “the Scope3 Prebid module is active on this product” on an ESA-hosted product were not seeing that declaration take effect at ad-serve time — the package-ID key-value that gates the resulting ad-server line item on Prebid-enriched traffic was silently being skipped for these products. New forwards on affected products now correctly carry that targeting. Existing forwarded buys are not backfilled by this change.
- The Partner account now shows a connection as inactive when client approval has
- been withdrawn, or renewed but validation has not finished. The previous
- activation time remains available as history. No action is needed: the status
- returns to active after the client approves the connection and validation
- completes. This corrects status display only; it does not change billing,
- packaging, access, or what buyers see.
- Provider operators can now see grouped active incidents in the Partner account,
- including safe attribution, confidence, detection time, and affected client and
- connection counts. Persistent source failures are grouped by client, endpoint,
- implementation revision, or provider capability and recover without exposing
- client credentials or unrelated inventory.
- This is included in the existing Partner workspace and does not add a billable
- surface or paid tier gate. Deterministic provider health remains zero-rated. Buyer
- interfaces are not changed and buyers do not receive incident-derived signals
- about a provider or another client.
- The read-only projection ships to the existing provider-organization admin
- cohort without a feature flag because it does not change serving, quarantine,
- support routing, or billing decisions; rollback is an application rollback and
- the append-only evidence remains inert. Adoption is measured through Partner →
- Partner-account route usage. Incident events measure detection and recovery time, affected
- clients, and classification mix before notification or delegated-debugging
- behavior expands in a later release.
- A buyer requesting preview access with a work email from an organization Scope3 already knows will now see its company name pre-filled. This saves re-entry without granting account access or changing who can join.
- Seller impact: not applicable. This changes buyer signup and the internal TARS admission workflow only; sellers do not see a new or changed surface.
- Buyer persona: first-time and SMB preview requesters benefit from the plain-language company prefill; no opt-in mechanics are exposed to them.
- Monetization: none. This does not change pricing, packaging, billable surfaces, or commercial differentiation.
- Rollout: the advisory signup prefill is intentionally ungated because it has a one-second database deadline and falls back to the existing signup flow without changing access. Its kill switch is reverting the signup resolver. Account admission remains Scope3-SuperAdmin-only, and only the admitted customer is enrolled in
alpha-opt-in; the global flag stays off. Expansion requires reviewed admission receipts without unresolved delivery/errors and a separate market/channel governance decision. - Measurement:
auth:signup_flow_startrecordscanonical_org_ref; adoption is the share of eligible preview requests with that property populated. Operational acceptance is anappliedor explicitly warned admission receipt with verified customer-scoped enrollment, one confirmed Account edge, and an active administrator or ADMIN invitation.
5.42.0 — August 3, 2026 at 3:41 PM UTC
- Fix execute_inventory_source_test_campaign returning 0 products when the storefront is in a pre-launch (paused) state. Sellers can now run end-to-end inventory tests against their storefront before it goes live on the marketplace.
- Provider organizations can now open the Partner account to see their capabilities,
- explicitly connected client sources, connection status, and safe health
- diagnostics. Partner registration and paid commercial status remain separate
- from private provider ownership.
- Optimization suggestions no longer ask for your approval when there is nothing to approve. A suggestion that carries no budget or bid change — most often for a media buy with no optimization goal, where the suggestion is pacing information only — is now recorded and closed out instead of landing in your queue, as is a suggestion whose campaign or media buy is no longer active by the time it reaches you. Suggestions that propose a budget or bid change on an active campaign and media buy are unaffected, and nothing changes on your side.
5.41.0 — August 3, 2026 at 1:44 PM UTC
- A handful of small honesty and clarity fixes across your Ask Murph workspace.
- The “Per-buyer auto-approve” rail item and its widget now say the same thing —
- the rail used to read “Buyer trust” while the page it opened read “Per-buyer
- auto-approve.” The “Sales agent” rail item and its page now match too, and the
- page’s “Evidence” tab is now labeled “Calls.” Connecting a sales agent now
- speaks your language instead of ours: “Connect a sales agent your partner
- runs — paste the address they gave you” replaces “Register an external ADCP
- sales agent by its endpoint,” the address field is now called “Agent address”
- with a plain-language hint, and the technical MCP/A2A protocol choice now has
- a note telling you to just ask your partner if you’re not sure. Pending
- operations no longer shows a false “nothing is waiting on anyone” when we
- can’t read the underlying data — it now shows the honest retry state instead.
- Its “Review escalation” button, which never actually escalated anything, now
- reads “Open timeline” — exactly what it opens. The demand inbox’s buyer filter
- now says “Buyer (loaded 100)” directly on the control, so it’s honest about
- its own scope no matter which buyer you have selected, instead of a footnote
- you could miss.
- On the v3 preview surface — flagged off today, with no accounts enrolled — every task waiting on you reads through one
work_itemsearch. Alongside creative reviews and media-buy approvals,search({ "kind": "work_item" })andgetnow cover modular source follow-ups: the source-side tasks a modular inventory source raises for itself, such as confirming avails or resolving a trafficking error. Each one tells you therequiredResultFieldsit needs, andsave_work_itemcompletes it with them. Complete the same follow-up twice and you get"action": "unchanged"with nothing written; a conflicting correction is refused with the original record and its evidence intact. - Approved is still not the same as delivered, and the response now tells you which one you have. Completing a follow-up applies its side effects as part of completing it, so
COMPLETEDis proof the effect landed. An approved media buy with aforwardedAttimestamp was sent — not a guarantee every downstream leg accepted it. One with no timestamp was never forwarded at all; that is reconciliation work, and the response points you to the approvals page to retry the forward. - The two status vocabularies stay separate on purpose: a follow-up has no
approvedstate and a creative review has noCOMPLETEDone. Ask for a status one queue cannot have and the response names the queue it did not search, rather than returning nothing and letting that read as “nothing is waiting”. Follow-ups are held per inventory source, so a storefront-wide read fans out across your modular sources and reports how many of them it reached. Two limits are reported separately: sources the scan did not reach, and sources whose own read window filled up. A single queue reads up to 100 follow-ups at a time, and one that comes back full is named in the coverage as an exhausted window — a floor, not a total, whichfilter.statuscan narrow. Neither limit is ever reported as an empty queue. To read one queue on its own, pass asourceIdtogether withfilter.workItemKind: "modular_source"— asourceIdalone is refused, because the approval queues are storefront-wide and would silently ignore it. - Getting an advisory AI evaluation, reassigning an approval to someone else, and retrying a forward stay on the approvals page rather than becoming fields on
save_work_item. The first two cost money per call or move who is accountable for a decision, and a retry re-sends the buy to your ad server — none of them is a state you can declare, and re-recording a decision will never trigger one. - This is a flag-only preview rollout. Monetization: none. It adds no package, differentiation, price, billing, entitlement, usage meter, or metering change. Disabling
v3-agent-surfaceremoves this v3 reachability but does not undo durable decisions, completed follow-ups, or their module side effects; corrections remain separate follow-up or reconciliation records. The v2 completion response’s additivechangedfield is backward-compatible, and no data repair is required. - Preview measurement uses the existing redacted MCP action ledger. At each cohort review, count modular-source
work_itemsearches and gets plussave_work_itemcompletions, split by success, unchanged retry, conflicting correction, unreachable source, and exhausted source window. Expand only after every enabled modular-source test storefront has completed one follow-up successfully, repeated that completion with an unchanged result, and read the completed result back. Pause expansion if any completion is recorded without its module side effect, a conflicting correction overwrites the authoritative record, or an incomplete source scan is presented as an empty queue. - Nothing else on
/mcp/v2changes.
5.40.0 — August 3, 2026 at 12:01 PM UTC
- Business Rules can now tell a storefront admin which human reviews each approval kind. On the
/mcp/v3agent surface,getwithinclude: ["approvalRouting"]returns the primary and fallback approvers by name, their roles, the channels they’re notified on, and the reminder and escalation clock for media buys and creative review, alongside the acceptance policy and approval gates you could already read. Approver email addresses are deliberately not returned to the agent. Reading routing requires an admin; a non-admin session gets an explanation of why, never an empty table. Changing routing stays on the Approvals Page, where a human picks who can act, and no approval gate changed behavior. Separately, the seller documentation was wrong about rolling an acceptance policy back and now describes both routes: saving the earlier content again mints a new version, while the Business Rules Page reactivates an existing version and mints nothing. - Monetization: none. This read remains part of the existing
v3-agent-surfacepreview and adds no package, entitlement, differentiation, price, usage meter, or billing change. - Preview measurement uses the existing redacted MCP action ledger. During each cohort review, count
getcalls withkind: "business_rules"andinclude: ["approvalRouting"], split into successful reads, admin denials, and unavailable upstream reads, without retaining approver details. Expand only after every enabled test storefront has completed at least one successful read and no unavailable read has been presented as an empty routing table. Pause expansion immediately on any email-address exposure or any routing mutation outside the Approvals Page. - Creatives with publisher-scoped format assignments (
format_option_ref: { scope: "publisher", publisher_domain: "facebook.com", format_option_id: "..." }) now sync to Meta, Snap, and Pinterest storefronts correctly. No change to your integration is required if you were already setting this field — it was accepted but silently dropped before; it now flows through. If you were not setting it, nothing changes. Sellers will see these creatives flowing to their publisher placements where they previously did not. - This ships ungated. No kill-switch is needed: the previous behavior was a silent drop (not a deliberate gate), and this restores the intended end-to-end flow. Adoption will be measured by
sync_creativessuccess rates on publisher-scoped storefronts (Meta/Snap/Pinterest). Full AAO registry validation (confirming the format_option_id exists on the publisher’s catalog) is a follow-up tracked in AI-5171. - Testing your storefront now tells you the truth in your own language. A test
- buy that was still waiting on a few details from you — a budget, flight dates,
- an advertiser, a test brief — showed up with a red “Failed” chip and a raw run
- ID for a title, even though nothing had actually run yet. It now shows a
- distinct “Needs details” status and names exactly what’s missing (Budget,
- Flight dates, Advertiser, Test brief), and the title reads as “Test buy against
- your storefront” instead of an internal ID. Each step in a test now reads as
- what it proved (“Storefront reachable”, “Sandbox advertiser ready”) instead of
- an internal tool name; the exact endpoint and HTTP status behind each step
- moved into one “Technical details” disclosure. Internal notes about what our
- test tool doesn’t support yet no longer show up on your test results at all.
- Public seller signup is now fail-closed behind the existing IU Rate Card pilot flag. The storefront option and public pricing preview stay hidden until that flag is rolled out globally, while the complete IU signup experience remains available for launch.
- New AdsWizz connections now pin a versioned API-key contract with fixed Domain and Forecasting endpoints, so setup and credential rotation reject incompatible configuration before it reaches the ad server. Existing AdsWizz connections continue to work without changes.
- New SpringServe connections now pin a versioned authentication contract for email/password exchange or API-token access, so setup and credential rotation reject incompatible configuration before it reaches the ad server. Existing SpringServe connections continue to work without changes.
- Media buys, Pending operations, and ad-server connection warnings now read in
- plain language instead of internal codes and ids. A stuck buy’s reason and
- error now show as a sentence (“The source couldn’t be reached — the platform
- is retrying”) with the underlying code kept as a reference line, not the
- headline. A row without a resolved buyer name leads with an honest “Media
- buy” or “New buy awaiting review” instead of the bare
mb_…/cr_…id. A - failed-forward group’s recovery class (“transient”, “structural”) is now a
- sentence too. An unreachable ad-server source now names the source (“Your
- ad-server source Google Ad Manager couldn’t be reached…”) instead of “ESA
- connection 42”, and a widget or task that fails to open now says so in plain
- language (“This view didn’t load — try again.”) instead of “MCP app failed
- to load.”
- Setup now tells you the truth about where you actually are. Clicking around
- the rail while your storefront setup checklist was open no longer scolds you
- to “finish or cancel it before it gets buried” — that warning only fires when
- you’ve actually left something unsaved elsewhere; opening a checklist you
- haven’t touched yet never triggers it. The go-live progress band on a
- brand-new storefront now reads “N to do” instead of “N blocked” — a required
- step you haven’t started yet isn’t the same as one you tried and got stuck
- on, and the band now agrees with what each step’s own card already says
- (“Not started”). And the “Your storefront is live” banner no longer shows up
- by accident: if we don’t have a clear signal your storefront is actually
- live, we say so instead of guessing green.
- Sellers can now declare, per product, that a product’s inventory has the Scope3 Prebid module installed — ask Murph “turn on the Scope3 Prebid module for product X” and Murph flips the flag through the wholesale-authoring API. Read + write in the same tool: ask “is the module active on product X?” for a read-only check. When on, Scope3 stamps a package-ID key-value on the resulting ad-server line item at forward time; when off, Scope3 skips the stamp. Only ESA-hosted wholesale products are managed through this tool — third-party sales-agent products stay under your own agent’s
get_productsresponse. - On the early-access
/mcp/v3surface — not switched on for any seller yet — your Playbook now owns your brand and operator house discounts, and you can pull up any earlier version of your selling guidance in full. - Setting a discount is part of saving your Playbook, alongside your guidance and your pricing. It works one rule at a time, not as a list you replace: a discount you don’t mention stays exactly as it was. To remove one, name the buyer’s domain and whether it is the brand discount or the operator discount, since a domain can carry both and they are different rules. If you set several at once and one fails, we tell you which one and keep the rest.
- You can also read your discounts back — on their own, or beside your pricing when you read the Playbook — and ask what a specific buyer’s domain would resolve to. That preview shows the corporate chain the domain rolls up (
converse.com→nike.com) and the nearest rule on each side. It is not the price a buyer gets. A real buy resolves the buyer’s brand and their agency separately and applies whichever discount is larger, so treat the preview as “where would a rule for this domain land”, not “what will they pay”. - Every Playbook save still creates a new version and makes it live in the same call — there is no separate step that reactivates an old one, which is why rolling back means saving the old content again. You can now read one past version in full to do that, and it tells you up front whether it would still be accepted: guidance written before we split pricing, discounts, markets, and acceptance rules into their own surfaces gets rejected if you save it back unchanged, and you find that out before the save rather than from the error.
- Nothing on
/mcp/v2changes. - Monetization: none. This remains part of the existing
v3-agent-surfacepreview and adds no package, entitlement, differentiation, price, usage meter, or billing change. - Preview measurement uses the existing redacted MCP action ledger. At each cohort review, count house-discount searches, Playbook reads that request discounts or one historical version, and Playbook saves that set or remove discount rules, split by success, unchanged, refusal for incomplete evidence, and partial application. Expand only after every enabled configured test storefront has completed one successful relevant read and every attempted discount write has a confirming read that agrees with the reported outcome. Pause expansion if a response presents a hierarchy preview as the buyer’s effective price, reports an incomplete list as complete, or omits a rule that was already applied from a partial-failure result.
- Ask your storefront agent to retire a wholesale product and it now covers both endings: archive and delete. Archiving takes the product off the market. Buyers stop seeing it, its name, inventory selection, and prices stay as you left them, and making it
activeagain brings the same product back under the same id. Deleting removes the product from the source permanently. Because that cannot be walked back, your agent confirms the product’s exact stored name before it removes anything, and it refuses to delete one that is stillactive, since buyers can discover and buy it right now — archive it first. Deleting an id that is not there is reported as unchanged, not as a deletion. Deleting never touches your ad-server inventory: the ad units, placements, and targeting you packaged stay where they are, and selling that inventory again means authoring a new product, which gets a new id rather than the one you deleted. Creating and editing products behave as they did before.
5.39.0 — August 3, 2026 at 10:09 AM UTC
- On the v3 agent surface (still a preview),
save_coveragecan now add or remove one publisher domain, and claim or retract one property under a domain, without restating your whole domain set. - Single-domain edits used to work by rebuilding that whole set from a fresh read and writing it back. That could lose an edit someone else made while the read was in flight, and it could delete domains the read did not return — so when a read came back incomplete,
save_coveragerefused the edit outright rather than risk it. Neither applies now: one edit is one declaration, so a single add or remove goes through however much of your roster the read covered. Removing a domain we discovered on your site rather than one you declared now comes back as a conflict, instead of reporting a success that removed nothing. - Property claims are new here, and they stay at property grain. A claim needs a property id, an identifier, or a name — we never invent property identity. When the publisher’s own
adagents.jsondeclares the same property, the publisher’s record is what takes effect and your claim is kept on it, so it returns if the publisher later stops declaring that property. A property that came from the publisher cannot be retracted this way. Retracting a claim that is already gone is a success with nothing changed, not an error, so a retried retraction converges instead of alternating. - Declaring the complete set still replaces the set, and it now tells you when its own report is partial. The write always applies your full declaration — the set is yours to declare. But we compute what was added and removed by comparing against the domains we could read first, so when that read is bounded the response says
removalReportComplete: false, tells you how many of your domains it could see, and warns that more may have been deleted than it listed. When the read is complete the lists are exact, as before. Only domains you declared are ever reported as removed: one we discovered for you follows its own source and survives, whether you ask to remove it directly or leave it out of a full declaration. - Two details for anyone reading the response programmatically. Every outcome list is now
{ items, count, truncated }— a replace can touch thousands of domains, so the list carries at most 50 whilecountstays the real number; readcount, not the length ofitems. And a read that trimmed a domain’s properties no longer counts as an incomplete domain list, so a declaration matching your domains is still reported as changing nothing even on a publisher with thousands of properties. - The v3 preview guide now covers reading and editing coverage, and the v2 publisher-domains guide documents the single-domain add and remove routes and when to prefer them over replacing the whole set.
- The v3 lifecycle remains inside the existing
v3-agent-surfacepreview and does not expand enrollment. Availability, entitlements, pricing, paid-add-on composition, and packaging do not change; rollback is disabling the preview flag or reverting the surface commit, with no data or billing migration to unwind. - Your seller dashboard and Signals now offer a real “Try again” when they can’t load, instead of a dead-end message with no recovery but closing and reopening the page. The error also shrinks to fit its own message instead of leaving a tall empty space beneath it.
- A bookmarked or shared demand-inbox link now opens the same view as the rail: every entry path opens the newer ledger where it’s on, instead of the older read-only history.
- Seller Setup source cards can now open their existing specialist detail and diagnostics surfaces directly.
- New FreeWheel connections now pin a versioned authentication contract, including sandbox setup, so setup and credential rotation reject incompatible configuration before it can reach the ad server. Existing FreeWheel connections continue to work without changes.
- Storefront avails feeds now reject rows with impossible dates, unsupported
- currency codes, booked capacity above total capacity, or CPM values likely
- entered in the wrong unit. Expired rows stop appearing as sellable inventory,
- so buyers see only current, valid availability. Existing valid rows are
- unchanged. No action is needed unless a feed relies on data that was previously
- accepted despite one of these errors; rejected rows include diagnostics to guide
- correction.
- Replacing your publisher-domain set no longer discards what was already resolved for the domains you kept.
PUT /api/v2/storefront/publishersand the MCPreplace_publisher_domainsoperation now apply as a diff: a domain that is in both your current set and the one you send keeps its resolved properties, collections and creative formats, your own seller-declared property claims, its authorization verdict and reason, and its sync timestamps. Only the declared domains you left out are deleted, and only domains that were not there before are created — those start atpendingbecause nothing has resolved them yet. - Previously those two surfaces rebuilt the whole declared set, so resending a set you already had cleared the resolved data on every one of those domains and reset them to
pending, discarding their authorization verdicts until the next sync re-resolved them. Echoing your own list back is an ordinary thing for a client or an agent to do, so this was easy to hit and slow to notice: the domains reappeared immediately and only their resolved detail was missing. - Updating
businessProfile.publisherDomainsis a separate path and is unchanged. It already preserved the rows for domains that stayed in the set. Note that its deletion semantics differ from the two surfaces above: it removes every domain absent from the set you send, including ones we discovered or crawled for you, wherePUT /publishersonly removes domains you declared yourself. - Nothing to change on your side. If a recent replacement left domains showing as
pendingor without properties, the background sync will have re-resolved them; re-read the property roster to confirm. - Availability, entitlements, pricing, and packaging do not change. This preservation fix ships ungated because it prevents an ordinary replacement request from silently discarding already-resolved seller data; rollback is a code revert, with no schema, entitlement, or billing migration to unwind.
- No seller integration changes are required. Creative delivery now adapts canonical manifests against each seller’s exact declared format option before the SDK translates them for legacy sellers, preventing stale labels or guessed seller URLs from selecting the wrong format. Existing buys created before exact seller options were persisted continue sending their concrete canonical payload as before; they are never assigned a guessed legacy ref. Historical creatives that store only an ownerless format ID must be re-uploaded instead of being attributed to whichever seller is selected.
5.38.0 — August 3, 2026 at 8:47 AM UTC
- On the
/mcp/v3preview, a seller agent can now read the media buys on its own storefront.search({ kind: "media_buy" })lists every buy that landed there — the buys routed through your storefront and the buys your ad server manages upstream alike — with filters for one inventory source, one buyer, a seller-side status (sellerStatus), or a flight-start window.get({ kind: "media_buy", id })returns that buy’s timeline as your storefront saw it: the approval it went through, the stages it reached, and one entry per inventory source it was sent to, with the source’s own reference, the Scope3 reference to quote alongside it, and a summary of what was sent (flight, budget, packages, targeting dimensions). Every stage names its most recent failure with an error code and whether a retry can succeed, so a stalled buy explains itself without a second call. - The reads say where they stop. A list built while a source was unreachable says so instead of reading as complete, and stale statuses say how stale. Raw request and response payloads are not returned; the timeline already carries the answer they would be read for. A buy that never touched your storefront comes back as not found, not as a partial answer.
- There is no seller-side test-campaign tool, and there will not be one. Testing your storefront means switching to a buyer account and buying from yourself. That path is still being built, so keep using the v2 test-campaign endpoints until it lands.
/mcp/v3stays behind a feature flag with nobody enrolled, and nothing on/mcp/v2changes. The v3 Agent Surface (preview) page in the docs carries the full shape.- Availability, entitlements, pricing, paid-add-on composition, and packaging do not change. These are read-only diagnostics inside the existing preview, not a new billable action; rollback is disabling the preview flag or reverting the surface commit, with no data or billing migration to unwind.
5.37.0 — August 3, 2026 at 6:56 AM UTC
- If you have asked Murph to switch your storefront’s composition mode, check your capability flags: creative review and campaign approval may have been switched off at the same time. Switching composition mode no longer touches your other flags, but earlier resets were not restored, so ask Murph to show your storefront’s capabilities and turn back on whatever you still want to advertise to buyers. Storefronts running on a storefront adapter are the ones to check first, because there your declaration is exactly what buyers see. Elsewhere the reset reached buyers only while composition mode was on; with it off the reset was invisible at the time, and it comes back as off the next time you turn composition on. Storefronts backed by a connected ad server were never affected. The switch was rejected outright for them, so nothing was ever stored.
- One new refusal comes with the fix. Now that a creative review declaration survives the switch, turning composition on can be refused when your storefront advertises creative review and nobody is left to approve that queue: no active approver in your approval routing, and no organization admin to fall back on if you never set routing up. With composition off that promise was suppressed; with composition on buyers can submit creatives, so we refuse the write rather than open a queue nobody owns. Nothing is saved when that happens, and the refusal names both ways forward: name an approver for creative review, or turn creative review off before you switch.
- When you check your flags, expect two values that can legitimately disagree: the ones you declared, and the effective set buyers get after your ad-server setup, your composition mode, and your media-buy approval setting are applied. A save can succeed without changing anything buyers see, so read the effective set back after a write rather than trusting the flags you sent.
- Availability, billing, and packaging do not change. Composition mode remains the same paid add-on with the same eligibility and price; this release corrects how its capability change is stored and refused. The safety fix ships to the existing seller surfaces so it stops further flag resets immediately, while the v3 agent surface remains limited to its current preview cohort.
- For API and MCP integrations, the existing write distinction is unchanged:
PATCH /api/v2/storefrontkeeps the capability flags you leave out, whilePUT /api/v2/storefrontstores every flag you omit as off. Continue using the partial patch when you mean to change only selected flags, and read the effective capability set after the write. - Archiving a storefront signal now says what else it archives, updating one explains which fields are silently ignored, and the signal reference matches what the API accepts.
- Testing your storefront now tells you the truth about what happened. Before, a
- test brief that failed before your agent could answer — rejected credentials, an
- unavailable inventory source or service, an internal error — was reported the
- same way as a genuine “no products matched”, so you could go rebuilding
- inventory that was never the problem. A run that couldn’t finish now says so
- plainly and offers a retry, and a run that finished with nothing to offer says
- that your agent answered and nothing in your storefront matched this brief. The
- test also states up front, while it runs, and again in its result that it creates
- no media buy and commits no inventory.
- Your demand inbox also leads with the answer you came for. Brief history sits at
- the top, so “has my agent been answering demand?” is the first thing you see, the
- list stays a fixed height instead of stretching down the page, and its totals now
- describe the same set of briefs. A brief your agent declined reads as a normal
- outcome rather than an error — choosing not to bid is your acceptance policy
- working — and red is reserved for a brief your agent could not answer at all. The
- two load-error messages that were nearly invisible are now legible in both light
- and dark mode, a failed decision lookup says your brief history is unaffected,
- and if a background refresh doesn’t complete the screen says your history may be
- out of date and offers Refresh in place instead of quietly showing you stale
- rows. When you have no briefs yet, the screen coaches you to run a starter brief
- rather than showing an empty table. Any row opens from the buyer name, so
- keyboard and screen-reader users get one clear control per row. Dates, prices,
- and counts follow your account’s language and time zone, and the whole screen is
- available in Portuguese and Japanese.
- Buyer product discovery and creative workflows now use canonical format declarations instead of guessing from legacy IDs. Products and delivery for legacy external sales agents remain supported through exact SDK compatibility boundaries, while internal CreativeMaster identity requires canonical format evidence.
5.36.0 — August 3, 2026 at 5:45 AM UTC
- From Refer a company in the account menu, signed-in buyer and seller
- organizations can introduce another company and follow its review status. The
- page shows the current offer: 100 Intelligence Units, valid for 60 days and
- usable for IU-rated Interchange activity, after
- the company starts a paid plan or a referred buyer reaches $10,000 in agentic
- media spend. Scope3 handles outreach and eligibility review; there is nothing
- to enable, and submitting a referral does not itself earn the reward.
- Prospective buyers can now share their target markets, channels, pilot plans, and self-service experience when joining the preview, so suitable pilots can move to solutions review sooner.
5.34.1 — August 2, 2026 at 7:56 PM UTC
- Media-buy reads now preserve the canonical delivery-format requirements of newly composed products. Read
formatOptionsfor theirformat_kindandparams; older composed buys keep their exact legacy format readback until those product rows are refreshed.
5.34.0 — August 2, 2026 at 5:26 PM UTC
- The Connect sales agent Task now uses a versioned connection definition and labels its existing token authentication as a bearer token. New Google Ad Manager setup also pins a built-in versioned contract for its numeric network code and platform service account. Existing API integrations keep working through the legacy request shape while connection types migrate.
5.33.0 — August 2, 2026 at 4:08 PM UTC
- The “Your advertisers” card on the buyer home page now shows “Current” instead of “Open” when displaying the currently-scoped advertiser, making it clear which advertiser you’re already in.
- If your storefront had a connected source that wasn’t an ad server (for example a modular feed), Signals and Inventory Components previously told you to “connect an ad server” as if nothing were connected at all. Both now say your connected source doesn’t expose ad-server targeting or inventory, so it’s clear an ad-server connection is what’s still missing — not your existing source. The go-live checklist’s “Connect ad server” step gets the same acknowledgement when another source is already connected. Nothing to change on your side.
- If your storefront is enrolled in modular inventory sources, add
formatOptionsandpublisherPropertiesto every collection before your next avails feed preview or commit. Existing collections without valid declarations stop atMODULAR_CATALOG_NOT_READYuntil you refresh the feed; Interchange does not infer a format fromchannelor a URL-based legacy ID. Buyers need no action: catalog-ready collections continue into buyer products with the seller-declared formats and properties. - The go-live “Successful transaction” check now matches what you’ve actually connected. If every connected source is your Scope3-managed sales agent, the check reports done automatically as “Covered by your managed sales agent” — no separate no-spend test needed. If you also connect a third-party sales agent, the check still applies, and now names which source it’s asking you to test.
- The Test Runs page no longer leaves you stuck when you have no sandbox test history yet — a “Run a test brief” button on the empty state (and in the history list once you have runs) asks Murph to run a sample buyer brief against your storefront, with the result shown right there.
5.32.2 — August 2, 2026 at 2:50 PM UTC
- Collapsing a widget on the Ask Murph page now leaves a quiet single-line row — the widget’s name and a small expand arrow — instead of a large bar with a bold “Expand widget” button, so several collapsed widgets stack as a tight list instead of a stack of white slabs. The “still open” reminder for an unfinished setup task also no longer repeats every time you open something else in the same session.
5.32.1 — August 2, 2026 at 2:08 PM UTC
- Renamed the shared “Choose an IU plan” surface’s internal identifier from
storefront-plan-selectiontoiu-planto match the plan’s organization-wide scope across buyer and storefront workloads. The Task itself is unchanged — same review, same accept/decline/renewal flow. Any host or integration that referenced the oldstorefront-plan-selectionresource URI keeps working: the old URI stays aliased for one release while every client picks up the new one.
5.31.2 — August 2, 2026 at 1:23 AM UTC
- The demand inbox and its proposal-pass view now read as one clean document instead of stacked panels. Each screen is a single card with a quiet header, aligned figures, and a flat ledger — no more nested boxes, and a metric with nothing to report reads as its reason in one glance, never as a fabricated zero.
5.31.0 — August 1, 2026 at 10:43 PM UTC
- Products built from ad-server inventory now keep the delivery options you selected through buyer discovery and checkout. Inventory Components and Inventory Selector show practical format details, ask for a video length when one is required, and catch options that the selected inventory cannot deliver before saving. Existing composed products continue to work during the upgrade; no action is required.
- Meta’s community catalog now identifies Messenger and Threads as Meta-owned properties while keeping formats and placement targeting limited to verified Facebook and Instagram surfaces. No buyer action is required.
5.30.0 — August 1, 2026 at 8:29 PM UTC
- Agency and power buyers using Meta product discovery and campaign creation now get safer property handling. Standard products remain limited to disclosed Facebook and Instagram placements, so no action is required. Buyers whom Scope3 enrolls in the AdCP 3.2 candidate can also discover Advantage+ products; those products identify that Meta may deliver beyond the disclosed property list and cannot be targeted to a chosen property list. Contact Scope3 to request candidate access.
5.28.4 — August 1, 2026 at 7:34 PM UTC
- Composed product prices now appear on decision records. Simulator comparison cards, the proposal pass, and demand-inbox projections show each offered product’s CPM and the cost basis it was priced over — the numbers previously lived only in the agent’s written reasoning. Non-CPM pricing is left unlabeled rather than shown as a CPM.
- Simulator comparison cards now read as business documents. A run that made an offer speaks through its products, prices, and reasoning — no status chip, and no “Why declined” label on a run that responded. Runs that produced no offer say so plainly (“No offer”, “Did not complete”) with the reason. The pinned brief shows the budget, the buyer, when it was observed, and what inventory was frozen with it, instead of raw field names and timestamps.
5.28.0 — August 1, 2026 at 5:33 PM UTC
- You can now create a draft product from a publisher’s custom creative format. In Property Roster, Create product opens a focused task with the publisher format and property scope already attached. Choose an Ad server, select the inventory and Delivery formats reported by that source, review the product, and select Create draft product. The work stays in the task instead of being sent back through chat. Existing products and other product-authoring workflows are unchanged, and the draft remains hidden from buyers until you activate it. Sellers who do not use publisher formats do not need to act.
- For API integrations, V3
wholesale_product.formatOptionsnow uses the same canonical format concepts as V2 and returns saved inventory and format details when a product is read. Calls that omitformatOptionskeep their existing behavior. During the gated preview, the previously documented snake_case option fields continue to normalize to the canonical shape; legacy agent URL references remain invalid. - Launch: This is an atomic ungated addition to the existing GA Product Authoring feature (
gate: none). It expands with the deployment. Reverting this change removes the new Property Roster entry point without changing existing products or the underlying V2 product operations. - Measurement: Track
prepare_wholesale_productlaunches, successfulvalidate_esa_productandcreate_esa_productoperations for drafts carrying publisher format options, validation-to-create conversion, and create failure rate. Acceptance is at least 20 successful publisher-format draft creations across five storefronts with no confirmed regression in existing product authoring and a create failure rate below 5%. - Monetization: None. Product-authoring entitlements, packaging, pricing, and Intelligence Unit treatment do not change.
5.27.0 — August 1, 2026 at 4:29 PM UTC
- Modular inventory-source readiness pages now load correctly when account-scoped lifecycle stages are present.
5.26.0 — August 1, 2026 at 3:50 PM UTC
- If your storefront uses a CitrusAd modular inventory source, open Buyer Account Mapping, refresh its accounts, and select the CitrusAd team for each operator-and-brand relationship. Interchange then scopes product discovery, media-buy creation and history, delivery reporting, and account resources to that team. Buyers keep using the same requests and receive the newly mapped account-scoped results. No CRM setup is required. Other modular inventory sources are available for binding only when they support all of these account-scoped operations; existing agent, Google Ad Manager, and FreeWheel bindings are unchanged.
5.25.1 — August 1, 2026 at 2:53 PM UTC
- Property Roster now turns each discovered creative format into a product-planning action. Expand Creative formats to see the inventory where a format can run and the creative a buyer needs, then choose Use in a product to continue. If a format does not match a current property, the roster guides you to review its property mapping instead. Format IDs and sources remain available under Technical details when you need them.
5.25.0 — August 1, 2026 at 1:27 PM UTC
- Media buys now send package pacing to sellers only when the buyer explicitly authored it, so an internal default no longer blocks otherwise valid Meta campaigns.
- You can now catch problems with publisher format options while authoring a wholesale product. When an entry in
format_options[]includes a publisher’spublisher_domain,format_option_id,format_kind, andparams, product validation warns if the connected publisher catalog does not contain that option, declares a different canonical kind, or limits it to properties the product does not select. A product can still narrow the catalog option’s parameters. - No action is required for existing products. These warnings are advisory: a catalog lookup problem does not block authoring or change the managed sales agent’s validation result. Validation covers product-level format options, not placement-specific availability. AAO registry data still does not authorize a sales agent.
5.24.1 — August 1, 2026 at 12:13 PM UTC
- Keep the v3 account status response navigable when buyer readiness is temporarily unavailable.
5.24.0 — August 1, 2026 at 11:00 AM UTC
- Sellers can now see source call health alongside ad-server status, sync history, sandbox readiness, and modular-source readiness, without one unavailable check hiding the others. Ad-server setup and credential changes remain in the secure interactive setup experience, and unavailable operations are reported clearly. No action is required.
- Simulator runs no longer appear in the Demand inbox. What-if executions were surfacing as phantom ledger rows with an empty buyer and counting into the scoreboard; the ledger now shows only real demand, exactly as the Simulator’s isolation promise states.
- In Buyer Account Mapping, sellers with a managed FreeWheel source can now refresh authenticated advertiser choices, then select or import a source binding for each operator-and-brand relationship. Interchange uses that binding for product discovery, media-buy creation and history, delivery, and account resources; no CRM setup is required. Google Ad Manager and third-party sales-agent behavior is unchanged, and modular sources remain unsupported.
- Child storefront admins can now add their own payout entities in Settings → Billing → Payout entities without needing access to the parent organization’s commercial billing account. Your inherited parent payout details remain the read-only fallback until you add an account-owned destination; no action is required unless you want the child storefront paid separately. Parent organization admins can continue managing a direct child’s payout entities on the child’s behalf.
- Meta media-buy requests that use a nested ISO subdivision now return an actionable validation error before any provider write. Supported top-level regions and country targeting are unchanged.
- Inventory discovery now reports live, modular, and cached-catalog source failures as a retryable error when no source or fallback completes. It preserves genuine empty successes and no longer describes an unfinished or failed source task as zero matching products.
- When no payout entities are configured, the empty state now shows a labeled Add payout entity action that assistive technology can identify. Nothing changes on your side.
- Agents using the v3 storefront surface can now open the portable Demo Storefront Page to inspect and manage an existing synthetic demo. Demo creation remains a Scope3 platform-administrator action, and Plan & Billing continues to require the authorized human for legal and payout changes.
- Made modular source setup, readiness, avails import, and external sales-agent connection available through the same portable typed Tasks and Pages in every MCP Apps host.
- Storefront operator-domain updates now preserve profile and verification data when a domain is first set or changes only by an equivalent spelling. Account-domain updates keep mirrored storefront domains synchronized without clearing their profile, and storefront configuration remains available when demo status cannot be loaded. Active managed inventory sources without a connection marker now continue to report their connected state. No action is required.
PUT /storefrontnow protects your existing operator profile when you changeoperatorDomain. If an omitteddescription,channels,membershipStatus, orwebsitecontains a value, the request returns a validation error naming the fields that would be cleared. Resupply values for the new operator, or passconfirmOperatorDomainProfileReset: trueto clear fields you do not resupply.- If the operator domain or affected profile fields change before your confirmed retry, the API returns a conflict; read the storefront again and retry. An unset or previously mirrored storefront domain continues to sync with the account’s
customerDomainwhile preserving populateddescription,channels,membershipStatus, andwebsitevalues. Only an explicitly divergent operator domain remains isolated from account-domain changes. Calls that keep the same operator domain continue without confirmation. - Spotify placement IDs in catalogs and delivery reports now use
spotify.com:in_streamorspotify.com:in_feedinstead ofspotify.com:MUSIC. Update code and dashboards keyed on the old ID. Mixed- podcast and Audience Network inventory remains unpublished.
- You can now review the canonical creative formats discovered for each publisher in Property Roster. Expand Creative formats to see format kinds, dimensions or duration constraints, applicable properties or tags, and whether each format came from the publisher or the AAO registry. No setup changes are required.
- Format discovery does not change authorization. Only the publisher’s live
adagents.jsoncan authorize your sales agent. Media buys still use the format options on each product, which can be narrower than the publisher’s discovered formats.
5.23.1 — August 1, 2026 at 6:50 AM UTC
- Buyers: Meta paused/no-spend verification now waits a bounded interval for provider cancellation to become visible instead of failing on an immediately stale read.
5.23.0 — August 1, 2026 at 6:09 AM UTC
- Buyers: Meta cancellation readback now keeps a directly deleted campaign canceled even while Meta’s derived effective status is still catching up.
- Buyers: Meta cancellation readback now treats a directly read deleted campaign as authoritative without querying its unavailable child ad-set edge.
- No action is needed. Spotify campaigns created with regional targeting now complete successfully instead of failing during provider verification, while changed placements, regions, demographics, and unsupported targeting remain blocked.
5.22.0 — August 1, 2026 at 4:26 AM UTC
- Buyers: Meta’s no-spend verification now distinguishes a campaign that is waiting for creative from the provider-level pause that contains spend. Nothing changes on your side.
5.21.3 — August 1, 2026 at 3:53 AM UTC
- Buyers: Meta Instant Form campaigns now accept the provider’s disabled Page signal-enrichment default during promoted-object verification while continuing to fail closed for conflicting provider values.
- Buyers: age-targeted product searches now return the age range and determination method on each product, as documented. A product composed against a seller’s age signal was answering without its
ext.scope3_product_targeting.demographics.ageblock, so the response named an age range in the product title while declaring none of it structurally, and there was no way to confirm the provenance you asked to accept. Requests that restrictaccepted_determination_methodswere affected the same way. No change is needed on your side.
5.21.2 — August 1, 2026 at 3:08 AM UTC
- Eligible Meta on-platform conversion campaigns now accept the account-scoped product IDs returned by discovery, avoiding an invalid-product rejection for built-in lead, messaging, and shop goals.
5.21.1 — August 1, 2026 at 2:39 AM UTC
- Meta campaign product discovery no longer returns an empty conversion target list, so strict AdCP clients can proceed with eligible campaigns. Nothing changes for value-optimization campaigns.
5.21.0 — August 1, 2026 at 2:12 AM UTC
- Spotify ad-set creation and updates no longer stall when Spotify omits the account ID from its response, and invalid region targeting now returns a clear correction before anything is changed. No seller action is required.
- Sellers: In Signal Manager, you can now classify an ad-server signal as Generic, Property, or Age. For an Age signal, map one exact adult range and choose how the age was determined: survey-based, assumptive, user-provided, or user-verified. You can also name the data provider. This lets age-targeted buyers find eligible products instead of receiving a misleading “no inventory” response. Property signals remain available for inventory setup and are not offered as buyer targeting.
- Buyers: Age-targeted product searches now distinguish unavailable age targeting from an empty storefront. A product is eligible only when its age range matches exactly, its age signal comes from the same inventory source, and its determination method is one you accept. If inventory exists but its age mapping or provenance cannot satisfy the request, the storefront explains that age targeting is unavailable instead of claiming there is no inventory. You can optionally restrict accepted determination methods; no action is required if you do not need that restriction, and requests without an age range are unchanged.
- Restore delivery reporting for media buys routed to sellers on the pre-2026-07-28
- MCP protocol.
- Reporting for affected media buys stopped updating on 2026-07-31 and returned an
- authentication error, even though the seller connection was healthy and its
- credentials were valid. Delivery for those buys now flows again, and the missing
- days are backfilled.
- The cause was in the AdCP SDK’s protocol negotiation. It probes a seller for the
- newer protocol before falling back to the older one, and a seller that answered
- that probe with an authorization error was treated as having rejected our
- credentials rather than as simply not speaking the newer protocol. Sellers on the
- older protocol are now reached correctly on the first attempt.
- If you export delivery or spend for a date range covering 2026-07-30 or
- 2026-07-31, re-run the export after this release to pick up the backfilled rows.
5.20.0 — August 1, 2026 at 1:26 AM UTC
- When work linked to one of your asks is verified as live in production, Interchange sends an update and keeps the ask in Your requests for 90 days. The update shows the release date and version, what changed, and what to do next. Closing an internal ticket or merging a pull request does not trigger this update; after delivery, you can confirm the outcome or say you’re still blocked.
- Settings now reflect successful credential, payment, connection, notification, team, and storefront changes immediately and remain correct after a refresh. Nothing changes in how you manage these settings.
- Wait boundedly for exact Spotify placement and targeting readback when an ad-set create response is incomplete.
5.19.0 — August 1, 2026 at 12:27 AM UTC
- From the Modular inventory source workspace, select Preview buyer discovery under a Ready Get products stage and enter a buyer brief to see only the products that source would return. The preview rechecks source status and readiness, records the decision for later review, and never includes products from another configured source. It does not create a media buy, change live products or source setup, or turn on transacting; brief tests started outside a source workspace remain storefront-wide.
- Seller accounts enrolled in the v3 preview can now update their canonical operator domain with
save_storefront, andget({ "kind": "storefront" })includes the domain’s verification state. A no-op save returns"action": "unchanged"without writing. - If changing the domain would clear a populated identity profile, the error names the affected fields. Review them, then retry with
confirmOperatorDomainProfileReset: trueto clear them. UsePUT /storefrontinstead when you need to preserve or replace those profile fields. The v2 Storefront API remains supported. - Authenticated storefront administrators can now refresh advertiser choices for
- an active managed Google Ad Manager inventory source through the storefront API
- or MCP
api_calloperationrefresh_seller_account_source_accounts, then - select the advertiser through Buyer Account Mapping. Interchange automatically
- applies that binding to product discovery, media-buy creation and history,
- delivery, and account resources; buyers do not need to change their requests,
- and no CRM setup is involved.
- FreeWheel and modular sources do not yet support explicit bindings. Leave
- required coverage unresolved rather than importing a guessed account, and use
Not requiredonly when the seller’s contract does not require a source- account.
- Calling the buyer or storefront
api_calltool with an unknown operation, unsupported path parameters, or missing required path parameters now returns a normal structured error instead of failing client-side output-schema validation. - Meta connections now discover eligible Page-native conversion sources through the current Business Portfolio ownership and Page advertising-access model when Meta’s legacy promoted-Pages inventory is empty.
- Connections now shows an ad platform as disconnected immediately after you unlink it and keeps that state after a page refresh. Nothing to change on your side.
PUT /storefrontnow protects your existing operator profile when you changeoperatorDomain. If an omitteddescription,channels,membershipStatus, orwebsitecontains a value, the request returns a validation error naming the fields that would be cleared. Resupply values for the new operator, or passconfirmOperatorDomainProfileReset: trueto clear fields you do not resupply.- If the operator domain or affected profile fields change before your confirmed retry, the API returns a conflict; read the storefront again and retry. Changing an account’s
customerDomainalso leaves a populated storefront and itsoperatorDomainunchanged, so make that change directly throughPUT /storefront. Account-domain synchronization still runs for an unset or mirrored storefront domain when those profile fields are empty. Calls that keep the same operator domain continue without confirmation. - Seller-owned inventory-source test plans now find and reuse an existing sandbox advertiser from its brand domain and currency. Complete REST plans bind the resolved advertiser and currency into the single-use execution token and require explicit currency plus creative/no-creative readiness. Product previews stay in the same sandbox account, so repeat no-spend tests no longer require buyer-side advertiser access or a previous run’s history. Nothing changes for production advertisers.
- Wait boundedly for exact Spotify optimized ad-set identity, delivery-goal, and targeting readback before accepting a media-buy create.
5.17.0 — July 31, 2026 at 8:51 PM UTC
- When buyer-serving calls stop before reaching an inventory source, storefront readiness, Murph, V3 account status, and inventory-source reads now share one explanation of the blocker, its effect, supporting evidence, and exact fix. Billing incompatibilities show advertised and required modes. Source diagnostics also distinguish storefront candidacy from direct source calls, historical empty or slow responses from ranking inputs, and source-exchange latency from total test duration. No setup change is required unless a surfaced blocker names one.
- Require an Enterprise entitlement to create modular inventory sources or attach modules. Existing sources and their buyer-facing storefront behavior remain operational, and managed ad-server connections stay included. Sellers who already have the entitlement need take no action; sellers who need access should contact their account team.
- Wait for Spotify’s bounded paused-campaign readback before creating child ad sets.
5.16.0 — July 31, 2026 at 8:18 PM UTC
- Parent-organization admins working in a child storefront can open payout details from Settings without being redirected back to the storefront home.
- Source diagnostics now show a real reporting status for sources Scope3 polls,
- instead of always showing “unknown”. When a source returns delivery we cannot
- accept, the diagnostics name the field that was rejected, so it is clear what to
- change rather than only that reporting is empty. Re-reading a past day now
- records the same status, and leaves an entry in the report-processing view even
- when the day’s delivery is declined.
5.15.2 — July 31, 2026 at 8:00 PM UTC
- Select the deployed Meta Facebook Login for Business configuration during OAuth authorization.
5.15.1 — July 31, 2026 at 6:56 PM UTC
- Failed inventory-source test campaigns now distinguish a local media-buy preflight failure from reaching the buyer-side
create_media_buydispatch boundary. Murph shows the specific per-buy failure and makes clear when no seller call could have been issued instead of replacing the reason with a generic Buyer API error or implying that an attempted buy necessarily reached the inventory source. - Meta connections now use the Page-scoped access Meta requires when discovering active Instant Forms, allowing eligible lead-optimization sources to appear without exposing or storing Page tokens.
5.15.0 — July 31, 2026 at 5:43 PM UTC
- You can now fill wholesale pricing and availability gaps from an ad-server source; prices already supplied by the ad server stay in place. Choose Import seller feed to download a pre-filled template, preview accepted and rejected rows and selector matches, and commit the reviewed feed. Each commit replaces only that source’s previous uploaded wholesale feed; rate cards and buyer discounts remain in their existing setup flows.
- Buyer catalog and pricing presentation are unchanged; committed source data continues through the existing catalog flow. This release does not change billing, packaging, margins, or monetization.
- Creative-to-product matching is now safer and more predictable for buyers and sellers. Creatives must match a product’s declared format and scoped option exactly; stale or ambiguous legacy labels are no longer guessed. Buyers should re-check creatives that previously matched through legacy aliases, and sellers should verify that their product format declarations are current because those declarations now determine which creatives are accepted. No action is needed when canonical format declarations are already accurate.
- Meta adapter responses now identify Meta request-limit failures as rate limited instead of reporting a generic service failure.
- If your Meta integration sends
targeting_overlay.signals, replace it with targeting_overlay.audience_include; the Meta-specific extension is no longer- accepted.
- On connected Meta accounts, boostable posts from authorized Facebook Pages now
- appear automatically as read-only creatives. Ready Custom and Lookalike
- Audiences returned by
get_signalscan be included or excluded with audience_includeandaudience_exclude, with no separate ID-mapping step.- If Page posts are missing from an older connection, reconnect Meta to grant the
- required Page permissions. Creating media buys from existing posts is not yet
- available to ordinary buyer accounts; image and video creative workflows are
- unchanged.
- Meta reconnects now re-request missing or previously declined Page permissions, so eligible Instant Forms appear as lead-optimization sources after reconnecting.
5.14.2 — July 31, 2026 at 3:23 PM UTC
- Reconnect Meta once to grant the Page advertising and lead permissions needed
- for Instant Form discovery. Scope3 now requests those permissions and continues
- to fail closed when Meta does not return authorized Form inventory.
5.14.0 — July 31, 2026 at 2:11 PM UTC
- Image creatives missing a click-through URL now fail at sync time with a clear error instead of trafficking to GAM with the image URL as the ad destination.
- Meta Instant Form campaigns now discover forms through Pages the connected
- principal can advertise as, using Meta’s supported Page-scoped form inventory
- when the ad account’s promotable-Page list is empty.
- Your agent now has one way to tell Scope3 what you are waiting on. Use
save_askfor support, product, integration, and commercial asks—and for- supply when a buyer is looking for inventory—then use the returned id to say
- whether the answer resolved the problem, you received it without disputing it,
- left you blocked, or should be withdrawn.
- Use
searchandgetwithkind: "ask"to read the same list from either a - buyer or seller account. Direct MCP remains limited to enrolled accounts;
- Murph adopts the new tools automatically.
- Enterprise buyers keep the same account and approval workflows. Agency and
- MCP-builder teams can use one filing integration across account contexts.
- Sellers get the same support, product, integration, and commercial filing
- vocabulary plus ask reads; supply filing remains buyer-only. There is no
- pricing, billing, plan, or entitlement change, and storefront ranking and
- inventory visibility are unchanged.
- MCP builders should replace
report_issue,report_integration_need, track_my_product_ask,create_supply_request, andremove_supply_request- with
save_ask. New Murph turns no longer advertise the retired Murph writers; POST /api/v2/supply-requestsandPOST /api/v2/supply-requests/removekeep- working through the API release containing this change. Those calls and
list_my_requestsmay be removed no earlier than the following API release,- after usage review; migrate reads to
searchandgetnow. - Removal also requires 30 consecutive days with at least 95% of first-party ask
- writes using
save_ask; each compatibility endpoint or alias below 1% of its - corresponding canonical write or read volume; and filing success no more than
- one percentage point below the 30-day pre-release baseline.
- Keep authoritative zero-value budgets in Meta and Snap media-buy readbacks so one zero-budget campaign cannot invalidate the account’s complete creative and media-buy inventory response.
- Ad-server signal drafts now use the source’s valid value types and mapping fields consistently, so supported targeting can be validated and created without manual payload repair. Nothing changes in existing saved signals.
5.13.0 — July 31, 2026 at 12:58 PM UTC
- Media-buy reads now return their applied optimization goals directly. Campaign updates also reject performance configuration on discovery campaigns instead of silently changing mode, and existing performance configuration can be cleared explicitly with
null. - Meta connected accounts now discover active Instant Form conversion sources
- from the selected ad account even when Meta’s promotable-Page list is empty,
- while campaign creation continues to verify the exact published Page and native
- optimization readback before returning success.
- When buying Meta inventory through an adapter storefront, buyers can now select one of each product’s advertised
optimization_goals; requests that omit the field continue to use the product default. Meta products advertise their supported metric, conversion, and vendor-metric goals withmax_optimization_goals: 1. Create, update, and media-buy reads return the selected goal only after Meta confirms the exact optimization-goal and billing-event pair. Invalid combinations fail before any Meta write. - Existing
bid_pricerequests remain supported when the selected pricing option allows a maximum bid. Meta treats the value as the per-auction maximum, and responses return it asbid_price. AdCP 3.1 clients cannot request cost caps, ROAS floors, or the AdCP 3.2biddingfield. Those requests, including monetary goal targets that would require a stronger policy, fail closed instead of changing the requested semantics.
5.12.0 — July 31, 2026 at 12:07 PM UTC
- Your modular source workspace won’t send you to add a module you don’t need. When we can’t read what one of a source’s modules does, the lifecycle stages it might have run now say it hasn’t declared them, instead of reading as unsupported and pointing you at another module to attach. A stage that genuinely has no module still tells you which kind to add. Murph makes the same distinction now, rather than calling those stages unsupported. Nothing to change on your side: a module we can’t read is ours to fix, not a gap in your setup. Every other stage on the source reports as before, and if a stage you’re counting on reads this way, telling Murph gets it to us.
5.11.1 — July 31, 2026 at 11:45 AM UTC
- Keep Meta placement-only controls scoped to explicit manual-placement buys so exact demographic requests can use Advantage+ placements while retaining strict audience-expansion and age readback checks. Campaign deletion now tolerates bounded provider readback propagation without repeating the delete mutation.
5.11.0 — July 31, 2026 at 11:02 AM UTC
- Fix budget updates on pending-creatives media buys not reaching the seller.
- When a buyer updated a media buy using a product-level budget while the buy was waiting for creatives, the updated budget was saved locally but not forwarded to the seller. The buy would continue running at the original budget.
- Fixed the self-serve Prebid.js
orgIdreveal — asking Murph “what’s my Prebid.js orgId” now returns the URL instead of an error. The tool had been failing since it shipped because the REST route wrapped its response outside the standard envelope; the response now follows the same shape as every other v2 endpoint. - Social media buys now report the actionable AdCP setup state consistently across platforms. A paused buy with no creative reports
pending_creatives, thenpending_startwhile a creative-ready flight is still in the future; its retained pause becomes visible only when the buy is otherwise launch-ready. If you filter media buys by status, include these pending states when looking for paused setup holds. The underlying ad-platform campaigns remain safely non-serving throughout setup. - Products are refreshed after an advertising account connection or credential changes, so a newly selected product can be bought without replaying stale account authorization.
- A new
PUT /esa/{esaId}/default-advertisersets the default advertiser — the advertiser a buyer’s spend books against when no per-buyer rule matches — on whichever ad server backs an embedded sales agent. It works for Google Ad Manager today; pair it withGET /esa/{esaId}/gam/advertisersto find an advertiser id. AdsWizz sources are accepted but both setting the default and listing the roster withGET /esa/{esaId}/advertisersreturn an error until a pending embedded sales-agent release lands, so wait for that release before using either against AdsWizz.PUT /esa/{esaId}/gam/default-advertiseris unchanged and existing Google Ad Manager integrations need no update; per-buyer mapping rules remain Google Ad Manager only, and FreeWheel and SpringServe are not supported. - Image uploads now validate that the file can be decoded before storing it. Uploads of corrupt or truncated JPEG, PNG, GIF, or WebP files are rejected with a validation error instead of being silently stored and sent to ad servers.
5.10.0 — July 31, 2026 at 9:17 AM UTC
- Fix canceled media buys reverting to pending approval.
- A race between the cancel database commit and the forward-worker claim stamp allowed the approval-forward worker to pick up a just-canceled buy and push it back to the seller, reverting the buyer’s cancellation.
- Seller-specific canonical format selections now carry their exact scoped identity through media-buy creation and creative sync, while injected or inconsistent route metadata is rejected.
- Meta storefronts now preserve exact brief-grounded age targeting when Meta adds
- known disabled audience controls to its readback. Requested controls must still
- round-trip, and active, missing, or unknown controls continue to fail closed.
- Existing
/mcp/v3searches are unchanged unlesskind: "ask"is explicit. Buyer agents can keep the requests their account filed in the same workflow they use for buying, while seller agents can do the same in their storefront workflow. Each can optionally narrow their own account’s asks by type or open/closed state, then pass the opaque result id togetwith the same kind for one ask. - The read keeps Scope3’s workflow status beside the requester’s separate answer, so Scope3 marking an ask resolved and the requester reporting that they are still blocked remain two facts. Internal workflow fields and account-routing identifiers are not returned. An ask id from another account is indistinguishable from one that does not exist.
- Ask titles can contain customer-supplied text, so asks appear only when
kind: "ask"is explicit; unrelated broad searches do not pull them into context. The existingv3-agent-surfaceflag remains the rollout and kill switch. - The glossary now defines Supply ask — an ask for inventory we do not carry —
- including the part that decides whether yours is one: it needs a buyer who can
- actually spend, so a curator buying on behalf of demand qualifies while a
- publisher who wants demand for their own inventory is asking for something else.
- A withdrawn supply ask keeps its record as evidence the demand existed.
- It also settles a phrase you may have seen: “demand signal” describes what an ask
- is evidence of, not an object you create or read, and not a kind of signal —
- those are targeting material a seller authors.
5.9.3 — July 31, 2026 at 8:09 AM UTC
- Meta storefronts now preserve exact brief-grounded age bounds when Meta returns
- its canonical age-range alias or omits the default false unknown-age control.
- Explicit unknown-age choices still round-trip, and a broader provider readback
- still fails closed.
- Your ad server source was upgraded on 30 July 2026. These fixes are already
- live — this note is late, and one of them is worth acting on.
- Check any media buy you cancelled before 30 July. Cancelling a buy did not
- reliably reach your ad server, so a buy you believe is cancelled may have kept
- delivering. Cancellation is dispatched upstream now, but it does not retroactively
- stop anything that was missed: please verify directly in your ad server for buys
- you cancelled before that date.
- Also fixed, no action needed:
- Delivery reports honour the window you ask for. A report for a specific
- date range previously returned a different period’s numbers.
- Product targeting keys are kept when you save. Custom targeting keys on a
- product were merged rather than dropped.
- An explicit
delivery_typeis no longer overridden. Saving a product as guaranteedwithout pricing options could silently return it as a- non-guaranteed auction product.
- Creative format selectors are emitted in canonical form, and adapter
- booking-lifecycle capabilities are now declared, so a buying agent can tell
- what your source supports before it tries.
- Canonical selections projected from a seller’s older named formats now retain that seller’s exact route through later media-buy creation, updates, and assigned creative sync. Buyers and sellers do not need to change their integrations; missing or ambiguous mappings remain excluded rather than guessed.
- The seller widget now calls a signal a signal, in all nine languages. The
- menu entry, the workspace heading, its tabs, and the create and validate
- controls all match the API and the documentation, which already used that word.
- Its two tabs still name the two layers they always did: Ad-server targeting
- is what your ad server already contains, and Signals are the ones you
- authored from it — browsing the first still creates nothing.
5.9.1 — July 31, 2026 at 7:01 AM UTC
- Seller Setup labels a modular source “Modular source” on its card, matching the name every other surface uses. It still said “Feed-backed source” there.
- Three things a seller or their agent could look up and not find are now in the
- glossary:
- Composed product (
cf_…) — built to a buyer’s brief at discovery time, - not authored by you — and Passthrough product, which belongs to a
- third-party sales agent you connected. Together with Wholesale product,
- all three kinds you see in reporting now have a definition and an id prefix.
- Property signal — the ad-server key-value that lets a property you
- declared in
adagents.jsonbe found in the ad server that serves it. It is a - signal by mechanism, not something a buyer targets, and it never appears in a
- brief.
- Component or selector? The same ad unit is both, in different roles. There
- is now a rule: component when the subject is what you sell, selector when it is
- where it runs.
5.9.0 — July 31, 2026 at 4:20 AM UTC
- Modular inventory source access no longer drops out mid-session when the
- feature-flag service is briefly slow to answer. A seller who is enabled for
- modular inventory sources keeps access for the cached verdict window instead of
- seeing “Modular inventory sources are not enabled for this customer” on the next
- call.
5.8.0 — July 31, 2026 at 3:16 AM UTC
- Buyers: When you call
get_products, a seller’s older named format can now appear as a canonicalformat_options[]entry if that seller published a valid mapping. Nothing changes in your integration; existing canonical options and legacyformat_ids[]keep their current shapes. - Sellers: To make an older named format available through
get_products, add a matchingcanonicaldeclaration to that format inlist_creative_formats. Dimensions and duration must match. Interchange ignores invalid or conflicting mappings; if a returned product remains unresolved, the seller result includes details inprojection.diagnostics. For new products, publish canonicalformat_options[]directly. See Get products across storefronts.
5.7.2 — July 31, 2026 at 2:37 AM UTC
- Murph now files integration requests from a concise description and the conversation already in progress, instead of asking sellers to complete a repetitive setup form. Nothing changes on the seller’s side.
5.7.1 — July 31, 2026 at 1:57 AM UTC
- A media buy the storefront could not place with its source now reports
canceledinstead ofpending_start. - When
create_media_buyis accepted but the forward to the underlying source fails (a malformed request, an unreachable source, a credential fault), no media buy is ever created upstream and none ever will be. Those buys previously reportedpending_start, which AdCP defines as “ready to serve and waiting for its flight date to begin” — so a buy that had already failed looked like one that was about to launch, indefinitely. They now reportcanceledwithcancellation.canceled_byset toseller, and the cause (invalid_request,source_unavailable,not_authorized) in the responseerrors[]. rejectedis unchanged and still means what it always did: a source considered the buy and declined it. A transport or credential failure is not a seller’s refusal, so it does not read as one, and retrying such a request may succeed.get_media_buy_deliveryalso changes for a buy spread across several sources: a source whose delivery could not be read this call no longer drags the whole buy’s status down topending_start. The status now reflects the sources that did respond, and the unreadable source is reported inerrors[]. When no source can be read at all, the call still returnsSERVICE_UNAVAILABLErather than zeroed totals under a misleading status.- The storefront API and the seller assistant now call a signal a signal. The
- operations that list, create, read, replace and delete one are described that way
- in the API reference, and the assistant uses the same word when it talks to you
- and when it asks you to approve a change. The raw material you build a signal
- from keeps its own name, ad-server targeting — browsing it still does not
- create anything.
- Nothing you call changes: operation names, paths and fields are untouched
- (
create_signal,list_esa_signals,signalId), so integrations need no - update. This completes the API half of the rename announced earlier; the seller
- widget still reads “Signal components” and follows once its translations are
- reviewed.
5.7.0 — July 31, 2026 at 12:39 AM UTC
- Buyer agents using V3 now receive account setup and destination readiness
- directly from
get_status, without being offered a V2-only setup tool that the - V3 surface does not support. The V2 Buyer Setup page remains available and is
- unchanged.
- Pinterest connections now request the
catalogs:readandcatalogs:writeOAuth scopes, so syncing an advertiser catalog to Pinterest works. Previously the connection only asked for ad and Pin permissions, and Pinterest rejected every catalog feed registration made through it. - If you already have Pinterest connected, reconnect it to grant the catalog permissions. Your existing campaigns, Pins, and reporting keep working in the meantime — only catalog sync needs the new grant.
- Nothing changes for your existing
supportandproductcalls if you do nothing. save_asknow covers everything you can be waiting on Scope3 for, and lets you update an ask after you file it. Alongsidesupportandproduct, filesupplyfor inventory we do not carry (name the domain insubject, the channel inchannel),integrationfor a counterparty we do not connect to (name it insubject), orcommercialfor pricing, terms, billing, or a rate-card exception.typeis optional now — omit it when you are not sure and we route the ask instead of you holding it back. Asupplyask is the one type that needs an account set up to buy; every other type files from any account.- To update an ask, call
save_askagain with theaskIdit returned, passed back asid, plus arequesterState:confirmed_resolved(what you wanted happened),accepted(you have heard our answer and are not disputing it — not the same as resolved),still_blocked(our answer did not work), orwithdrawn(never mind; the record is kept). An optionalnotereplaces the note on that ask; omit it to leave the existing one alone — this door cannot blank a note. Your answer sits next to ours instead of overwriting it, so “we called it resolved” and “I am still blocked” both stay visible as separate facts. - Filing needs only read access. Updating needs write access from that account’s own session — a staff or agent session without a customer identity can file and read asks but cannot answer them. Withdrawing narrows further: only the person who filed that ask, or an account admin, can do it.
title,typeandseverityare fixed once an ask is filed. - Buyers and sellers use the same door for support, product, integration, and commercial asks. A seller-only account cannot file a
supplyask because that route represents inventory a buyer intends to purchase; sellers can still file every other ask type, and no seller workflow is removed. - This does not change pricing, billing, packaging, take rates, or any other monetized surface. The
v3-agent-surfaceflag is the rollout and kill switch. We will measure adoption by the share ofsave_askcalls usingsupply,integration, orcommercial, and operational health by successful opaque tracking-id issuance; index failures now alert through Sentry as well as logs.
5.6.0 — July 30, 2026 at 10:45 PM UTC
- When you open Source Diagnostics for an inventory source, you can now see its
- recent outbound call latency, successes, errors, and timeouts alongside the
- preceding equal window. Only calls linked to that source appear there; calls
- made without a source link are excluded. Nothing to change on your side.
5.5.1 — July 30, 2026 at 10:17 PM UTC
- Allow exact zero-spend nested-geo DRAFT cleanup before transient lifecycle projection fields materialize.
- Storefronts we broker buys for are now recorded with the reporting arrangement
- they actually use, which is the schedule Scope3 reads delivery back on. Where a
- stale setting had us also asking your endpoint to push daily report webhooks, we
- no longer send that request. Nothing changes for buys whose products declare
- their own reporting capabilities, and nothing changes about the delivery figures
- buyers see.
5.5.0 — July 30, 2026 at 9:42 PM UTC
- Sellers running an AdsWizz embedded sales agent can now list their ad-server advertisers through the storefront API.
GET /esa/{esaId}/advertisersreads your roster live from AdsWizz and returns it whole, so finding the advertiser id your buys book against no longer means asking us to look it up for you. - Applying that id as your source’s default advertiser is not part of this release — that step is still Google Ad Manager-only. If you run AdsWizz, contact support to have your default advertiser set.
- Google Ad Manager sources are unchanged: a GAM network holds far more advertisers than is practical to read live, so it keeps listing from its synced cache via
GET /esa/{esaId}/gam/advertisers. - Buyer and Seller Setup now use the same clear checklist for going live.
- For buyers, Setup separates the three account-level requirements—confirm the company operating the account, accept the terms, and keep the account in good standing—from the requirements of each seller or buying platform. This makes it clear whether the buyer can transact anywhere and what remains before a specific destination can accept a buy.
- The company website used for buying is now separate from the organization used for sign-in. An account admin can confirm or change it without changing SSO, invitations, memberships, or advertiser brands. When trusted company records show that a brand belongs to the verified parent organization, Setup can recognize that relationship; agencies and other operators can still verify their own domain directly.
- Connecting is free. Sellers that do not require credentials have no connection step. Other destinations show only the provider connection, account selection, advertiser mapping, or payment setup they actually require. Payment details are requested only when Interchange processes the transaction.
- For sellers, the same activation language and company control now appear in Storefront Setup. Payout work has its own Get paid track, and missing bank details are identified as a payment delay rather than a storefront-launch blocker. Inventory and settlement-currency requirements remain separate.
-
Who notices what
- SMB and first-time buyers: Setup provides one next step and explains “can buy now” without protocol language.
- Enterprise brand and agency buyers: company identity and account standing apply once across every seller, while each destination says who controls the account and who bills it.
- Builders and power buyers: account status now distinguishes platform readiness from destination readiness, with the same result available in chat and the Setup page.
- Sellers and storefront operators: Storefront Setup uses the shared go-live checklist, while payout tasks remain visible without blocking launch.
-
Monetization
- No new charge is introduced. Connecting a seller or platform, finding accounts, matching an advertiser, and viewing existing campaigns remain free. Existing media costs and payment requirements are unchanged.
-
Measurement and acceptance
- Acceptance covers sellers that need no credentials, destinations whose payments are processed by Interchange, choosing the correct advertising account, cases where company information cannot be found, verified parent-company and brand relationships, and independently verified agencies. It also covers matching status results across chat and Setup, production widget builds, and browser screenshots of missing-company, known-domain, unknown-domain, and ready-to-buy states. Activation measurement uses the platform’s readiness result rather than reconstructing readiness from clicks.
- The launch dashboard will use the existing
activation:choice_shown,activation:door_chosen, andactivation:choice_deferredevents for entry-path adoption, plus successful and failedget_buyer_readinessrequests for setup reliability. Readiness responses provide the outcome measures:platformReady,canBuyAnywhere, destination totals, and the counts for ready, connection-needed, and blocked destinations. During alpha we will review the choice-to-door conversion rate, readiness-request error rate, platform-ready rate, and can-buy-anywhere rate by entry path each week. -
Rollout and rollback
- The feature remains behind
alpha-opt-in. Start with internal organizations and invited alpha buyers. Expand the cohort only after the staging and production browser flows are green for open signup, invitation bypass, known domains, unknown domains, and a ready-to-buy account; after at least 20 admitted buyer setup sessions have produced a readiness result; and while readiness requests remain below 1% server errors with no Sev-1 or Sev-2 activation incident for seven consecutive days. A wider rollout additionally requires a reviewed weekly dashboard for the named adoption and outcome measures above. - The kill switch is the existing
alpha-opt-incohort. Stop expansion immediately on a threshold breach. Remove the affected cohort entries to return those buyers to the waitlist gate, while retaining only the internal test organizations needed to diagnose the failure. Organization-scoped invitations remain the controlled admission path during recovery. Re-enable a cohort only after the failing browser scenario or readiness request has a regression test and the seven-day reliability window restarts. - Storefront administrators can now update account routing across inventory sources in
- one reviewed change instead of editing each GAM, FreeWheel, or other source mapping
- one by one. In the Buyer Account Mapping Page, choose **Import buyer account
- mappings**, upload
source_account_bindings.csv, review every create, update, and - archive, then commit the accepted change atomically.
- No migration or immediate action is required; use the import when you want to replace
- manual source-by-source maintenance. Manual mappings and mappings owned by another
- feed remain protected. This first release imports only
source_account_bindings.csv; - it does not import
seller_accounts.csvoraccount_mappings.csv, or create CRM - records, relationships, grants, inventory sources, or native source accounts.
- Campaign search now returns
nextCursorso agents can paginate past the first page.save_campaignwarns on silent no-ops (brief/flight null clears, create-path flags).save_media_buynow validates budget and flight upfront instead of silently discarding them, and reports phase in V3 vocabulary. Error codes unified across the buyer surface. - Widgets now fit the window they open in instead of guessing at it. Twelve surfaces — the demand inbox, seller dashboard, seller setup, release notes, property roster, activity, inventory components, source diagnostics, modular and third-party sources, buyer discounts, and the avails upload — capped themselves at a fixed height that overflowed shorter screens, leaving the bottom of the widget out of reach. Each now takes exactly the height your window allows, keeps its summary band pinned while the detail scrolls beneath it, and uses the full width of the pane. The widget bar also no longer repeats the title the widget already shows.
- Creative sync now correctly reports
errorwhen per-creative results from the storefront source all fail. Previously,sync_creativesreportedsyncedat the top level even when every creative was rejected by the downstream agent, masking failures and making retries appear to succeed. Additionally, non-object asset values (null, string, number) inside a creative’sassetsmap are now rejected before the payload leaves the platform, surfacing an actionable error message instead of a cryptic downstream validation failure. - Sellers: You can now stop accepting new business without interrupting existing delivery or losing an approved buy that has not reached a source. In Storefront settings, choose Hold new business; API integrations can set
isPaused: truethrough the v2 Storefront API. This removes products from buyer discovery and blocks new buys and buyer edits. Approved unsent buys remain queued and forward automatically when intake resumes, while storefront preview remains available. No migration is required. Use campaign controls if you need to stop live delivery. - Buyers: When a seller holds new business, its products are unavailable in discovery and you cannot create or edit a media buy with that storefront. An already-approved buy that has not reached a source remains queued and forwards automatically when the seller resumes intake, so you do not need to resubmit it. Campaigns already delivering continue unchanged. Buys that failed before this release remain unchanged.
- TikTok audience and signal reads no longer fail on accounts where TikTok’s reported audience count includes entries its list API does not return.
- Agents connected to the v3 MCP storefront preview can now read and manage
- storefront settings, exact advertiser relationships, signals, and approval
- work items with dedicated tools. Existing settings do not change on
- their own, so sellers only need to act when they want an agent to update this
- information. Buyers continue to see the capabilities and selling terms a
- seller publishes; they do not see the seller’s setup records or get a new
- buying workflow from this preview.
5.4.0 — July 30, 2026 at 6:31 PM UTC
- If you maintain a custom buyer or storefront API/MCP client, or a sales-agent
- integration, regenerate it against the current schema and adopt the canonical
- fields below. This is the only customer action required.
- Product discovery, creative sync, and media-buy creation now use the same
- URL-free AdCP format contract across buyer and seller surfaces. Declare product
- options with
format_options, select creative formats withformat_kind, - select package formats with
format_option_refs, and read product cards from - their inline fields.
- A connection explicitly negotiated onto the legacy protocol can continue
- unchanged. At that compatibility boundary, Interchange continues to accept and
- project legacy
{agent_url, id}references and media-buyformat_ids; - connections using the current schema must use the canonical fields above.
- Interchange chat, the Interchange UI, and built-in adapter connections adopt
- the contract automatically. Their setup and workflows do not change.
- Media buys now keep billing responsibility consistent from creation through
- execution, so fee and ledger reporting continue to match the seller account
- even if account mappings change later. Buyers and sellers do not need to change
- their workflows, and historical ledger entries are unchanged.
- Audience discovery on TikTok and Snap storefront connections now returns the account’s full customer-list audience inventory, including audiences created outside Scope3 — previously only platform-created audiences were visible.
5.3.1 — July 30, 2026 at 3:45 PM UTC
- Fix campaign pacing under-delivering on mid-campaign executes.
- Campaign fallback pacing now distributes a buy’s budget only across periods that are still active at execution time. Previously, a buy executed mid-campaign had most of its budget silently assigned to elapsed historical periods and dropped before being sent to the seller.
5.3.0 — July 30, 2026 at 3:11 PM UTC
- Your agent can now create and update campaigns and media buys with
save_campaignandsave_media_buy; campaigns and media buys are also now readable through thesearchandgettools. When updating a campaign, passexpectedRevisionfrom your last read to prevent overwriting concurrent changes. Launching a campaign to active still requires human confirmation, and seller acceptance of media buys is not yet available through the agent surface. - Creative operations (get, update, delete, bulk-update) now recognize creatives attached to a campaign via all three membership paths — the original ownership field,
campaign_creative_mapping, andcreative_manifest_campaign. Previously, creatives linked via the assignment API were invisible to get and update. - Users with multiple Interchange accounts can now log in via magic code and password as well as the standard OAuth flow. The previous fix only covered the OAuth code exchange path.
- When running a source test campaign, Murph now correctly reports that discovery was blocked (for example, because the agent doesn’t have sandbox mode enabled) rather than saying the source returned 0 products. The two situations require different follow-up actions: a sandbox capability gap needs the agent updated; zero products from a working discovery means checking the agent’s inventory or advertiser targeting.
- Sellers can now self-serve their Prebid.js
orgId— the value they paste into thescope3RtdProviderreal-time data module’s config — by asking Murph “what’s my Prebid.js orgId?” (or any variation of the same question). Previously this required an issued credential from the Scope3 team; now Murph returns the exact URL directly from your storefront so you can drop it intopbjs.setConfig(...)and continue with the install. Prebid Server’sauth_keyremains issued by Scope3 — the self-serve reveal covers Prebid.js only.
5.2.0 — July 30, 2026 at 12:34 PM UTC
- Creative files uploaded from Creative Assets now keep the social ad format you
- selected all the way to the connected ad account. An upload stops with a clear
- error if the social network needs information that is missing or does not
- confirm the creative and package assignment; it no longer appears successful
- with an empty or unusable ad. Meta image uploads use your authorized Page,
- default to Learn more, and do not require headline or body copy.
- When you attach a creative to a campaign in chat, the success summary shows
- which ad placements are ready only after the seller confirms the creative is
- available for delivery. A rejected or still-pending assignment returns a clear,
- retryable error instead of a success summary. Pending approval details also
- name the affected creative files.
- Connected social platforms now offer only the creative formats they can create
- reliably. An unsupported format fails before anything changes in the connected
- ad account.
- No buyer setup changes are required.
- Seller impact: no operational workflow changes. Sellers keep the same catalog,
- approval policies, and package controls; the buyer now sees a success summary
- only after the seller’s existing confirmation is received.
- You can paste a failing request into a support ask, headers and all. Bearer tokens, API keys, JWTs and cloud access keys are now replaced with
[REDACTED]before the ask is stored, sent to the Scope3 team, or recorded in the audit trail — on every copy, not just some of them. Only the credential is replaced: your sentences, timestamps, ids and error text arrive exactly as written, because they are what makes the ask answerable. Nothing to change on your side, and it applies to every ask type. It recognises known credential shapes rather than every possible secret, so still rotate anything you think was exposed.
5.1.0 — July 30, 2026 at 11:41 AM UTC
- Connected Meta products now list verified Facebook and Instagram Feed, Stories,
- and Reels placements. Buyers and agencies can select the product’s
- publisher-domain placement references when creating or updating a media buy;
- leaving
placementsunspecified keeps Advantage+ and all existing calls - unchanged.
- API buyers can request package performance by setting
reporting_dimensions.placement; directed-campaign REST callers useplacementBreakdown=true. Spotify reports only publisher-containedMUSIC- inventory. Spotify Audience Network podcast inventory, TikTok’s
- cross-publisher bundle, and any placement without exact provider readback stay
- unpublished.
- No seller setup is required. This adds no charge and does not change product
- pricing or packaging.
- Editing a product through Murph is now a change rather than a rewrite. Ask it to
- rename a product or take one off sale and it sends just that, leaving everything
- it did not mention exactly as you set it — so an edit can no longer quietly drop a
- price, a channel or a targeting rule. The approval step now shows you exactly
- which fields are changing, rather than a whole rebuilt product to check line by
- line.
- Paused media buys now retain the provider’s authoritative revision and action metadata, and live adapter checks verify that nested region requests fail closed before any provider mutation.
- Provider capability coverage for audiences, signals, and event sources on connected ad platform accounts is now documented. The new reference page shows, per platform, which reads return the account’s complete inventory and which are partial (bound-only), synthesized, or platform-managed — including the TikTok and Snap audience caveat, where only audiences created through Scope3 are visible.
- Controlled Meta products now preserve exact age and gender targeting through
- launch while rejecting any targeting that no longer matches the selected
- product.
- In Buyer Account Mapping, sellers can now review one relationship per
- operator and brand, see its private coverage across active inventory sources,
- and search or paginate the account roster. Open it with
get_seller_accounts. - The Page is read-only and does not change existing account routing.
- Download the normalized source-binding CSV template, your current healthy
- bindings, and the active native accounts reported beneath each
- source. Equal native IDs in different sources remain separate, CRM is optional,
- and no source topology or native ID is shown to buyers. CSV upload and commit are
- not enabled yet; imports will require a signed preview and one atomic,
- version-checked commit rather than applying rows partially.
5.0.0 — July 30, 2026 at 9:54 AM UTC
- Spotify storefront connections now support event-source discovery (
sync_event_sources); Amazon’sget_signalsno longer returns a demo placeholder — Amazon signal enumeration is unavailable until AMC integration ships. - Ask for one exact adult age range in a product-discovery brief—for example, “ages 21–35”—and storefronts now offer products only when the connected platform can execute those exact bounds. The selected range is preserved through media-buy creation and readback; on Meta, people whose age is unknown are excluded unless you explicitly include them. Meta and Spotify accept continuous ranges within their limits. Snap, TikTok, and Pinterest accept only exact combinations of their native age buckets, while other adapters do not support age targeting yet. Open-ended, disjoint, exclusionary, ambiguous, under-18, or unsupported requests are not widened or guessed: an adapter that cannot represent the request contributes no matching product. Existing supported briefs require no changes; if discovery returns no matching product, rewrite the brief as one explicit supported range. This applies to age carried by the selected product, not
targeting_overlayor changes to an existing media buy. - If you call seller MCP tools directly, replace
get_business_profilewith get_media_kit; replaceget_merchandising_rulesandget_selling_termswithget_playbook; and replaceget_acceptance_policywithget_business_rules. Your saved configuration and version history are- unchanged.
- Seller configuration now uses three matching names: Media Kit for what
- buyers see, Playbook for how you package and price, and Business Rules
- for what you accept and when a person reviews it.
- Fixed execute_campaign failing with “no pricing options” for wholesale products stored under account-scoped catalog keys. The reconcile path now reads all catalog account keys for the storefront instead of only the public partition, matching the forward path’s behavior.
4.150.0 — July 30, 2026 at 8:30 AM UTC
- Buyers can now select supported performance goals on TikTok, Snap, Pinterest,
- LinkedIn, Google Ads, and Spotify packages. Product discovery states each
- platform’s exact goal capabilities, creation fails before spending when a goal
- cannot be applied, and creation verifies the provider’s stored goal before the
- buy can proceed. Reddit and Amazon reject optimization-goal requests until
- their provider identity and readback gaps are implemented.
- Buyer agents can now call
get_account_resourceson a platform-composed - storefront to list the audiences, signals, and event sources attached to a
- linked account. The tool returns live, cursor-paginated, opaque references with
- per-source capability and coverage metadata. It does not return audience
- membership, event payloads, setup secrets, private source IDs, or source-native
- account IDs. Check
partial,truncated, and each source’s coverage before - treating the response as complete.
- Who this is for: Buyer agents are the direct user; enterprise brand and
- agency buyers receive the same account-scoped result through their agent. The
- seller impact is disclosure of opaque capability, coverage, freshness, and
- error state for sources already attached to an active buyer grant. Sellers get
- no new workflow, and buyers still cannot see native source topology or account
- IDs.
- Packaging and rollout: This is included in existing sales-agent connections
- with no new billable surface or pricing change.
gate: noneis intentional for - this atomic, read-only launch because the existing authenticated principal,
- active account grant, and bound-source relationship are structural gates. The
- kill switch is removal of the custom-tool and adapter signal registrations;
- broader provider coverage requires authoritative account-scoped enumeration and
- acceptable partial/error rates.
- Measurement: Standard MCP calls to
get_account_resourcesare the adoption - event. Monitor calling buyer principals and linked accounts, successful grant
- resolution, complete versus partial responses, unavailable-source and
- truncation rates, resource counts, and cursor completion.
- When updated Terms of Service appear in Interchange and require a new acceptance, eligible organization administrators can review them immediately or choose Review later until the displayed deadline. After that deadline, other members see that an administrator needs to act. Negotiated pricing stays attached when the update is a minor version.
- Nothing changes for the current v3.0 terms, and no action is needed until an updated version is published. Patch revisions that do not materially change the terms continue with notice and continued use; material minor and major revisions require an administrator’s affirmative acceptance. If agreement status cannot be verified, API and agent actions pause with a retryable error instead of proceeding without confirmed terms.
4.149.0 — July 30, 2026 at 3:27 AM UTC
- The Demand inbox now reads as an honest scoreboard. A figure the platform
- couldn’t compute says why — “Nothing decided yet”, “Nothing booked yet” — instead
- of showing a bare “N/A” or, worse, a zero that looks like a real result. A lost
- brief is presented as history rather than an error, and “agent-led” is no longer
- coloured as the better outcome than “human-led”. The scoreboard now stays pinned
- at the top while the ledger scrolls beneath it, so a long list never pushes your
- numbers off the screen, and the ledger fits a phone-width window without
- scrolling sideways. Filtering to a buyer with no briefs now says “No matches for
- this filter” and offers a one-click reset, rather than showing a blank table. You
- can refresh without leaving the page; if the refresh fails, your last figures stay
- on screen with a note instead of the page going blank. Dates, currencies and
- counts follow your language and region, and the screen’s own labels are now
- translated.
4.148.0 — July 30, 2026 at 3:10 AM UTC
- Region targeting now refuses nested ISO subdivisions on Meta, Google Ads, Snap,
- TikTok, LinkedIn, and Spotify because those provider searches do not return
- enough hierarchy to distinguish a child from a larger same-named parent.
- Previously, some French département codes and other nested subdivisions could
- silently resolve to a larger region, causing broader delivery than requested.
- Top-level state and region targeting, including Meta’s translated provider
- names, continues to work as before. Pinterest, Reddit, and Universal Ads
- continue to accept nested subdivisions because their provider paths do not
- infer identity from a provider name.
- Merchandising decisions now quarantine inventory bundles that the current creative-format contract cannot execute safely and show a clear seller-readable explanation instead of raw validation details. The Simulator also identifies its starter fixture as a Display brief tested against the seller’s current inventory, so non-Display sellers know to use a channel-matched brief.
- Release notes now says what each update is and who it is for. Every entry
- carries how significant it is (Fix, Improvement, Feature, or Headline), whether
- the capability is still Alpha or Beta or is being retired, and why it is in your
- list — Changed for you and In your setup only when Interchange verified
- your account, and For all accounts when the change applies to everyone in
- your role, so a general change never reads as one about you. The feed also
- states what New means and what clears it: opening For you moves your
- read position, and browsing Explore or Recent updates does not.
- The page itself now fits the window instead of growing without limit — the
- count of what changed for you stays visible while the feed scrolls beneath it —
- and dates read in your own locale and timezone. An empty For you points you
- to Explore rather than dead-ending, a failed refresh keeps the updates you were
- already reading instead of blanking the page, and every update can be sent to
- Murph for an explanation, including ones with no linked feature page.
- Buyer agents can now resolve a brand from its domain before creating an advertiser. Existing advertiser creation and REST integrations continue to work as before, with no setup changes required.
- Seller agents can now read the active account, selectable accounts, delivery and margin reports, and safe modular-inventory product and capability data by stable operation name. Booking, configuration, work-item detail, and credential changes remain in their confirmation-gated tasks or trusted operator screens.
4.147.0 — July 30, 2026 at 1:50 AM UTC
- Eligible connected ad accounts can now find platform-managed conversion
- outcomes in
sync_event_sourcesand use them in compatible media-buy - optimization goals without adding a buyer pixel or server event. No setup
- change is required: eligible sources appear automatically for the selected
- account, and existing calls behave as before unless a built-in source is
- selected.
- Media teams can optimize eligible Meta campaigns for shop purchases, Messenger
- contacts, or Instant Form leads. Amazon profiles and Google Ads accounts can
- also discover supported platform-managed outcomes from their account data. For
- API and agent builders, Meta verifies the native optimization goal, destination,
- and promoted object before returning a paused media buy. Built-in sources are
- discovery-only: attempts to change them fail per source, events cannot be logged
- to them, and Scope3 does not invent health scores for them.
- Seller agents using the v3 surface can now reach every supported field, including wholesale-product status filters. Misspelled fields return a correctable validation error instead of being silently dropped. No action is required.
- Campaign teams can now include or suppress Meta Custom and Lookalike Audiences with AdCP’s native
audience_includeandaudience_excludefields. Create, update, and tracked media-buy reads return the audience IDs confirmed by Meta. No change is needed for Meta packages that do not target these audiences. - API integrators that send Meta audience IDs through the legacy
targeting_overlay.signalsextension must move them totargeting_overlay.audience_include; the old field is no longer accepted.
4.146.0 — July 29, 2026 at 10:41 PM UTC
- Operator-domain verification now only accepts brand records backed by domain control. A record you published at your own domain (
/.well-known/brand.json) or registered yourself through the AAO registry counts as evidence; a record contributed about your domain by someone else does not, because it does not show that you asserted the relationship. This tightens who can claim to operate under a domain. - Verification also no longer consults the AAO brand-hierarchy endpoint, which was retired in the move to AdCP v3. While it was unavailable, that check could not complete, so an alias or rebrand operator domain that we could not confirm is now reported as “Scope3 could not complete this check” rather than as missing evidence — you will not be told to fix or republish a declaration that is already correct. Confirming these relationships against the AdCP v3 model is in progress.
4.145.1 — July 29, 2026 at 8:09 PM UTC
- Bulk-update
format_idnow applies correctly. Previously, settingformat_idin a bulk-update request always silently failed with a validation error because the required internal flag was not threaded through the bulk-apply path. - Fix two bugs blocking TMB Chime campaign execution.
- Cancel no longer reverts:
cancelMediaBuynow stamps bothpendingandapprovedrows instorefront_pending_media_buysso an operator approval that arrives after the buyer cancels cannot resurface a dead buy. A new guard inupdateMediaBuyFromResponseblocks any incoming status update (including authoritative v3) from reverting a buyer-canceled buy out of CANCELED. - Execute no longer 500s: the
completeDiscoverySessioncall inexecuteCampaignnow handles “not found or not accessible” and “lapsed” session errors the same way it handles “already completed” — by skipping cleanly instead of propagating a 500. upgradeManifestnow validates the resolved format_kind through the same canonical identity check as creative creation. Upgrade requests where the format_kind is inconsistent with the creative’s existing assets return a validation error.
4.145.0 — July 29, 2026 at 6:35 PM UTC
- Sellers can now disable and re-enable inventory sources directly from the source diagnostics setup panel, without needing to contact support or run SQL queries. The disable action includes a confirmation step to prevent accidental changes.
- Creative assignment now enforces advertiser ownership: a creative belonging to one advertiser can no longer be attached to a campaign belonging to a different advertiser within the same account. The assign endpoint returns 422 when advertiser IDs conflict.
- Collection fan-out skips cross-advertiser members and returns an
ownership_excludedcount in the response — if that count is non-zero, promote the skipped creatives to the correct advertiser before retrying. Sellers are not directly affected by this change. - Fixed intermittent REFERENCE_NOT_FOUND errors when discovering products from pubX. The SDK’s async polling was making account-less requests to sources that require account context on all calls.
- Meta campaign data stays reachable after an access-token refresh. Meta
- partitioned its stored adapter state — targeting provenance and account
- pagination — using a key derived from the access token whenever host credential
- identity was unavailable. Refreshing that token changed the key, so anything
- recorded under the previous token became unreachable and a later targeting
- update could fail to find its own history.
- The partition now comes from durable account identity, which a token refresh
- does not change. Snap, TikTok, Spotify, Pinterest, Reddit and LinkedIn already
- work this way; Meta was the last one that did not.
4.144.0 — July 29, 2026 at 4:58 PM UTC
- Campaign reads can now bypass cached media-buy state when a buyer needs to
- confirm a lifecycle change immediately. This prevents a successful pause,
- update, or cancellation from briefly appearing unchanged.
- Users belonging to multiple WorkOS organizations can now log in. Previously, if a user was a member of more than one org, WorkOS returned an organization selection error that blocked login entirely.
- Ask Murph what you have open and you get one list of support, product, and supply asks, each with a status that moves as the work does. A product ask now follows the engineering work it is attached to; a supply ask follows that seller and channel through onboarding. Before this, a product ask read “Tracked for product review” from the day you filed it until the row dropped off the list; that is now just its starting state, and it moves from there. Every ask carries one status from a closed set (
received,accepted,in_progress,done,closed) plus astatusLabelandstatusDescriptionwritten for you. Internal workflow state names and ticket references never appear in a customer response, and a state we cannot describe honestly stays atreceived. GET /api/v2/asksis now documented in the buyer and storefront API references, so your own agent can read the same list. It is read-only, takes no customer parameter, resolves your account from the API key you call with, and returns up to 25 asks per call alongsidehasMore. If a source cannot be read, the response names it inunavailableKindsinstead of returning an empty list that would read as “nothing open”. The two undocumented reads it replaces,/api/v2/customer-picture/requestsand/api/v2/customer-picture/ask-status, now return 404 — point any call you have atGET /api/v2/asks.- Which statuses a kind reaches differs, and the read says so rather than implying otherwise: support and supply asks both keep a short recently-resolved window, so a supply ask shows up as ready before it ages out instead of quietly disappearing — dated from the marketplace evidence that made it ready, not from when your request row was last touched, so a seller that went live yesterday shows as ready even on an old request. Two gaps are named rather than papered over: a product ask leaves the list once the work ships or is dropped, and a cancelled supply ask leaves the list too, because we have no reliable record of when it was cancelled and would rather drop it than show you a made-up date. Supply asks are the sellers and channels you asked us to bring into the marketplace, so you see them only if you have filed one. Support asks filed before this change may not yet show a next-update date or a still-blocked confirmation. Full details: Ask Murph → Your requests and support.
4.142.0 — July 29, 2026 at 1:22 PM UTC
- Reading an ad-server-backed product now reports its pricing the way buyers see it. Uploaded wholesale pricing is applied when your catalog refreshes, but a product read went straight to your ad server, which never learns about that upload — so a product your feed had priced still came back as “pricing unresolved”, permanently on any ad server that doesn’t report pricing. A product you priced with a fixed rate reads as priced too. Products your feed hasn’t priced are unchanged: still unresolved, with the reason.
- Wholesale pricing uploads now accept CSV files that arrive as
text/plain. Text editors, Slack, and some operating systems label a.csvattachment this way, and those uploads were previously rejected before reaching the parser even though the file was valid CSV. - Creative asset URLs are now round-trip safe for filenames containing
%,?, or#. Such filenames previously produced a URL that could not be resolved back to the stored asset. - Changing one field on a wholesale product no longer means re-sending the whole
- product.
patch_esa_productapplies only the fields you name and leaves - everything else exactly as it was, so renaming a product or flipping its status
- can no longer clear the prices, channels or targeting you never mentioned.
update_esa_productstill replaces the whole product for callers that hold a- complete one.
4.141.0 — July 29, 2026 at 12:45 PM UTC
- The Campaigns page now shows filters by phase, handling, and search; a stats band with live/draft/blocked counts; per-campaign attention signals; and load-more pagination. Launching the Campaigns page from the agent also now scopes to an advertiser when one is active in the conversation.
- Fix brief-mismatch in inventory-source test campaign execution. The plan tool now includes the captured brief verbatim in its nextActions so Murph carries it to the execute call, and the execute tool description makes clear the brief must match the one used during planning. A different (or defaulted) brief causes discover_products to return zero results and silently breaks execution.
- The connected-account subscription read now reports the tracked-presence sweep cursor:
lastPresenceSyncedAt,lastPresenceSyncStatus(SUCCESS,ERROR, orSKIPPED), and a sanitizedlastPresenceSyncError. An empty audience/event-source presence list is now distinguishable from a sweep that has not yet visited the account. - Seller approval verdicts (approved/rejected) are no longer reset to pending on every creative re-sync when the creative content has not changed. Previously, each outbound sync overwrote the stored verdict regardless of whether the adapter reported any content change.
- Fixed an issue where retrying
execute_campaignon a cross-currency media buy always failed with “This media_buy_id is already bound to a different immutable FX rate.” The FX lock’srate_as_of_datecolumn (PostgreSQLDATE) was returned by the driver as a JavaScriptDateobject, but compared with===— which checks reference identity, not value equality. Two separate reads of the same date always failed the comparison. - Fixed an issue where reconnecting a Meta storefront connection via Settings → Connections left the connection in an error state. The OAuth flow completed successfully but the credential status remained broken on subsequent reads.
- Fix storefront forwards silently failing after ESA v1.30.0 enforcement. When forwarding a media buy to a canonical managed sales agent, legacy
format_idsare now stripped from the outbound packages before dispatch. The canonicalformat_kind/paramsselector is preserved. Legacy AGENT sources are unaffected. - You can now change the geography of a running campaign on every social ad
- platform Scope3 connects: TikTok, Reddit, Pinterest, LinkedIn and Spotify join
- Meta and Snap. Previously these five refused every targeting change on
update_media_buy, so the only way to correct a campaign’s geography was to- create a new media buy.
- Geography is declared state, not an edit. The regions you list are the regions
- that deliver, and a region you stop listing stops delivering. Send
geo_regions: []— or omitgeo_regionswhile supplyinggeo_countries— to- return a campaign to country-level delivery. Countries you don’t restate carry
- forward, and a country with no region of its own is untouched. Omitting
targeting_overlayentirely leaves targeting alone, so budget and date changes- don’t require restating geography.
- Unresolvable region codes are refused before the platform is called, so a failed
- targeting change never leaves a campaign half-updated. Dimensions other than
- geography are still refused on update with
UNSUPPORTED_TARGETING_DIMENSION. - One Spotify correction worth checking your integration against: a Spotify ad set
- carries a single country, and a request naming more than one used to deliver to
- the first and discard the rest without telling you. That request is now refused
- with a 400 naming the countries it received. If you send multiple countries to
- Spotify today you are already only delivering to one of them — split them across
- packages to reach all of them.
- See the connect guide for the current per-platform table.
- Google Ads now applies
geo_countriesandgeo_regionsoncreate_media_buy. - Country and region codes resolve against Google’s own location inventory at
- request time, so any ISO 3166-1 country or ISO 3166-2 subdivision Google
- supports is available rather than a fixed list.
- This closes a gap where Google Ads advertised four targeting dimensions through
get_adcp_capabilitiesand applied none of them: a campaign you targeted at one- country delivered everywhere, and nothing in the response said so. That silent
- failure was already stopped — Google began refusing targeting it could not
- apply — and geography now works rather than being refused.
- Two Google-specific behaviors to build against:
- Google targets geography at the campaign level, not per ad group, so every
- package in one Google media buy must declare the same geography. A buy whose
- packages disagree is refused with
INVALID_PACKAGE_MIXbefore anything is - created — use separate media buys for separate geographies.
- A region code that doesn’t resolve to exactly one Google location, and a
- location lookup that fails, are both refused before any campaign is created.
- Nothing is half-built.
keyword_targetsandnegative_keywordsare still not applied on Google Ads- and are still refused. Geography applies on create only; changing it on an
- existing Google buy is refused.
- One reporting limitation to plan around: Google delivery reports break geography
- down by country, so a campaign you target at a region reports against its
- country rather than the region. The targeting applies — you just can’t yet see
- the region back in
get_media_buy_delivery. - Murph now says plainly when an approved action failed before anything could be written, while continuing to ask for state verification when a timeout or server error leaves the outcome uncertain.
- TMP eligibility on storefront forwards is now derived entirely from
Product.trusted_match.identity_match. An additional internal enrollment step required behind the scenes on top of the product declaration has been removed. - Sellers: no change in how you set up TMP — declaring
identity_match: trueon a product remains what enables it. Outbound line items on identity-matching products now carry the package-ID key-value automatically once the declaration lands, without waiting on an internal follow-up. - A Terms of Service update within the same major version no longer asks you to re-accept. If your organization has accepted v3-0 and Scope3 publishes v3-1, you keep working — no prompt, no interruption. Only a new major version requires an admin to accept again.
- Two pieces of vocabulary now match the protocol and the API, so the docs and your agent use one word each.
- Wholesale product is now defined in the glossary: the product you author on a managed sales-agent source, told apart from a composed product (
cf_, built to a brief at discovery) and from a third-party agent’s passthrough products. “Create products from ad-server inventory” opens with that three-way distinction, and clarifies that a component is the raw ad-server material you select from, never something you author. - Signal replaces “signal component” throughout the documentation. It is the same thing under one name — every API operation has always used
signal(create_signal,list_esa_signals), and the prose had drifted. The raw material you author a signal from keeps its own name, ad-server targeting. Some in-product copy still says “signal component” and will follow.
4.140.1 — July 29, 2026 at 11:54 AM UTC
- Murph now names and requests every required signal field before creating a component, instead of returning an unnamed “Field required” error after validation.
4.140.0 — July 29, 2026 at 9:39 AM UTC
- With a linked storefront account,
get_media_buyscan now return media buys from each available inventory source the seller has explicitly mapped to that account. Discovered buys use stable storefront IDs and are tracked, read-only records; pass the same linked account and ID toget_media_buy_delivery. Calls without an account are unchanged, and sources without a native-account mapping are not included in account-wide discovery. - Reviewing one buyer exchange is clearer and more honest. On a phone-width
- screen the allocated money no longer hides behind a sideways scroll — each
- product now lists its price and allocation on its own labelled line. A booked
- amount reads at full precision (£95,000, not £95K), so the number you quote is
- the number that was recorded. A lost exchange reads as history rather than an
- alarm, the pass timeline stays neutral because it is a record of time rather
- than status, and the letter grade now says “Grade” beside it. If the exchange
- fails to load you get a Retry instead of a dead end, and the error text is
- readable in dark mode. Dates, prices and budgets now follow your own locale and
- time zone, and the screen’s labels are translated. Anything that was never
- captured still says so — “Not recorded”, never a blank that could read as zero.
- Compare how your Merchandising Agent would answer the same brief under different configurations on the new Merchandising Simulator page — without changing anything live. A simulation starts from a scenario (a sample brief, one you wrote, or one a buyer sent you) and runs your baseline plus up to three variants — a different negotiation posture, price adjustment, rate card, or bundle rules — through the same engine that answers real briefs. Each card shows the products offered and their CPMs, and every variant states its delta against the baseline: how many products moved, exactly which ones dropped or joined, and the price change. When a variant produces no offer (an acceptance-policy decline, for example), its card says why. Run every variant with one action; results are saved, so you can come back to them any time. A simulation shows what your agent would offer, not how a buyer would respond, and it never changes your live configuration.
- Meta ad platform connections now automatically extend their access token before it expires. Previously, Meta tokens silently expired after 60 days and required a manual reconnect from Settings > Connections; the background credential health sweep now extends them in place, keeping delegated workflows running uninterrupted.
- A
create_media_buycall that used to return 200 for a targeting dimension a - platform doesn’t apply may now return 400 — check your error handling for
UNSUPPORTED_TARGETING_DIMENSION.- Each ad platform applies only a handful of AdCP’s 28 targeting dimensions. Until
- now, a dimension a platform didn’t implement was accepted and silently dropped:
- the call succeeded and the campaign delivered without it, with nothing telling
- you the targeting never applied. If you set targeting that a platform didn’t
- support, those campaigns reached a broader audience than you asked for, and the
- spend went with them. Those requests are now rejected before the platform is
- called, so no campaign is created.
get_adcp_capabilitiesis also corrected. Some platforms had declared targeting- they never implemented — Spotify’s audience include/exclude, Amazon’s
geo_countries, and Google Ads’geo_countries,geo_regions,keyword_targets, andnegative_keywords.media_buy.execution.targetingnow- lists only what a platform applies, so a platform you use may list fewer
- dimensions than before, or refuse a request that used to appear to succeed.
- Either way, that targeting was never reaching the platform.
- Changing targeting on an existing buy is separate and still narrower. Snap now
- supports geography changes on
update_media_buy— previously it accepted them - and silently discarded them — joining Meta. TikTok, Reddit, Spotify, Pinterest
- and LinkedIn continue to refuse any targeting change on update; create a new
- media buy instead. See the connect guide for the per-platform table.
- Pause, update, and cancel now keep using the connected ad account’s delegated
- credentials after a buyer creates a campaign through an internal social-adapter
- storefront. This prevents lifecycle actions from incorrectly asking for a new
- OAuth authorization or losing the provider campaign while canceling it.
- Operator-domain verification now accepts owner-registered brand records as ownership evidence. If you registered your brand through the AAO registry API rather than publishing
/.well-known/brand.jsonfor the crawler to find, that record previously did not count toward verifying an alias or rebrand operator domain, even though records contributed by third parties did. Registering the record yourself is stronger evidence than a third-party contribution, and it is now treated that way. - Brandfetch-enriched records are still refused: they describe a brand but assert nothing about who owns or operates a domain.
4.139.0 — July 29, 2026 at 2:41 AM UTC
- Product discovery no longer slows down as a storefront accumulates inventory sources. A storefront with hundreds of sources could previously exceed the discovery time limit and fail
get_products; its catalog is now read in a fixed number of queries regardless of how many sources it has. - Fix CANCELED campaigns displaying incorrectly as DRAFT in the Campaigns view.
- The button that adds a modular source now matches the task it opens. Seller Setup still said “Add feed-backed source” while the task it launches is called “Add a modular source” — the same mismatch in Portuguese and Japanese. The docs and Murph now use one name for these surfaces too.
- Several seller widgets now scroll within a fixed height instead of growing unbounded, so long content no longer cuts off or blocks what renders below it: Sales-agent health, Ad server source, Demo storefront, Avails commit, and Get ready to sell setup.
- Nothing changes for accounts that are already live. No existing contract can enter the state below.
- When Scope3 sets up a new organization on standard terms, an admin at that organization now accepts the Terms of Service. Scope3 provisions the account and no longer records acceptance on your behalf.
- Until an admin accepts,
get_billing_accountreportsplan.contractStatus: "awaiting_acceptance"with anextActionof typeACCEPT_TOS, and endpoints that require an active contract return 403. That action carries the route and tool that resolve it —POST /api/v2/accept-tosandaccept_tos— so read it rather than hardcoding either. The endpoint is unchanged. In Interchange, the same acceptance appears as “Accept the platform terms” on Plan & Billing. - Acceptance claims the contract Scope3 provisioned instead of creating a new one, so a rate card negotiated at setup stays in force once your admin accepts.
- Accounts that inherit their organization’s contract cannot accept for themselves;
accept_tosreturns 403 for them. One admin on the organization accepts, and its accounts are unblocked, rather than transacting on terms nobody agreed to. - If someone at your organization is set up but blocked, the person who needs to accept is an admin on the organization itself.
- Turning off review for creative submissions or media buys (setting
creativeApprovalormediaBuyApprovaltoauto) now requires an explicit acknowledgement: passacknowledgeNoHumanReview: truewhen callingset_approval_settingsorupdate_storefront, or check the confirmation box on the Selling Terms Page. Inauto, nobody reviews the item, and for media buys your Acceptance Policy is not consulted at all. Tightening back tomanual, or saving a setting that is alreadyauto, needs no confirmation. - Buyers can continue creating and managing campaigns through the existing product discovery and media-buy APIs; no action is required for integrations already using those APIs. The never-enabled connected-account create, update, plan, and accept routes are removed and now reject requests, so any integration attempting to use them must move to the buyer APIs. Connected-account subscriptions remain available for read-only campaign mirroring, refresh, and delivery views. Seller storefront presentation and ranking are unchanged.
- Media buys running on a source that reports a day’s delivery as a single total, rather than a day-by-day breakdown, now show that delivery in reporting. Previously it was discarded, so those buys reported no delivery at all even while they were serving.
- Delivery for a day that is still in progress is now included too, and refreshes as the day continues.
- Sellers see the same delivery reflected in their realized cost basis, which previously stayed empty for these sources.
- Storefront readiness now tells you why an operator domain is pending verification, and who has the next action. Previously every cause produced the same “pending verification” message, which listed all the possibilities and often said the blocker was waiting on Scope3 review even when the action was yours.
- You now see one of four specific outcomes: your account domain needs ownership approval before alias evidence is checked at all; your account has no registered domain yet; published AAO or brand.json evidence does not link your operator domain to your account domain; or Scope3’s evidence check did not complete, in which case Scope3 owns the retry and no action is needed from you. Murph reports the same cause and owner as the readiness check rather than defaulting to “waiting on Scope3 review”.
- A check that fails to complete is no longer reported as missing or invalid evidence, so you will not be sent to fix evidence that is already correct.
4.138.0 — July 28, 2026 at 9:02 PM UTC
- Buyer agents can keep their existing
get_products,create_media_buy, and update_media_buycalls. When a request includes a linked storefront account,- the storefront now routes each inventory source with only the account identifier
- the seller assigned to that source.
- Before an inventory source is contacted, the storefront confirms that the buyer
- grant is active and that the source has one current, unambiguous mapping. An
- inactive grant or a missing, ambiguous, or stale mapping fails closed for that
- source; buyer agents should continue handling standard AdCP errors.
- Sellers must repair an affected mapping before the buyer retries. This release
- does not add a seller setup screen, and it does not change pricing, billing,
- calls without a linked storefront account, or legacy natural-key accounts.
- Account-specific media-buy history, reporting, audiences, and event sources are
- not included in this release.
- Eligible buyers can now create an Interchange organization when buyer admission is open and choose whether to start in the app, build with the API, or connect an assistant. An organization invitation bypasses the public signup waitlist and joins the recipient to that specific organization; it is not a reusable or storefront-scoped admission link.
- Buyer admission remains controlled by the
alpha-opt-inrollout. When admission is closed, brand-new advertiser signups continue to see the waitlist. - The buyer-agent activation contract now also defines staged benchmark evidence and measurement for evaluation, customer claim, storefront-neutral transaction readiness, and the first governed buy.
-
Who notices what
- SMB and first-time buyers: an admitted signup continues into organization creation and then shows one plain-language choice for where to begin. A closed signup still ends at the waitlist; no technical action is required.
- Enterprise brand and agency buyers: an organization-scoped invitation remains the governed way to join the intended organization without entering the public waitlist. It grants no access to any other organization or seller.
- Builders and power buyers: the starting choice names the app, API, and connected-assistant paths explicitly. Choosing one does not remove the other two.
- Sellers: not applicable. This changes buyer admission and the buyer’s starting surface; it does not change seller ranking, storefront presentation, inventory labels, or seller setup.
-
Monetization
- None in this slice. Creating a buyer organization and choosing a starting path does not select a paid plan, activate a billable feature, or change media settlement. Existing route-specific billing and any later account-activation pricing remain unchanged.
-
Measurement and acceptance
- The four Chromium scenarios are the release acceptance gate: closed signup reaches the waitlist, open signup reaches verification, an organization invitation bypasses only the public waitlist, and an admitted buyer reaches the three-path starting choice. The UI emits
activation:choice_shown,activation:door_chosen, andactivation:choice_deferredas product-analytics projections. - The server-owned KPI contract names
activation_started,buyer_signup_completed,activation_door_chosen,first_authenticated_call,customer_claimed,storefront_ready, andfirst_governed_buy. Zero-touch activation requiresfirst_authenticated_callwith noscope3_operatorintervention between it andactivation_started; time-to-first-call is measured fromactivation_startedfor agent-first journeys orbuyer_signup_completedfor human-first journeys. These KPIs are not claimed from browser analytics alone: they become reportable only from the durable activation stream defined in AI-2900. - You can run each saved Simulator alternative against the seller settings captured with the scenario, then compare the resulting decisions without affecting buyers or live analytics. Every attempt remains available for review, with up to 25 attempts per alternative and 100 per scenario. No action is required in your live setup.
- Fix multi-size image package format IDs sending as
display_image:None×Noneon creative update and re-sync paths. The update path now resolves the correct sized format ID (e.g.display_970x250_image) using manifest asset dimensions, matching the behavior on initial execution. - Setting or rotating a sales-agent source’s credentials is clearer and safer:
- credential fields stay masked and no longer trigger browser autofill or
- password-manager save prompts, replacing an existing credential says so up front
- (and never shows the old value), and the “credentials saved” confirmation is now
- legible in dark mode. Nothing to change on your side.
- Managing your storefront’s buyers is clearer and safer. Disabling an invite
- link now asks you to confirm and tells you exactly what happens — buyers who
- already joined keep their access, and anyone still holding the old link can no
- longer use it. Minting, copying, and disabling a link show progress while they
- run and confirm when they’re done, so you always see the result. Buyer statuses
- read in plain traffic-light color (a suspended buyer is no longer flagged like
- an error), and when you have no buyers yet the screen coaches you to share your
- invite link instead of showing an empty table.
agentPersonalityon your business profile is deprecated. An agent does not have a personality of its own — the voice buyers hear is your brand’s voice, read from your brand manifest’stonealongside your logo, colours and tagline. Nothing ever consumed the field, so nothing changes in how your storefront sounds; it stays writable only so you can clear an old value, and we have stopped showing it in examples.- Your pricing facts now accept the AdCP pricing models —
cpm,vcpm,cpc,cpcv,cpv,cpp,cpa,flat_rate,time— and nothing else, and the Selling Terms page offers them as a list instead of a free-text box. Previously it took any text: you could type a shape we cannot transact, it looked saved, and everything downstream quietly ignored it. If your price list has a shape that isn’t in that set — share of voice, a day-part premium — that is worth telling us rather than working around, because it means we cannot yet model something you sell. Nothing you have already saved is affected, andcpmremains the default when you don’t say. - There is also a new page explaining merchandising end to end: the four surfaces that steer how your storefront sells — selling terms, approval settings, acceptance policy, and merchandising rules — which fact each one owns, why a rules version that restates a price is rejected, and what actually changes the moment you save. It spells out the two things sellers most often conflate: your acceptance policy says what is acceptable, your approval setting says whether a human reviews, and in
automode the policy is not consulted at all. - A modular inventory source now shows its pipeline: every lifecycle stage in the order a booking moves through them, whether each one runs automatically or waits for a person, how many tasks are open on it, and when the module behind it was last checked. Stages nothing on your source handles are listed too, saying which gap they are — a stage with no module of the right kind reads differently from one whose module doesn’t cover it, because the fix is different. This replaces the separate readiness and modules panels, which between them said the same thing twice and never said how a stage actually works.
- Webhook URLs must now be directly reachable public HTTPS endpoints. Sellers
- registering partner-agent URLs and buyers configuring storefront callbacks
- should update any URL that uses HTTP, resolves privately, or redirects.
- Sellers receive a validation error when registering an incompatible URL, and
- unsafe buyer callback destinations are not called. Nothing changes for existing
- public HTTPS endpoints.
4.137.0 — July 28, 2026 at 6:30 PM UTC
- You can save a buyer brief and up to three private merchandising alternatives without changing how your live agent sells. Simulator work stays out of live brief history, analytics, learning, and commercial results. Nothing changes on your side until you choose to create a scenario.
- Your Property Roster now holds every property your publishers declare, and answers at the level you ask at.
- Large networks were silently capped at 5,000 properties per domain. A domain declaring 6,843 sites kept 5,000, the rest were never recorded, and asking your agent whether a site was covered could come back “no” for a site you do sell. Every declared property and collection is now stored, however many there are. Each domain also carries
propertyCountandcollectionCount— how many it actually has, which can exceed what a single response returns — and the response carries atruncatedobject naming any part it left out.totalsdescribes your storefront rather than the response, so if you compared the resolved-property count on your publisher list against your roster and the numbers disagreed, they now agree. - Every property carries its own
authorization. Readgrainalongsidestatus: a negative is definite, because a publisher domain that does not authorize your agent authorizes nothing beneath it; a positive is inherited from the domain rather than proven against the exact selector the publisher bound your agent to. A property you declared yourself, or one under a domain whose last check did not complete, readsunknownrather than claiming to be sellable. - A domain that serves something unreadable at
/.well-known/adagents.jsonnow says so instead of reporting that no file exists.adagentsStatusgainsinvalid— a document is published there and is not a usableadagents.json, commonly an HTML page or a redirect.no_adagentsnow means only what it says. The remediation differs: fix the file you have, rather than publish a second one. - Property key-values are reachable from your agent.
get_property_mappingsreturns the current bindings andreplace_property_mappingsreplaces them; preview first withparams: { dry_run: "true" }and a body of just{ mappings }, and the preview reports which rows mapped, which did not and why, and whether each key-value and ad-server selector exists in your ad server. - Finally, a storefront that sells through a platform account connection is no longer told to publish an
adagents.json. Those storefronts get selling rights from the connection, noadagents.jsonwill ever resolve, and the roster, readiness checklist and your agent now all say the authorization verdict does not apply rather than showing a permanent failure. - Audience-targeted buys forwarded to a Scope3-hosted sales agent now carry the package-ID key-value on the ad server line item. Previously the key-value was omitted for these sources, so the line item was less restrictive than the campaign’s audience targeting intended and could serve on ad requests carrying no identity-match signal.
- Buyers: audience-targeted campaigns on these sources now deliver only against the audience you specified.
- Sellers: for products you declare as identity-matching, line items created on your ad server now carry the package key-value and target more selectively than before. Expect tighter, better-qualified delivery on those line items.
- Your saved Simulator scenario now uses the same selling logic as live demand while keeping the captured brief, inventory, rules, and pricing frozen. Existing scenarios need no action and still cannot change live seller settings.
- The three source surfaces now use the name the documentation already uses: a modular inventory source. They previously said “feed-backed source,” which named a source after one of its modules — a modular source can just as easily carry an ad-server or human module, and every one already has a booking ledger alongside its avails feed. Nothing about how a source works has changed: the workspace, the add-source task, and the avails upload all behave exactly as before.
- Managed ad-server inventory now preserves canonical creative format details through order creation, preventing valid fixed-size image packages from being rejected by a lossy legacy ID. Scope3’s buyer path is already migrated, so sellers do not need to change their ad-server setup and buyers do not need to change how they create media buys. FreeWheel capability checks also resume automatically after vendor permissions recover, including before the first media buy.
- Approving a wholesale pricing upload now actually commits it. Previously, if you attached your pricing file and then approved the upload on a later message — the normal way an approval works — the commit could not read the attached file back and stored nothing, while the retry reported the upload as complete. Sellers who uploaded the same feed repeatedly were told each time that it was live when no rows had been saved. Approved uploads now read the file from where it was stored when you attached it, so the commit lands regardless of how many messages passed between attaching and approving. If the file genuinely cannot be read, the upload now says so and asks you to re-attach it rather than reporting success.
- More generally, any action that needs your approval no longer claims to have happened when it failed. An approved action that errors is now reported as not done, so you are asked to review and approve it again instead of being told a change was saved that never was. A successful approved action is still applied only once.
4.136.0 — July 28, 2026 at 2:39 PM UTC
- EUR buyers can now add products from USD-priced adapter storefronts (Meta Ads, Google Ads) to campaigns without a CURRENCY_MISMATCH error. FX conversion is applied at execution time when the buyer-to-seller currency pair is supported by marketplace FX.
- Inventory source tests now run against the exact product you selected during planning. Previously a test could fail to build a campaign when the selected product fell outside the top slice of discovery results, even though the source could sell it.
- Buying accounts are now identified consistently to sellers. Every step of a campaign (product discovery, account setup, booking, updates, cancellations, and delivery reporting) now sends the same buying organization for a given advertiser, so a seller opens and bills one account per buyer instead of several. Previously the identity varied by step, and on updates and cancellations it was taken from whoever was signed in, which could present the same buy under two different buyers.
- Buyers who have not recorded their own company domain are identified as operating through Interchange. Record your company domain in account settings to be identified under your own organization instead.
- If you have not recorded a company domain, the name your sellers see for you changes with this release. Sellers who create accounts on first contact will open a new one for you on your next request, and campaigns you have already booked stay on the account they were booked under. Nothing stops delivering and no reporting is lost, but for a short period the same seller may show you two accounts. Recording your company domain later has the same effect once more, so it is worth doing before your next campaign rather than during one.
- The Creative Assets dashboard now shows platform-specific ad formats (such as Meta image and video feed formats) in the format selector when creating or uploading a creative for campaigns that include Meta products.
- Opening a feed-backed source in Murph now tells you whether it can sell before anything else: live or in setup, how many avails it holds, and the single next step. Lifecycle stages, the modules behind them, and the work waiting on a person sit below that. Adding a source is now its own task with three fields — a name, where its avails come from, and how often they arrive — replacing eight more that had no effect on how the source ran. Uploading avails is a separate task that still previews before it commits, and the result now names the rows that were rejected alongside the ones that landed, so you can fix the export and upload again. Nothing is offered to buyers until you commit avails rows. Sources you already created keep working, and half-finished setup resumes where you left it.
- When you call
add_discovery_productsafter a prior execution,execute_campaignnow warns you that the pending media buys no longer reflect your current discovery selection. Previously, the tool retried the stale state silently. The warning returns the affected media buy IDs and ahintfield with the recovery path. - To apply the current selection and execute in one step, call
create_media_buyswithreplace: trueandmode: "execute". - Sellers: not applicable — this change is buyer-side only and does not affect seller-visible storefront ranking, rendering, or labeling.
- Fixed a bug where running a test campaign against an inventory source that requires authentication would silently return zero products instead of testing the source correctly.
- Flight dates now read the same wherever you are. A campaign or media-buy flight was formatted in the reader’s own timezone, so a window that starts on 1 January showed as “Dec 31” for anyone west of UTC — whether the date arrived as a calendar date or as the instant that day begins. A flight bound names a day, and is now shown as that day.
- Fixed an issue where a media buy package containing multiple image creatives of different sizes (e.g. 970×250 and 728×90) sent a generic
display_imageformat ID to the sales agent instead of the correct sized format ID for each creative. The sales agent can now route each creative to the correct sized placement. - Fixed Murph telling you a report had not been filed after it was successfully filed. Asking for help through the Scope3 team now confirms the filing correctly, with its reference, instead of offering to file it a second time.
- The IU plan selection surface now formats prices, discounts, and dates for your
- account’s language and time zone, and the “pricing changed while you were
- reviewing it” notice reads as a calm heads-up that stays legible in dark mode —
- never a red alarm. Your confirmation is still bound to the exact offer you saw:
- a superseded price is refused cleanly and shown again for a fresh confirmation.
- Read the brief your Merchandising Agent answered as a business document. A proposal pass opens on the advertiser, who it came through, and the buyer’s ask in their own words — then budget, flight, markets, channels, how they want to transact, and how long you have to respond. Their requirements read as sentences: placements, exclusivity, policies, the metrics they expect back, performance standards, and approved property lists and catalogs by name. Anything the buyer did not send is simply absent. The exact request, its identity, and its capture evidence sit under Technical details.
- See the proposal your Merchandising Agent sent, as the pitch it is. A pass leads with the plan’s name, its scale, and its argument for the brief, then one line per product with its price and its share of the plan. Expand a product for why it is in the plan, every pricing option offered and where your selection sat against market guidance, where it runs, who it reaches, and what it reports. When the buyer committed a single exact budget, each share also reads as money. The exact response and its capture evidence sit under Technical details.
- Fixed storefront inventory-source callbacks rejecting RFC 9421 signatures. The sales-agent and storefront-catalog callbacks already accepted them; the inventory-source rail did not, so a source signing to current AdCP defaults had every delivery rejected with a 401 even though its signature was valid.
- All three inbound rails now verify RFC 9421 HTTP Message Signatures as well as HMAC-SHA256, which AdCP deprecates and removes in 4.0.
- If your source was already signing with RFC 9421 and getting 401s, it should start being accepted with no change on your side. If you want to move a source off HMAC, publish a
jwks_uriin theagents[]entry of yourbrand.jsonand sendSignatureandSignature-Inputon each delivery; HMAC keeps working until you do. - Two details to check when you switch: sign the
@target-urias the callback URL we registered with you (we verify against that, not the inboundHostheader), and always send both RFC 9421 headers, since a loneSignatureis rejected rather than quietly falling back to HMAC.
4.135.0 — July 28, 2026 at 11:10 AM UTC
- Creative requests for AudioStack now use the standard
audio_hostedformat and duration parameters, with no agent URL or separate AudioStack catalog. Meta, Pinterest, and Snapchat validate publisher format options against their registry declarations, while Figma frame names remain tenant-local build settings. Retailers using CitrusAd or Criteo own their catalog entries under their retailer domains. Buyers sending legacy agent-URL selectors to AudioStack or Figma must switch to these canonical fields. - Authoring buyer discounts is clearer end to end. When you add, edit, or remove a rate-card discount, the Save button now shows an in-flight state and the widget confirms exactly what applies afterward (“Added a 15% brand discount on nike.com, off wholesale”). If the server rejects a save, you get a plain notice that the change did not take and nothing changed — never a silent no-op. Percentages format for your locale, and a failed initial load now offers an in-place retry. Discount pricing rules are unchanged: brand and operator, the larger discount wins, always floored at your wholesale cost.
- Source health no longer reports missing advertisers for ad servers that do not run an advertiser sync. Only Google Ad Manager syncs an advertiser roster; on FreeWheel, SpringServe, and AdsWizz sources that check now stays quiet instead of asking you to grant advertiser access your ad server never uses.
4.134.0 — July 28, 2026 at 8:04 AM UTC
- Meta product discovery now surfaces exactly one product per Meta campaign objective. “Meta Conversions Campaign” is renamed to “Meta Sales Campaign” to match Meta Ads Manager’s current UI. The “Meta Video Views Campaign” and “Meta Reels Campaign” options are removed — briefs mentioning video views or reels now route to the Engagement and Awareness objectives respectively.
- Source health no longer tells you your ad server has withheld reporting or forecasting access when we have never actually been able to check. The diagnosis now reports what Interchange observes, and names the date of the last completed check, so a result from days ago is not presented as today’s status.
- Advertiser-visibility warnings now name your own ad server. A FreeWheel, SpringServe, or AdsWizz source no longer tells you to go check a Google Ad Manager service account.
- Embedded storefront offers now appear as sellers configured them: full creative requirements are preserved, and guaranteed and non-guaranteed fixed-price offers no longer look identical. Buyers get the intended format and price without changing how they discover or select products.
- No seller or current buyer-integration changes are required. Existing package and pricing configuration remains valid. If an older buyer retries a previously cached price identifier that matched more than one offer, the request now returns an error instead of risking the wrong price; refresh the product list and retry with the returned identifier. Older identifiers that match one offer continue to work. Storefront lifecycle, previews, and status behavior are unchanged.
- Buyers enrolled in the directed-campaigns alpha can now read the platform-reported audiences and event sources tracked on a connected seller account with
GET /storefront-connections/{connectionId}/accounts/{accountId}/presences(or thelist_storefront_connection_account_presencesoperation). The response is read-only and reference-only: identity, sync status, and row/event counts for each object — never member lists or event payloads. Objects the seller discovered on its own have no buyer-level master until explicitly adopted; objects already pushed from your account carry their audience or event source ID.
4.133.0 — July 28, 2026 at 1:18 AM UTC
- You can now book Meta Lead Generation campaigns through the API, MCP tools, and the Murph assistant. When a respondent taps your ad, they complete a Meta Instant Form — pre-populated from their Facebook profile — without leaving Facebook or Instagram.
- To book a Leads campaign, provide the
lead_form_idof an Instant Form authorized on your Meta ad account. If you omit the field, the API returns the authorized list so you can select the correct form. Leads campaigns useLOWEST_COST_WITHOUT_CAPbid strategy, so no bid price is needed. Spend is billed directly through your connected Meta ad account at Meta’s standard delivery rates — no additional platform fee applies beyond your existing Meta connection. - App Installs (Meta App Promotion) are not yet supported; this release covers Leads only.
- The Demo Storefront now reads honestly across its whole life. A live demo shows
- a green status with the days remaining; one that is close to expiring turns
- yellow; and an expired demo shows a calm gray “Expired” state that explains the
- seven-day demo ended on its own and coaches the next step — connect a real
- inventory source or ask an admin to provision a fresh demo. Resetting or
- deleting a demo now confirms exactly what is affected (synthetic demo data only,
- never your account or real members), shows a progress label while it runs, and
- leaves a visible result. Dates follow your workspace locale and time zone.
- When you create a signal component from your ad server’s targeting, the Signal
- components workspace now tells you where the component went — it appears under
- Signal components — and how to change course (rename, reprice, or remove it),
- instead of just saying “created.” Your ad server’s own segment, key, and value
- names and ids always display exactly as your ad server reports them.
- Seller dashboards now load for active and paused storefronts. The dashboard had continued validating retired storefront lifecycle labels after the API moved to the canonical pause-state contract, so it rejected otherwise successful analytics responses and showed a generic loading error.
- Storefront test-campaign plans no longer show source-catalog pricing option IDs that execution cannot accept. Pricing summaries still show the option name, rate, and currency; omit
pricingOptionIdto let execution select the buyer-facing option. - The standard plan sizes, the break-even points, the calculator and the worked examples are now all on one page — How IU billing works — instead of the table being repeated on the Organization IU Rate Card page. That page now points to it and stays on its own subject: the Effective Rate Card that binds your organization.
- Two protections moved with the table, onto the page that carries the numbers: the standard list is not everyone’s price, and prices are published per currency rather than converted from USD. Nothing about the figures themselves changed.
- Buyer account requests to a hosted storefront now wait for the seller’s decision when no approved relationship exists.
sync_accountsreturns a submitted task and an account withpending_approvalstatus instead of presenting an unreviewed account as active; buyers can poll that task or calllist_accountsto see the current result. The account can then be linked to an existing billing relationship, routed through Interchange, sent through onboarding, or rejected. This release adds the account lifecycle and audit history, but not the seller management page, CRM import, or ad-server account-mapping feed.
4.132.0 — July 28, 2026 at 12:13 AM UTC
- The activities under calibration now read the same way on the Rate Card page and in Plan & Billing. Two the page listed — proposal evaluation pass and comparative proposal ranking pass — were missing from the product’s list, and multi-seller product ranking was in the product’s list but missing from the page. All three now appear in both.
- One correction worth naming: Plan & Billing described a Murph working session as priced “per five working sessions” while showing its rate as 1 IU. The rate was right and the description was stale. A Murph working session is 1 IU, and the description now says so.
- Nothing about what you are charged changes. These activities are shown for planning, are not part of an accepted Rate Card, and cannot draw down your IU balance.
- Documented the signing contract for async task webhooks that sales agents and inventory sources push back to Interchange. Signing the webhooks you send us covers where the signing key comes from (the
authentication.credentialsvalue in thepush_notification_configwe send on each call), the exact signed message, thesha256=prefix, the timestamp format and skew window, reference implementations in Node, Python, and Go, and a troubleshooting guide for a rejected delivery. - This contract was previously unpublished, and the only webhook signing scheme in our docs was the buyer subscription scheme, which is different and incompatible. Both pages now cross-reference each other so the two cannot be confused.
- Action may be required if you hand-rolled your signer. Signature validation is now stricter and rejects three malformed shapes that could previously slip through: a duplicated
X-ADCP-SignatureorX-ADCP-Timestampheader (send each exactly once), a signature that is not exactlysha256=followed by 64 lowercase hex characters, and a timestamp containing anything other than digits. If you sign with the official@adcp/sdkwebhook emitter you are unaffected. If you built your own, check it against the reference implementations on the new page before this release reaches you. fee_rate_percentin the media buy budget breakdown now consistently reports the fee as a percentage of the media budget (fee / media × 100), regardless of how the rate was stored. Previously, some buys showed the gross-basis rate (fee / all-in total) and others showed the net-basis rate depending on when and how the terms were set, producing different numbers for the same underlying fee on the same advertiser.- LinkedIn seller-managed campaigns can now target states and regions: pass ISO 3166-2 codes such as
AU-NSWingeo_regions, and Interchange resolves each code to its matching LinkedIn location before the campaign is created. Country-only targeting behaves exactly as it did, campaigns you already created keep their targeting, and only new creates use the new behavior. Geo targeting is state the campaign declares: if a package requests both a region and its parent country (geo_countries: ["AU"]withgeo_regions: ["AU-NSW"]), New South Wales delivers — Australia as a whole does not. Any other countries requested in that package still deliver. If LinkedIn can’t resolve exactly one match for a requested region, the request fails before a campaign is created. Nothing else to change on your side. Region targeting is set when the campaign is created and can’t be changed afterward — targeting a different region means creating a new campaign. - Meta media buys can now change or remove region targeting on update, not just at creation. The
geo_countries/geo_regionsyou send on an update become the complete targeting for that package, replacing what was there rather than merging with it. Clear a region (or leavegeo_regionsoff the update) and the package reverts to full-country delivery; add one and it takes effect on that same update — no need to recreate the media buy. Other countries in the same package keep delivering as before. An unresolvable or ambiguous region is rejected before anything changes, so a bad update never leaves a media buy partially retargeted. - Sellers whose managed ad-server connection was created before the sandbox test account carried an ad-server advertiser can now run a sandbox test campaign.
- Preparing the sandbox account reported the account as not ready and stopped there, because it only ever set up an account that did not exist yet. Connections made before the sales agent started creating the sandbox advertiser therefore stayed blocked at test-campaign validation, and the storefront could not be opened for transactions. Preparing the account now completes the setup of the existing one instead of reporting it as unusable.
- Connections made since then were already set up correctly and are unchanged.
- Snap media buys placed through Interchange can now target specific states, provinces, and other ISO 3166-2 regions (for example AU-NSW or AU-VIC), not just whole countries. Set
targeting_overlay.geo_regionson a Snap package the same way you already do for Meta: Interchange matches each region code against Snap’s region list and attaches the matching native region ID before creating the campaign. Region and postal-code targeting can’t be combined on one package — send one or the other. If a region code can’t be matched (missing, ambiguous, or duplicated), the request fails before Snap creates anything, so you see the error immediately instead of an under-targeted campaign. Existing country-only Snap campaigns are unaffected; nothing changes on your side unless you start setting region-level targeting. You set region targeting when you create the media buy; to target a different region, create a new one. - Hand your Merchandising Agent a brief without leaving chat. When a brief reaches you as a document (an RFP, a spreadsheet, a forwarded agency email), drop it into the composer. Your agent reads it, shows you the brief it recognized, and waits for you to confirm — nothing is saved or run until you do. If you drop a media kit, your agent also tells you in chat which of its claims your storefront can and can’t back yet. On confirmation, your agent works the brief the same way it works a live buyer’s brief, finding matching products and composing a proposal, then lands it in your Demand inbox marked as uploaded so it never reads as live buyer demand. Review it the way you would any incoming brief. Available once the Demand inbox is on for your storefront.
4.131.0 — July 27, 2026 at 6:18 PM UTC
- Activating a connected social account now draws IUs from your organization’s wallet for each account-month, at the price on your accepted Rate Card — 4 IUs per account-month on the standard card. Your balance goes down, and the usage appears on Settings → Plan & Billing → Usage & credits. No money is charged for it: charging is switched on per organization, never silently, and it is still off. Connecting and mapping accounts stay free, and there is nothing to change on your side.
- While charging is off, account-months past your included allowance accrue as overage you can see but are not billed for. If usage billing is later switched on, overage still accruing in the open period becomes chargeable.
- Each metered account-month records the accepted Rate Card version that priced it. A change to the standard count cannot reprice a month already metered, and it reaches you only through a successor Rate Card you accept.
- Marketplace and buyer storefront responses now distinguish whether a seller is
- available to buy from from whether buyer credentials are connected. Buyers get
- an accurate availability label and a readiness field for integrations; sellers
- using a pass-through sales agent are presented as buyable without an
- Interchange wholesale catalog. No setup or buying-workflow change is required.
- A failing MCP tool now reports its actual error. Tools that declare an output schema returned their ADCP error envelope —
code,message,suggestion— instructuredContent, but that schema described only the success shape. Because an MCP client validatesstructuredContentagainst it on every call, the client rejected the error envelope and raisedStructured content does not match the tool's output schema, hiding the real reason the call failed and the guidance for recovering from it. Each tool’s output schema now declares both outcomes, so the error reaches you intact. Affectsget_products,create_media_buys,update_media_buy,api_call,list_buyer_activity, and the storefront and operator tools that declare output schemas. - Spotify media buys now resolve ISO region and state targeting to provider-native geographic identifiers and reject unsupported targeting before creating provider entities. Region targeting is set when the media buy is created and can’t be changed afterward — targeting different regions means creating a new media buy.
searchon/mcp/v3now covers the documentation as well as your own objects, and searches all three sources by default:objects,docs, andspecs.- Asking “which of my sources are failing” and asking “what does authorization actually mean” are the same question at two altitudes, so they are the same tool. An agent doesn’t have to guess whether the answer is a record in your account or a paragraph in the docs. It asks, and gets whichever it is. Every documentation result carries a link, so an answer can be checked rather than taken on trust.
docsis the Interchange documentation for what this platform does;specsis the AdCP protocol spec for what the protocol defines. They are reported separately, because “the protocol allows this” and “we support this” are not the same claim.- The object half is storefront-scoped and today covers inventory sources; a buyer account gets the documentation results and an explicit note that objects were not searched.
/mcp/v3is behind a feature flag with nobody enrolled yet. Nothing on/mcp/v2changes.
4.130.0 — July 27, 2026 at 5:09 PM UTC
- When a storefront returns no products and says why, buyers now see the reason. Storefronts hosted on Interchange are dispatched in-process, and that path rebuilt the response envelope from
productsandproposalsalone — discarding the storefront’s ownmessage. A storefront that declined to sell (“This storefront is blocked and cannot transact”) reached the buyer asstatus: completed, product_count: 0with no explanation, indistinguishable from a storefront that simply had nothing to offer. The message now travels with the response and appears on the matchingext.interchange.storefront_results[]entry, as it always has for storefronts reached over the network. - Setting up a feed-backed inventory source now reads more clearly. Readiness and setup steps stay neutral while a source is still being set up — in-progress work is no longer shown in an alarm color — and the Create, Preview, Commit, and Complete buttons show progress and can’t be triggered twice while a change is running. A partially set-up source stays in a recoverable state you can resume or remove, and dates follow your locale and time zone.
- You can now pause and reactivate a single media buy without touching the rest of its campaign. Before this, pausing a campaign paused every media buy inside it; there was no way to bring back just one.
- Call
pause_media_buyorreactivate_media_buy(orPOST /api/v2/buyer/media-buys/:id/pauseand.../reactivate) with a media buy ID, and only that buy changes state — its campaign and sibling media buys keep running exactly as they were. - A paused media buy still accepts budget, date, and package updates the same way an active one does, and those updates still reach the seller. Approving an update never resumes a paused buy — reactivating is the only way to bring it back to
ACTIVE.
4.129.0 — July 27, 2026 at 3:33 PM UTC
- Fixed a bug where re-authenticating a Snap account caused the next
discover_productscall to fail with “Buyer has not connected snap for this storefront”. The error appeared immediately after re-auth and resolved on retry. TikTok and Meta were not affected. - Your merchandising rules stay between you and your Merchandising Agent. Until now, a brief your storefront could not fill sent the agent’s internal notes to the buyer’s agent: your rule text quoted word for word, the ids of the components it ruled out, and which of your signal sources were not live. Buyers now get copy written for them — no products matched this brief, and how to broaden it. Nothing to change on your side.
- For buyers’ agents the contract is unchanged: a brief a storefront cannot fill still comes back as
INVALID_REQUESTwithreason: no_compositions, carrying either the neutral line or the seller’s own wording. Nothing to change there either. - Whether a buyer hears the reason is now your call. Write the rule into your merchandising rules in your own words: “when we decline because the budget is below our floor, tell the buyer their CPM is short of what we can sell this inventory for and invite a higher bid, without naming the floor.” Your Merchandising Agent makes that case in your voice, in a couple of sentences and within what you authorized; a decline that quotes your rulebook, names an internal id, or runs long is replaced with the neutral line. Say nothing about declines and nothing is disclosed. Your own candid account is unchanged on the intelligence run and its decision record, and running a brief past Murph now tells you which of the two a buyer would get.
- The Retry Forward task now shows its chrome in your own language, keeps buy ids and source error messages verbatim, and reads clearly in both its retry and re-send shapes.
- Meta Sales (OUTCOME_SALES) campaigns can now be created via the Scope3 API. To create a Sales campaign, provide a
pixel_id(a Meta Pixel or Dataset authorized on the ad account), abid_price(target cost per conversion in the account currency), and optionally aconversion_event(defaults toPURCHASE; supported values:PURCHASE,ADD_TO_CART,INITIATE_CHECKOUT,COMPLETE_REGISTRATION). The campaign is created withCOST_CAPbid strategy andOFFSITE_CONVERSIONSoptimization. Meta Sales campaigns also surface during product discovery when the brief mentions sales, conversions, or purchase objectives. No changes to existing campaign creation calls or other Meta campaign types. - The Property Roster now leads with the answer you came for — how many of your
- publisher domains need attention — and shows each domain’s authorization state
- in plain color: green when a domain is authorized to sell, amber when a
- published adagents.json needs a fix, and gray while a domain is still being
- checked or has no adagents.json yet (setup in progress is not a failure). Dates,
- counts, and every label now follow your workspace language and time zone, and
- long rosters keep that headline pinned while the list scrolls.
- The property roster now renders correctly in dark mode: labels, chips, and the attention banner keep readable contrast instead of falling back to light-theme colors.
4.127.0 — July 27, 2026 at 12:56 PM UTC
- When
POST /media-buy-approvals/{mediaBuyId}/retry-forwardrefuses a forced retry, the error now says which refusal it is indetails.reason. Two of them share400 VALIDATION_ERRORandfield: "forceTerminal"but call for opposite responses, and until now the only way to tell them apart was to read the English message: upstream_buy_exists— a source already has this buy. It reached the ad server; reconcile or cancel it there, and never force.details.sentLegCountsays how many legs.no_failed_route— no leg was ever recorded, so there is no evidence the forward went unsent. Usually a storefront-level precondition (paused storefront, unconfigured settlement currency, expired FX quote); fix that and have the buyer resubmit.not_approved— the entry is not approved, so there is nothing to re-send.details.statuscarries the actual state.- The status code, error code,
field, and messages are unchanged, so nothing you have written breaks. If you branch on this error, switch from matching the message to readingdetails.reason. - If your storefront’s status ever moves off green — live with an issue worth attention, or stopped because a promise to buyers broke — you now get a notification the moment it happens, with the reason and a link to fix it. You’ll hear about it getting worse too (attention escalating to stopped), and you’ll hear when it’s back to fully live. A storefront still in setup never triggers this — that’s expected, not a problem.
- Nothing to set up on your side. This is an operational alert: it always lands in your in-app notification feed and by email, and can’t be muted. Slack is the one exception — it posts there only if you’ve enabled this event type in your Slack configuration. Nothing changes for buyers.
4.126.0 — July 27, 2026 at 10:47 AM UTC
- Discovery now keeps products and proposals attached to the correct storefront when sellers expose the same upstream ID. Buyer teams get more reliable seller attribution across discovery, refinement, and media-buy setup, with no workflow change for chat or UI users. API and MCP integrations that already pass the top-level
product_idandproposal_idreturned by discovery back unchanged need no action. Integrations that reconstruct IDs fromsource_product_idorsource_proposal_idshould instead preserve the returnedsf1:orsfp1:ID; when a source ID is ambiguous, the API now returns a validation error so the client can re-run discovery and use the returned qualified ID. Sellers need no action: their inventory and proposals now remain labeled with their own storefront instead of being attributed to another seller when IDs collide. - Pending operations now offers a Re-send action on a media buy a source refused, instead of routing every terminalized buy to escalation. Re-sending keeps the buy’s ID and your approval — the buyer does not resubmit.
- The action appears only on buys that can actually be re-sent: a source has to have refused the buy after receiving no part of it. A buy that failed before any source was contacted — a paused storefront, an unconfigured settlement currency, an expired FX quote — still shows escalation, because there is nothing to re-send. Groups of failures offer the action only when every buy in the group qualifies.
- Failed-forward rows on
GET /pending-operationscarry a newactionvalue,force_retry, alongside the existingretry,fix_and_resubmit, andescalate. If you branch onaction, treat an unrecognized value the way you treatescalate. - Re-sending replays the original payload with only the end date refreshed, so check the flight window first: a buy re-sent days later carries its original start date and full budget over a shorter window.
- Open any Demand inbox row to see the whole exchange: the proposal pass. It shows the brief facts exactly as your buyer sent them, the products your agent proposed with each one’s plan allocation and price, a timeline of proposal versions, and the commercial result. Allocation money appears only when the buyer committed a definite budget, never computed against an open range, and prices come from the pricing option the plan actually selected. A won exchange shows its recorded value or says “not recorded” — never a guess — and a lost exchange shows the buyer’s stated budget as the demand you didn’t close. When a proposal was too old or too large to have been captured in full, the pass says so instead of guessing. Expand any product to inspect the exact recorded snapshot. Nothing to set up; it opens from the Demand inbox once that’s on for your storefront.
POST /media-buy-approvals/{mediaBuyId}/retry-forwardnow takes an optionalreason(up to 500 characters) recording why you re-sent a buy. It is worth supplying whenever you setforceTerminal, which overrides a terminal state in front of your ad server — the reason is recorded against the attempt, so whoever reviews it later can tell a considered recovery from a reflexive one.- Nothing is required and no existing call changes. A retry without a reason behaves exactly as before.
- Agents connected to
/mcp/v3get a new tool,save_ask, for the two things an account cannot resolve on its own: something is broken, or something does not exist. - A
supportask reaches the Scope3 team the same way a problem reported in Murph chat does, and returns a reference id to quote when you follow up. Aproductask records a capability we do not have; if someone already asked for it, yours joins that entry instead of creating a duplicate. Only the title is recorded on a product ask, so make the title carry the request. Tracking an ask is not a commitment to build it. save_askworks from any account, buyer or seller, and needs only read permission. Whoever runs into a wall is usually not whoever has permission to fix it.- Also on
/mcp/v3: structured responses over 200KB are now truncated. That is a backstop against pathological payloads, not a size to design against. /mcp/v3is behind a feature flag with nobody enrolled, so there is nothing to call yet. Nothing on/mcp/v2changes.
4.125.0 — July 27, 2026 at 7:51 AM UTC
- Buyers can now create TikTok carousel ads with 2–35 distinct square images in a chosen order. Interchange verifies that every image is available in the selected advertiser’s TikTok account, and the ad stays paused until TikTok returns every image in that same order.
- Your storefront has a new Demand inbox: one front-of-house ledger of every buyer brief your agent answered, the proposal it produced, the buyer’s feedback, and whether you won — with the money attached. Each row carries the buyer’s stated budget range from the brief, won rows show the booked or delivered value in its own currency, and a Booked YTD tile totals this year’s wins per currency. The metrics strip also shows briefs this year, how many you answered, your win rate (first responses only — the widget explains the count), your average grade, and how many briefs the agent led versus a human; filter the ledger by buyer from the header. Every number is drawn only from what actually happened — a metric with nothing recorded yet reads as unavailable rather than a misleading zero, and a brief captured before we started keeping canonical records shows “artifact unavailable” instead of a reconstruction. Nothing to set up; open it from the Demand row in your rail once it’s turned on for your storefront.
- Buyer MCP clients can fetch the tool list again.
get_productsdeclared an output schema that was not a JSON Schema object at the root, and because an MCP client validates the wholetools/listpage at once, that one tool made every tool on/mcp/v2/buyerdisappear — claude.ai reported “tools fetch failed”, Claude Code indexed no tools, and the TypeScript SDK threw before returning. The schema now describes both a complete and a field-projected response as one object, so the page parses./mcp/v2/storefront,/mcp/v2/murph, and/mcp/v3were never affected. get_productsalso now returnsnameon every product even when yourfieldsselection leaves it out, matching AdCP:product_idandnameare always included regardless of selection. Previously a narrowfieldslist could return products you had no way to label.- Snap
discover_productsandget_productscalls that fail due to a missing or - mismatched ad account selection now return a descriptive
INVALID_REQUESTerror - instead of the generic “Upstream request failed”. This applies to all synthesized
- correctable errors from the Snap adapter (account required, invalid account,
- account mismatch, incompatible product selection, etc.).
- Buttons that open a second workspace from a seller widget work again. “Open sync & diagnostics”, “View details”, “Open full diagnostics”, and “Add another ad server” on the Ad server source page — plus the equivalent launches from Pending operations, Sync diagnostics, Release notes, and Test runs — were failing with “Couldn’t open that workspace. Try again.” These launches were being resolved against the buyer tool set, which does not contain the seller tools they open; they now resolve against the seller tool set.
- Delivery reads for TikTok campaigns that cover multiple days now succeed instead of failing with a “delivery is not authoritative” error. The daily report returns one row per day for a campaign, and the completeness check was mistakenly comparing that day-row count against the provider’s per-campaign count. Spend now uses base-10, currency-aware minor-unit rounding; the package breakdown lists every ad group in the campaign (including those with zero delivery); and package totals are cross-checked against the campaign report within a bounded tolerance for provider reporting lag. When pagination cannot be corroborated, report spend diverges beyond that tolerance, or a spend value cannot be represented safely in the account currency, the request still fails closed rather than returning partial numbers. Nothing to change on your side.
- TikTok delivery reads now accept the integrated report’s documented live response shape when
page_sizereports the number of returned daily rows instead of echoing the requested capacity. Arbitrary page-size mismatches, incomplete pages, duplicate rows, and unstable terminal pages still fail closed. - Budget and end-date changes that a publisher accepts for later processing now apply to the live buy on their own.
- When you submit a change, the publisher may apply it immediately or accept it as a task to complete later. The second case only ever resolved if the publisher called us back, and for publishers that do not, the change could sit until it timed out a week later without applying. It is now also resolved by asking the publisher directly, so a change lands as soon as they confirm it.
- Two related corrections:
- A change that has been submitted is no longer announced as though it were already live. You are told it was submitted and is awaiting confirmation.
- Submitting a budget or date change while an earlier one is still with the publisher is now rejected, with an explanation of what is already in flight. Previously the second submission merged into the first, leaving a combination neither one asked for. Other updates to the same buy, such as creative changes, are unaffected.
- How you submit a change has not altered.
- You can now see at a glance whether each storefront is live and healthy. Every storefront gets one status, computed once and shown the same way everywhere it appears.
- The readiness response (
GET /api/v2/storefront/readinessand theget_storefront_readinesstool) carries a newlivenessverdict with four values:setup(gray — not live yet, as expected while you set up),live(green — buyers can discover and buy),live_attention(yellow — live, with something worth acting on), andlive_critical(red — live, but something is broken that affects buyers). Every verdict comes with a one-line reason; during setup it also counts the go-live steps remaining. - The same status shows on the seller setup screen and as a per-storefront dot in the account switcher. Clicking a storefront with a yellow or red dot takes you straight to the screen where you can fix it.
- Two guardrails keep the status honest: a disconnected source that isn’t behind any buyer-visible product won’t turn your status red, and storefronts that pass buys through to an external platform or your own sales agent aren’t held to merchandising steps that don’t apply to them.
- Nothing to set up on your side. Nothing changes for buyers — no new fields, and discovery, media buys, and settlement behave exactly as before.
- A media buy that an inventory source refused does not need to be rebuilt under a new ID. The seller can re-send the original — same media buy ID, their approval intact — once the cause is fixed.
- Sellers do this with
POST /media-buy-approvals/{mediaBuyId}/retry-forwardand{"forceTerminal": true}, orretry_forward_media_buy_approvalover MCP. It is an API control today: the retry action in Pending operations still covers transient failures only and routes a refused buy to escalation. Buyers cannot re-send a buy themselves; ask the seller. - This corrects the v4.118.0 note, which told buyers that terminalized buys could not be retried in place and to resubmit under a fresh media buy ID. That was wrong. The control has always existed; it was missing from the API reference, and the reference described terminal failures as unrecoverable.
- Three limits. A buy that failed before any source was contacted — a paused storefront, an unconfigured settlement currency, an expired FX quote — records no forwarding leg and cannot be recovered this way; it needs a fresh submission. The original payload is replayed with only the end date refreshed, so a buy re-sent days later carries its original start date and its full budget over a shorter window. And it applies only to a create approval the seller already approved: a rejected buy has nothing to re-send, and an update approval ignores the flag. Before forcing a retry, check the flight window and check the ad server for an order a partial write may have left behind.
forceTerminalis now published in the API reference, and a new Retry forwarding page covers how to tell a delivered buy from a refused one, what to check before forcing one, and how to read the result. Platform behavior is unchanged — existing calls do exactly what they did before.
4.124.1 — July 26, 2026 at 5:49 PM UTC
- Adapter connections now report classified account-discovery failures and hide expired, abandoned OAuth attempts instead of rendering duplicate storefront rows.
- Adapter OAuth expiry checks now support the PostgreSQL version used by deployed environments while preserving safe handling of malformed legacy timestamps.
4.124.0 — July 26, 2026 at 3:24 PM UTC
- Storefront Activity now shows dates and times in your own locale and timezone, and its “couldn’t load” messages are easier to read.
- You can now update a media buy directly by its ID:
PATCH /api/v2/buyer/media-buys/{mediaBuyId}on the buyer REST API, and the matchingupdate_media_buytool on the buyer MCP server. Send only the fields you want to change — name, flight dates, package budgets and pacing, product budgets, optimization goals, or creative assignments — without routing the edit through the campaign update, which still works unchanged. An update that would break a campaign invariant fails with a specific error instead of being silently adjusted — for example a pricing option that settles in a different currency than the buy, a budget increase past the campaign’s remaining budget, an edit to a buy on a tracked (seller-mirrored) campaign, or a buy or campaign that has already ended. Flight dates outside the campaign window are the one exception — they apply, the campaign flight widens to cover them, and the response includes a warning saying so. - Separately, creating media buys (
create_media_buyson REST and MCP) now rejects manual product selections against a performance campaign — the platform selects and allocates the product mix on those toward your objective. If your integration hand-picks products for a performance campaign, those requests now fail with a validation error; drop the manual selection and let the campaign allocate, or make the selection on a discovery campaign instead. - Sellers: nothing changes on the seller side — updates reach sellers through the same execution and approval path as campaign-routed edits, and a rejected buyer request never contacts the seller. Monetization: none — no billable surface or metering change; the verb is covered by existing buyer API terms. Exposure: ungated (
gate: none) — an atomic, additive verb on the existing authenticated buyer surface; rollback is a code revert with no data migration. Adoption:update_media_buycall volume and per-failure-mode error mix via workload-attributed buyer activity; the success signal is direct mutations on multi-buy campaigns, which previously had no verb (baseline zero). Full launch record: the commercialization brief on AI-4576. - Nothing to change on your side, and nothing starts charging in this release.
- A seller organization accepting an IU plan for the first time now receives a one-time 100-IU credit on better terms. You no longer have to be a new customer to qualify, and the credit spends on any IU-priced activity rather than storefront setup work only. One credit per billing organization, valid 60 days from the day you accept — counted in days, not billing cycles — with the exact expiry date shown on Settings → Plan & Billing → Usage & credits. One plan covers an organization’s selling and buying work, so setup and buying draw on the same 100 IUs.
- How IU billing works is a new page that follows one charge end to end: what an IU is, what consumes one and what is always free, the seven steps from a published price to an invoice, worked examples for a light month and a heavy one, and a calculator for which plan is cheapest at your volume. Two numbers worth taking away: above 200 IUs a month the 250 plan costs less than pay-as-you-go, and above 650 the 1,000 plan costs less than the 250. If you reconcile invoices, Checking our numbers lists the exact reads each charge was built from. If you would rather not read a rate card at all, ask Murph what something costs or why a charge appeared — it answers from the same page.
- The Organization IU Rate Card page now shows the standard plan sizes and prices as the agreed standard model rather than provisional figures. They are not published in production, so nothing on that page is an offer you can accept today, and the per-activity IU counts we are still calibrating stay marked as such.
- Separately, on Plan & Billing: accepting terms and saving billing details now update the page immediately instead of needing a reload, and an account with setup still outstanding now shows that outstanding step instead of reporting good standing.
- Managed evaluation in
get_productsis more reliable: the evaluation model is now shown the exact output shape (including enrichment and refine variants) and explicit field limits, so evaluations no longer fail open when the model formats its verdicts with invented field names or oversized reason lists. Fewer executions reportstatus: degradedwithevaluated: falsepass-throughs. - Directed-campaign mirrors of a connected TikTok account now keep syncing when the provider’s advertiser details omit an unrelated presentation or financial field (such as balance, language, role, or account creation time). Media-buy reads only need the account’s identity, ownership, and currency, so those reads no longer fail — and disable every mirror — over a field they never use. Account identity, ownership/scope, and currency are still checked strictly and still fail closed. If a periodic sync does fail, the subscription now keeps the machine-readable diagnosis (
errorCode,errorField,errorReason,upstreamCode) so a later read can tell a provider-shape error apart from a credential or configuration problem; a successful sync clears it. Nothing to change on your side. - Murph now checks the source-specific publisher authorization guidance before advising modular sellers, and keeps documented API field names intact in its replies. Nothing to change on your side.
- Product discovery now honors the requested product fields. Murph carries ordinary product results up to 32K characters and explicitly pages or narrows anything larger instead of treating the visible products as the complete catalog. Existing requests need no changes.
- The published plan sizes and prices are the standard USD list, and the billing docs now say so where the numbers are. Two clarifications: your Effective Rate Card is the authority — an authorized discount, a negotiated package, or an enterprise offer replaces the list figures, and Plan & Billing shows list and effective price side by side before you confirm. And prices are set per currency rather than converted: a plan in EUR, GBP, or AUD is its own published number, not the USD figure at an exchange rate, and the currency on the revision you accept is the one your invoice, charge, and wallet use. The plan calculator now states that it computes the standard USD list rather than a quote.
- The pages also now say what happens when standard prices change: a change arrives as a new published revision, never as an edit to a revision anyone accepted. Your binding pins the version, term, and prices you agreed to, so a change to the published table does not change what you pay — you would see a successor offer and decide whether to accept it.
- Sellers: the same three clarifications now appear on the storefront billing page, which carried the identical table. One plan covers an organization’s selling and buying work, so the list, the currency rule, and the revision behaviour are the same on both sides — and the storefront page no longer describes the plan values as “not final” when they were agreed on 2026-07-22.
- When you open a media buy’s timeline to trace where it’s stuck, stage times and
- budgets now read in your own language and time zone, and the surface is
- localized in Portuguese and Japanese. A forward that failed once but then
- recovered on retry no longer shows as a red alarm — only a buy that is actually
- stuck is flagged. Nothing to change on your side.
- Pinterest media buys now validate region and state targeting against Pinterest before creating a campaign, and send canonical provider geo identifiers instead of treating subdivisions as metro locations. Region targeting is set when the media buy is created and can’t be changed afterward — targeting different regions means creating a new media buy.
- Murph now keeps its full tool catalog on escalated questions. When a question
- was escalated for extra precision, Murph was reducing its own tool surface to
- fit a model that could not hold it, then answering on a different model that
- could — but without the tools it had just put down. Escalated questions could
- therefore be discussed but not acted on. Murph now picks up the full set again
- once it has the room, so an escalated question gets the same actions available
- as any other.
- When your seller analytics dashboard has no negotiations yet in the selected
- window, it now opens to a clear “no runs yet” line instead of a screen of
- empty zero charts — and the run-window date range no longer shows a blank
- ”- to -”. Once buyers start negotiating with your agent, the full dashboard
- (win rate, booked budget, delivery, posture conversion, and recommendations)
- is unchanged.
- The seller setup widget now shows one clear storefront status: gray while you set up, green when your storefront is live, yellow when something needs attention, and red only when a live storefront can’t sell. Setup steps stay neutral — remaining work shows as progress counts and a single next action, never an alarm — so red means stop, not “still setting up.”
- Buyer surfaces are unchanged: this reworks how sellers see their own storefront status, not what buyers see in discovery or transactions.
- Agents connecting to the storefront MCP server now receive full operating guidance at connect time, instead of a single reminder about notifications. The server tells your agent to orient with
get_storefront_readiness, confirm operation names throughask_about_capabilitybefore callingapi_call, route “how do I” and “why is this stuck” questions to Murph, make one verified mutation per turn, and look up publisher authorization rules rather than answering them from memory. - This closes a gap for anyone driving their storefront from their own agent — ChatGPT, a custom client, or any MCP host — where that guidance previously reached only our own assistant. The storefront skill also now states Murph’s real capabilities: it searches the published docs and inspects your live storefront state.
- The full contract is documented in Built for agents.
- TikTok media buys can now set a package’s
geo_regionsfield for region-level targeting alongsidegeo_countries— any ISO 3166-2 subdivision TikTok itself supports is resolved live against TikTok’s own location inventory, and a subdivision TikTok can’t confirm is rejected before the campaign is created, rather than silently dropped to country-level. Region targeting is set when the media buy is created and can’t be changed afterward — targeting a different region means creating a new media buy.
4.123.0 — July 26, 2026 at 12:24 AM UTC
- You can now list a media buy’s packages in one call and tell them apart.
GET /api/v2/buyer/media-buys/{mediaBuyId}/packages(MCP operationget_media_buy_packages) returns each package with its product, its own flight window, and the pacing period it covers. Going from “the display package ending 2026-08-11” to the right package id no longer means reading the whole campaign or asking your seller for an export. The response leaves out targeting, creative, and format detail on purpose, keeping it small enough for an agent to read in full. - Package ids are opaque. The trailing number on a storefront-minted id like
sf_pkg_..._3is the order the package was dispatched in, not the period it covers, so read the newpacingPeriodfield instead of parsing the id. - Interchange now also keeps the flight window it asked for when a seller’s response leaves it out, so newly created paced packages carry their own start and end dates. No package created before this change has a pacing period recorded, and roughly 9 in 10 have no flight window either. Neither gap can be filled in later. Product name plus budget will sometimes narrow those packages to one, but not when the pacing schedule gave those periods the same budget, in which case the package can’t be addressed individually through the API and your seller is the way to reach it.
- If you manage your buys in chat, nothing changes for you.
- Campaign lists now default to your live working set: every campaign that could still spend — active, draft, and paused — across both platform-managed campaigns and tracked mirrors from connected seller accounts. Connect a seller account and your live spend there appears in
GET /api/v2/buyer/campaignsandlist_campaignsimmediately — while the account’s finished history (completed and canceled campaigns) stays out of the ambient list. Pass explicit statuses or the newstatus=ALLto reach it, and usemanagement=managed|trackedto narrow by who operates the campaign. This revises the earlier managed-only default before its flag retires: flood control now lives on the status axis, so nothing you could still run is ever hidden. - Nothing changes for sellers, and no new seller data is exposed: the campaigns involved are the buyer’s own campaigns in their own connected account, mirrored under the subscription the buyer already authorized — this change only adjusts which of those already-visible mirrors appear without a filter.
- Connected ad-platform accounts now show their campaign footprint at a glance. Each account card on the Connections page carries a rollup: how many campaigns are tracked and how many are active, tracked and managed spend over the trailing year, always in the account’s own currency (never converted or totaled across currencies), and a managed-share bar showing how much of that activity runs through the platform. For brand teams, that answers “how much of our TikTok activity runs as managed campaigns?” without opening a report; for agency teams, it makes connected accounts comparable across clients. A “View tracked campaigns” link drills into the tracked campaign list for accounts mapped to a single advertiser. In the campaigns widget, a new Managed / Tracked / All switch narrows the list by who operates each campaign. The default list still shows what you’re working on: active and draft campaigns, both managed and tracked; completed or paused history stays out unless you ask for it.
- New TikTok campaigns created through Interchange no longer expand into delivery destinations Interchange cannot verify, and automatic delivery in TikTok search is off. Existing campaigns with other delivery settings remain visible but read-only; make any changes to them in TikTok Ads Manager. The public
tiktok_for_you_feedplacement ID remains unchanged; Interchange maps it to TikTok’s provider enum internally. - Your storefront now keeps the canonical record of its exchanges: the exact AdCP
get_productsrequest it received (content-addressed, secrets redacted) and, for every brief it answered with a proposal, the exact response it returned with immutable product snapshots. (Wholesale catalog pulls record the request only — a catalog listing is not a proposal.) Retrieve them withGET /brief-artifactsandGET /proposal-artifacts(REST orapi_call); each demand-inbox row links the brief artifact that produced it. Records from before capture began report the artifact as unavailable — nothing is ever reconstructed after the fact. - Pausing a Snap campaign in Interchange now remains in effect when you add or
- replace creative later. The campaign and its ad groups stay paused until you
- explicitly resume it, so routine creative work cannot restart spend. Resuming
- checks that every active package has a creative and that Snap accepted the
- change; if Snap’s state cannot be confirmed, the campaign stays paused.
- For an existing Snap campaign, your first budget, schedule, or creative change
- may ask you to pause or resume it once so Interchange can record your choice.
- Enterprise teams can apply this safeguard across automated or high-volume
- campaign operations. Lean teams get the same protection with no setup or
- reconnect. Seller workflows, pricing, billing, entitlements, and planned media
- spend do not change.
- Reddit media buys now normalize country and region targeting to provider-native ISO identifiers and reject invalid regions before creating provider resources.
4.121.0 — July 25, 2026 at 9:41 AM UTC
- Your TikTok product catalog is now read and updated only through the TikTok business account that owns the connected advertiser. Currency, region, and item-status totals come directly from TikTok. Seller storefronts and published inventory are unchanged, and no action is needed unless a sync now stops because the advertiser and catalog are not owned by the same TikTok business account; correct that connection and retry.
- Media buy reads now tell you when a change you submitted has not taken effect yet. Every field on a media buy describes what is currently delivering, and a submitted-but-not-yet-applied change appears separately as
pendingChange, whosedifferencesmap spells out the live and proposed value for each field it would change. - Previously a buy with a queued change could report
PENDING_APPROVALinmediaBuyRefswhileget_media_buyand the delivery poll reported the live values, with nothing anywhere saying a change was waiting. A buyer polling status could reasonably conclude an update had gone live when the buy was still delivering the old budget and end date. - Corrected behaviour, worth checking your integration:
mediaBuyRefs[].statusnow always reports the live status of each buy. A buy that is delivering with a change awaiting approval readsACTIVEand carriespendingChange; it previously reportedPENDING_APPROVAL, which described a version that was not delivering. That value was never documented as a pending-change signal, so this is a correction rather than a contract change, but if you inferred queued changes from it, readpendingChangeinstead. - A buy awaiting its first approval is unaffected:
statusstill readsPENDING_APPROVALwith nopendingChange, because nothing is live behind it yet. - Sellers see no change. This affects the buyer read surfaces only; storefront approval queues, seller media-buy lists, and the approval flow are untouched.
- Treat a change as applied only once
pendingChangeis absent. See Media buy lifecycle → Pending changes.
4.120.1 — July 25, 2026 at 1:40 AM UTC
get_campaign_productsnow returns the package IDs for every media buy that has packages. Some buys came back with an emptypackageIdsarray even though the packages existed, which forced buyers to source package IDs from their seller instead of from the API.- No action is required for existing Snap connections. Creative assignments now
- recover one exact Snap Ad after retries or lost responses, and creative
- inventory preserves the buyer’s source creative and original assets. Missing,
- duplicate, substituted, or cross-account provider objects fail closed. The
- ordinary assignment path retains its existing activation behavior; the
- future-dated readiness fixture is the path forced to stay paused. There is no
- pricing, billing, entitlement, or media-spend change; the capability remains
- included with existing Snap adapter connections.
- The protected readiness check can now verify a future-dated paused Snap
- campaign from creative upload through complete inventory, package assignment,
- provider review state, exact Ad materialization, zero delivery, and terminal
- cleanup. It remains disabled unless an operator enables an identity-free image
- or video fixture in the protected staging overlay.
- Per-package delivery figures (spend, impressions, clicks, completions) are now correct. Each delivery report’s per-package daily breakdown is accumulated into a per-day ledger, so a package’s lifetime delivered totals are the sum across days rather than the most recent window. This fixes an undercount in the per-package delivery shown on media-buy lists and detail, and it strengthens the budget floor that stops a package budget being reduced below what it has already delivered.
- TikTok catalog sync now safely resumes after a timeout or interrupted create without creating a duplicate catalog or feed. If TikTok cannot identify exactly one matching result, the sync stops and asks you to retry after provider inventory converges instead of repeating the write.
4.120.0 — July 25, 2026 at 1:00 AM UTC
- Your TikTok catalog sync now stops before changing anything when TikTok returns an incomplete feed or inventory from another account, preventing the wrong catalog from being used. If a catalog that previously synced now fails, verify that the connected TikTok advertiser owns the catalog and that its feed inventory is complete, then retry. This buyer-side change does not alter seller storefront setup, ranking, inventory labels, or any other buyer-visible seller attribute.
- Meta creative-format discovery now honors exact supported filters and bounded pagination instead of silently returning the full catalog.
- TikTok account discovery now honors status and sandbox filters after fully enumerating the provider inventory. Opaque continuation cursors preserve stable, once-only account coverage and reject tampering or tenant, filter, expiry, offset, and inventory drift.
- Snap account operations now keep cached Public Profile and targeting lookups isolated by connection, tenant, selected account, and provider parent. OAuth token rotation forces a fresh provider read; no changes are required on your side.
- Storefront readiness now requires every seller to declare what publisher domains it sells without treating
adagents.jsonauthorization as a transaction blocker or guessing that the operator domain is inventory. It warns separately about products that lack a declared-domain mapping while legacy catalogs are backfilled. One successful sandbox or live media-buy transaction permanently satisfies transaction validation, and seller-owned no-spend tests can exercise a pre-live storefront without exposing it to ordinary buyers. Narrow operational exceptions use an append-only audited service-override ledger and remain distinct from transaction evidence. Multi-storefront product discovery also preserves a seller’s explanation when readiness produces an empty result, so buyers can distinguish an unavailable storefront from one with no matching inventory. - No action is required for existing Snap connections. Conversion writes now
- report events as processed only after Snap returns its exact valid CAPI
- receipt; matching, attribution, and reporting finalization remain asynchronous
- and are not claimed by that receipt. There is no pricing, billing, or media
- spend change. This capability remains included with existing Snap adapter
- connections; it is not a separate entitlement or paid add-on.
- The protected readiness check also verifies complete Pixel inventory, rejects
- a Pixel outside the selected account, and exercises a synthetic Customer List
- audience through create, replay, update, delete, and final absence without
- customer data or spend. It remains disabled unless an operator enables the
- protected GSM overlay for a dedicated staging connection.
4.119.0 — July 25, 2026 at 12:05 AM UTC
- Campaign lists now default to your managed working set.
GET /api/v2/buyer/campaignsand thelist_campaignsoperation returnmanagement: "managed"campaigns unless you ask for more: passmanagement=trackedto list read-only campaigns mirrored from a connected seller account, or the newmanagement=allto include both states. A subscribed account can mirror thousands of historical campaigns — their scale now lives in the connected-account rollup (campaignsTracked, spend rollups,managedShare), not in your ambient campaign list. If you relied on the previous default returning mirrored campaigns, addmanagement=allto those calls. - Connected seller accounts now carry a campaign rollup, so each connection shows everything the platform tracks without flooding your campaign list.
- Each account on
GET /api/v2/buyer/storefront-connections/{connectionId}/accountsreturns an optionalcampaignRollup:campaignsTracked(campaigns the platform did not set up, mirrored read-only from your connected seller account),campaignsActive,trackedSpendandmanagedSpendover the trailing 365 days, andmanagedShare—managedSpend / (trackedSpend + managedSpend), the share of reported spend running through platform-managed campaigns, null until spend is recorded. Spend is seller-reported net in the account currency (for campaigns managed through the platform, your full media budget goes to the seller with no platform fee, so net equals your budget), and rollups are never summed across currencies. Connection rows onGET /api/v2/buyer/storefront-connectionsaddcampaignsTrackedandcampaignsActivecounts. Nothing changes in billing — the rollup reads what your subscribed accounts already mirror. - The Media Buys page now leads each row with the buyer instead of the internal buy id, formats flight dates in your locale and timezone, and offers an in-place retry when the list fails to load.
- Metadata separators on Media Buys rows now render with proper spacing; the previous join used a Tailwind utility this package never emits, leaving the dots glued to the text.
4.118.0 — July 24, 2026 at 9:12 PM UTC
- If a canonical-image buy was previously rejected and terminalized, resubmit it with a fresh media buy ID after this release; terminalized buys cannot be retried in place. Newly executed and resubmitted buys with one unambiguous fixed image size now send the resolved width and height in their package selectors, so GAM-backed sellers can traffic them. No action is required for other buyers or sellers.
- Fixed-price products authored through managed sales agents now stay buyable after composition, and accepted product changes reach buyer and readiness catalogs without a manual refresh. Managed proposal evaluation now exits a hung provider attempt with enough time to try a fallback before the request deadline. No changes are required on your side.
- Managed evaluation results in
get_productsnow say explicitly when a candidate was NOT actually evaluated. When evaluation degrades (deadline elapsed, pass budget exhausted, or the evaluation model was unavailable), candidates fail open as accepts — previously those pass-throughs were indistinguishable from judged accepts unless you read thereasonstext, so an agent could buy on an accept that never saw its instructions. Each candidate’sext.interchange.evaluation(and the deprecatedscreeningblock) now carriesevaluated: boolean:falsemeans your evaluation instructions were not applied to that candidate, so re-check it before spending against it. The responseguidancealso calls out degraded executions so agents that only read dispositions do not mistake pass-throughs for judgments. Nothing changes for sellers: this labels the buyer-side evaluation verdict, not the seller’s candidate, and sellers do not see buyer evaluation results. - Products returned from embedded sales agent storefronts now retain their canonical creative format declarations in
get_products. - Every campaign in buyer reporting now carries its management state:
managed(authored or adopted through the platform) ortracked(mirrored read-only from a connected seller account). The label appears on every campaign block in thesummaryview, on everytimeseriesrow, and as a newManagementcolumn in the CSV export, afterCampaign Name. Today every label readsmanaged— tracked mirror delivery is not reported on this surface yet. - If you generate strict validators from the reporting response schema, regenerate them:
managementis a new required property on campaign blocks and timeseries rows. If you parse the CSV export by column position, account for the newManagementcolumn. Metric values and formulas are unchanged. - This surface reports managed delivery only — tracked mirror delivery is excluded — so managed totals never silently include tracked spend, and when mirrored spend is admitted it will arrive labeled. The field ships ungated to all buyers (it is additive and constant until then); tracked labels appear only for accounts enrolled in the connected-seller-accounts alpha, once mirror delivery is integrated. No seller-facing behavior changes. There is no billing change. Adoption signal: presence of the
managementfield in consumed reporting responses and CSV exports. - The seller analytics dashboard now answers the headline question above the fold and keeps detail on a single in-widget scroll, so it fits the chat window on first load.
- Chat widgets now follow the chat-surface expanded/collapsed model. An expanded widget takes its content height capped at the chat window, so a dense surface like the seller analytics dashboard no longer scrolls far past the screen on open. Opening a widget holds your view on it: new chat lands below in conversation order and the jump-to-latest pill appears instead of the view being pulled away. Open Pages and Glances gain an explicit Collapse control that tucks them to their named stub in place; sending a message or jumping to latest resumes normal conversation follow.
4.117.0 — July 24, 2026 at 6:48 PM UTC
- Campaigns now carry a
managementstate alongsidemode.trackedmeans a campaign you did not set up through the platform: it is mirrored read-only from a connected seller account and updates automatically as the seller changes things.managedmeans a campaign authored or adopted through the platform. Campaign list and get responses include the new field, andGET /api/v2/buyer/campaignsaccepts amanagement=tracked|managedfilter — for example,management=managedexcludes mirrored read-only shells from your working set. - If you generate strict validators from the campaign response schema, regenerate them:
managementis a new required response property. Nothing else about existing calls changes — themode: "directed"wire value remains for compatibility, and the word “directed” is retired from campaign vocabulary. Readmanagementto know whether the platform acts on a campaign. - No seller-facing behavior changes: the management state describes the buyer’s own relationship to a campaign, and nothing new about a seller is exposed. Outside the connected-seller-accounts alpha, every campaign reports
management: "managed"; tracked campaigns appear once a connected seller account is enrolled. There is no billing change — the field and filter add no billed usage, and connected-account subscription pricing is unchanged. Adoption signal: use of themanagementfilter on campaign list calls. - Action required for sellers: confirm every storefront settlement currency is supported, fix any readiness blockers, and clear Pause when you want to accept buys. Storefronts now stop accepting new buys whenever required setup is missing or failing, and readiness names the exact issue. Buyers should rerun product discovery if a seller no longer supports the advertiser’s currency. Storefronts where the connected platform clears payment directly are unchanged.
- Meta account discovery now honors client pagination after fully enumerating the provider account inventory. Opaque continuation cursors preserve stable, once-only account coverage and reject tampering or tenant, filter, and snapshot drift.
- Retrying a failed campaign execution now submits the same DRAFT media buy, preserving its creative selection, flight dates, pacing, and optimization goals. The
get_productspurchase shortcut also prepares new selections exactly once: stage when you want to review or customize the DRAFT first, or execute when it can be submitted immediately. No changes are needed on your side. - The seller rail can now be organized around the selling journey — Connect (your sources), Teach (your agent), Pitch (for business), and Execute (what you’ve won) — so the rail reads as the ingredients of your next proposal instead of a settings menu. Same rows, same permissions; only the grouping changes.
- Meta, Snap, and TikTok storefronts now return account financials consistently through the SDK using the authenticated selected account, while preserving provider-reported currency, balances, spend, and reporting periods.
4.116.0 — July 24, 2026 at 4:59 PM UTC
- Snap measurement now validates the complete account Pixel inventory before campaign or conversion writes. Accounts with multiple Pixels require an explicit selection, setup code comes only from Snap, test-event codes reach Snap, and accepted conversion batches no longer overstate asynchronous processing.
- AudioStack and ElevenLabs audio generation now uses the provider account mapped to each advertiser under Settings → Connections. Existing advertiser-specific assignments carry over; no action is needed if those mappings are correct. If you relied on an organization-wide default, map each advertiser before its next generation. Generation pauses when a mapping is missing or a key changes instead of charging another account. Voice defaults do not change, and you can still choose a different voice for one generation.
- For Meta seller-managed campaigns, you can now target states and regions by passing ISO 3166-2 codes in
geo_regions. Existing country targeting is unchanged. If Meta cannot resolve exactly one region in the requested country, the request fails before a campaign is created.
4.115.0 — July 24, 2026 at 3:27 PM UTC
get_productsnow accepts numeric-string advertiser IDs and normalizes them before processing the request.- Ad-server-backed inventory sources now surface missing Google Ad Manager team access instead of reporting a successful advertiser sync with no results. FreeWheel delivery reporting, Google Ad Manager inventory filtering, product refinements, and creative matching also behave correctly. If an advertiser sync reports a permissions error, assign the connected Google Ad Manager user to an active team with advertiser access; otherwise there is nothing to change.
- Multi-storefront
get_productsis now the taught front door for buyer agents. Murph recommends the canonical surface first for new product exploration — with progressive polling, optional proposal evaluation, and direct continuation intocreate_media_buys— and reserves Discover Products for existingdiscoveryIdworkflows and the grouped session view. The buyer documentation hierarchy leads with the same guidance. - The typed
get_productsandcreate_media_buysMCP tool definitions now share repeated AdCP shapes through standard JSON Schema$defsreferences, reducing their combinedtools/listpayload from roughly 370KB to 169KB so buyer agents spend less context on tool discovery.
4.114.0 — July 24, 2026 at 9:02 AM UTC
- Failed social-adapter account syncs now expose stable diagnostic fields to readiness tooling while keeping untrusted provider details out of signed evidence. Nothing changes for successful syncs.
- Snap conversion reporting now verifies that the selected ad account owns the Pixel and counts events only after Snap confirms the batch.
- Approvals now escalate by default. When no approval routing rule is saved, approvals route to your organization admins — admins receive approval reminder and escalation emails (plus in-app notifications) without any setup, and saving a routing rule still overrides the default. If your organization has no active admin at all, approval emails fall back to every active user so blocking work is never silent — and the missing admin is flagged. All four approval kinds are covered (media buys, creative reviews, ad-server approvals, and inventory shortfall reviews — the latter two always route to admins). The Approvals widget’s Overdue view is now age-based, so an item with no owner still surfaces once it has waited too long, oldest first. Blocking source problems you own re-nudge you at 24 hours and 7 days if still unresolved, then go quiet.
- Snap account discovery now rejects malformed, duplicate, or cross-organization account data instead of presenting it as an active selectable account.
- Snap account readiness now verifies that the selected account belongs to its exact active, readable OAuth credential. Existing Snap connections require one reconnect after this deployment because pre-deployment account snapshots do not carry the new credential proof and are intentionally not trusted or backfilled. Until that reconnect succeeds, adapter calls fail closed; reachable account and advertiser mappings are then preserved.
- Fixed Meta
discover_productsfailing for performance-mode campaigns when the brief does not specify a creative format (image or video). The request now correctly includes the product’s supported format IDs rather than an empty list. - Before your next Snap creative sync, refresh product and format discovery and add a
headlineof up to 34 characters to every full-screen image or video creative. New setup now offers Snap Awareness, Traffic, and Web Conversions withsnap_ad_image_9x16andsnap_ad_video_9x16; Catalog Traffic, App Installs, Story Ads, Collection, Lead Generation, Sponsored Snaps, Commercials, generated, and promoted-offering options are no longer returned or accepted for new syncs. - Existing Snap campaigns and creatives are not edited, paused, or deleted by this release and can keep delivering in Snap. If an account contains another creative format, Interchange leaves that object in Snap and stops creative inventory with
UNSUPPORTED_CREATIVE_FORMATinstead of showing an incomplete list. Brands and agencies should update shared creative templates and trafficking playbooks; API and MCP integrations should refresh discovery and supplybrand_name,headline, and the advertised image or video asset. Buyers working in chat will see only the two supported full-screen choices, and a missing headline stops before any media upload. - Pricing, plans, and entitlements are unchanged; this adds no billable surface and does not change seller products, inventory, ranking, or storefront presentation.
- Snap connected-account delivery reports now keep spend in the selected ad account’s currency and include every ad squad in the requested window. Shifted, partial, or inconsistent provider reports return an error instead of exposing incomplete billing totals. Nothing changes in your request.
- Snap campaign, ad-squad, ad, creative, media-upload, bid-estimate, Public
- Profile, Pixel, and catalog client methods covered by this release now stop when
- Snap declares an error inside an HTTP success response. Global-ID mutations and
- creative assignments confirm the selected-account parent chain before writing,
- and later-page inventory failures return a bounded host diagnostic instead of a
- successful prefix. This is not a universal Snap-envelope claim: audience batch
- and polling calls and Conversions API HTTP-success envelope semantics remain
- tracked separately.
- Native catalog writes use the selected account’s organization and currency,
- stage local mapping changes behind an atomic revision check, and keep durable
- tenant/account/catalog journals for both catalog and product-feed creation.
- Retries after an ambiguous catalog or feed response never repeat the uncertain
- POST. They reconcile only exact complete provider readback, while delayed
- visibility, drift, foreign identities, unselected
catalog_ids, and concurrent - stale writers fail closed with no hidden provider or local mutation. No action
- is required.
- Social adapter campaigns now use the Interchange campaign name when creating platform campaigns. Previously, adapters such as Snap, Reddit, LinkedIn, and Pinterest ignored the campaign name and defaulted to a date-based fallback (e.g. “Campaign 2026-07-23”). Google and Amazon used an internal correlation reference instead of the campaign name. The standard ADCP buyer flow also failed to forward the campaign name to adapters even when a name was provided at campaign creation time. All adapters now use the Interchange campaign name, falling back to a date-based name only if no name is available. Ad groups, ad squads, and ads now consistently include the campaign name as a prefix (e.g. “My Campaign - Ad Group 1”), matching the naming convention used by Meta and TikTok.
- Storefront connections now show as connected immediately after mapping a provider account to an advertiser. Previously, the connection stayed in needs_account_selection state after a successful mapping, blocking product discovery and capabilities for the advertiser.
- Murph escalation status now treats Linear duplicate tickets as closed, preventing reconciliations from reopening consolidated reports.
- Meta’s product catalog now returns results for open or conversational briefs (“What ad products can I buy from Meta?”), matching the behavior of TikTok and Snap. Previously, briefs that lacked explicit campaign language caused Meta to return zero products. Products requiring platform setup (conversions, app installs, lead gen) continue to be excluded from controlled-planning results; the returned catalog reflects what can be booked today. The
scope3_brief_strategyobject in the response still signals any clarification needs so the buyer agent can guide next steps. - If you’re setting up Meta buys through Interchange, only Auction buying type is available today; Reservation (Reach & Frequency) campaigns are not supported.
- Sandbox inventory-source tests for pass-through sources now select real products end to end. When you plan a sandbox test, the product candidates come from the same sandbox catalog the test actually uses, so a product shown in planning no longer comes back as “no matching products” at execution. And re-running a sandbox test for a brand you’ve already tested reuses the existing test advertiser instead of failing when it tries to create a duplicate.
- Three guardrails now protect live storefronts from silent degradation.
- Currency changes confirm their impact. Changing the settlement currency on a live storefront now tells you how many buyer-visible products the change would hide (prices you set directly are only shown in the settlement currency) and rejects the update until you confirm with
confirmCurrencyCatalogImpact: true. Non-live storefronts and zero-impact changes are unaffected. - Stale buy statuses are flagged. Media buys routed through an ad-platform connection now surface a staleness marker when the platform stops confirming status — the media-buys list carries a
statusFreshnessnote (“status last confirmed Nh ago — source unreachable”) and a matchingmedia_buy_status_stalediagnosis, instead of showing a dead connection’s last-known status forever. If the marker doesn’t clear, check that your ad-platform connection is still authorized. - Stale reporting prices come off the market. Ad-server-reporting-derived pricing now has a 60-day freshness ceiling: a product whose cached reporting price hasn’t refreshed in 60 days is hidden from buyers with a “check your ad-server connection” readiness state, rather than served on a stale price. A fresh sync restores it automatically.
- Buyer note: products hidden by the currency or freshness guardrails drop out of buyer discovery — buyers see a smaller catalog, not an error.
- Platform campaigns created by adapter storefronts (Meta, Snap, TikTok, LinkedIn, Reddit, Pinterest, Google, Amazon) now use the Interchange campaign name chosen by the buyer instead of a system-derived name.
- Existing
get_productscalls require no changes and keep their current behavior unless proposal evaluation is enabled.discover_productsagain applies its established enrichment, relevance, ordering, and refinement behavior when evaluation is omitted. - Add plain-language instructions under
ext.interchange.evaluationto evaluate proposals before your buyer agent processes them. Interchange can accept or reject each proposal, attach buyer-owned enrichment, request a bounded AdCP refinement from the originating seller, and reevaluate the revision. An optional comparative pass ranks accepted proposals across storefronts. - Progressive polls return replacement snapshots. Rankings remain provisional while sellers are pending; an unchanged revision poll is cached, while a changed accepted cohort is ranked again. Unchanged candidate versions do not repeat absolute evaluation.
ext.interchange.screeningremains available as a deprecated compatibility alias for accept, reject, and refine; it does not enable enrichment or comparative ranking. - One Proposal Evaluation Pass processes up to 10 candidates. One Comparative Proposal Ranking Pass ranks up to 100 accepted candidates. Both meters are calibrating and report
charged_ius: 0; provider tokens, retries, cached polls, protocol validation, and seller network calls are not separate passes. - Reconnect Snap in Settings > Connections if Customer List audience sync says the connection cannot prove its identity. Audience create, update, member add/remove, status, and delete now retry without duplicating a list, stay isolated to the selected account, and return only Snap-confirmed outcomes. Incomplete or unfamiliar provider responses stop with an error instead of exposing or changing the wrong audience.
- Snap campaign discovery on selected USD accounts now asks for clarification instead of selecting a product when a brief is ambiguous, unsafe, or missing a supported objective or geography. Non-USD planning remains fail-closed until account-currency pricing is supported.
- Reconnect an existing Snap connection in Settings > Connections before using conversion measurement. New and reconnected Snap connections now request offline-conversions access in both hosted and delegated OAuth flows; Public Profile access remains excluded pending Snap allowlisting.
- Existing Snap campaign calls require no request changes. Campaign creation now confirms that Snap accepted the selected product and targeting before reporting success. Campaign reads show the requested settings, the current settings in Snap, and whether they match, without exposing private audience identifiers.
- If Snap omits or changes required settings, Interchange returns a clear error or reports the difference instead of presenting unverified targeting. Pricing, plans, and entitlements are unchanged; this adds no billable surface.
- Your Snap campaigns now use the selected ad account’s currency for prices,
- forecasts, and budgets. Non-USD accounts no longer inherit US-dollar minimums
- or guidance, and inconsistent amounts stop before a campaign is created.
- Nothing to change on your side.
- TikTok directed campaign creation now verifies selected-account ownership, paused materialization, activation response identities, and enabled readback at every hierarchy level. It activates the campaign only after its children. On ambiguous activation, cleanup verifies the exact campaign is paused before requesting deletion, distinguishes confirmed paused containment from a possibly active campaign, and reports rollback only after terminal provider readback. Offering-based packages remain paused until TikTok offering assets can be materialized as runnable ads.
- TikTok product discovery now asks for one campaign outcome instead of returning runnable recommendations from a vague, negated, or competing brief. If prompted, reply with an explicit choice such as
Objective: trafficand retry; supported outcomes are reach, video views, traffic, conversions, app installs, and lead generation. Otherwise no action is needed. - No action is needed unless a TikTok creative sync asks you to reconnect. If it does, reconnect TikTok in Settings > Connections and retry.
- TikTok image, video, and promoted-post creatives now keep their names and assets through retries, replacements, and service restarts. Campaign setup stays paused until TikTok confirms the intended creative was attached, and incomplete or conflicting TikTok responses stop safely instead of reporting the wrong status. Older saved TikTok channel selections also continue to work when the channel is still authorized.
- This improvement is for buyers who sync or run TikTok creatives. Seller storefronts and seller workflows are unchanged.
- Existing TikTok campaign calls require no request changes. Campaign creation now confirms that TikTok accepted the selected product and targeting before reporting success. Campaign reads show the requested settings, the current settings in TikTok, and whether they match, without exposing private audience identifiers.
- If TikTok omits or changes required settings, Interchange returns a clear error instead of presenting unverified targeting. Pricing, plans, and entitlements are unchanged; this adds no billable surface.
4.113.0 — July 23, 2026 at 11:39 PM UTC
- Delivery reporting now accumulates every counter (impressions, clicks, completed views, views, conversions, leads) into a lifetime total for sellers who report one day at a time, matching how delivered spend already behaves. Previously these counts showed only the most recent report for per-day-reporting sellers, so a campaign’s totals could look far smaller than what actually delivered. Cumulative and full-window reports are unchanged.
- When a campaign execution fails because a seller’s platform timed out, the error now explains that the media buy may still complete asynchronously and tells you to check its status — rather than surfacing a raw technical message with no direction. A new documentation section on the media buy lifecycle page shows how to receive completion webhooks instead of polling when working directly over AdCP, and the buyer agent now includes guidance on handling timeout errors and the async-acceptance path.
create_media_buyandexecute_campaignno longer return a misleading “sales agent not found” (404) when the sales agent actually exists but is not active. A pending, disabled, or failed sales agent now returns a specific, actionable error (409SALES_AGENT_NOT_ACTIVE) that names the real reason — for example, that the storefront has not completed go-live and is not transacting yet, so complete billing/payout to activate it. An ID that resolves to a non-sales agent now returns a validation error naming the actual agent type rather than a 404.- Three settlement and catalog-pricing correctness fixes:
- Settlement no longer guesses on an unrecorded media buy. When a media buy’s clearing method (Interchange-cleared vs. seller-direct) wasn’t recorded at booking time, the ledger now falls back to the storefront’s own declared clearing method before defaulting — the same fallback the seller-facing Media Buys list already used to fill in “not recorded” rows. The rare case where neither is known still books safely and is now flagged internally for follow-up, instead of silently assuming Interchange-cleared.
- **A 0 fixed or floor price — the platform’s internal “not yet priced” placeholder — is now excluded from composed and pass-through catalog listings instead of reaching buyers as a bookable zero-dollar rate.
- Unpriced products stay visible to you, hidden from buyers. A legacy product your pricing feed couldn’t price (e.g. a currency mismatch, or an option shape the feed can’t match) used to disappear from your catalog entirely with no explanation. It now stays in your catalog — visibly marked as unpriced with the reason — while remaining correctly hidden from buyer discovery until it’s priced. A product you priced yourself with a fixed rate in your settlement currency is unaffected: it stays buyable on that price even when the feed can’t price it.
- Seller Setup now keeps every inventory source visible and opens the exact ad-server, feed-backed, or external-agent flow when you add another source, without asking for storefront-wide settings again. Uploaded media kits and policy documents now produce separate business-profile, acceptance-policy, and canonical creative-format drafts for review, and the Acceptance Policy page provides a conservative starter policy when no document is available.
- Creative tool connections now show only the relevant Audiences control. Buy and Events no longer appear because those settings do not apply to creative generation. No action is required.
- If Merchandising Rules shows Needs cleanup, remove the listed pricing, discount, market, or eligibility statements when you create your next version. The active version remains active in the meantime, but Selling Terms, Buyer Discounts and Buyer Instructions, Business Profile, and Acceptance Policy take precedence. Buyers do not need to change anything: storefront discovery and qualification now use each seller’s Business Profile markets consistently.
- Several surfaces now report their true state instead of a misleading default:
- Go-live catalog check (sellers): if opening for transactions is blocked by a failed catalog check, the error now names which inventory sources failed (up to three, plus a count) and a coarse reason (timed out, unreachable, errored) instead of a generic “try again in a moment.”
- Publisher domain roster (sellers): a domain whose adagents.json check hit a transient failure (timeout, DNS, 5xx) now shows “couldn’t check yet — retrying” instead of “Unknown,” so it’s clear we’re still trying rather than that we’ve never looked.
- Analytics win rate (sellers): a brand-new storefront with no run history yet shows ”–” for win rate instead of a false “0%.”
- Terms of Service (buyers and sellers): an account whose organization has no valid parent to accept Terms of Service on behalf of now sees a clear “contact support” message instead of the generic “must be a direct admin” error.
- Assistant render honesty (buyers and sellers): any tool result that opens a screen — on every MCP surface, buyer and seller alike — now reminds the assistant that it only requested the screen and cannot claim to see it rendered. This previously covered only a subset of seller-side tools.
4.112.0 — July 23, 2026 at 9:15 PM UTC
- You can now continue directly from multi-storefront
get_productsinto one Interchange cart request. Select storefront-qualified proposals and/or proposal-less products, then choose whether to stage or execute the resulting media buys. Interchange keeps the search and refinement history on the product query and uses a DRAFT campaign as the shopping cart and parent of every media buy. - Pass an existing campaign or include the fields for a new discovery campaign. If you create one inline, the response returns its campaign ID; media buys are never left without a campaign parent. A proposal selection applies that proposal’s product allocations to the cart—the proposal object itself is not sent back for exact execution.
mode: stagecontacts no sellers.mode: executesends ordinary bilateral AdCPcreate_media_buycalls for the resulting buys and reports partial failures per media buy. The seller calls are not atomic, and an unchanged retry does not repeat completed work. - The new v2 surface is available as
POST /api/v2/buyer/media-buys/batch, MCPcreate_media_buys, and the buyerapi_calloperationcreate_media_buys. Existing discovery selection andexecute_campaignworkflows remain available and need no changes. - Commercial model: There is no incremental charge for
create_media_buysat launch, and existing media-buy pricing is unchanged. Retrieval remains included. Optional proposal screening remains a separately measured Intelligence Unit activity, withcharged_ius: 0while screening is calibrating. - Rollout and rollback: This additive v2 surface launches ungated (
multi-storefront-productsremainsgate: none). Existing callers enter it only when they invoke the new route or tool, so current workflows do not change. Rollback removes the additive route and tool; discovery selection andexecute_campaignremain available. - Measurement:
multi-storefront-productsdefines active use as returning a multi-storefrontget_productspage or staging or executing qualified selections withcreate_media_buys. Batch audit events distinguish stage from execute and record selection count, inline campaign creation, and whether selections replace or merge. We will monitor successful staged and executed batches, retry/no-op rate, and per-media-buy errors. Healthy expansion means buyers complete multi-storefront carts without duplicate buys after an unchanged retry. - Persona pass
- Enterprise brand buyer: Stage a reviewed cross-storefront plan on an existing campaign, inspect the resulting DRAFT buys, and execute only when approved.
- Large agency / hold-co buyer: Apply accepted proposal allocations from several storefronts in one cart request while retaining per-buy execution outcomes and retry safety.
- Scrappy builder / power buyer: Feed storefront-qualified IDs from
get_productsstraight intocreate_media_buys; create the campaign inline when you do not already have one. - SMB buyer (novice, chat): Save selected inventory in a draft campaign cart and review the prepared media buys before any seller is contacted.
- Seller: You continue to receive an ordinary one-to-one AdCP
create_media_buyrequest. Other storefront selections and the buyer’s Interchange cart metadata are not shared with you. - Existing storefront API calls keep their behavior. Integrations can now clear the first-go-live test-campaign gate without switching to Murph: plan a sandbox inventory-source test to inspect readiness and products, then redeem its short-lived, single-use token to execute the exact no-spend campaign through the real buyer path. The current validation covers product discovery and media-buy execution; it does not create or validate a creative. The existing test-runs API reports the result and its failing step. Seller-scoped test execution provisions a missing storefront wrapper before buyer discovery, while media-buy creation resolves stale selections from authoritative storefront provenance.
- Buyers are unaffected: the canary is confined to the seller’s sandbox-capable source and mock product provenance, creates no spend, and does not appear as a live offer or campaign to real buyers. This adds no billable surface, pricing change, plan gate, or packaging differentiation; it makes an existing go-live validation available to authenticated storefront API integrations.
- Exposure plan:
gate: none. The API ships atomically because authentication, seller ownership, sandbox capability, mock-product provenance, a five-minute token, and single-use execution constrain exposure. There is no cohort expansion: all eligible authenticated storefront integrations receive the same contract. The kill switch is deployment rollback of these additive routes; there is no migration or persisted entitlement to unwind. - Measurement: named usage signals are authenticated requests to
storefront_test_campaign_planandstorefront_test_campaign_execute, plus terminal success and failure rows in the durable storefront test-run history. Launch acceptance is at least one seller completing the API plan-to-execute path with no real-spend or cross-tenant event, while 4xx/5xx and failing-step rates identify validation or runtime regressions. - Actions inside interactive chat widgets now finish where you click them instead of posting the same choice back as a new chat request. Product selections save in place; creative campaign assignments and library saves execute directly; event sources and signal components finish in their forms; inventory and creative-reference choices record a quiet completion for the next step. Controls that could not actually complete a task are no longer presented as working actions.
- Persona pass
- Seller: Inventory, signal, and event-source work stays in the surface that collected the configuration, with an explicit saved or created result.
- Enterprise brand buyer: Creative assignments and library roles commit through the governed typed operation, without an extra model interpretation step.
- Large agency / hold-co buyer: Repeated product and creative work no longer creates duplicate conversational instructions across accounts and campaigns.
- Scrappy builder / power buyer: The same named operations and MCP completion channel work in Murph, Claude, ChatGPT, and other compliant hosts.
- SMB buyer (novice, chat): Clicking Save or Attach produces the result shown on the card instead of asking the buyer to explain the click again.
- Launch plan: This is an atomic ungated correction to existing GA widget surfaces (
gate: none). Deploy to every host with the release. Roll back this change if direct operation completion or non-prompting context writeback regresses; rollback restores the former controls without changing any saved campaign, creative, product, signal, or event-source data. - Measurement: Track successful
add_discovery_products,attach_creatives_to_campaign,save_creatives_to_library,sync_event_sources, andcreate_signaloperations alongsidemcp_widget_context_updatedcompletion events. Watch operation error rate, repeated identical user turns immediately after a widget action, and widget-to-operation completion. Acceptance is zerosendMessagecalls in API Call, no increase in operation failures, and no confirmed duplicate-composer regressions across five buyer and five seller accounts. - Monetization: None. Entitlements, pricing, settlement, and Intelligence Unit treatment do not change.
- Media-buy updates now leave existing creative assignments unchanged unless you include
creative_ids. Send the full list to replace assignments, or[]to clear them. You can update campaign details or packages without revalidating attached creatives or sending them to the seller again. - If your integration reads
droppedCreativesfromupdate_campaign, remove that handling: the field is no longer returned. - For a package without stored flight dates, a date update now returns
CAPABILITY_NOT_SUPPORTEDuntil the seller advertises supported actions. Retry after the seller has provided that capability information. - Persona pass
- Scrappy builder / power buyer and large agency / hold-co buyer: Send
creative_idsonly for an intentional assignment change; ordinary campaign and package updates now leave existing assignments alone. - Seller: No storefront presentation or setup changes are required. Storefronts receive only the requested package update rather than re-forwarded creative assignments. Sellers supporting package date changes should continue exposing their supported actions.
- Three fixes to the storefront operate surfaces. Approvals: routing settings load reliably instead of showing a persistent “Unavailable” error — nothing to change on your side. Media buys: each buy now shows its real settlement method (Interchange-cleared or seller-cleared) wherever it is determinable; buys whose method genuinely isn’t recorded say so explicitly — nothing to change on your side. Payouts: banking details no longer block going live. You can activate your storefront first; funds accrue but cannot be disbursed until you add payout details, and the Payouts tab tells you exactly that with an add-details button.
- Active external sources now receive an automatic initial health check instead
- of remaining unclassified until buyer traffic reaches them.
4.111.0 — July 23, 2026 at 6:57 PM UTC
- Integrations must send
format_kindwhen they create a creative from only a brief or when its legacy format reference conflicts with its asset type or dimensions. Existing canonical requests and supported legacy references continue unchanged when the evidence identifies one canonical kind. Saved creatives now match campaigns and products by that canonical format instead of an imported label. Sellers do not need to change their products or integrations. - You can now turn reviewed ad-server inventory into a draft product without leaving Inventory Components or Inventory Selector. Name the product, choose the buyer creative formats, review validation results, and confirm creation in the same surface. Nothing is created until you select Create draft product.
- If you ask Murph with an exact product configuration, Murph can validate and create the draft through the same product operations. No existing products or publishing settings change.
- Draft products are not visible to buyers until you activate them. This release changes seller authoring only; buyer discovery and active catalog presentation are unchanged.
- Persona pass
- Seller: Review synced inventory and create a validated draft without repeating the selection in chat. Existing products are unchanged, and the new draft remains buyer-invisible until activation.
- Enterprise brand buyer: No workflow or governance change. Drafts created by sellers do not enter discovery until the seller activates them.
- Large agency / hold-co buyer: No workflow change and no new catalog rows until a seller activates a draft.
- Scrappy builder / power buyer: No buyer API or MCP contract changes; the new operations are storefront-authoring operations.
- SMB buyer (novice, chat): No visible change. Murph does not present seller drafts to buyers.
- Launch plan: This is an atomic ungated launch within the existing GA Product Authoring feature (
gate: none). Inventory Components and Inventory Selector are already available to eligible storefront operators; the release replaces their composer handoff with the typed workflow. Expand immediately with the deployment. If validation or create completion regresses, revert this change to restore the prior Murph product-authoring path while preserving all existing products and underlying product APIs. - Measurement: Use API operation telemetry for
validate_esa_productandcreate_esa_product. Adoption is a storefront completing at least one successful validation; completion is a successful create withstatus: draft. Watch aggregate validation-to-create conversion, field-level validation failures, and create failure rate by storefront. The current REST telemetry does not carry MCP-app resource provenance, so do not attribute aggregate calls to a specific widget until that dimension exists. Acceptance is at least 20 successful draft creations across five storefronts, no confirmed composer-handoff regression, and a create failure rate below 5%. - Monetization: None. Product authoring entitlements, pricing, and Intelligence Unit treatment do not change.
- Delivered-spend on media buys is now accumulated per reporting day instead of being overwritten by the latest delivery report. Buyers and sellers previously saw understated “delivered so far” figures on buys whose sellers report daily (or in overlapping windows), which could let a budget reduction slip below what had already been delivered. Delivery now sums correctly across days and is robust to re-sent, corrected, and overlapping reports.
- Spotify package-budget and end-time updates now use the provider’s documented account-scoped
PATCHmethod instead of failing with405underPUT. - Sales-agent connections whose OAuth refresh grant is rejected now show as degraded and reconnect-required instead of being reported as a source outage. Interchange no longer retries discovery with a known-expired access token, so the actionable credential issue is not overwritten by a misleading endpoint failure or timeout.
- Live storefronts now notify you when your buyable catalog empties — for example, when manual pricing expires — naming the cause and the fix. Going live is now blocked while your catalog can’t be verified yet, or when nothing in your synced catalog can actually be trafficked (e.g. video with no duration, or display formats with no width/height); a partial issue still warns without blocking. Readiness also flags active products that reference a publisher domain you haven’t declared or authorized.
- Buyer agents can now retrieve every package ID for a media buy and poll or cancel a pending update by its exact proposal ID. Updates that name an unknown package or media buy are rejected before the seller is contacted. Existing integrations do not need to change. Sellers do not need to act; a cancelled proposal becomes terminal, and a late seller callback cannot change the live media buy.
- Widget load failures in chat now name the widget that failed and offer a Retry button instead of a dead-end “MCP app failed to load.” strip, collapsed widget bars carry the widget’s name, a diagnostics request for an ad-server source opens its sync & diagnostics surface instead of an unrelated “connect a sales agent” form, and the assistant no longer claims a panel is visible when it failed to render.
4.110.0 — July 23, 2026 at 4:49 PM UTC
- You can now send one
get_productsrequest to selected storefronts—or every storefront connected to an advertiser—and receive products and proposals as sellers respond. Each product and proposal ID identifies its originating storefront and can be passed unchanged to later refine and media-buy calls. - Screening is optional and currently in beta. Add plain-language instructions to have Interchange evaluate each valid proposal against your criteria, then return it unchanged, exclude it from the result, or ask the originating seller to refine it. If screening is unavailable, valid proposals pass through instead of being rejected. Existing unscreened calls are unchanged and remain included at no additional charge. During calibration, screening pass counts and estimated IUs may appear, but
charged_iusremains0. - Discover Products accepts the same optional screening instructions. When you refine a discovery with screening enabled, Interchange sends the refinement to the seller, then screens the seller’s revised proposals before returning them.
- Persona pass
- Enterprise brand buyer: Compare proposals from connected sellers under buyer-controlled screening criteria. Existing workflows stay the same unless your media team enables screening.
- Large agency / hold-co buyer: Collect products from connected sellers in one progressive request. Optional screening removes proposals that miss your first-pass criteria and asks sellers to refine others before your team compares them.
- Scrappy builder / power buyer: Use the v2 REST endpoint or MCP tool. Select storefronts, poll results, and add screening through
ext.interchange; pass storefront-qualified IDs unchanged into refine and media-buy calls. - SMB buyer (novice, chat): When screening is enabled in Discover Products, proposals that do not meet your criteria stay out of the results, and sellers may be asked to revise others before you see them. There is no API setup.
- Seller: Buyers can now compare your proposal with responses from other connected storefronts and may ask you to refine it before review. You receive the bilateral AdCP request only; buyer screening instructions and Interchange coordination fields are not shared. No setup change is required. Complete proposals pass protocol validation, and prompt refine responses can return before the buyer’s deadline.
- Registering a sales-agent source with a malformed credential payload now fails at registration instead of succeeding silently. Previously, an API-key credential sent under the wrong field name (for example
keyinstead oftoken) passed validation, showed as configured, and left the agent permanently unreachable with no pointer to the cause. Registration now rejects the wrong shape with a validation error, and credentials already stored under the legacy field name are read correctly. - Source diagnostics now measure inventory discovery from
get_productsonly, so failures in account sync, campaign updates, creative operations, or delivery reporting no longer falsely label a source as unable to return inventory. Those failures remain on their own operational axes. The same correction stops unchanged ESA health conditions from being presented as new Agentic Ops incidents while preserving the underlying health state and recovery re-alerting. - A2A async discovery polling now recovers the seller’s returned server task ID from the paired response before calling
tasks_get, preventing a failed immediate pre-seed race from polling Scope3’s client operation ID instead. - Read-only source rechecks no longer turn an accepted asynchronous task or an account-required public probe into a critical outage. Pending tasks remain degraded until their correctly addressed background poll records the terminal result, and terminal success clears the health cell.
- Fixed an issue where the storefront setup assistant could stop taking actions (such as re-checking an ad server, inventory source, or compliance status) and reply in text only. These re-check actions now run reliably during setup.
- Spotify campaign creation and readback now preserve the buyer-authored campaign name across provider synchronization.
- TikTok media buys now use the selected ad account’s currency consistently from product discovery through campaign creation, monetary updates, and reporting. Conflicting or malformed account details—including unknown account statuses or roles—stop before a campaign budget or bid mutation, while recognized non-approved accounts remain discoverable with a suspended or closed status.
- You can now connect a hosted feed or upload and replace CSV, TSV, Excel, and JSON files directly in Catalogs. Approval counts, rejected rows, and field-level issues stay beside the advertiser feed so you can review and retry the exact change in one place.
- Persona pass
- Enterprise brand buyer: Review feed changes and rejected items in one governed advertiser workspace; no partner instruction or seller presentation changes.
- Large agency / hold-co buyer: Add and maintain feeds across advertiser accounts without moving configuration into a separate chat workflow.
- Scrappy builder / power buyer: Supply a feed URL or row-based file directly and inspect the sync result immediately.
- SMB buyer (novice, chat): Murph opens the guided Catalogs Page for setup; no API payload or technical prompt is required.
- Seller: Not applicable. This changes buyer-owned advertiser feed setup and does not change what buyers see about a seller or what sellers must configure.
- Launch plan: This remains behind the existing Buyer widgets v2 customer flag. Expand after at least 20 successful URL/file syncs across five enrolled buyers with a sync failure rate below 5% and no confirmed return-to-chat regressions. Disable
buyer-widgets-v2to remove the Page entry while retaining the existing API and Murph catalog paths. - Measurement: Use successful and failed
sync_catalogsactivity records for enrolled buyers, split by URL and inline-file requests. Adoption is a buyer completing either path; acceptance is the expansion threshold above. - Monetization: None. Catalog sync pricing and entitlements do not change.
- If your storefront is in the Trusted Match pilot, you can now declare
trusted_matchon a product directly through the wholesale authoring API. Send the field onPOST,PUT, orPATCH /tenants/{tenant_id}/wholesale-productsandget_productsreturns it on the next call.PATCHis coverage-preserving: omit or sendnullto keep the stored value, send an explicit body to replace it. Declare which runtimes the product supports (context match, identity match), the provider agent URL, and the uid types and countries the declaration covers. The SQL workaround is retired; existing declarations keep working. Storefronts not in the pilot see no change: sendingtrusted_matchreturns403 tmp-not-enabled. Pilot enrollment is managed by Scope3 operations through a newPUT /tenants/{tenant_id}/adapter-config/tmp-enabledendpoint. - Buyers: no behavior change. Buyer agents calling
get_productscontinue to receivetrusted_matchon any product where a seller has declared it, exactly as they did before — the field itself and its shape are unchanged; the only change is that sellers can now populate it themselves. - Monetization: none. Trusted Match itself is priced through the existing sales-agent runtime and identity-match provider contracts; this endpoint does not introduce a new billable surface or entitlement.
- Rollout: gated per-tenant behind
AdapterConfig.tmp_enabled(ops-provisioned, fail-closed). Expansion: pilot storefronts move to beta once a declared product surfaces on the setup checklist and flows through a forwarded media buy end-to-end; beta moves to GA once the legacy match-flag reader is retired. Kill switch: ops fliptmp_enabled: falseand writes immediately return403 tmp-not-enabled; stored declarations are preserved but no longer emitted onget_productsfrom that tenant. - Storefront Briefs now runs starter discovery tests directly and keeps progress, matched products, errors, retry, and decision review beside the selected brief instead of creating a generated chat prompt.
4.109.0 — July 23, 2026 at 2:57 PM UTC
- Seller Setup and ad server source diagnostics now run reporting, forecasting, refresh, and discovery re-check actions through their canonical typed operations. This fixes valid FreeWheel re-check buttons being blocked by a stale host allow-list and prevents the same operation-map drift across other source adapters.
- Answering the first setup question with “sell through Scope3” no longer fails on brand-new storefronts. The intent’s capability preset previously tripped a validation that requires an approval reviewer to be configured — a step new sellers had not reached yet. The reviewer requirement still holds where it matters: the approval-routing item on your readiness checklist must be resolved before going live, and explicitly enabling manual review workflows still requires a reviewer up front.
- Discovery tests against an external sales-agent inventory source now return the actual matching products, each with its product id, alongside the match count. For pass-through sources that compose inventory live rather than from a staged catalog, this gives you concrete, addressable products to select when setting up a sandbox test, instead of only a number.
- Test Runs now diagnoses and repairs a failed or stalled sandbox run directly from its detail. The result and retry state stay beside the exact run instead of creating a synthetic chat message.
4.108.1 — July 23, 2026 at 8:59 AM UTC
- Campaign re-execution now uses the current FX quote without colliding with the original media buy’s locked rate. Existing booked media buys keep their original rates; no buyer action is required.
- Pacing period overrides on pre-execution media buys now apply correctly instead of returning “Media buy not found.”
- Campaigns can now use existing static display creatives whose legacy format labels differ from a product’s current image-format name when the asset type and dimensions match. This prevents valid campaign creatives from being excluded during media-buy creation without changing the saved creative or weakening video and other format checks.
- Wholesale pricing uploads now close the feedback loop instead of going silent on success. Every preview and commit reports which of your feed’s selectors matched a product and which didn’t, so a feed that priced nothing because of a selector typo or the wrong selector type is no longer a bare success. Readiness no longer reports pricing as current when a fresh, in-window feed doesn’t actually match any product, and it never blocks a source you’ve priced entirely with operator fixed prices in your settlement currency. A new advance warning shows “pricing feed expires in N days” starting a week before the 35-day staleness cliff, instead of the first sign being products disappearing. Countries suppressed by your minimum line-item spend are now named on the product and in readiness details instead of just vanishing, and a feed row mixing a
GLOBALselector with per-country rows for the same selector is rejected rather than silently double-counting avails.
4.108.0 — July 23, 2026 at 4:59 AM UTC
- Account admins can now add, view, and remove browser origins for custom agents right from Interchange — no raw API call needed. Find the setting under API Keys → Browser origins.
- Scope3 platform administrators can create a separate seven-day Demo Storefront with clearly labeled synthetic Display, CTV, and Retail Media inventory. Each demo includes a sample buyer brief and outcome, plus controls to reset, extend, or delete it. Ordinary seller accounts do not show demo-creation controls. Deletion or expiration removes only the Demo Storefront and its synthetic data. No action is required.
- Go-live checklist buttons now open the right surface. “Add payout details” opens your own storefront’s billing setup instead of a different account, and “Fix publisher authorization” opens your property roster instead of the ad-server source page.
- Currency mismatches in your pricing now surface before go-live instead of silently hiding products. A wholesale pricing feed must be single-currency and match your storefront’s settlement currency — off-currency rows are rejected row-by-row at preview with a clear reason. A fixed product price in a different currency than your settlement currency no longer counts as a complete price (there is no FX), and setting one warns you immediately at authoring time. When every hidden product’s only problem is a wrong-currency price, the Products available readiness check names the currency mismatch directly instead of reporting a generic “pricing unresolved”.
- Ad-server source actions now open their connection and diagnostics workspaces directly instead of turning button clicks into Murph chat prompts.
- Buyer Activity now analyzes a selected API call directly inside the Activity page. The answer and retry state stay with the call, and the action no longer creates a synthetic chat message.
- The Campaigns workspace now opens a campaign’s editable creative-to-placement mapping task directly instead of turning the button click into a Murph prompt.
- Release Notes now explains account-specific updates directly inside the selected card. Answers and retry states stay in the Page, and the action no longer creates a synthetic chat message.
- Re-declaring a publisher domain — or resending it in a full publisher-set update — now re-checks its
adagents.jsonafter a short cooldown, instead of only ever checking it once. A domain that already resolved successfully no longer gets reset to “Checking” when you re-declare it, and a temporary network hiccup while fetching youradagents.jsonis now retried automatically instead of being reported as “no adagents.json found.” - Storefront adapter credential health status (expired, revoked, or errored connections) now persists correctly and triggers the expected seller notifications. A parameter-typing bug in the underlying database write had silently dropped every credential health update and its notification since the health-tracking loop shipped.
- Product discovery now labels result groups as storefronts instead of sales agents. The selector, the summary count, and the results footer all read “storefront(s),” matching how discovered inventory is actually grouped (by storefront).
- Sales agents that answer
get_productswithinput-required— for example, sellers that need campaign or brief context before they can return inventory — are no longer incorrectly marked unhealthy or sent false “source unreachable” notifications. Aninput-required(orauth-required) response is now treated as a healthy, reachable reply: the live discovery leg records the source as healthy and serves any warmed catalog, and the wholesale catalog probe records the capability as unsupported rather than as an outage. - When a Meta storefront has multiple Facebook Pages authorized for the selected ad account and no
page_idis provided in theexecute_campaignrequest, the error now surfaces the list of authorized Page IDs and names so the buyer’s agent can select one and retry. Previously the error was stripped to “Upstream request failed” before reaching the buyer. - Snap campaign creation now stops safely when Snap returns inconsistent account or status data. It verifies that the campaign is paused before launch, cleans up confirmed partial creations, and clearly reports when cleanup needs operator attention. No action is required.
- Snap media buys now verify countries against Snap’s current targeting inventory, reject incompatible products and unsupported targeting before campaign creation, emit provider-valid frequency and audience shapes, and disable provider audience expansion for accepted targets.
- Spotify campaign writes and readbacks now use the account-scoped v3 endpoint as their ownership boundary when the provider omits its retired campaign account field.
- Spotify campaign reads now trust the authenticated account-scoped v3 resource when the provider emits a contradictory legacy campaign account field.
- Spotify media-buy readback now projects its top-level flight from authoritative package schedules so paused creates can reconcile exactly.
- Spotify media-buy readback now accepts the v3
PENDING_APPROVALad-set state returned immediately after a successful paused campaign create. - TikTok campaigns now reject targeting that cannot be applied exactly, and Snap campaigns requested as paused stay paused through creative setup. Wholesale catalog reads also return complete, stable inventory metadata.
- TikTok campaigns now use current provider demographic fields, disable native targeting expansion, and verify the paused ad group’s targeting and ownership before continuing setup.
- Meta now returns products on open briefs. Geography defaults to US when no country is specified, and creative format no longer needs to be stated explicitly — both gates previously blocked discovery on any brief that didn’t name a country and a format keyword. LinkedIn matched-audience products no longer have US targeting silently baked in when the brief contains no geography.
- Fixed four small onboarding friction points: pre-provisioned accounts now get their invite email sent (not just the invitation record), the ad-server connection status now tells you to grant Google Ad Manager access once your service account exists instead of repeating “connect your ad server,” a Google Ad Manager credential problem now names the actual fix (granting the service account access) instead of a generic “reconnect,” and asking to change approval routing without admin access now tells you to ask an admin instead of a bare rejection.
- Planning a test campaign against a pass-through inventory source now surfaces real, selectable products. Previously, for storefronts that pass inventory straight through from an outside sales agent (product composition off), the planner skipped catalog discovery and returned no product candidates, leaving no way to pick a product for a sandbox test even when the source clearly had matching inventory. The planner now runs a live discovery against the source (falling back to the most recently cached pass-through catalog if the source is momentarily unreachable) so it hands back concrete product ids that a later test execution will actually find.
- Pending Operations now takes sellers directly to the approval, retry, timeline, or source-diagnostics view for each task. When a Google Ad Manager order needs cleanup, the Page offers a confirmed safe archive or a documented manual resolution. No setup change is required.
- Before your storefront activates for the first time, one end-to-end test campaign — product discovery, media buy, and creative against your own storefront — must pass. The new
publish_validationreadiness check runs the same path a buyer would, so a buyer never hits a failure you could have caught yourself. A failing run names the failing step and its root cause right in the readiness checklist, so you fix the exact problem instead of guessing. A pass older than 30 days downgrades to an advisory nudge to re-run, and storefronts that are already live are never retroactively blocked. Run it by asking your agent to run a test campaign, or withexecute_inventory_source_test_campaign. - Every readiness checklist item now tells you what it actually demands:
requirementishard(must be resolved before going live),soft(advisory — never blocks), orplatform_default(the platform applied a sensible default, named inappliedDefault, that you can change any time). The checklist is path-aware and now starts with the question everything else depends on — how you sell. A newselling_intentcheck leads the list: complete once you declare it (or automatically inferred from your configuration, so existing storefronts are never blocked retroactively), and a newapproval_settingsitem shows the approval posture the platform applied for you. - Embedded sales agents now wait for trafficking acknowledgement before marking creatives active, and delivery responses serialize scheduled polling times as ISO 8601 strings while omitting the field when no further update is expected. No seller action is required.
- Sandbox inventory-source tests now explain why a test found nothing to buy instead of always reporting an empty catalog. When your source returns inventory but none of it matches the test brief’s format or targeting, the failure now says the source returned products that did not match this brief (and how many), rather than claiming the source has no catalog. If the source was skipped or returned an error during discovery, that reason is surfaced too.
- Setup now asks one question first: are you connecting a sales agent you already use, or selling through Scope3? Your answer (
setupIntenton the storefront) sets the right starting configuration automatically — pass-through storefronts are no longer offered ad-server connection steps they don’t need, and sell-through storefronts start with merchandising on. The choice is reversible at any time: updating the storefront with the other intent (or flipping capability flags) switches paths, and the matching setup surfaces appear immediately. - Connected TikTok advertisers can retry audience creates, updates, and deletes without creating duplicate provider audiences. Pixel and audience ownership is checked against the selected advertiser before a write. Nothing to change on your side.
- Buyers can now set
packages[].startTime/packages[].endTimeonupdate_campaignto move an individual package’s flight window in place — alongside the existingbudget,pacing, andbidPricefields — instead of canceling the package and adding a new one to shift its dates. The new dates must fall within the media buy’s own date range; every other package on the buy keeps its own window untouched.
4.107.0 — July 22, 2026 at 5:07 PM UTC
- If your API integration creates creatives, send the documented
format_kindfield. Buyer-created creatives now stay attached to their campaigns and reach sales agents reliably, while campaign format coverage and buyer discovery remain canonical and URL-free. Media-buy responses identify older or incompatible creatives that could not be delivered. Exact format references supplied by third-party systems remain supported at the adapter boundary. - Sellers do not need to take action. They receive the same creative payload contract, with unsupported creatives rejected before delivery instead of arriving incomplete.
- Spotify account reads now preserve v3 account resources with tax identifiers and use the provider’s current currency field, restoring directed campaign synchronization and media-buy readback.
4.106.0 — July 22, 2026 at 2:52 PM UTC
- Approval review is now self-contained: inspect the submitted details and
- pre-screen, decide in place, and retry a failed media-buy forward without
- leaving the Approvals Page. A retry requires confirmation and cannot create a
- duplicate booking at a source that already received the approval.
- Video hosted creatives now include a separate
clickthroughasset when synced to third-party sales agents. VAST creatives are unaffected — click tracking is embedded inside the VAST XML and no separate clickthrough asset is sent.
4.105.0 — July 22, 2026 at 1:43 PM UTC
- You can now manage trusted-buyer auto-approve carve-outs directly in a portable
- Buyer Trust Page. Eligible buyers are shown by name with recent media-buy
- activity, every enable or revoke explains its exact effect, and no setting
- changes until you explicitly save it.
- You can now edit pricing rules and creative or media-buy review settings directly
- in the portable Selling Terms Page. The same configuration also works through
- confirmed assistant prompts in any compatible MCP client. Existing settings do
- not change until you save or confirm an exact update.
4.104.0 — July 22, 2026 at 11:31 AM UTC
- Seller Analytics and Brief History now show one consistent record for every buyer brief, from fit and posture through response, approval, outcome, and learning. You can search by buyer, brand, brief, date, or outcome, and no setup changes are required.
- You can now edit and activate your Merchandising Rules wherever you open them, review every previous version, and restore an earlier version without leaving the page. You can also ask your assistant to apply exact rules after you confirm them.
- Seller Analytics now identifies the storefront being measured, keeps catalog probes out of recent-run totals, and shows each run’s posture and attribution. No setup changes are required.
4.103.0 — July 22, 2026 at 9:30 AM UTC
- Fixed advertiser mapping for connected ad-platform accounts while the adapter storefront is still configuring. Buyers can now finish account setup before the storefront begins transacting.
- Account admins can now preview, reactivate, or reuse saved acceptance-policy versions when no version is active. Starter policy templates also match the Page language, while other storefront members remain read-only. No action is required.
4.102.0 — July 22, 2026 at 6:53 AM UTC
- Meta media buys now keep exact AdCP targeting by explicitly disabling Advantage Audience expansion and verifying that setting on provider readback.
- Fixed an issue where discover_products returned 0 results with no error for Meta adapter storefronts when the buyer had mapped an advertiser to a Meta ad account but had not globally selected a default account on their connection.
- MCP tools that declare nullable fields (for example
update_business_profile) no longer reject valid values with a false “wrong type” validation error. The tool input validator now understands JSON Schema type unions such as["string", "null"]. - Organizations with an accepted Intelligence Unit plan can now be billed on a monthly cycle. The plan commitment is charged at the start of each calendar month, and accrued usage overage is charged automatically when it crosses a threshold during the month. Each month closes with a numbered fee invoice — plan commitment, overage (IUs × rate), and payments applied. Invoice numbers are sequential with no gaps. Invoices appear on Plan & Billing → Payment & invoices and via
GET /api/v2/billing/fee-invoices(list) andGET /api/v2/billing/fee-invoices/:invoiceNumber(line-level detail). - Organizations with a saved card are charged automatically; invoiced organizations receive the invoice and pay on their existing terms. A failed charge enters the standard payment retry process, with self-serve pay-now recovery on Plan & Billing.
- No organization is charged as a result of this release. Cycle billing is switched on per organization — it requires an accepted Intelligence Unit plan, and you will know before it applies to yours. Nothing changes in how storefronts appear to buyers; this is billing between your organization and Scope3 only.
- Meta connections now recognize the current versioned webhook-field response and automatically maintain their configured ad-account event topics. No action is required.
- Seller-managed campaign readback now retains the selected product and currency when a provider omits those fields from its create response. No action is required.
- Seller-managed campaign refreshes now retain accepted product and pricing identity when the provider omits those fields. No action is required.
- Canceled Meta campaigns now reach terminal readback when Meta removes their ad sets before retained targeting records are retired. No action is required.
- Seller-managed campaign writes no longer remain pending when a provider returns the same flight dates without milliseconds. No action is required.
- Meta campaign package details now consistently include the selected product’s currency and product identifiers. No action is required.
- You can now declare properties on your Property Roster before a publisher’s adagents.json does — tell your agent about a site, app, or CTV channel you sell (or call
declare_roster_property/POST /api/v2/storefront/property-roster/properties) and it appears on the roster marked “Declared by you”. When the publisher’s own adagents.json later declares the same property, the publisher’s record takes over automatically. If the publisher’s file later drops the property, your declaration stays; publisher-origin entries follow the file. You can remove a declared entry at any time. Nothing changes for buyers: the roster is a seller-only surface, and declared entries are never served to buyer tools or buyer-facing property lists.
4.101.0 — July 21, 2026 at 11:45 PM UTC
- You can now edit and activate your Acceptance Policy wherever you open it, review every previous version, and restore an earlier version without leaving the page. You can also ask your assistant to apply exact policy text after you confirm it.
4.100.0 — July 21, 2026 at 11:27 PM UTC
- Fixed an issue where a user added to an admin or approver role after an approval work item was created could not act on it, even when the routing policy was configured for that role. The authorization check now treats current role membership as sufficient qualification when the routing policy includes a role-based audience.
- Organization invitations can now be accepted or declined while Terms of Service are pending, so invited admins can join the organization and complete its agreement setup.
- Include account IDs and names in the model-visible
list_accountssummary so MCP hosts can select a connected advertising account. - Murph now consistently presents buyer budgets and delivered spend in gross (fee-inclusive) terms and no longer asks buyers whether to work in net or gross. When you need the working-media (net-of-fee) figure to reconcile against an IO line, ask Murph for the media buy’s budget breakdown and it will show the media, fee, and fee-rate split.
- Meta media buys now preserve the platform’s standard audience and location-presence metadata without rejecting an otherwise exact targeting match, while unknown controls and audience expansion that changes delivery remain blocked.
- Require Murph to triage customer issues before preparing a support escalation, while preserving that triage through approval and filing.
4.99.0 — July 21, 2026 at 9:47 PM UTC
- Fix package-level delivery breakdown missing from reporting for single-day reports whose reporting period ends at
23:59:59(end-inclusive) rather than the next day’s midnight. These reports were misread as multi-day, which droppedby_packagemetrics that carried period totals without a nested daily breakdown. Package-level impressions, spend, and rate now record correctly for these single-day reports. - Fixed Murph approval controls disappearing when you reopened or reloaded a chat. The Approve and Reject buttons for a pending action now reliably reappear, so you can approve what you asked Murph to do instead of getting stuck repeating the request.
- RFC 9421-signed webhook deliveries from sales agents are now verified by matching the agent’s
brand.jsonentry to the endpoint URL we call, rather than an internal identifier. Previously, when the id an agent published in itsbrand.jsondiffered from the identifier stored on our side, valid signatures were rejected with a generic “invalid signature” error and catalog, delivery, creative, and reporting webhooks silently failed to apply. Verification now resolves the agent by URL, caches the agent’s declared id, and re-resolves automatically if it later changes, so signed webhooks keep working without manual intervention. - The pricing-coverage warning no longer counts products that already have a fixed price. A product made buyable by a fixed price set directly on it was still counted as “unresolved” in the source’s pricing sync status, so the “upload pricing” warning could ask for uploads nothing needed. The effective coverage summary now counts fixed-priced products as seller-priced.
- Murph’s inventory-source sandbox test now checks up front whether an inventory source’s sales agent supports sandbox (no-spend) testing, and stops with a clear explanation when it doesn’t, instead of creating a test advertiser and campaign and then failing with a confusing “couldn’t find the selected inventory” message. When a sandbox test does run and the source returns no inventory, the failure now says the source returned an empty catalog rather than blaming the product you picked.
- Your storefront now has a Property Roster: one place to see every publisher domain you have declared, the properties and collections that publisher’s adagents.json actually resolves to, and whether your sales agent is authorized to sell each one. Ask your agent to “open my property roster”, or call the
open_property_rostertool /GET /api/v2/storefront/property-roster. Declared properties and collections are now persisted from each adagents.json resolution, so the roster stays accurate as publishers update their files. Nothing changes about how you sell today — this is a read-only view, and unauthorized domains show exactly what to fix. Not applicable to buyers: the roster describes a seller’s own publisher relationships and is not exposed on any buyer surface. - Storefront status now consistently recognizes that ad servers other than Google Ad Manager (SpringServe, FreeWheel, AdsWizz) price through a manual wholesale-pricing upload rather than an automatic ad-server sync. Previously these sources were reported as having unresolved pricing that needed support — and an uploaded pricing feed was ignored until an admin changed a setting — across the readiness view, the ad-server status your agent reports, and admin refreshes. Now every one of those surfaces reads the uploaded feed directly and, when none exists, prompts you to upload wholesale pricing.
- Murph now reconciles a stuck media buy against your ad server. When an order was approved or rejected directly in your ad server (for example, a GAM order handled outside the storefront approval flow), refreshing the source re-checks every non-terminal media buy (pending_approval, pending_start, paused) and corrects any status that drifted, so a buy that is really live no longer sits at pending_approval. Ask Murph to refresh the source and it reconciles the status instead of only filing an escalation.
- When Meta rejects and rolls back a media buy, the connected account no longer remains stuck, so you can retry without changing your setup.
- Fix creative sync to routed sales agents when no explicit placement assignments are provided. Syncing a campaign’s creatives to a media buy now binds each creative to the buy’s package(s) automatically, so sales agents that require a creative→package assignment (e.g. via AdCP
assignments[]) receive the binding instead of rejecting the sync withINVALID_REQUEST. Buyers who send explicit assignments are unaffected.
4.98.2 — July 21, 2026 at 1:38 PM UTC
- Meta product discovery no longer mistakes ISO campaign flight dates for unsupported audience age ranges.
4.98.1 — July 21, 2026 at 1:18 PM UTC
- TikTok campaign execution now checks the verified USD and AUD campaign minimum against the net media budget before any provider write. USD package and offering-expanded ad-group minimums are also checked. Budget failures return bounded numeric details and an actionable gross-budget correction while other provider messages remain masked.
4.98.0 — July 21, 2026 at 12:33 PM UTC
- Claude can now discover the correct sign-in endpoints for a direct adapter storefront instead of failing while registering the connector.
- If Scope3 has issued your storefront organization a private offer, review and accept it in Plan & Billing before your current term ends. Plan & Billing keeps the current and upcoming plans visible, and starts the accepted plan when the current term ends. Your current price and allowance do not change mid-term.
4.97.0 — July 21, 2026 at 11:43 AM UTC
- Official ad-platform connections now expose one canonical provider source ID, such as
meta, across capabilities, connection summaries, account mappings, and directed subscriptions. Account mapping no longer requires callers to copy a redundant source ID; historical adapter and storefront IDs remain accepted as compatibility inputs. - When you ask Murph to buy through a named platform such as TikTok, it now distinguishes a direct platform-authored campaign from brief-led product discovery. If your intent is unclear, Murph asks before choosing a campaign mode; direct campaigns no longer get an unnecessary discovery or execution step.
- Plan & Billing now identifies private Effective Rate Cards from the accepted offer and clearly separates IU package terms from existing media pricing.
- Claude and ChatGPT can now finish signing in to a direct Meta storefront. Interchange validates the Meta credential and selected ad account before allowing account-bound operations; no setup changes are required.
- Meta product discovery now understands explicit country names or ISO codes and exactly representable composite age ranges even when the optional brief interpreter is unavailable. Fully specified briefs return reviewable products instead of incorrectly asking for geography or age clarification.
4.96.0 — July 21, 2026 at 10:33 AM UTC
- Sellers can now review, create, and update their business profile in a portable Business Profile page. MCP-compatible assistants can also show that page or apply only the profile changes a seller confirms, without erasing saved details they did not mention.
- Fixed brought creatives with generated tracking URLs being removed from media buys as if they lacked required assets. Campaign assignment, package execution, and creative sync now use the same complete manifest asset projection for managed and external sales agents.
- Plan & Billing now shows the exact included IUs, monthly commitment, overage rate, and rollover terms from your accepted Effective Rate Card, including private packages.
4.95.0 — July 21, 2026 at 9:54 AM UTC
- Fixed
get_storefront_capabilitiesreturningprobeStatus: unreachablefor official adapter storefronts (Meta, TikTok, Snap, and others). Adapter storefronts dispatch in-process and always synthesize capabilities without an HTTP probe, so they now correctly report asreachablewhen the adapter is active. - Clear product ideas shared with Murph are now added directly to **Your
- requests** for product review. Murph avoids duplicate asks and confirms that an
- idea is tracked without implying that it has been promised or scheduled. If
- product tracking is unavailable for the account, Murph says the ask was not
- confirmed instead of claiming success.
4.94.0 — July 21, 2026 at 8:54 AM UTC
- Repair existing saved creatives that were attached to campaigns but remained invisible to media buys and sales agents.
- Murph now shows support, product, and supply asks in one customer-safe request
- tracker. Product asks are explicitly tracked for review rather than promised,
- and support asks show recovery status such as the next update and whether the
- customer is still blocked.
4.93.0 — July 21, 2026 at 7:47 AM UTC
- If Seller Setup shows Add payout details, complete that step before transacting. Interchange pays you for transactions from external Sales Agent sources, so these storefronts need payout details; storefront adapters with a separate settlement agreement do not. You can now set your operator domain and settlement currencies directly in the checklist, then open the correct secure page for payout details and other required tasks. If your storefront already shows as ready, nothing changes.
- Whether you’re buying or selling, requests you bring to Murph now keep their type, urgency, and blocked action together for follow-up. Product ideas stay distinct from urgent support problems, and there is nothing to change on your side.
- Buyers with a selected Meta ad account can now inspect recent processing,
- review-issue, recommendation, creative-fatigue, and product-set signals in
ext.scope3_provider_signals. Existing API calls and polling behavior do not- change when no signals are present, and there is nothing to configure. Scope3
- confirms webhook updates against Meta before they affect campaign state;
- polling remains the authoritative fallback.
- You can review your complete storefront plan terms before accepting them and find the same terms later in Plan & Billing. Existing accepted terms do not change; if a private offer requires review at renewal, it stops at the end of its term until new terms are accepted.
4.92.0 — July 21, 2026 at 6:22 AM UTC
- Fixed uploaded video (and other data-URL) creatives silently failing to attach. When a creative was brought into a campaign through the assistant, its media file could fail to link — leaving a creative that showed as “attached” but had no usable asset and could never be trafficked. Brought media is now uploaded to hosted storage with the storage service’s canonical asset identity, the same way a direct file upload is, so it attaches reliably and can be sent to the seller for review. If an upload does fail, the incomplete manifest is removed; an existing asset-less upload is rejected with a clear instruction to delete and re-upload it instead of pretending the creative is deliverable.
- Creatives attached from an earlier conversation, a creative library, a collection, or a copy now reach new and existing media buys with their files intact. Previously, a buy could reach a seller without a reviewable creative and appear to be waiting for approval forever. Buyer and seller views now say that no creatives are attached, so the buyer knows to attach or re-upload one and the seller does not need to investigate an approval queue.
- New organizations now get oriented on the Plan & billing Overview before accepting terms: a “What stays free vs. what needs payment” explainer shows that connecting, browsing, discovery, and reading docs and pricing stay free, while media spend and intelligence-metered activities are paid — with every metered activity priced on your published price list before you run it. The plan summary also states plainly that your plan starts once the platform terms are accepted, instead of implying a plan that doesn’t exist yet.
- TARS now recognizes punctuated leading Slack mentions as human-to-human
- handoffs and stays silent without running an answer-model turn. Murph follows
- the same leading-addressee rule. Direct mentions now route once and reach both
- assistants without addressee punctuation in the model prompt.
4.89.0 — July 20, 2026 at 11:42 PM UTC
GET /api/v2/billing/accountnow returns your recent prepay deposits inpayment.deposits(previously always empty): each row carries the amount, currency, effective date, reversal status, and the payment provider and reference recorded with it, projected read-only from the platform ledger. The Plan & billing page’s Deposits history card populates from the same field. No action is needed — existing consumers pick the rows up with no API changes, and nothing about how deposits are made, invoiced, or billed changes.- Monetization: none — this is read-only visibility into deposits that already exist on the ledger; it does not change invoicing, credit terms, packaging, or pricing. Persona: buyer-side (org admins and the builders integrating the billing document); sellers have no deposit surface and are not implicated.
- Cross-currency media buys now keep the exchange rate shown at booking through approval, retries, delivery reporting, and settlement. Buyers can plan against one stable converted price, and sellers receive settlement based on that same rate across every package. We audited current production buys before rollout; no existing buy needs customer action. If a future retry sends different currency terms, Interchange rejects it before spend starts—the buyer should resubmit with the original terms or a new media-buy ID.
- Rotate a generative creative provider key without disconnecting it or rebuilding its setup. Its label, advertiser assignments, and default status stay in place.
- A fixed price set directly on a product now makes it buyable on its own. A pricing option with
is_fixed: true, a positive rate, and a currency counts as complete pricing — the product is visible to buyers without waiting for ad-server pricing history or uploading a wholesale feed (auction-priced products still need one of those two paths for their percentile guidance and availability). The readiness checklist also stops double-reporting one unresolved-pricing problem: when the “Products available” check already blocks with the upload remediation, the wholesale feed-freshness row no longer appears as a second red row for the same fix. - The Plan & billing page now shows more of your account’s history at a glance. The Overview tab lists recent commercial activity — agreement acceptances (including who accepted and when) and credit application milestones (submitted, approved with the granted limit, declined, or withdrawn) — instead of a permanent empty state. On the Usage & credits tab, day-by-day intelligence spend renders as a time-series chart with per-day amounts on hover.
- The Plan & billing chat widget now matches the web page’s balance treatment: an untouched credit line (nothing funded or owed) renders as quiet credit headroom instead of a hero number, so the big figure appears only when it carries news. The usage summary also names your top intelligence-usage feature and its share of spend instead of a generic note.
pause_campaignnow returns the full cascade result includingtotalMediaBuys,successCount,failureCount, and per-buymediaBuyResults. Previously the response always reportedsuccess: trueeven when all ADCP calls to the seller agents failed — callers had no way to distinguish a clean pause from a total cascade failure. The always-truesuccessfield is removed; callers should checkfailureCountto determine whether the pause reached sellers. Sellers are not affected: this change is to the buyer API response shape only; the ADCP calls to seller agents were already occurring before this change.
4.88.0 — July 20, 2026 at 7:44 PM UTC
- People who sign up with an organization’s verified primary email domain now join that organization as members by default when the domain identifies only one organization.
- Organization settings → Members now shows members, admins, pending invitations, pending access requests, and the accounts each active member can access.
- No action is needed to keep this default. Admins who want to review every new member can turn off Domain auto-join in Organization settings. Joining the organization does not grant access to child accounts.
- Added
ad_unit_nodeas a supported FreeWheel selector type for browsing ad-server selectors, matching FreeWheel’s real inventory taxonomy. Previously it was missing from the selector-type list, so sellers could not browse or search FreeWheel ad unit nodes through this capability.
4.87.0 — July 20, 2026 at 6:29 PM UTC
- Every Plan & billing tab now shares the redesigned look. No action needed.
- Plan & pricing: your effective terms, rate provenance, and IU plan render in the same clear card-and-stat layout as the rest of the page, with plan selection and renewal management working exactly as before.
- Payment & invoices, Contracts & orders, and Media billing: same content and actions, cleaner presentation.
- Setup answers now preserve every complete command in documented CLI sequences and omit unrelated internal work from customer and prospect guidance.
- New publishers no longer dead-end on pricing or domain authorization. Readiness now measures what buyers can actually purchase: when products exist but none are visible to buyers because pricing is unresolved, the “Products available” check blocks going live and says so directly (e.g. “3 products created, 0 visible to buyers — pricing unresolved”) with a link to fix it. A new
GET /api/v2/storefront/inventory-sources/{sourceId}/wholesale-pricing/templateendpoint returns a pre-filled CSV — one row per ad-server selector your products reference, with ids, names, settlement currency, and dates already filled in — so you only add CPM percentiles and monthly available impressions, and your first committed upload now enables the wholesale pricing module automatically. Declaring a publisher domain now resolves its adagents.json immediately instead of waiting for a background sweep, and every domain carries a machine-readableauthorizationReason(no_file,file_invalid,agent_not_listed,agent_untyped,agent_not_property_bound,authorized) on the publishers API and readiness checklist, so an unauthorized domain tells you exactly what to fix — including pre-3.x adagents.json files that need upgrading to typed authorizations.
4.86.3 — July 20, 2026 at 5:17 PM UTC
- Buyer agents now get the exact public AdCP endpoint when asking how to connect to a storefront. Storefront operators now get the exact management MCP and Codex setup details plus independent GAM advertiser-access diagnostics.
4.86.0 — July 20, 2026 at 3:04 PM UTC
- Adding, managing, and diagnosing an ad-server source now happen in three focused views instead of one crowded screen. Existing connections, settings, and sync schedules are unchanged; there is nothing to migrate. Use the Connect view the next time you add a source, the source page for day-to-day settings, and Sync & diagnostics for health and run history.
4.85.1 — July 20, 2026 at 1:48 PM UTC
- Connected social account campaign lists are now more reliable. Incomplete platform
- responses are rejected instead of being shown as complete, reducing the chance that
- campaigns are missing from buying and reporting workflows. No action is required.
- Murph and TARS now preserve exact storefront connector commands, buyer-facing endpoints, and independent GAM advertiser diagnostics in multi-part setup answers.
- Account administrators can again see older customer-scoped
scope3_API keys while - migrating integrations to account API keys. The API Access page had incorrectly hidden
- legacy keys that were not attached to an individual user, even though they remained
- active.
4.85.0 — July 20, 2026 at 1:21 PM UTC
- Report the correct unique-publisher count when redeeming seller proposals and improve multi-seller ranking measurement.
- The Payouts tab on Plan & billing has a clearer layout. Payout activity now reads as a proper list with status chips and amounts, payout entities show as structured cards with their currencies and masked account details, and empty states explain what will appear instead of leaving blank space. Setup itself is unchanged — no action needed.
- The Plan & billing Overview is easier to read and more informative. No action needed for any of it.
- Text and spacing across the page now render at the intended size — they were previously ~40% too small next to the rest of the app.
- Sellers: the Payouts card now shows your payout entity count and setup status, with a “Set up payouts” shortcut if you haven’t added one yet.
- Buyers on a credit line: until money actually moves, the balance card shows your credit headroom quietly instead of a large number restating your credit limit. The prominent balance returns whenever funds or owed amounts are real.
- The Usage & credits and Accounts tabs on Plan & billing match the rest of the redesigned page. No action needed.
- Usage & credits: your intelligence balance leads with four clear stats (used, remaining, overage, projected), bucket balances render as labeled meters, and the price list and calibration catalog read as proper tables.
- Accounts: the money view of your accounts is a cleaner table with the same delegation, fees, and usage columns as before.
- Existing connections keep working, so no action is required. Settings and Murph
- now use Connections and Connected platforms consistently.
- For buyers setting up a new Meta connection: use an Ad Account owned by a
- Business Portfolio and add the Scope3 Business Portfolio (Business ID:
- 1091793362240769) as a partner. Seller storefronts and how buyers see them are
- unchanged.
4.84.0 — July 20, 2026 at 9:55 AM UTC
- Plan & Billing now separates your immutable published activity prices from the broader Intelligence Unit catalog still being calibrated. Starting rates for merchandising, Murph, generation, analysis, optimization, document understanding, BigQuery, and managed media are clearly labeled as non-billing estimates that cannot change your accepted Rate Card or debit your IU balance.
4.83.0 — July 19, 2026 at 10:53 PM UTC
- Meta audience syncs now reuse the same Meta audience on retries and report a
- failure when Meta does not accept every requested member change or deletion.
- Estimated audience sizes are no longer presented as exact counts, and conversion
- totals include only events Meta confirms. Existing requests do not need to
- change. A sync that previously appeared successful may now return an error;
- investigate that error and retry after the provider issue is resolved.
- The Inventory Components workspace now leads with what to do: a plain-language header explains the job (turn synced ad-server inventory into products buyers can discover), one promoted “Do this next” line replaces the static five-step banner, and mapping statuses speak seller language (“Needs a choice”, “Not matched”, “Suggested match”). Your accept/hide decisions now survive data refreshes instead of silently resetting — they only clear when you switch sources. The workspace also uses the correct term everywhere: it builds Products (the “Packages” tab and drafting actions were mislabeled — a package is part of a media buy, not what you author here).
- Meta connectors now turn a non-empty advertiser brief into a reviewable campaign
- strategy by default. If the objective, geography, creative format, or another
- required decision is ambiguous, the connector asks for clarification instead of
- returning an actionable product based on a guess. API callers that explicitly
- want raw catalogue discovery can continue to use
buying_mode: "wholesale". - Account API keys managed by WorkOS are now the primary credential in API Access.
- Legacy personal keys appear only for accounts that still have them, with guidance to
- replace and revoke them; customers can no longer create, edit, or reveal a legacy key
- from the Interchange UI.
- Spotify connections now return only advertiser-authorized audiences, Pixels,
- and Conversions API integrations. They no longer substitute demo audiences,
- claim ignored customer-list changes succeeded, expose approximate audience size
- as an exact match count, or hide partial audience deletion.
- Buyers may see fewer audience or measurement objects because unverified and
- synthetic results are no longer returned. Server-side conversion ingestion is
- shown as unavailable instead of accepting events without a provider-confirmed
- outcome.
- No migration is required. Re-run Spotify audience or event-source discovery
- before relying on an existing object; use only the returned advertiser-owned
- identities. Customer-list replacement and conversion event ingestion remain
- unavailable until Spotify can provide safely reconcilable write receipts.
- Reddit-connected buyers now get provider-issued Pixel IDs, account-authorized server events, and retry-safe customer-list updates. Buyer and provider audience aliases share one tenant-owned operation identity, so another connection’s same-account audience cannot be changed by raw Reddit ID. Failed or ambiguous Pixel, audience, and conversion operations now stop with an explicit error instead of reporting success. No credential change is required; existing unowned lists remain readable but fail closed for writes. Dedicated live verification remains in progress.
- Google Ads media-buy updates now use provider-derived revisions and exact
- readback for supported Search, Display, Performance Max, and Demand Gen
- campaigns. Pause/resume, seller-package budget, supported ad-group bid, and
- advertiser-timezone schedule changes validate account and package ownership,
- reject stale revisions before writing, and roll back or pause the campaign if a
- multi-entity update cannot be completed safely.
- Cancellation now makes an active campaign non-serving before removal and waits
- for Google to return terminal removed-campaign history. Accepted but
- unconfirmed removal is returned as a reconciliation error, not a completed
- cancellation. Reporting-only Google campaign surfaces advertise no write
- actions. These capabilities remain pending signed staging evidence and are not
- yet marked Green.
- Seller persona: not applicable. This changes only buyer-directed writes to
- connected Google advertiser accounts; it does not alter a seller storefront or
- anything buyers see about a seller.
- Fixed an existing Meta server-side conversion workflow that could stop when a
- request named a tracking source but not an ad account. Scope3 now uses the
- ownership learned by the existing tracking-source sync, rechecks access before
- every send, and stops safely when that access cannot be proven.
- If you use event-source-only conversion requests, continue to sync the Meta
- tracking sources for that ad account once first. Existing requests that already
- name an account are unchanged. This buyer-side fix does not change seller
- storefronts, ranking, or reporting.
- Existing Meta creative calls are unchanged. Buyers enrolled in seller-managed campaign writes can now attach one image-feed creative to one existing paused package with
sync_creatives.assignments; Scope3 durably records the provider ad, reconciles retries without creating another ad, and confirms the paused provider assignment before reporting success. This is a separate post-create operation: the current assisted decision plan does not choose or bind creative and actor fields. Multiple assignments, assignment weights, placement-specific assignments, carousel, and generated formats remain unavailable. - Buyers enrolled in directed campaign writes can now compare the targeting
- requested for a Meta media buy with Meta’s current normalized targeting on
- every read. Invalid or ambiguous geography stops before any provider write,
- and missing audit data fails clearly instead of hiding what changed. The new
- read fields are additive and optional, so existing clients need no changes.
- No setup changes are required. Organization SSO sign-in now keeps each user in the correct account and gives administrators clear guidance when WorkOS membership or organization setup needs attention.
- The Plan & billing Overview tab has a clearer layout. The page now leads with a next-action card that shows where you are in billing setup (accept terms, add billing details, fund your account — whichever applies to your organization) instead of a warning banner, and a new Quick links card puts API keys and the billing docs one click away. Nothing changes about your plan, balances, or billing itself — no action needed.
- Meta campaign plans now show product pricing and budgets in the connected ad
- account’s currency. Accounts that use another currency no longer see
- dollar-based minimum prices or forecasts presented as local guidance.
- Interchange checks that the plan and budget use the same currency before
- creating a campaign. Nothing changes for existing campaigns or raw campaign
- creation. If your integration uses assisted plans, send the connected
- account’s three-letter currency code in both the request and its total budget.
- Storefront administrators can now manage shared API keys using their existing
- Interchange access without requiring a second WorkOS administrator role. API
- Access also labels personal-key creation explicitly and describes shared keys
- without using “programmatic access.”
- Meta, Snap, TikTok, Pinterest, Reddit, and LinkedIn connectors no longer return active
- demo audiences when provider inventory is empty or unavailable. Empty accounts
- return an empty signal list, while provider and pagination failures return an
- error so agents cannot target fabricated identity. Reddit, TikTok, and LinkedIn
- now exhaust bounded, identity-validated audience pagination before returning a
- successful signal inventory. LinkedIn validates
paging.totalwhen supplied - and otherwise proves completion through bounded short-page exhaustion.
- Plan & Billing now presents IU terms as one coherent experience: a concise plan comparison on Plan & pricing, including the effective included-IU rate separately from the overage rate, and a unified balance, forecast, setup-credit, and published activity-price view on Usage & credits.
- Meta connectors now discover Pixels and Datasets from the selected ad account
- instead of substituting the ad account ID. Empty accounts return an empty list,
- and installation guidance and Event Match Quality are shown only for sources
- Meta confirms on that account. Conversion events are not sent when ownership or
- complete inventory cannot be verified. Request/context account mismatches and
- pagination that changes API version, account, or resource also fail before any
- Meta write.
4.82.0 — July 19, 2026 at 9:22 AM UTC
- The ad-server product setup path got a substantial clarity pass. Connecting an ad server: the create button now stays disabled until required fields are filled, jargon fields (network code, agency id, namespace, floor price) carry plain-language hints, and the Google Ad Manager steps say how access is verified. Inventory Components: a misleading “Synced” badge is gone, every Ask-Murph hand-off now confirms success or reports failure, load errors are retryable in place, and partial data loads show a notice instead of looking complete. Inventory Selector: “Selection sent to Murph” now appears only when the send actually succeeded (failures show a retry), the selection task closes itself on success, failed branch loads are recoverable per row, and the tree is fully screen-reader navigable. Error text and links meet contrast standards in both themes.
- Meta-connected buyers can keep one JPEG or PNG creative upload inside compatible
- agent hosts instead of leaving the campaign workflow to finish the asset in Ads
- Manager. The Task checks the image in the browser, uploads it to private
- storage, and returns a stable creative reference without exposing image bytes
- or temporary storage URLs to the model. Availability remains gated on private
- ingress setup and successful Claude and ChatGPT validation.
- Approvals and Source Diagnostics got a round of reliability and clarity fixes. Approvals: decisions now write an activity line to the chat, the approve confirmation says the real reason when a pre-screen is still running, failed history or pre-screen lookups no longer masquerade as “nothing here”, Ask-Murph failures are surfaced, and screen readers get proper expand/collapse and severity cues. Source Diagnostics: a failed load now retries in place, partially loaded evidence shows a notice instead of looking empty, recommended next steps appear above the evidence tables, and copy buttons report when a copy fails. Error text in both widgets now meets contrast standards in light and dark themes.
- Buyers enrolled in Meta seller-managed campaign writes can now turn a brief
- into a reviewable decision plan, accept it together with the exact future
- create intent, and bind that one-time authorization to campaign creation.
- Pass-through creates remain backward compatible and are recorded as raw, so
- they cannot be mistaken for Scope3-assisted targeting or creative decisions.
- This first assisted contract stays paused and intentionally leaves inline
- creative execution to a future separate creative assignment workflow.
- The accepted Meta plan also binds an immutable product, pricing, objective,
- targeting, and campaign-name execution snapshot. Missing or mutated stored
- products fail before Meta mutation, pre-feature raw idempotency hashes still
- replay, and plan cleanup cannot cascade-delete the durable write journal. Plan
- audit rows remain available for at least 30 days and are then eligible for
- bounded best-effort cleanup on later planning traffic.
- Buyers can now list a campaign’s saved creatives from the canonical plural REST
- route and compare each one with the creative created by a connected platform or
- sales agent. Existing creative reads and the legacy singular route keep working;
- no client migration or setup change is required. The optional
platform_links - field exposes the agent, provider creative identifier, sync state, approval
- state, and latest sync time when those values are available.
- Claude, ChatGPT, and other generic MCP clients can now inspect the exact AdCP
- request fields for a connected ad-platform storefront before they create or
- update a campaign. Clients should call
get_adcp_tool_schemaand follow its - bounded nested paths instead of guessing targeting, creative, budget, or
- lifecycle shapes.
- Ad-server refreshes now reliably use the connected source’s correct internal identifier after access or permissions are updated.
- Buyers enrolled in directed campaigns can now retrieve their complete LinkedIn
- campaign inventory through Interchange. Campaign status, currency, budgets,
- schedules, revision, available actions, and creative review state come from the
- connected LinkedIn account. If LinkedIn cannot prove the account snapshot is
- complete, Interchange returns an error instead of incomplete campaign data. No
- setup change is required.
- Connected Pinterest accounts now return complete campaign, package, and creative inventory with the account’s actual currency. If Pinterest cannot provide a complete, account-safe read, the request reports an error instead of returning partial data. No action is needed.
- Pinterest media-buy updates now verify the selected account and current provider
- state before writing, mutate package budgets and flights at the owning ad-group
- or campaign CBO boundary, and reconcile every success from a fresh provider
- readback. Stale, unsupported, cross-account, partial, or unconfirmed terminal
- updates return a clear error instead of reporting unverified success. No action
- is required.
- Reddit campaigns pulled through your connected account now include the full
- account inventory and its actual currency. When Reddit cannot return a
- complete, account-safe campaign or performance view, the request reports an
- error instead of showing partial data as complete. No action is needed.
- Reddit-connected campaigns now preserve exact bounded budget changes, reject
- stale updates, and confirm cancellation from provider state before reporting
- completion. Existing campaigns and seller workflows are unchanged. No action is
- needed.
- Snap connected-account reads now return complete campaign, creative, media, audience, account, and catalog inventory with the actual account currency, campaign status, package budgets, and requested delivery snapshots. If Snap cannot provide a complete or safe read, the request returns a clear error instead of partial data. No action is required.
- Snap media-buy updates now verify account ownership and current provider state before writing, update the selected package budget, attach creatives atomically, and confirm campaign cancellation from deleted-entity readback. Stale or partial updates return a clear error instead of reporting an unverified success. No action is required.
- Spotify account and creative reads now include every paginated campaign, ad set, and ad instead of silently stopping after the first 50 results. Incomplete provider responses fail safely rather than appearing to be a complete account snapshot.
- Fixed two issues where a media buy’s delivered flight dates and reported status could drift from reality: shortening a campaign’s end date after it was submitted for storefront approval, but before it was delivered, could be silently dropped so the ad server kept running the original, longer end date; and a media buy that failed once and then succeeded on a later retry could be stuck showing a rejected status even though it was actually running.
- TikTok account reads now return complete campaign, ad-group, ad, creative, and requested reporting inventories or fail clearly instead of silently returning a partial result when provider pagination is incomplete.
- Buyers enrolled in directed campaign writes can now pause or resume TikTok
- campaigns and change package budgets, bids, and end dates through Interchange.
- Cancellation appears complete only after TikTok confirms it. If TikTok applies
- only part of a change, Interchange either restores the prior settings or reports
- clearly that manual review is needed. No setup change is required.
- WorkOS organization API keys now authenticate correctly as Bearer credentials,
- carry the customer context required by buyer and seller route guards, and return
- non-cacheable credential responses. M2M applications return and verify credentials
- through the environment’s AuthKit domain.
- Social adapter readiness checks can now verify the same paused, future-start,
- no-spend campaign lifecycle across Meta, TikTok, Pinterest, Reddit, Snap, and
- Spotify. This adds a validation path only; an adapter is not considered live-ready
- until its signed provider canary passes. Seller storefronts and seller workflows are
- not affected. No action is needed.
- Buyers enrolled in directed campaigns can now retrieve their complete current
- Google Ads campaign inventory through Interchange, including active, paused,
- completed, and removed campaigns. Campaign currency, budget, dates, status, and
- package details come from the connected advertiser account. If Google cannot
- prove that the account view is complete and belongs to the selected advertiser,
- Interchange reports the problem instead of showing partial campaign data.
- New Google campaigns also keep the package, product, pricing option, and budget
- selected by the buyer when they are read back. They remain paused until their
- creative is created and Google confirms that the campaign is ready to run. No
- setup or client change is required.
- Buyers enrolled in directed campaign writes can manage LinkedIn campaigns with
- provider-backed conflict detection and readback. LinkedIn media buys now retain
- one stable campaign/package identity, honor paused creation, use account
- currency, and support pause/resume, total-budget, bid, end-date, and terminal
- deletion transitions. Interrupted changes are restored or paused for
- containment instead of being reported as successful.
- Existing read behavior and setup remain unchanged; writes stay limited to
- enrolled accounts.
- Invited staging organizations can now review the exact Intelligence Unit Rate Card available to them, choose a plan, keep an eligible storefront on pass-through at no cost, or decide later. Interchange records the version shown and the administrator’s response so pricing can be evaluated before a production rollout. This pilot does not publish production pricing or enable metering, invoicing, or payment collection.
- The storefront Setup checklist now recovers in place when it fails to load: a Try again button retries without reopening the widget, and a failed background refresh keeps your checklist visible instead of replacing it with an error screen. The publisher-domain detail appears only while a domain still needs authorization, the go-live progress bar is announced correctly by screen readers, and error text meets contrast standards in light and dark themes.
- Buyers enrolled in directed campaign writes can now safely pause or resume
- Spotify campaigns and update package budgets, bids, end dates, and delivery
- state through Interchange. Each change checks the current Spotify revision and
- is confirmed by a complete provider readback that rejects unrequested state
- drift. Exact currency micros, strict schedules, provider identities/statuses,
- and a bounded account-operation deadline fail closed. Spotify does not offer a
- true campaign cancellation operation, so cancellation now returns a clear
- unsupported response instead of presenting a reversible pause as canceled.
4.81.0 — July 18, 2026 at 8:09 PM UTC
- Storefront marketplace cards and hosted AdCP capability responses now state who bills you for media, using AdCP billing-party vocabulary at the protocol-native slot (
account.supported_billing):agentmeans Interchange clears the transaction and bills you;operator/advertisermean the seller or your connected platform account bills you directly.
4.80.0 — July 18, 2026 at 7:39 PM UTC
- Anonymous Agent Registration identities can now verify read-only, zero-spend sandbox access before they are claimed by a customer organization. Claimed agents still require the organization to accept the Terms of Service before customer-bound access.
- Anonymous Agent Registration identities can now use the canonical buyer advertiser read endpoint during their zero-spend sandbox trial. Mutations, nested advertiser routes, MCP, and money-moving endpoints remain denied until claim.
- Storefront Activity now opens reliably from the Operate rail, notification
- polling no longer produces repeated request errors, and the Media Buys, Pending
- Operations, payout-currency, and source-diagnostics states stay coherent in
- Portuguese and Japanese.
- This restores the existing Activity rail action to its already-shipped typed
- Storefront tool; it does not add a new seller capability. Buyers are unaffected,
- and no action is required.
- Murph now returns portable widget launch directives directly and stages report requests as real approval controls instead of making text-only offers.
- Agent Registration requests now carry their database-backed customer role and account type through normal buyer authorization guards, allowing zero-spend advertiser reads while continuing to reject seller-bound and deleted customer identities.
- You can now see your Intelligence Unit (IU) plan, balance, and usage in one place. Plan & Billing shows your plan — pay-as-you-go or committed — plus your signup credit, any IUs carried over from last month, and your included IUs. It also shows how many you’ve used this cycle, a projection for the rest of the month, and any overage building up. Overage shown here isn’t charged yet. There’s nothing to change on your side.
- Storefront Activity now follows the seller’s selected language when Calls are
- available and when the account uses the Changes fallback. No action is required.
- IU plan selection now presents prices, savings, rollover, and acceptance terms
- in a calmer two-step rate card. Plan & Billing also gives account standing,
- available funds, current intelligence spend, and any required action a clearer
- visual hierarchy without changing prices or billing behavior.
- Today’s standard IU Rate Card draft is unpublished. Its displayed 4-IU activated-social-account rate is only the current coarse-denomination planning value: the final denomination and IU count are not set, and the activity is not charged. Once a finalized Rate Card is published for your organization, Plan & Billing will show one organization-wide IU plan for buyer, storefront, Murph, and other IU-rated activity, including exact plan prices, your corporate discount, rollover terms, and activity prices before an authorized administrator accepts it. When the offer becomes available, an eligible new seller billing account can receive one 100-IU credit for storefront setup, valid for 60 days and limited to one per billing organization. No action is required until an effective Rate Card is shown to your organization.
4.79.0 — July 18, 2026 at 4:31 PM UTC
- Storefront sellers can now run setup and day-to-day operations in the display
- language selected in Interchange. Portuguese and Japanese sessions keep widget
- labels, dates, numbers, currency, and post-action confirmations consistent with
- the surrounding interface.
- Publisher signup now keeps Storefront intent through account creation and
- leaves optional marketing consent off by default. No action is required.
4.77.0 — July 18, 2026 at 11:00 AM UTC
- Meta creative sync now rejects native-localization requests before uploading media instead of silently creating an untranslated ad.
4.76.0 — July 18, 2026 at 9:20 AM UTC
- Enrolled buyers can turn an advertiser brief into a read-only Meta campaign plan with explicit objective, audience, creative, measurement, and setup decisions. Ambiguous, excluded, or unsupported targeting returns questions instead of guessed inclusions. This capability remains gated pending signed live evidence; existing product listing and campaign creation calls do not change.
- Meta directed-campaign mirrors now fail safely instead of omitting native exclusions, audiences, locales, behaviors, or placement constraints. When a complete account sync cannot represent an ad set’s targeting, the prior complete mirror is retained and the subscription reports an error.
- Meta directed-campaign delivery now returns every ad-set package, including zero-delivery packages, account-currency spend, and the provider’s effective campaign status even when optional catalog attribution is unavailable. Invalid package totals, currency precision, or requested device reports fail closed. Provider-suppressed geography attribution remains visibly truncated instead of failing the authoritative campaign total or appearing complete.
- Buyers enrolled in Meta directed campaign writes can now keep one creative ID from upload through paused campaign creation, then read back its assigned ad set and Meta review status. Before syncing an image, provide an authorized Facebook Page ID (and an Instagram account ID when needed) and host the JPEG or PNG at a public HTTPS URL. Campaigns remain paused while Meta reviews the creative.
- Meta account connections now keep the last complete account list when a refresh fails, and buyers can select only active advertiser accounts. Account status, hierarchy, labels, and currency remain consistent across refreshes, including correct financial values for currencies such as JPY and KWD. No setup change is required.
- Managed Google Ad Manager orders now stay pending while forecasting finishes and count as approved only after GAM confirms approval.
- Meta creative sync and inline offering creation now discover Facebook Pages authorized for the selected ad account. When exactly one Page is available it is selected automatically; ambiguous selection returns paged ID-and-name choices, and unauthorized Facebook Page or Instagram identities fail before any provider or ledger write.
- Meta directed campaign creation now verifies the provider campaign, ad set, ad, creative, source media, and configured status before reporting success. Malformed, substituted, cross-account, or partially activated provider hierarchies fail closed and are cleaned up safely.
4.75.0 — July 18, 2026 at 12:26 AM UTC
- Buyer teams can now set up credentials for agents, scripts, and backend integrations without contacting Scope3. Organization admins can manage API keys in API Access settings, while existing
scope3_keys keep working. Test a replacement with a successful request before retiring a working key. - Campaigns can no longer commit more spend than your available Scope3 credit. When you activate a campaign — or raise its budget — in a way that would push your committed spend past what your funding and credit line cover, the API now returns HTTP 402
CREDIT_LIMIT_EXCEEDED, with the shortfall and your current balances inerror.details. Creating a campaign is never blocked: if its budget already exceeds your available credit, the create response carries a non-blocking warning instead. Free up committed budget by pausing or archiving other campaigns, or add funds, to clear the block. - This is gated by a feature flag and off by default, so nothing changes for your account until it is enabled.
- Before creating a Meta campaign, include an explicit country for every package and every postal-code target. Campaign creation now stops if Meta applies different geography, protecting brand and agency teams from approving spend against the wrong market. Existing campaigns and requests that already include valid geography need no changes.
- Fixed
PayloadTooLargeError(413) onupdate_media_buywebhook callbacks. Seller-returnedaffected_packagespayloads for multi-package updates can exceed the previous 64KB body-size cap; the limit is now 15MB (matchingget_products) forupdate_media_buyand remains 64KB for all other task types. - Also fixed async
update_media_buyrequests not being tracked correctly: the task ID a sales agent returns for a still-processing update is now persisted, and the webhook that later confirms completion is now matched against that task ID (in addition to our own buyer reference) when correlating it back to the right media buy. - Fix stale source health for external sales-agent inventory sources. Source-health diagnoses now offer a read-only discovery recheck that records the actual
get_productsresult before returning, and an hourly background recheck clears recovered sources without waiting for buyer traffic. - Catalog-driven social buys now preserve item-level delivery attribution when
- packages use the canonical AdCP catalogs array. No action is required.
- Seller-managed TikTok campaign writes now accept canonical offering and job catalogs while continuing to reject catalog types the provider cannot apply.
- You can now update a media-buy package’s pacing to
front_loaded(previously rejected only for packages, though products already supported it), sync a catalog feed withfeedFormat: "tiktok_shop","pinterest_catalog", or"openai_product_feed", and set a catalog’stypeto"app"— all previously rejected due to hand-maintained enum lists that had silently drifted from the underlying protocol. - Improves managed-storefront buying by applying channel, market, and format filters consistently; presenting canonical creative formats without legacy media-type leakage; surfacing per-source rejection reasons when a buy fails; and accepting clear natural-language approvals for the exact pending action while failing closed on ambiguous replies.
- Fixed the buyer creative library tool (
list_advertiser_creatives) so it shows every creative saved on an advertiser by default, matching what buyers already see on the web platform. Previously it only showed creatives explicitly promoted to the reusable library, so a creative uploaded on the web but not yet promoted could be invisible to an agent over MCP and fail to attach to a campaign. - Fixed a bug where an uploaded creative (for example, an audio ad) could be saved as the wrong media type and left unplayable when its upload reference never resolved to the actual file — most commonly a same-session file reference reused on a later turn. The upload is now rejected with a clear “please re-attach it” notice instead of being silently guessed as an image.
- Storefront delivery polling now retries within the hour when a source returns no usable per-day delivery for the day yet (e.g. its numbers finalize a few hours after midnight), instead of waiting for the next scheduled read. Retries are bounded per slot: after several hourly attempts without data the route defers to its next fixed read and records a diagnostic, so a source that reports no daily breakdown can’t be polled indefinitely. Each scheduled read starts a fresh retry cycle, so a day’s failures never carry into the next.
4.74.0 — July 17, 2026 at 6:39 PM UTC
- Fixed the storefront catalog-change webhook for sellers connected as a direct agent (not a managed/ESA connection): it previously accepted the request but never actually refreshed the cached product or signal catalog, so proactive change notifications were silently ignored.
execute_campaignnow returns an error instead of a false success when a campaign has never launched and has no media buys to execute (for example, no product was ever selected). Previously this case reportedsuccess: truewithmediaBuysExecuted: 0, leaving the campaign silently stuck in draft while telling the buyer it was activating. Re-executing an already-active or paused campaign with nothing new to dispatch still reports a successful no-op, unchanged.- Fixed two issues with media buy budget updates on multi-format buys. Budget changes could be applied to the wrong ad format when a seller confirmed packages back in a different order than they were sent, and a budget change for a format without an approved creative yet could be silently dropped instead of reaching the seller.
- Fixed a bug where Murph could show raw placeholder text like “(that field, that field, that field)” in a reply instead of a clean sentence, when it needed to redact more than one internal detail at once.
- You can now target
reachas a campaign optimization goal (previously rejected due to a stale internal list). Validation errors for an unsupported optimization-goal value now name the specific field and list the accepted values, instead of a bare “Invalid input” message. - Social delivery reporting now retains catalog-item attribution in durable,
- provider-isolated storage. Aggregate delivery remains available if optional catalog
- enrichment is temporarily unavailable. No action is required.
- Plan & billing tightens up from design review: internal platform usage no longer appears in your intelligence usage, unknown renewal data is hidden instead of labeled “not available”, rate rows explain decisioned vs routed in plain language, the payer-of-record card states its scope, and placeholder cards for unshipped features are gone.
- Murph now stays silent when an ordinary human-to-human Slack message is mistaken for an account-specific request, instead of interrupting with a prompt to tag Murph.
- The storefront catalog-change webhook now returns the underlying reason (e.g. “brand.json fetch returned HTTP 404”) in the error body when RFC 9421 signature verification fails because your agent’s
brand.jsoncouldn’t be fetched, instead of a generic “verification unavailable” message.
4.73.0 — July 17, 2026 at 2:01 PM UTC
- If you sync event sources without a
mappingobject, nothing changes. If you do sendmapping, you must switch its field names to camelCase — the retired snake_case keys are now rejected with a validation error instead of being silently dropped, so integrators wiring event-source sync should update before their next call. Themappingobject (a Scope3 extension onsync_event_sources) now useseventIdField,eventTypeField,eventTimeField,userMatchFields,valueField,currencyField,orderIdField,contentIdsField,consentField, anddedupeStrategy, matching the shape event-source reads already return — this fixes the opaque “Invalid input” a caller hit when mirroring a read back into a write. The ADCPsync_event_sourcesfields themselves (event_source_id,event_types,allowed_domains,integration_platform,test_event_code) are unchanged, and there is no seller-facing change. - Wholesale optimization now rejects unsupported pricing models before pacing or
- profitability calculations instead of silently treating them as CPM, zero, or
- missing revenue.
4.72.0 — July 17, 2026 at 12:17 PM UTC
- Agents can now request a payment method: the
add_payment_authoritytask returns a single-use secure link the cardholder opens to enter the card directly with the payment processor (no sign-in needed), and the task reports verified once the card is saved. Card details never pass through the agent or the API. - If a card payment fails, you don’t lose access. We retry automatically at 3 and 7 days and email you at each step. If the charge still hasn’t gone through after 10 days, we pause new paid actions only — new credit spend, media commitments, and upgrades — while reporting, data export, campaigns already delivering, and your Plan & Billing page keep working. Update your card and pay, and everything resumes the moment the charge succeeds. We’ll also email you about 30 days before a saved card expires.
- Creating another account under an existing organization no longer treats the
- organization container as a storefront, and newly created buyer or storefront
- accounts now stay attached to the same canonical organization record.
- Fix routed media buys failing to forward to sales agents that require an explicit buyer confirmation. A storefront-approved routed buy is now forwarded with
buyer_confirmed: true, so sales agents that gatecreate_media_buyon buyer confirmation accept the buy instead of rejecting it (previously surfaced to the seller as “Forward failed”). The flag is set only on the create forward — the buyer’s storefront submission plus the seller’s approval are the confirmation — and never on subsequentupdate_media_buycalls. - Creative-format documentation and API descriptions now consistently label
{agent_url, id}references as legacy-v1 compatibility data. Canonical AdCP- 3.1 product formats remain URL-free
format_kindplusparamsdeclarations. - Media billing polish from a design review: currency renders as a chip everywhere, loading placeholders reserve the right space, the resolution chain marks the matched step with a check (not color alone), the target picker is screen-reader labeled, and the country field shows its help and errors inline like every other field.
- On phones, the address rows in the billing-entity and payout forms now stack instead of crushing; radio choices and dropdown errors render through the standard controls.
- Embedded sales agents now use URL-free AdCP 3.1 creative declarations, pass
- inline HTML tags and their dimensions through to Google Ad Manager, return
- wire-valid pending statuses, and preserve seller approval tasks when a recovered
- media-buy request is replayed.
4.71.2 — July 17, 2026 at 11:58 AM UTC
- Cross-currency storefront buys now convert both package budget and bid price
- back to the seller’s settlement currency before forwarding to an inventory
- source. This keeps the CPM and resulting delivery goal consistent with the
- booked FX budget.
-
slack
- Cross-currency storefront forwarding now keeps source CPM bids and budgets in
- the same settlement currency, preventing incorrect delivery goals.
4.71.0 — July 17, 2026 at 9:46 AM UTC
- Upload CSV, XLS, or XLSX modular avails files directly through the storefront API and receive the same normalized, row-level preview used by structured feed inputs before confirming a commit.
- Storefront media-buy delivery reporting now refreshes reliably instead of being skippable for a full day. When an upstream source hasn’t finalized a day’s delivery at read time, the route is now retried within the hour until the data lands, rather than waiting until the next day. Every delivering media buy is also read twice daily instead of once, so late-finalizing delivery is picked up the same day.
- Meta campaigns created through directed buying now stay paused until they are deliberately activated. Budget changes use the selected Meta account’s currency, unsafe increases are blocked during testing, and canceled campaigns return a complete final state. Nothing to change on your side.
- Connected-platform campaign mirrors now preserve campaigns that a provider omits from broad account listings. Interchange verifies omitted campaigns through bounded, resumable reads before treating absence as authoritative, so provider-canceled campaigns and their package history remain available while incomplete reads retain the last valid mirror. Nothing to change on your side.
4.70.1 — July 17, 2026 at 6:00 AM UTC
- Ad-server-backed product updates now preserve canonical AdCP 3.1 format options as URL-free
format_kindandparamsdeclarations. Full product updates no longer drop these options or reintroduce legacy creative-agent URLs. -
slack
- Canonical product format options now survive the ESA full-update flow without
- agent URLs. Legacy creative-format references remain available only for
- explicit v1 compatibility.
4.70.0 — July 17, 2026 at 4:03 AM UTC
- Talk to Murph with an MP3, WAV, or M4A attachment. Murph can understand the spoken content for the current conversation while keeping the original file available to creative tools. Nothing to change on your side.
- Buyer integrations now receive canonical creative formats without agent URLs. Existing legacy format IDs remain available in their compatibility field, so no buyer changes are required.
- Storefront operators can now retry an approval that was incorrectly marked as forwarded. The recovery option is available only when every source attempt failed before creating an upstream media buy or task.
4.69.0 — July 17, 2026 at 3:08 AM UTC
- Buyers can now discover live, account-specific products in their own currency when a seller prices them in another marketplace-supported currency. Nothing needs to change on either side.
4.68.0 — July 17, 2026 at 2:18 AM UTC
- Clarified Intelligence Units (IUs) in the glossary and linked the term to current
- plan and billing details.
- The seller-managed campaigns alpha is now available to an expanded social-adapter test cohort. Enrollment exposes account mirroring and delivery reads; it does not subscribe accounts automatically or authorize upstream writes.
- Meta campaign mirrors now use provider-supported account filters and ad review fields, allowing account-wide reconciliation runs to succeed. Nothing changes in existing requests.
- Fixed wholesale pricing CSV uploads in Murph chat that silently failed to resolve when a seller attached the file without narrating it, and fixed the ad-server source id Murph could pick when pointing a wholesale pricing upload at the wrong source.
- Generating creative from an attached image now grounds the draft directly on your upload — no reference-picker detour — and generation on a bring-your-own provider key no longer requires a connected seller storefront. The reference picker opens only when you ask to pull in more library references.
- Customer release messages now preserve every approved update, use clearer customer-facing language, and state whether action is required. Recipient selection remains based on declared audience and feature relationships rather than generated copy.
- Code examples and tables in Murph answers are now easier to scan. Fenced code shows its language and can be copied in one click, while wide tables stay contained within the conversation. Nothing to change on your side.
- Media billing entities can now be managed end-to-end from the tab: set any entity as the org default, or delete one — with the routing consequences stated before you confirm. Also fixes two labels: the entity form’s currency field now reads “Invoice currency” (it previously showed a payout label), and usage cards now show readable feature names instead of raw meter keys.
- Plan & billing no longer shows a “Storefront pricing is unavailable — retry” warning when the viewer simply doesn’t have permission to see plan terms; the retry could never succeed for a permission outcome.
- Reject invalid execution types, source and agent statuses, and protocols in v2 storefront source diagnostics responses.
- Fixed the extra line spacing in your sent chat messages so multi-line inputs read at the same comfortable leading as Murph’s replies.
4.67.0 — July 17, 2026 at 12:02 AM UTC
- Murph now completes long multi-part storefront setup answers and uses the exact documented storefront management connector and authentication steps.
- Campaign creatives now include
storefrontReviewStatusshowing whether a storefront operator has approved, rejected, or is reviewing a creative (pending,approved,rejected,revoked). Null when the storefront uses automatic approval or the creative hasn’t been synced yet.
4.66.1 — July 16, 2026 at 10:07 PM UTC
- Media buys routed to a third-party sales agent no longer fail with a false “source unavailable” when the agent is simply slow to respond — the forward timeout now matches the allowance already given to managed sales-agent sources.
4.66.0 — July 16, 2026 at 8:57 PM UTC
- Data Delivery documentation now accurately lists GCS, S3, and Azure Blob as the
- supported destinations. Snowflake and Databricks remain unsupported reserved values.
- Buyers can now use seller-managed campaigns with any active storefront. A campaign appears as soon as the seller accepts a create, while account history, delivery reporting, creates, and updates each report their own support and health.
4.65.0 — July 16, 2026 at 7:38 PM UTC
- Tightened the buyer navigation rail so section headers sit flush with their rows and the groups share the same even spacing, and made the “add to chat” affordance appear consistently on Catalogs, Conversions, and Activity alongside Campaigns and Creatives. Also fixed assistant chat messages where a standalone year (e.g. “2026.”) was misrendered as a numbered list and where dates could break across lines.
- Buyer and seller account admins now get a diagnostic ID when SSO setup fails,
- and replay-safe setup checks stop after 15 seconds. Retry once if this occurs;
- include the diagnostic ID if you contact support.
- Managed GAM sources now warn when a successful advertiser sync returns zero
- visible advertisers, with guidance to verify the service account’s GAM role and
- team access before refreshing. A successful inventory sync no longer masks
- this separate advertiser-access problem.
- Storefront operators can now see whether each recorded booking is
- Interchange-cleared or seller-cleared on the existing Media Buys page.
- Historical bookings remain clearly marked when their method was not recorded;
- buyers do not see a new seller attribute and cannot choose the method per buy.
4.64.0 — July 16, 2026 at 7:15 PM UTC
- Fixed duplicated impressions and spend in reporting metrics for media buys whose delivery was ingested both before and after source attribution was added. Such a buy could have two copies of the same day’s delivery — one unattributed, one source-attributed — and both survived deduplication and were summed, doubling the totals. Reporting now prefers the source-attributed rows for each media buy and day, and keeps the unattributed copy only when no source-attributed row exists. Applies to both buyer and storefront reporting, in summary and daily timeseries views.
- Organization administrators can schedule a paid storefront plan to end at its
- term boundary and see the exact timestamp the storefront becomes Free. They
- can reinstate automatic renewal before the governing cutoff if the plan can
- renew on the same terms. Every decision remains in renewal history.
- Buyer impact is not applicable to this launch. Buyer pricing and workflows,
- storefront ranking and rendering, and inventory availability do not change. At
- term end, only the seller’s commercial plan state becomes Free; this release
- does not add or change Free-plan entitlement or pass-through enforcement.
4.62.0 — July 16, 2026 at 5:14 PM UTC
- Fix delivery reporting dropping metrics on single-day reports. When a delivery report covers a single day, its reporting rows now read from the report’s root totals and per-package totals (which carry the full metric set, e.g. completed views) instead of the daily-breakdown entry, which a source may leave sparse. Multi-day reports are unchanged. Single-day rows are still stamped at the real delivery day, so this does not affect deduplication.
- The “Add a card” option now appears for organizations that already have a credit line or funded balance — a card can be added alongside existing funding.
- Campaign media-buy status now continues to show completed and other terminal buys after background polling finishes, instead of incorrectly reporting that the campaign has no media buys.
- Settings danger zone now shows buyer-appropriate content. Previously, buyers in the Settings modal saw a seller-scoped archive control; they now see a correctly labeled disabled archive option with buyer-specific copy across all supported locales.
get_media_buy_statusnow reportssource_rejected_creativesas apendingReasonwhen all assigned creatives have been rejected by the source. Buyers can see this in one call instead of investigating separately why a buy is stuck. Not applicable to sellers — this surfaces seller-originated rejection verdicts to buyers; no seller behavior changes.- Campaign creatives now include a
sourceSyncStatusfield showing whether each creative was approved, rejected, or is pending review at each source, with the verbatim rejection reason when rejected. - Nav avatar now shows two initials (first + last) instead of a single letter. Settings rail groups user-scoped settings (Murph preferences, Notifications) under “Your preferences” separate from account-scoped settings. Murph room share is now a single popover that keeps visibility toggling and link copying as separate, non-entangled actions. Both buyers and sellers see these improvements across the shared navigation and settings surfaces.
4.61.0 — July 16, 2026 at 2:55 PM UTC
- The buyer navigation rail now groups sections into two categories: Discover (Marketplace, Activity) and Manage (Campaigns, Creatives, Catalogs, Conversions, Reporting). The advertiser selector is always visible at the top of the rail. When no advertiser is selected, Manage sections show a prompt to select one.
- Campaigns list widget now uses a chip-filter and card-stack layout instead of a data table, matching the 360px chat surface target. Status filter chips (All, Active, Paused, Draft, Completed, Archived) narrow the list in place. Each campaign card shows the campaign name, status, flight dates, budget, spend, and a pacing bar.
- Adds the reversible operating contract for one-storefront modular inventory
- source pilots and clarifies that removing pilot access preserves held and
- booked capacity, open human work, and pending reporting until their normal
- lifecycle actions resolve them.
- Correct storefront approval webhooks to use the canonical AdCP media-buy task protocol and validate every task payload against the SDK wire schema before delivery.
- Fixed a bug where background polling for async
get_productsresponses sent the wrong task ID to the seller. When a seller wraps aget_productscall as an async task, the background poller was using an internal SDK correlation UUID instead of the seller’s actual task ID (e.g.tsk_get_products_...), causing all poll attempts to fail with the seller reporting unknown task IDs. - Fixed
update_campaignrejecting media-buy bid-price changes with an opaque “Invalid input” error. The per-package and per-product update fields now use camelCase —bidPrice,productId,pricingOptionId— matching the casing campaign reads return and the rest of the buyer API, instead of the snake_case (bid_price,product_id,pricing_option_id) the update schema previously required. This removes the read/write casing mismatch that let a budget-only update succeed while an otherwise-identical bid-price update failed. Callers sending the old snake_case names onmediaBuys[].packages[]ormediaBuys[].products[]must switch to the camelCase field names. - Feed-backed modular campaigns now preserve their booked package rate when discovery supplies the catalog’s camelCase pricing shape or omits an unambiguous single-option pricing ID, so final delivery can enter reporting without a pricing error.
- Modular storefront reports now include the booked package pricing required by report processing, and completed route status reaches the buyer media buy promptly instead of waiting for the hourly reconciliation sweep. Nothing to change on your side.
- Plan & billing gains a Media billing tab: define the legal entities Scope3 invoices for media spend, attach them to advertisers or accounts, and ask “who gets this invoice?” for any advertiser — the resolution chain shows exactly why.
- Modular avails previews now keep valid rows visible while reporting rejected rows and normalization warnings with stable row-level diagnostic codes.
- Sellers can now use Activity to inspect their storefront’s tenant-scoped API calls, open safe call detail, and compare those calls with storefront Changes. Buyers keep the same Calls workflow with buyer-specific Changes, now on the shared Activity contract used by portable MCP hosts.
- API Activity remains included in the beta at no incremental charge.
- Murph now uses conversation and connected-room context to resolve informal company and product names before concluding they are unknown, and asks with concrete candidates when the meaning remains ambiguous. Scope3 internal admin and staff operations also stay out of customer-visible Activity history.
- Explain how to choose the supply setup behind a storefront and what sellers need to prepare for a modular source.
4.60.0 — July 16, 2026 at 10:13 AM UTC
- Help and support links are now in the ”?” header menu (no longer buried in the sidebar footer), the Activity tab is always visible in the sidebar without needing to select an advertiser first, and AI usage and Danger zone sections are now available in buyer settings.
- Fixed several visual bugs in buyer and seller widgets found during the 360px parity audit: campaigns widget is now readable in dark mode (hardcoded white backgrounds replaced with theme tokens); media-buy and creative names in the campaign detail wrap to two lines instead of truncating; buyer widgets (reporting metrics, creative intent, reference picker, catalog mapping, event sources) no longer overflow the 360px width target; stat label acronyms (CTR, CPM, etc.) now render in correct uppercase; meta-line items in the seller media-buys list are separated by visible dots.
- Fixed ESA storefronts rejecting HTML creative format IDs. HTML creatives with detected dimensions (e.g. 728x90 banners) were assigned legacy fixed-size format IDs that the ESA validator rejects. Canonical parameterized refs are now produced at creative creation time and translated at the forward boundary.
- Media buys with inline creatives that don’t match a product’s format now forward to
pending_creativesinstead of failing with an error. Assign a compatible creative to complete the buy. - Generative creative now grounds on the references you pick in the reference picker. Library assets and past creatives you select are passed to the model as style references — matching their look, color, and treatment — instead of being noted but ignored. A locked product you add alongside is preserved as a product reference, and references you add mid-session while refining are picked up too. Previously these selections reached the session but never the generator, so output could come back off-brand.
- Organizations can now define media billing entities — the legal entities Scope3 invoices for media spend. Most specific wins: an advertiser’s entity beats its account’s, which beats the organization default. The
/resolveendpoint answers “who gets this invoice” for any advertiser or account. No entity is created automatically — add your organization’s first one to start routing.
4.59.0 — July 16, 2026 at 1:21 AM UTC
- Ask Murph to put your logo on a generated creative and it now sources the logo straight from your brand — no more being asked for a logo URL you don’t have. If your brand has no logo on file, the creative is generated without one rather than stalling.
- Generative creative sessions now flag when the number of concepts you get back
- doesn’t match the number you asked for. If the generator returns fewer (a draft
- failed) or more directions than requested, the session carries a clear notice
- alongside the drafts instead of silently dropping or adding them — and the
- plan’s reported concept count reflects what was actually requested.
- Buyer Activity links now stay on Activity instead of reloading into an empty Murph conversation. Calls and their debugging details remain available in place, with nothing to change for API integrations.
- Buyer reporting now labels spend, eCPM, and CPC with their actual currency across the dashboard, in-chat reporting, time-series responses, and CSV exports. Mixed-currency time-series totals leave money blank instead of adding unlike currencies, and summary requests fail rather than relabel unconverted spend when no FX rate exists. Modular storefront final reports also enter buyer reporting when they include reconciled per-day delivery and an explicit currency. The new CSV currency field is appended so existing column positions do not move. Nothing to change on your side.
- External AdCP buyers can now update or cancel an endpoint-directed campaign through
- the addressed storefront while Interchange preserves governance caps, durable
- idempotency evidence, SCD2 budget lineage, dual-key identity, dark usage metering, and
- campaign commitment reconciliation.
- After you pick a creative direction and it builds across your placements, you can now go back to the directions and switch to a different one without starting over. A ”← Back to directions” control returns you to the picker with your current direction highlighted and the other already-generated directions still one click away — no re-running a fresh set of generations.
- You can now pick a draft creative direction just by naming it in chat — “let’s use the zine/DIY one”, “go with the surreal option”, or “direction 3” all fan out that direction’s placements. Previously only the “Use this direction” button worked; typing the choice made Murph ask you to copy a session ID and variant ID off the card.
- When you tune a generated creative across placements, each preview now shows at its real shape — a leaderboard reads wide-and-short, a half-page tall-and-narrow — instead of every placement rendering as the same uniform box. The tiles pack into a masonry grid and keep their pixel-dimension label, so a 728×90 is instantly distinguishable from a 300×600 while you decide which ones to keep.
- The reference picker now always shows all three source tabs — Sourced materials, Past creatives, and Catalog — even when a source is empty. Previously the tab bar disappeared whenever only one source had items, collapsing the picker to a single flat list and hiding the fact that references can come from any of the three. Empty tabs now carry a proper empty state (attach assets, connect catalog) so you always see every source and how to fill it. The item list is also capped and scrolls, so the picker no longer grows unbounded on large libraries.
- Wide and tall placements now generate at their real shape. When a required placement has an extreme aspect ratio — a leaderboard banner or a skyscraper — and your OpenAI-connected session would otherwise crop it to fit, the render is routed to a connected generator that composes that shape natively (Gemini or FAL). It runs on your own connected key for that provider and is billed to that vendor account, the same as any generation on it. If you haven’t connected a native-ratio generator, the placement still renders on your session provider with a heads-up that it may crop — nothing changes for you until you connect one.
- Starting a generative creative session without naming a concept count now generates three draft directions by default, instead of a single draft. Give a number to get exactly that many; ask for one and you still get one. Behind the buyer-creative-v2 + buyer-generative-creative flags.
4.58.0 — July 15, 2026 at 11:13 PM UTC
- Generated creative now reflects your brand — colors, tone, and tagline from your brand profile reach the image generator on every render, including after you pick a direction and fan out to placements. Previously the brand reference was dropped when a creative session was saved, so reloaded refine and placement renders generated from the brief alone and ignored the brand.
4.57.0 — July 15, 2026 at 10:35 PM UTC
- No action is needed: this release does not publish a paid storefront Rate Card,
- move any storefront to a paid plan, start storefront-plan charges, or change
- buyer pricing. A new-storefront signup can review Free or paid choices once an
- effective Rate Card is separately published. An authorized administrator of an
- existing storefront instead uses Plan & Billing to review the exact version,
- corporate discount, prices, setup grant, committed-IU rollover policy, and term
- before accepting; the page also shows current Free or paid status and immutable
- plan history.
- Buyer Catalogs widget: uploaded (file-based) feeds now show a Reupload action instead of a disabled “Sync now” — syncing only applies to hosted URL feeds — and their status reads “Uploaded” rather than “Synced”. The activation action is now “Save plan” (it persists the activation plan; live execution across campaigns, syndication, and creative is not yet available), and the plan preview no longer advertises a creative-asset count — catalog-driven creative generation stays gated until brand identity and per-format output are in place.
- Storefront operators can now upload their wholesale pricing feed for ad-server-backed inventory sources directly in Murph chat, with a full preview of accepted and rejected rows before anything is committed.
- Managed ad-server sources on adapters without an automatic pricing sync (today, everything except Google Ad Manager) no longer show a false “degraded / contact support” pricing status or retry a sync that cannot run. Instead the source stays healthy and surfaces an actionable prompt to upload wholesale pricing, which is how these sources are priced today.
- Fixed the Campaigns widget lingering in a chat it wasn’t opened in. Opening a recent chat now clears any Campaigns widget from the previous view, so widgets only appear where they belong.
- Creative library and reference-picker widgets now show each image creative’s thumbnail. Uploaded and generated image creatives previously fell back to a generic format-type icon because a preview was only derived from a processed-HTML asset; the creative’s own image is now used when no HTML preview exists.
- Fix: when you upload creative into chat and Murph asks which campaign to attach it to, answering in a later message now attaches the files you already uploaded — instead of Murph saying it can’t see any files and asking you to re-attach them.
- Fix duplicate Slack approval callbacks so one click cannot both file a request and ask for approval again, and give request-tracking guidance that matches the current chat host.
- Generative creative now grounds on your actual inputs and lets you choose a direction before it builds. When you generate creative, Murph presents a few on-brief concept directions to pick from (instead of auto-selecting one), and the direction you pick is rendered across every placement — carrying that concept, your brief, and your uploaded reference images through to each render. Uploaded references now also carry across turns, and placement renders generate in parallel so results come back faster.
- Buyers enrolled in directed campaigns can now send a buy to any active storefront
- while Interchange keeps the campaign, contract, billing context, and delivery
- reporting around that seller-managed buy. Campaign responses identify whether
- execution uses a connected account or the storefront endpoint.
- Fixed under-booking of realized media spend on storefront buys fulfilled by more than one seller. Each seller’s delivery is now recorded as its own ledger entry, so a buy’s booked spend is the sum of every seller’s realized media instead of collapsing to a single seller’s figure. Buys served by a single seller and buyer-direct buys are unaffected. In-flight multi-seller buys are corrected automatically as their deliveries next report.
- When you tell Murph which references to ground a generated creative on (“use the ones I just uploaded”, or name specific creatives), the reference picker now opens with those already checked. Murph passes the named creative ids to the picker, which pre-selects them on the matching tab — you confirm or adjust instead of re-finding and re-selecting them, which matters as your library grows.
- Slack Product Updates now include an Unsubscribe button. Use it to stop future Product Updates in that channel without changing your account’s release history or other connected channels.
- Campaigns created by an external AdCP buyer through one storefront now report
mode: directed, matching the storefront-managed execution model. Inbound direction- remains provenance and does not create a separate campaign mode.
- Re-adding an event source that was previously removed via
sync_event_sourceswithdelete_missingnow restores it instead of failing with a duplicate-identifier error. The revived source keeps its identity and any sales-agent syndication links; its configuration comes from the re-add payload, and its ingestion health resets tonot_seenuntil new events arrive. - Choose whether source outage alerts appear in your primary Slack channel and how long an outage must last before an alert is sent: 10, 30, or 60 minutes. Use the buttons on an alert or ask Murph to change the setting. Immediate in-app and email health notifications remain on.
4.56.0 — July 15, 2026 at 3:55 PM UTC
- When adding your first child account triggers an automatic account structure change, you now see a notification explaining that your billing and contracts have moved to the new parent account.
- Sales Agent Diagnostics can now run its no-spend discovery test, refresh capabilities, and reload durable test results from the in-product widget. Run discovery test now reaches the selected external sales agent instead of returning “MCP app tool call denied,” while capability refresh and prior diagnostic results use the same tightly scoped widget bridge.
- Registering event sources now returns setup guidance in the sync response. Each live source (created, updated, or unchanged) includes a
setupobject withsnippet_typeandinstructions, so the same call that registers a source also tells you where to send its events. Interchange ingests events server-to-server vialog_event, sosnippet_typeisserver_onlyand no client-side tag is returned;instructionsnames the ingestion endpoint and links the setup guide. Failed and deleted results omitsetup. - Generated creative renders now crop toward the most visually salient part of the image when a placement’s shape forces a crop (for example a wide leaderboard or tall skyscraper). Previously the render was cropped to the dead center, which could cut the subject in half; it now keeps the region most likely to hold your subject.
- Media buys no longer fail to forward when assigned creatives are format-incompatible with the selected products. The buy forwards with the compatible subset (or an empty set when none match), and every dropped creative is reported with its creative ID, format ID, and the reason it was excluded.
- Buyers can now ask Murph a plain question such as “Is OptOut available?” from
- any Slack channel. Murph answers from the public listing without requiring a
- connected account or an exact domain. When signed in, buyers can also search by
- the seller or company name they already know.
- For agency teams working in a buyer–seller deal room, a Scope3-declared shared
- channel now keeps that seller visible automatically in the buyer’s **Supply I
- would buy** view.
- For sellers, a clear marketplace-listed brand, storefront name, and domain now
- make the storefront easier for buyers to find and track. Keep that public
- identity current; buyer identity remains private, and no seller action is
- needed unless the listing itself needs an update.
- Only human-reviewed listed storefronts can appear in public answers, and
- relationship tracking begins only after a Scope3 admin declares the
- buyer–seller channel shared.
4.55.0 — July 15, 2026 at 1:24 PM UTC
- You can now declare, update, and remove the publisher domains your storefront covers directly from your agent using
storefront_api_call. The four operations —list_publisher_domains,add_publisher_domain,replace_publisher_domains, anddelete_publisher_domain— were previously unreachable through the agentic dispatch layer. Declared domains go through adagents.json verification; authorized domains appear on your buyer-visible storefront profile and count toward the verified domain total buyers see when evaluating reach. - The organization admin page no longer shows its own Billing tab — billing lives on Plan & billing, and old links to the admin billing tab forward there automatically.
- External agents can now self-register with Interchange using WorkOS credentials. A new endpoint —
POST /api/v2/agent-registrations— lets any agent discover, register, and obtain a credential without Scope3 involvement. Registered agents are provisioned into an UNBOUND sandbox environment with endpoint and spend limits until they are verified and promoted. - Save a card once on Plan & Billing and paid features turn on right away, with nothing charged until your first billing cycle — no invoicing setup required.
- Sellers can now test a connected sales agent’s product discovery directly, see exactly which operations passed or failed, and open the supporting request, response, and trace evidence. The test creates no media buy and spends nothing. Diagnostics also distinguishes a source failure from a storefront composition attempt that stopped before the source was called.
- Third-party sales agents start in finished-product pass-through, so they do not need ingredients. Interchange composition remains a separately provisioned paid add-on and uses only wholesale products the source advertises through AdCP 3.1 or later. Active managed ad-server sources continue to require composition.
- Buyer impact: none. This release does not change buyer protocol behavior or existing product results; it makes the seller’s operating mode and failure evidence explicit.
- Packaging: source diagnostics and the no-spend discovery test are included for sellers at no additional charge. Product composition remains separately packaged.
- Rollout: this is an ungated atomic launch for authenticated storefront operators. Rollback removes the diagnostics launcher and direct-test route without changing buying or selling configuration; disabling the registered launcher is the kill switch.
- Measurement: adoption is the first successful
open_source_diagnosticscall per storefront. Usage is arun_inventory_source_discovery_testresult, segmented by passed, empty, failed, and not reached. Initial acceptance is that every direct test records one durable result and exposes available trace identifiers. - Existing v2 campaign calls keep their current behavior. Enrolled alpha buyers can connect and subscribe an account with a registered AdCP sales agent, then see its seller-managed campaigns in the same campaign list as their other activity. The mirror is read-only by default; separately approved accounts can create and update those media buys through the same campaign API.
- Embedded sales agents are on v1.25.1. The ESA now strict-validates every inbound creative-format reference at the request boundary: legacy string ids, fixed-size ids like
display_300x250, and malformed references are rejected with a descriptive error that names the offending reference and suggests the canonical replacement — completing the canonical format contract’s enforcement half, so a bad reference can no longer slip in and surface later as a mismatched creative. Also included: GAM order-approval permission errors now correctly mark the order pending approval instead of failing the buy, guaranteed impression goals in size auctions are sized off the buyer’s bid rather than the list rate, embedded principals no longer receive fabricated placeholder GAM advertiser ids, and HTML/JS tag creatives now sync without requiring a preview URL. Buyer-visible surfaces are unaffected: buyers see the same product format references and media-buy responses as before; only the seller-side validation and GAM trafficking internals changed. - Asking Murph to open billing now lands on the Plan & billing page — the same billing home as everywhere else — instead of the retired settings view.
- Murph now gives Slack users a secure, source-focused link to Sales Agent Diagnostics instead of implying that Slack opened an unsupported inline app.
- Failed Murph sandbox tests now open diagnostics on the exact recorded run, with an Open diagnostics handoff in Slack.
- Buyer teams enrolled in the Activity Console beta can now review Calls and Changes inside MCP clients that support MCP Apps. They can filter captured API calls, inspect redacted request fields and available response or error details, and send a selected activity ID to Murph for debugging without leaving the conversation. Existing integrations do not need to change.
- Navigating in a tab opened before a deploy no longer breaks with “Something went wrong” — the app reloads itself once to pick up the new version.
- Failed GAM order cleanup now appears in seller Pending Operations. Sellers get guided permission, reconnect, safe-archive, and manual-cleanup paths when GAM creates an order but trafficking fails; buyers do not get a new action or status change from this release.
- Choosing Billing in settings now takes you straight to Plan & billing — the intermediate summary page with its extra “Manage billing” hop is gone.
4.54.1 — July 15, 2026 at 10:02 AM UTC
- Murph now completes sandbox campaign checks reliably, keeps package CPMs separate from campaign-budget currency, and uses the connected account’s buyer or storefront role in Slack.
4.54.0 — July 15, 2026 at 8:58 AM UTC
- Org API keys for automation: create scoped API keys for your organization to authenticate programmatic workflows against the Buyer API. Keys carry exactly the permissions you choose at creation (
buyer:read,buyer:write,buyer:admin, oraccount:admin) and work anywhere a bearer token is accepted. - Manage keys via
GET/POST/DELETE /api/v2/org-api-keys, or embed the WorkOS API Keys widget in your own UI usingGET /api/v2/org-api-keys/widget-token. Org API key management requiresbuyer:admin. Included in existing Buyer API access, no separate entitlement needed. - Seller impact: none. Org API keys are a buyer authentication mechanism only. An automated workflow using an org API key carries the same buyer permissions (buyer:read/write/admin, account:admin) as the human who created the key — no new access to seller surfaces is granted, and sellers see no change in how buyer requests arrive or what they can request.
- Monetization: included in existing Buyer API access. No new billing surface.
- Adoption metric: org API key creation rate (
POST /api/v2/org-api-keyscalls) tracked via API metrics within 30 days of release. - Kill switch: revoke individual keys via
DELETE /api/v2/org-api-keys/:idor bulk-revoke via the WorkOS dashboard. WorkOS D4 permission registration also gates feature availability at the infrastructure level. - Expansion: GA at merge for all buyers. Requires WorkOS D4 permissions (buyer:read/write/admin, account:admin) registered in the WorkOS dashboard before creation calls succeed in production. Staged rollout not needed — the feature is additive and does not change existing auth flows.
- Buyer Activity now captures authenticated MCP calls durably before execution.
- Failed tool results, including
isError: trueresponses transported over HTTP - 200, include schema-declared redacted arguments, typed result detail, workload
- identity, and copyable activity correlation for debugging in Activity or with
- Murph. MCP protocol traffic remains separately classified and does not inflate
- customer activity.
- External AdCP buyers can create a governed Interchange campaign through an enrolled storefront while the seller remains behind the standard AdCP interface.
- The alpha pins zero-fee buyer-edge entitlement terms, enforces buyer/storefront budget caps, journals idempotent writes, preserves buyer and seller media-buy identities, records campaign commitments and delivery usage, and reads delivery through to managed seller agents.
4.53.0 — July 15, 2026 at 4:20 AM UTC
- The V2 billing API now provides a version-locked contract for storefront plan
- selection. Once pricing is published, administrators will see the exact Rate
- Card revision, eligible plans, corporate discount, governing agreement, and
- final price before accepting. Any term change requires a fresh review.
- No storefront Rate Card is published yet. Storefront operators do not need to
- act, no account can move to a paid plan or incur a new charge, and buyer pricing
- and behavior are unchanged.
4.52.0 — July 15, 2026 at 3:32 AM UTC
- Buyer teams enrolled in the Activity Console beta can now inspect safe,
- schema-validated request JSON, public error responses, selected non-secret
- headers, and validation steps for an API call. Call detail also links directly
- to Murph for evidence-based troubleshooting without exposing credentials, raw
- headers, invalid raw fields, or internal stack traces.
- Diagnostic detail expires after 90 days while slim call metadata remains
- available for 13 months.
- Scope3 support receives the same retained safe REST detail in the cross-tenant
- admin console, plus customer-visible call volume, problem-rate, latency
- percentiles, incomplete-call counts, and top operation/error metadata. Internal,
- protocol, and diagnostic reads are excluded from customer-activity engagement
- rollups so opening Activity or asking Murph does not manufacture API usage.
- Refining a generated creative by typing feedback in chat now works right after the session renders — Murph no longer asks for the session or variant id. The active session carries forward automatically, the same way the widget’s own refine button already did.
- Parent organizations whose storefronts live in child accounts now see the Payouts tab on Plan & billing — capability is derived from the whole organization, not just the parent’s own roles.
- Refining generated creative is now per-placement isolated: add a note to a placement to regenerate only that one from the hero, and leave a placement alone to keep it exactly as-is (never regenerated, never dropped). “Add to campaign” is always available and commits whatever is currently shown. The per-placement “Looks good” toggle and the approve-all gate are gone. Behind the buyer-creative-v2 + buyer-generative-creative flags.
- Generated creative is now produced per campaign placement: the chosen direction is rendered at each required size — grounded on one hero image for a consistent look — so the generation-refine grid shows a tile per placement instead of a single format. Behind the buyer-creative-v2 + buyer-generative-creative flags.
4.51.0 — July 14, 2026 at 10:52 PM UTC
- Customer backend services can now authenticate to the Interchange API using WorkOS M2M tokens (client_credentials grant) instead of long-lived API keys. Tokens are short-lived, automatically expire, and support rotation and immediate revocation without service downtime or redeployment.
- Fix a bug where a seller feed reporting a fractional delivery metric (e.g.
impressions: 1346.5) caused the whole package/media-buy delivery-metrics batch update to fail with a Postgres bigint syntax error, silently blocking delivery-metric updates for unrelated healthy packages in the same batch. Fractional counts are now rounded to the nearest integer before being written. - Seller accounts now receive their storefront reliably across signup and admin provisioning, while automatic reconciliation repairs older accounts that were created without one. The Business profile page also provides an onboarding action instead of a load error while recovery completes.
- Murph’s generative creative flow is more reliable and more conversational. Opting into references now consistently opens the reference picker to choose from — Murph no longer sometimes grounds silently and narrates it in prose instead. And Murph’s messages through the flow stay short and chat-first, letting the widgets carry the session, variants, and next steps rather than restating them as a numbered status report. Behind the buyer-creative-v2 + buyer-generative-creative flags.
- Plan & billing is now the one home for your organization’s money. Plan & pricing gains a “How you’re charged” card that states your pricing model plainly — % of media rates, plan terms, or both. Payment & invoices separates what you pay us from what you pay for media: Interchange fees (your plan) and media billing (the media itself). The old billing locations in organization settings and account settings redirect here.
- Payout activity now shows setup history: when payout details were changed and by whom, so finance teams can verify bank-detail changes without contacting support.
- Payouts now live inside Plan & billing as their own tab — payout entities, the setup wizard, and payout activity in the same place as the rest of your billing, no more jumping to a separate settings page.
- You can now navigate back from the Plan & billing page, and the Payouts setup card states when payout runs happen (monthly, at month-end close).
- Explicit storefront refreshes now sync every enabled catalog stream, including pricing availability and signal coverage, while routine inventory polling stays lightweight. Existing in-progress syncs are reused safely, and no force-recovery credentials are needed.
- Reporting for a storefront media buy that fans out to multiple upstream sellers now sums delivery across every seller instead of showing only one. Each seller’s leg is tracked by its source, so
GET /api/v2/buyer/reporting/metricsandGET /api/v2/storefront/reporting/metricsreport the full buy total (and correct per-package figures) rather than collapsing to a single leg. Single-seller buys are unaffected.
4.50.0 — July 14, 2026 at 5:12 PM UTC
- Catalogs now has its own place in the buyer chat rail: open it to see your catalog feeds — health, sync status, and item counts — right in the conversation, drill into a feed for its detail, and sync, preview, or run its activation plan without leaving chat. Data sources is now Conversions only, so connecting event sources gets its own focused view too. You can also just ask Murph to open your catalogs.
- The creative confirmation card now flags any brought creative whose format no product on the campaign accepts — the mismatch shows directly on that creative with the accepted formats, instead of the creative looking mapped and being silently dropped at execute. The check re-derives as products and placements change, so it appears or clears on its own. An incompatible creative offers only Remove (no “map it anyway” placement picker, since nothing would take it), and Remove now takes the creative off the campaign in place, without a chat round-trip.
- The deprecated
brand_agent_idresponse field on creative manifests and creative collections has been removed. Integrations should readadvertiser_id, which carries the same advertiser identifier. The field was deprecated and announced in the prior release; the affected surface is flag-gated to pilot customers. Targets API-integrating buyer personas (scrappy builder, large agency); no seller-visible surface changes, so the seller pass is explicitly not applicable. - Fixed a crash that could occur when attaching a creative asset supplied as an inline (data URL) value without an explicit content type. Very large values could previously fail the request; they are now processed reliably.
- Seller agents now receive a
time_budgetin real-time discovery requests that accurately reflects how long they have to respond. Previously the budget was stamped before an internal account synchronization step (up to 5 seconds) and did not subtract the 2-second fallback reserve, so the advertised budget was up to 7 seconds larger than the actual timeout. Agents that responded near the stated deadline would be cut off early. - Murph now keeps creative uploads in the in-chat creative flow instead of sending you out to the Creative Assets dashboard. Bringing, attaching, mapping, or reviewing creatives happens on the in-chat card, which owns advertiser, campaign, and placement selection. A dashboard link is only offered when you explicitly ask for it, or for files larger than 50 MB where VAST/webhook or a public CDN link is the right path.
- The “Needs attention” card in the seller dashboard now explains how to use the trace ID to investigate failing calls: it is sent as the
x-scope3-debug-idHTTP header on every request to your agent, so you can search your own logs for it. The card also includes a copy button for the trace ID and clearer next-step guidance for timeout and failure cases. - When grounding a Murph creative generation on references, an advertiser with no references yet now sees the reference picker in an empty state — with an “Attach assets” affordance and a generate-without-references action — instead of a plain-text “library is empty” fallback. Buyers can add references from zero. Behind the buyer-creative-v2 + buyer-generative-creative flags.
- Ad-server-backed storefronts now preserve eligible ad-server pricing and use uploaded wholesale pricing only for individual products that still need a price. Products without usable pricing stay out of buyer catalogs until separate pricing is provided.
4.49.0 — July 14, 2026 at 2:31 PM UTC
- Realized delivered spend now books correctly even when its campaign was archived after the delivery occurred. Previously, archiving a campaign while a media buy still had delivery reports in flight left that spend unbooked, understating buyer balances, seller payables, and fee revenue until it was manually reconciled. The spend-booking resolver now treats an archived campaign as a valid provenance and advertiser source (preferring a live campaign when one exists) instead of refusing to book.
- Buyer teams enrolled in the Activity Console beta can now inspect authenticated
- API calls by workload, operation, outcome, latency, and public correlation ID.
- The Calls view and activity endpoints make agent behavior and failures traceable
- without exposing request payloads or credentials.
- Creative update responses now include a
warningsfield when the assignedformat_iddoes not match any format accepted by the campaign’s products. Executing a media buy now returns a clear error if no assigned creatives match the product’s accepted formats, or if no video creative satisfies the product’s required duration. Previously these mismatches were silent or surfaced only at the publisher side. - Google Drive file imports now open directly from Murph and creative uploads. Choose files each time without managing a separate Google Drive connection.
- AAO compliance tracks that have some passing scenarios alongside coverage gaps now correctly display as partial or passing instead of “no coverage”. This fixes storefront compliance checks showing “no coverage” for tracks where the agent did respond and some scenarios ran, matching what AAO’s own compliance summary reports.
- TikTok directed campaigns now validate package geography before dispatch and create ad groups with explicit TikTok placement, avoiding provider-side cleanup after an invalid automatic-placement request.
- FX-terminated media buys now surface a specific error code (
fx_snapshot_missingorfx_quote_expired) in the pending-operations view instead ofunknown_failure. - When helping sellers fix their
adagents.json, Murph now recommends the correct agent URL for their connection type and accurately describes a missing authorization as an advisory warning (not a blocker), including its effect on buyer-visible coverage disclosure. - Account admins can now set an org-level default for Murph conversation sharing. New conversations inherit the default when no explicit value is provided. Individual users can still override the default per conversation using the existing sharing toggle.
- Per-route browser tab titles in the buyer app so multiple open tabs are distinguishable.
- Adding a creative labeled
video_vastwhose asset is a raw video file (for example an.mp4) instead of a real VAST tag now fails immediately, at the point you add it to a media buy, with a clear reason — instead of being accepted and then rejected downstream by the publisher. The message tells you how to fix it: relabel the creative tovideo_hostedfor raw hosted video, or attach a real VAST tag. This closes a gap where such creatives passed our format check and only failed when the buy reached the publisher. - Canceled directed campaign shells now report
CANCELEDinstead of falling back toDRAFT. - TikTok directed campaign cancellation now reconciles deletion from either native campaign status field instead of leaving an accepted cancel operation pending.
- TikTok Reach directed campaigns now validate and apply an explicit buyer-selected frequency cap before creating native campaign objects.
- Settings → Plan & Billing now shows your plan, pricing, usage, funded balance, credit line, agreements, and the single next action to stay in good standing — one page, for every organization. Agents get the same data through
get_billing_accountandopen_plan_and_billing. - Fix media buys failing to forward when the creative uses a base video format (video_standard) but the product only declares a duration-specific variant (video_standard_15s/30s). The correct variant is now matched and sent to the source.
- Directed campaign cancellations now settle when a connected platform omits the deleted campaign from its next complete account snapshot.
- When generating creative in Murph, buyers are now asked whether to ground generation on references from their library — choosing “yes” surfaces the reference picker (which previously could not render inside Murph at all). Also fixes a generation crash on a fresh session with no prior assets. Behind the buyer-creative-v2 + buyer-generative-creative flags.
- Structural media-buy forward failures (for example, a source that cannot traffic the requested creative format) now fail fast with an actionable reason instead of silently retrying for hours. Sellers get a “forward failed — needs correction” signal immediately, pointing at the creative-format or product-catalog mismatch to correct, instead of a buy that quietly never delivers. Buyers see a “needs correction” pending reason rather than an indefinite “retrying” state.
- Added the TMP prebid setup runbook: step-by-step install for the Scope3 module in Prebid.js or Prebid Server (config, credentials, and the auction-timing requirement), the Google Ad Manager half (segment targeting keys, automated line items, the tracker-domain authorization), and how to verify TMP is serving end-to-end — plus a troubleshooting table for the most common silent failures. The TMP overview now links directly to it.
4.48.1 — July 13, 2026 at 8:55 PM UTC
- The Approvals widget now keeps approval routing visible when its settings cannot load. Admins can retry the read, while other operators see that a customer admin must manage routing instead of an unexplained blank section.
4.48.0 — July 13, 2026 at 6:25 PM UTC
- Buyer API responses now distinguish a stable agent workload from the credential used to authenticate it, giving audit and governance systems a durable identity without changing existing integrations. Seller behavior and seller presentation are unaffected.
- Storefronts now expose their publisher domain lists. Sellers can declare which publisher domains their storefront covers via the REST API; buyers can query the full list, filter storefronts by publisher domain, and see a verified/declared breakdown on storefront detail.
- Buyers can open an in-chat Activity log showing who changed what on their advertisers and campaigns — whether it was a person, the agent, or automation, and whether each action succeeded, was denied, or failed.
- Buyer agents can now call
list_storefront_publishersby operation name viaapi_callto retrieve the full paginated publisher domain list for a storefront. Previously the endpoint was only reachable via raw HTTP; this completes the api_call operation surface for the publisher coverage feature shipped in AI-2796. - Buyers can now edit an existing campaign creative’s placement mapping directly from the campaign view, and each creative row shows the placements it maps to.
- Creative manifests and collections now return
advertiser_ididentifying the owning advertiser. Thebrand_agent_idresponse field is deprecated — it now only appears on rows created before the advertiser re-key and will be removed after a migration window; switch integrations toadvertiser_id. - The ad-server connection flow now consistently uses Epsilon’s current product name, Epsilon Retail Media, while existing CitrusAd connections and API identifiers remain unchanged.
- Keep the ad server source setup form open after sellers click “Add another ad server,” even when source data refreshes in the background.
- Google Drive file selection now opens in a Google-owned window, so importing creatives and Murph attachments works in browsers that block third-party cookies. Access remains limited to files you explicitly select.
- Buyer agents can connect through MCP 2026-07-28 hosts without changing their
- setup, while existing agent connections continue working unchanged. Storefront
- agents get the same compatibility on the standard storefront MCP endpoint, with
- no change to inventory, media-buy, or authorization behavior. No OAuth
- reconnection or customer action is required.
- You can now rename a Murph chat thread directly from the sidebar. Click the
...menu on any conversation row and choose Rename to give it a name you’ll recognize. - Optimization suggestions returned by
get_optimization_suggestionnow include apacing_recommendationfield describing whether a media buy is under- or over-spending and the recommended daily spend to stay on pace. Purely informational — no change to how suggestions are computed or applied.
4.47.0 — July 13, 2026 at 2:02 PM UTC
- CitrusAd can now back sponsored-product inventory in seller storefronts. Buyer agents keep using the existing storefront product and media-buy contracts; product metadata identifies CitrusAd as the backing ad server, without requiring a CitrusAd adapter or credentials.
- Buyer-persona applicability: buyer agents encounter CitrusAd inventory through the existing MCP and REST discovery and media-buy operations. Their request shape, authentication, and workflow do not change; only additive product metadata identifies the seller’s backing ad server.
- Monetization: this alpha adds no new buyer fee, seller fee, take rate, or billable usage unit because CitrusAd is another implementation of the existing ad-server-backed storefront capability. Packaging and provider-specific operating costs must be evaluated before any broader paid-tier or GA decision.
- Billing now has a home for payout and invoice activity — new sections at the top of the Payouts and Invoices tabs on your org Billing page, and matching
GET /api/v2/billing/payout-activity/GET /api/v2/billing/invoice-activityendpoints (agents:get_payout_activity,get_invoice_activity). The sections are empty until your first payout run or billing period, then populate automatically — no setup needed. - Murph now correctly scopes campaign reads to the selected advertiser when the chat is opened from an advertiser context. Previously, asking “how are my campaigns performing?” while scoped to a specific advertiser returned campaigns across the entire account.
- Murph now treats ordinary human-to-human Slack replies as ambient channel conversation, even when they include account-specific troubleshooting details, instead of nudging the author to tag Murph.
- Fixed a visual glitch in the Murph sidebar where clicking an existing conversation would jump it to the top of the recents list instead of keeping it in place.
- Buyers can attach selected Google Drive files directly in Murph and request support for OneDrive, Dropbox, or Box from Connections.
- You can now rename a Murph chat thread at any time — the new title replaces the auto-generated one everywhere it appears. If you’re calling the API directly, send
PATCH /v2/murph/conversations/:conversationUid/titlewith{ "title": "..." }. - Automated release notifications to shared customer Slack channels now fail closed: routine release tier or authored Slack copy no longer creates a message, existing machine approvals cannot send, and unresolved targeting is skipped rather than widened. A targeted affected follow-up sends only when its exact message has human approval and a source-backed resolver proves reachable recipients at execute time.
- Optimization suggestions now include
campaignExternalId,campaignName,mediaBuyExternalId, andmediaBuyNamein the response, enabling downstream enrichment to resolve campaign and media buy details without an extra lookup. - Your primary payout entity can now receive different currencies into different accounts, like any other entity.
4.46.0 — July 13, 2026 at 11:14 AM UTC
- Keep the buyer assistant available when an operation has an unusually large request definition. Large operations remain accessible through the named-operation fallback instead of disabling every assistant action.
ask_murphresponses now includeconfirmationTokenon thependingConfirmationstructured field when an action requires approval. Previously the token was only present in the text answer, requiring clients to parse it from prose. MCP clients can now readstructuredContent.pendingConfirmation.confirmationTokendirectly to get the exact phrase the user must reply with.- FreeWheel sources now stop retrying unprovisioned reporting or forecasting access and offer a direct re-check after FreeWheel enables the permission.
4.45.0 — July 13, 2026 at 9:49 AM UTC
- Separately enrolled directed-campaign customers can list provider products and create or update one seller-managed media buy through the existing campaign API, with durable idempotency, currency-specific budget caps, and upstream reconciliation.
- The AXE setup doc and Murph now teach what the GAM keys are actually for and the required publisher-side install. After Murph clears the “AXE Segment Keys” setup task, it prompts you to confirm the
scope3RtdProvidermodule is installed in your Prebid.js — without it, the GAM keys stay inert and every Scope3-signalled buy misses. Themintlify/v2/storefront/esa/axe-keysdoc gains a new “How the keys connect to your ad stack” section (publisher-side RTD writes, ad-server-side reads) plus concretescope3RtdProviderinstall guidance and an explicit note that Prebid Server support isn’t complete yet (naming disagreement + missing exclude signal, tracked internally). Two new troubleshooting entries cover “task cleared but no Scope3 targeting is happening” and “I run Prebid Server.” - Source diagnostics now open from the source you are looking at instead of a standing Diagnostics entry in the seller navigation rail. The ad-server and sales-agent source view gains an “Open full diagnostics” button that opens diagnostics scoped to the selected connection, asking Murph about a named source opens diagnostics focused on that source, and the pending-operations view (
GET /api/v2/storefront/pending-operations) gains asourceDegradationsgroup listing seller-owned degraded sources with severity and a one-line summary — issues Scope3 or a vendor must fix never appear as your task. - TikTok directed campaigns now validate package geography before dispatch and create ad groups with explicit TikTok placement, avoiding provider-side cleanup after an invalid automatic-placement request.
- The
api_callMCP tool (buyer and storefront) now requires a namedoperation. Rawmethod+endpointcalls are rejected with a self-healing error that points agents at the operation catalog. Named operations carry validated schemas — the tool derives the HTTP method and endpoint for you and rejects misplaced path params up front — so agents stop guessing URLs and request shapes. Every raw call we observed was either a read that already has a named operation or a hallucinated URL; if you were still sendingmethod+endpoint, switch to the matchingoperation(useask_about_capabilityto find it by intent). - Murph shared links now open in a new browser tab so customers can keep the chat visible while reviewing linked content.
- Fix the Plan & Billing page failing to open in Murph chat with “MCP app failed to load.” The
plan-billingwidget was registered everywhere server-side but was missing from the chat client’s widget registry, so the widget directive couldn’t resolve to its resource. Registering it lets the Plan & Billing widget mount and hydrate in chat. - FreeWheel sources now remember missing reporting or forecasting permissions, stop retrying that capability, and resume it after an explicit permission re-check.
4.44.0 — July 12, 2026 at 6:46 PM UTC
- Enrolled buyers can subscribe a connected ad-platform account and see its campaigns in Interchange as read-only directed-campaign mirrors, with up to a year of campaign metadata and delivery read through live from the source.
- Managed storefronts can assign one approval owner, choose an optional escalation audience, and use Murph’s guided setup without broadcasting approval work account-wide.
- Inventory source health is now diagnosed per-capability instead of as one
- combined status. A missing ad-server reporting permission (for example a
- FreeWheel reporting-scope denial) now shows as its own “reporting access
- missing” item — with the exact permission to grant — instead of a generic
- “reconnect your ad server” and no longer blocks selling or setup while
- inventory keeps syncing fine.
- Setup surfaces now tell you when your ad server has no products published yet, instead of showing a confusing cache warning. A connected ad server whose syncs succeed but return zero products gets a clear, actionable diagnosis — “No products are published for your ad server yet, so buyers can’t transact — build products to go live” — with a Build products action and a troubleshooting guide, and you’re notified when it appears. Stale-catalog warnings now appear only when a refresh can actually fix them.
- Media-buy version history now rejects any write that would leave a non-empty buy lineage without a current version, preventing buys from silently disappearing after an incomplete transition or direct database edit.
- You can now go from a feature announcement straight to its guide, product surface, or an authored guided lesson.
- Storefront source health now recognizes current manually uploaded wholesale pricing without asking sellers to reconnect an unused ad-server pricing integration. Sandbox source tests can create their canonical no-spend account even when other sandbox accounts already exist, and storefront readiness now recommends assigning a dedicated sandbox advertiser or granting Interchange permission to create one before smoke testing.
- Media-buy version reads now preserve async-accepted buys, mutations target exact version rows, transitions serialize by tenant lineage, and integrity ambiguity is monitored and handled safely.
- Agents can now read your plan, usage, balance, and agreements — and open a Plan & Billing view in chat — via two new MCP tools,
open_plan_and_billingandget_billing_account. - Media-buy updates now keep the correct current version through approvals, cancellations, and archive transitions, preventing buys from disappearing or selecting an in-flight update.
- The storefront API reference now documents
PATCH /api/v2/storefront(updateStorefrontCapabilities), which patches individual storefront capability flags. The endpoint was live and served correctly, but a code-generation path collision left it out of the published OpenAPI spec. - Creating or updating a performance campaign now rejects an optimization goal whose
eventSources[].eventSourceIddoes not resolve to a live event source on the advertiser, and the error names the offending id. Previously a dangling reference was stored as-is and the goal silently received no conversions. The check is advertiser-scoped, so a source from another account can never satisfy a reference. On update it is delta-validated: only references you add or change are checked, so edits to campaigns that already carry a legacy reference are not blocked.
4.43.2 — July 12, 2026 at 3:49 AM UTC
- Hide unpriced source products from buyer discovery instead of returning an invalid wholesale catalog.
4.43.1 — July 12, 2026 at 2:57 AM UTC
- Refresh storefront products automatically after wholesale pricing is uploaded.
4.43.0 — July 12, 2026 at 1:45 AM UTC
- Sellers can now change their storefront’s merchandising mode. The creative-review, campaign-approval, and product-composition toggles returned an error whenever you tried to save them, because the update they called had no matching endpoint — so the setting never actually changed. That endpoint now exists, and toggling merchandising mode saves correctly. Ad-server-backed storefronts continue to keep all three capabilities on, as before.
- GAM-connected storefronts now include descendant ad-unit delivery in pricing
- guidance and expose a usable CPM floor for wholesale products.
- Storefront admins can now assign primary and fallback role or user audiences separately for media buys and creative review, choose email and Slack delivery for each stage, set reminder and escalation timing, and reassign open work. Approval work moves to the fallback audience if its owner leaves or misses the deadline; it never auto-approves on expiry.
4.42.0 — July 11, 2026 at 11:59 PM UTC
- Diagnose any media buy end to end. Every media buy on Scope3 now explains itself: a buyer’s agent answers “why isn’t my buy live?” in one call — what it’s waiting on, whose side owns the wait, and what to do next — instead of polling for a black-box status. Sellers work every buy from chat: Media buys shows what’s pending and urgency-sorted, Timeline shows the exact payload sent to a source for any single buy, and Pending operations groups everything waiting on someone with a retry action only where retrying can work. Existing calls are unchanged. Guide: https://docs.scope3.com/v2/guides/diagnosing-stuck-media-buys
- Organizations now have one Plan & Billing page at Settings → Plan & Billing: plan and rate card, funded balance and credit line, intelligence usage, agreements, and the one next step (if any) to stay in good standing. It’s rolling out to a first group of customers now.
- Your storefront now carries a publisher domain as its identity key — the domain buyers and demand requests look you up by. You can supply
publisherDomainwhen creating a storefront (recommended), and managed ad-server storefronts must have their publisher domains configured and authorized before setup can complete and the storefront goes live. Third-party sales agents are unaffected: your domains keep arriving through the product pass-through as usual. Nothing is required at creation time and no existing integration changes behavior.
4.40.0 — July 11, 2026 at 7:56 PM UTC
- Sellers can inspect and author source-scoped property and property-tag mappings to key-value, ad-unit, and placement targets through the v2 API or Murph, with validated dry-run coverage, provenance, audit evidence, and explicit confirmation before bulk replacement.
- Fixed the media-buy policy evaluator’s Gemini second-opinion check, which was still 404ing in production after an earlier fix attempt — the code-level model default had been corrected, but the production Helm configuration still pinned the unprovisioned model and took precedence over it, so buys kept silently escalating to manual review instead of getting an automated verdict. The evaluator, its underlying default, and Murph’s (currently inactive) Gemini fallback now all consistently resolve to
gemini-2.5-flash, the model actually provisioned in the production Vertex AI project. - Network storefronts can now synchronize publisher authorization from large, multi-thousand-property adagents.json documents.
4.39.0 — July 11, 2026 at 6:51 PM UTC
- Reduce noisy managed ad-server setup diagnostics. Soft-expired catalog caches now refresh automatically without creating seller action items, default naming conventions no longer appear as setup warnings, and AXE segment-key setup routes to a guided create-or-map flow instead of a generic checklist warning.
- The organization Billing page is now one clear page for how your organization gets paid and pays. Sellers set up payouts entity-first on a Payouts tab: each legal entity appears as a card with its country, per-currency bank accounts (masked to the last 4 digits), and a Primary tag, and adding or editing an entity walks through a 2-step wizard that adapts the bank fields to the entity’s country (US routing number, UK sort code, SWIFT/BIC elsewhere) and prefills the legal name from your business profile. Buyers manage billing details on an Invoices tab. Orgs with both a storefront and a buyer account see both tabs.
- Managed GAM setup diagnostics now treat default naming templates as already configured, so sellers are not prompted to customize naming just to clear setup health.
4.38.0 — July 11, 2026 at 5:09 PM UTC
- You can now catch up on product changes without leaving Interchange. Ask “What changed since I was last here?” for a summary tailored to your account, or open Help → Release notes to browse changes for your setup and features worth exploring. No setup is required.
- Signal components now distinguish targeting already present in a connected ad server from the components a seller creates and offers through their storefront.
- Enrolled buyers can connect or disconnect a personal Google Drive account from Connections, then select Drive files from campaign creative bulk upload. Scope3 can only use files the user selects and cannot browse the rest of Drive or write files back.
- Ask and supply-action statuses are now served from a single disclosure-aware read model: the same facts power the internal customer monitor and what Murph shares with you, with customer-visible fields formally annotated and enforced server-side.
- People invited into an eligible single-account Slack channel can now ask Murph general product questions and request access from the account’s admins without re-entering their email. Murph also keeps nearby channel context when a follow-up starts a new thread.
- Corrects the July 11 release note for embedded sales agents: the current pinned release is v1.22.4, not v1.22.1. No customer action is required; the release-safety checks now block stale version announcements and backwards version deploys.
- Storefront setup now shows every configured publisher domain with its authorization status and resolved property count. Managed storefronts remain incomplete until they configure at least one publisher domain and every configured domain is authorized, helping sellers present verified property coverage that buyers can trust.
4.37.0 — July 11, 2026 at 1:32 PM UTC
- Managed ad-server source status can now include recent sync runs on request, making failed sync diagnostics available from the existing status call.
- A new endpoint,
GET /api/v2/billing/account, returns one consolidated view of your account’s plan, usage, credit/prepay balance, and agreements — plus the single next step, if any, needed to become or remain paid. - Embedded sales agents roll to v1.22.1. Sellers’ persisted creative-format references are canonicalized in one migration (fixed-size ids like
display_300x250become canonical ids with explicit width/height), completing the canonical format contract’s seller-side data half — media buys and creative assignments now match on one format identity end to end. Also included: GAM custom-targeting and AXE key management endpoints for tenant setup, authoritative publisher-domain sync, delivery reports carrying per-day clicks and completed views, and a publisher-property discovery throttle that keeps busy tenants responsive. Buyer-visible surfaces are unaffected: buyers see the same product format references and delivery reporting fields as before; only the seller-side representation and matching internals changed.
4.36.0 — July 11, 2026 at 12:14 PM UTC
- Murph no longer sends an invocation prompt when you upload a file without a caption in a connected Slack channel. Captionless ambient files stay silent; tag @Murph or send the file in a direct message when you want it reviewed.
- Saving publisher domains during storefront setup now automatically registers the full current domain set with the managed sales agent, clears removed domains from its authorization projection, and syncs current domains without a separate manual step.
- Storefronts with managed ad-server inventory now recover stuck pricing and availability syncs even if an earlier recovery attempt already closed. Products no longer stay blocked by the “pricing/availability sync has never run” readiness issue, with nothing for sellers to change.
- Sellers using the embedded sales agent now see pricing and availability sync status for wholesale products that are backed by standalone inventory profiles, so readiness no longer reports those successful GAM syncs as never run.
4.35.1 — July 11, 2026 at 1:59 AM UTC
- Managed sales agent storefronts can recover GAM pricing and availability syncs that never started, so wholesale product pricing guidance no longer stays blocked behind a stuck “never run” sync.
- Managed sales agent sync recovery now carries the protected force-recovery key, so GAM pricing and availability syncs that never started can be auto-started after deployment.
4.35.0 — July 10, 2026 at 11:30 PM UTC
- Force-start never-run ad-server pricing availability syncs through the ESA recovery endpoint instead of the generic refresh fan-out.
GET /api/v2/storefront/media-buysnow filters, urgency-sorts, and paginates in the database, so large storefronts get fast, consistent pages instead of an in-memory scan of every buy — and page boundaries are stable under the default urgency sort. The Media Buys widget gained a “Load more” pager, so buys past the first 50 are now reachable in chat.
4.34.0 — July 10, 2026 at 8:27 PM UTC
- When generating a creative from a brief, you can now ground the look in what you already have. Before Murph builds concepts, it can open a reference picker over your creative library — pick from sourced materials (anything you’ve saved as a generation reference, in any media type) or browse every past creative you’ve made, filterable by campaign — and Murph carries your picks into the draft directions it generates.
4.33.0 — July 10, 2026 at 5:56 PM UTC
- Murph can now create the three GAM custom-targeting keys (
axei/axex/axem) for you when they’re missing. Previously, if the keys didn’t exist in your GAM network yet, Murph would tell you to open GAM Admin → Custom Targeting and create them yourself before it could save the mapping. Now Murph offers to mint them with Scope3’s recommended names and display names — you confirm in chat, Murph calls a newPOST /api/v2/storefront/esa/:esaId/gam-custom-targeting-keys/ensureendpoint, and finishes the setup on the same turn. Endpoint is idempotent (names already in your GAM come back inalreadyExisted, no duplicate creation), and shaped generically so the next signal protocol we ship (TMP) reuses the same call with different key names. The manual GAM path stays as a fallback for storefronts whose Scope3 service account lacks theCustomTargetingKey.writescope on the network — Murph explains that clearly when it happens. - Bring your own creative straight from chat. Upload an image, video, audio file, or tag in a Murph conversation, and Murph asks the one question that matters: which campaign is this for? It then routes the creative to an existing campaign, a brand-new campaign you describe in plain language, or the advertiser itself to hold until you’re ready. You can drop a file before you’ve named an advertiser; Murph stashes it and picks it back up once you do. Once the creative lands on a campaign, Murph maps it to the campaign’s placements and lets you remap any that landed wrong. Full walkthrough: Buyer → Creatives → Bring your own creative.
- Embedded sales-agent storefronts now keep publisher-domain mappings authoritative. Adding a publisher domain still publishes it into ESA, and removing or clearing publisher domains now removes the stale ESA authorized-property projection instead of leaving old domains available.
4.32.1 — July 10, 2026 at 12:37 PM UTC
- Fix canceling a storefront buy that was never forwarded to the source. Previously, canceling a buy that was approved but not yet forwarded (e.g. stuck in forward_failed_needs_correction) would fail because the ESA would return “not found” and cancel.ts would treat that as an error. Now MEDIA_BUY_NOT_FOUND is treated as idempotent success. Also stops the forward worker from retrying a canceled buy by stamping forwarded_at on the storefront_pending_media_buys and storefront_pending_media_buy_updates rows.
- Fixed a display issue where storefronts using manual wholesale pricing upload showed a persistent “pricing availability: failed critical” health indicator even after pricing had been successfully uploaded.
- Fixed HTML5 creatives failing to be created in GAM after syncing. HTML5 creatives use click-beacon injection for click tracking, which meant the outbound payload had no destination URL. GAM requires a destination URL on all HTML5 creative objects, so affected creatives were silently rejected by the ad server. They will now sync and create correctly in GAM.
- Fixed the media-buy policy evaluator’s Gemini second-opinion check. The model path was resolving to a retired Vertex AI alias, causing every auto-approve candidate to silently escalate to manual review instead of receiving an automated verdict. The evaluator now uses
gemini-2.5-flashby default, matching what the production Vertex AI project provisions. A startup probe was also added so a misconfigured model path surfaces as an error immediately rather than silently degrading per request.
4.32.0 — July 10, 2026 at 10:11 AM UTC
- Treat ad-server pricing availability syncs with zero run evidence as never-run even when the upstream status defaults to success.
4.31.0 — July 10, 2026 at 8:53 AM UTC
- Managed ad-server sources now automatically start a pricing/availability refresh when the health sweep finds an ad-server-sync source whose pricing sync has never run.
- Fixed the wholesale avails and pricing guide so sellers can copy the CSV template directly from the page instead of following a static download link that was not served in production.
- The storefront create-account dialog no longer implies your domain is fully verified just because we found it in the AAO registry — the badge now reads as a neutral “found” signal, and a new note tells sellers upfront that domain-ownership verification happens after the account is created, so a “Pending verification” status on the setup checklist isn’t a surprise.
- Buyers with Marketplace access can add sellers and channels they want to buy from directly in the Marketplace widget. The request stays buyer-side, so sellers do not need to do anything and campaigns do not change.
- Sellers with multiple legal entities can now register a payout bank account per entity and currency. Each payout entity carries its own beneficiary name and address, account number (masked to the last 4 characters on every read), and bank identifier, keyed by entity name and payout currency. Manage them via
PUT/GET /api/v2/storefront/billing/payees, theset_payout_payee/list_payout_payeesagent operations, or Settings → Billing → Payout entities. Existing payout details keep working unchanged as the default payee. - Wholesale avails & pricing uploads now reject fake currency codes and obvious CPM or monthly-impression outliers during preview, so sellers catch unit mistakes before committing a feed.
4.30.0 — July 10, 2026 at 1:08 AM UTC
- Views and Completion rate are now columns in the campaign performance table, letting you compare video metrics directly across advertisers, campaigns, and media buys.
- Storefronts on Google Ad Manager can now finish AXE segment key setup directly in chat. Murph reads the include, exclude, and emissions custom-targeting keys from your GAM network, presents the three candidates for you to confirm, and saves the mapping — no more trip to the embedded sales agent admin. One rule the save enforces: the emissions macro key must be named literally
axemin GAM, because the creative macro that carries the emissions token only resolves against that exact name. Full setup guide: Storefront → Embedded sales agents → AXE key setup. - Fixed the creative picker labeling a placement with its bare media kind (e.g. “Image”) instead of its format. When a format agent returns a generic media-kind name, the picker now shows the canonical format id (e.g.
display_300x250) so every placement stays distinct and identifiable. - Discovery no longer silently drops storefronts whose channel capabilities are stored in legacy alias form (
audio,video). Channel normalization is now applied to both the request and the capability side at compare time, so a storefront declaringaudiois correctly matched against achannels: ["audio"]request. - When creative sync fails for a sync-capable seller and your assigned creatives don’t match the required product format, execute now returns a clear error naming the mismatched product(s) and required formats — instead of a cryptic per-package rejection from the seller.
4.29.0 — July 9, 2026 at 5:08 PM UTC
- Cancelling a committed, guaranteed media buy now routes to a dedicated seller
- cancellation approval instead of stopping immediately. The buy keeps delivering
- until the operator approves the cancellation (approving terminates the buy;
- rejecting keeps it active). Cancelling a non-guaranteed buy, or a buy that has
- not yet been reserved with the source, still cancels directly with no approval.
- Delivery spend in cross-currency media buys is now correctly denominated in the advertiser’s primary currency. Previously, buyers transacting in ZAR (or any non-USD currency) against USD-settling storefronts would see spend labeled in their currency but showing the raw USD amount. The API now converts source-reported spend using the FX rate booked at buy time, with a historical-snapshot fallback for older buys. The response includes a
deliveryFxConversionfield on each affected media buy disclosing the rate applied. - Fixed an error causing the reporting metrics endpoint to return HTTP 500 in certain environments. Buyer reporting data was inaccessible when BigQuery did not support the
ANY_VALUE(IGNORE NULLS)syntax. The endpoint now returns correctly. - Buyers and sellers are now notified when an approved media buy’s forward retry window lapses. Previously the platform stopped retrying after 6 hours without telling anyone — the
forward_failed_needs_correctionstate was only visible by checking media-buy status or Pending operations. Buyers receive the existingmedia_buy.forward_failednotification carryingpendingReason: forward_failed_needs_correctionand the buyer-safe error code; sellers receive the storefront forward-failed alert marked terminal, pointing at Pending operations. Fires exactly once per media buy, at the moment retries stop. - Every budget you set — campaign
budget.total, media buy product budgets, package budgets — is now gross: the all-in amount you pay, fees included, in one consistent denomination, with delivered spend on buyer surfaces reported the same way. Existing budgets were restated in place at the fee terms locked when each media buy was created, so their financial meaning is unchanged; the values you read back are now the numbers you’re billed. Media buy reads gain abudget_breakdown(media budget, fee amount, fee rate, effective gross CPM) and abudget_denominationmarker so the split stays visible. One behavior change: campaign budget ceilings now count the fee on ended buys’ delivered spend, so a campaign that was silently over-allocated may ask for more budget before accepting new buys. Legacy media buys created before fee terms were locked are exempt: their spend stays net as the seller reports it, and they carry neither new field. Sellers continue to receive net media demand exactly as before. - The storefront Dashboard rail item now opens the current seller analytics widget, so sellers return to the same analytics home Murph opens by default instead of the retired storefront dashboard view. The old in-page seller dashboard implementation and unused UI data wrappers were removed.
- Embedded sales agent 1.20.0: adds a tenant-management endpoint (
PUT /api/v1/tenant-management/tenants/{tenant_id}/adapter-config/axe-keys) for declaring a GAM tenant’s AXE include, exclude, and macro key names, and unblocks theaxe_segment_keyssetup-checklist task so it can be cleared once the three keys are confirmed against the tenant’s synced GAM custom-targeting catalog. The macro key stays pinned toaxem(the value the GAM creative macro%%PATTERN:axem%%resolves against); include/exclude names are configurable. - Removed the raw AdCP wire-format payload from the
GET /api/v2/buyer/storefronts/:storefrontId/capabilitiesresponse. All fields from the raw payload were already surfaced as normalized fields (sandboxSupported,requireOperatorAuth,supportedBillings, etc.) — the raw blob served no additional purpose for buyers and could be misread by agents.
4.27.0 — July 9, 2026 at 10:22 AM UTC
- Source-health alerts now come from one pipeline. An unreachable inventory source raises a single action-required notification (and a single all-clear when it recovers) instead of overlapping legacy and diagnosis alerts, Storefront Brain routes source problems by the same typed diagnosis every surface shows, admin views carry the identical owner/severity/action, and Murph can run a diagnosis’s recheck for you on request.
- Interchange no longer sends wholesale product or signal catalog requests to third-party sales agents unless product composition is on and the agent reports AdCP 3.1+ support. Pass-through agents keep using normal live buyer requests.
- Fix creative sync not being reachable via the api_call MCP tool: register the sync_creatives operation in the buyer service route table and coverage allowlist.
- Scope3 now pays sellers by direct bank transfer and invoices buyers directly; billing no longer goes through Stripe. Sellers enter payout bank details once — beneficiary name and address, account number or IBAN, one bank identifier, and payout currency — in Settings → Billing or via
set_payout_details(PUT /api/v2/storefront/billing/payout-details), and Scope3 pays by bank transfer in that currency. If you previously connected Stripe, re-enter your bank details once: Stripe-held data cannot be migrated, and until your details are on file your media buys settle on direct billing (you invoice the buyer yourself). Buyers are invoiced by Scope3 directly, with the bank remittance details to pay against printed on each invoice; keep your billing contact and address current in Settings → Billing or viaPUT /api/v2/billing/info. - See and work every media buy on your storefront.
GET /media-buyslists every buy — routed and ESA-managed — urgency-sorted (buys still waiting on someone whose flight starts within 48h first), each carrying the sharedpendingReasonvocabulary, the structured error code of the latest failed exchange, and the forward outcome.GET /media-buys/{mediaBuyId}/timelinetraces one buy end to end — received → decided → forwarded / forward-failed → submitted → source moderation → accepted / rejected → delivering — with the exact payload sent to each source (platform-internal webhook and signing fields removed), a trafficker-grade summary, and the references to quote per state: the source’s own media-buy/task ids as their reference, and thesf:idempotency key paired with the request timestamp as the platform reference.GET /pending-operationsunions everything waiting on someone — approvals, creative reviews, failed forwards grouped by error code with a recovery-class-gated action (retry for transient failures, fix-and-resubmit for correctable ones, escalate-to-Scope3 for structural or terminalized ones — those never get a retry button), and buys waiting on source moderation since a timestamp. The same surfaces open in chat (Media buys, Media buy timeline, Pending operations, and a one-decision Retry task) from the rail’s Operate section or by asking Murph. Forward failures and aged-out moderation waits now push a transition notification to your storefront’s notification stream.
4.26.0 — July 9, 2026 at 7:58 AM UTC
- The approvals widget now shows eligible products and GAM ad units for each pending media buy. When an operator expands a buy, a new “Eligible products” section lists the matched storefront products by name, description, and ad unit — replacing the previous raw package IDs. The Ask Murph prompt also includes inferred creative format hints so Murph can answer inventory eligibility questions without extra round-trips.
- Fix: human-approved optimization-suggestion budget reallocations now correctly apply the new per-product allocation. Previously the apply-suggestion flow read a
scaling_factorfield that was never present in real suggestion payloads, so approved budget changes silently no-op’d (only bid-price changes took effect). The apply path now usesto_allocationdirectly, matching the auto-apply worker. - Source-health Murph alerts now include a direct link to the affected inventory source’s diagnostics in Interchange, so sellers can open the exact evidence for the outage from the alert.
4.25.0 — July 8, 2026 at 10:42 PM UTC
- Added a modular inventory source setup app and guide for creating feed-backed sources, previewing and committing avails feeds, inspecting readiness, completing source-side setup tasks, and preparing pilot sellers with row-level avails requirements.
- Video and audio creatives now auto-map to their campaign placements even when the publisher’s spec service is temporarily unreachable. The fallback matcher now understands resolution-style placement ids (
video_1080p,ctv_720p), duration ids (ctv_15s,audio_30s), and aspect-ratio ids (video_vertical_9x16) — previously onlyWxHids likedisplay_300x250could be matched without a live spec, so a perfectly matching video or audio file would sit unmapped whenever the sales agent was slow or down. - Buyers can now supply a tag’s size as a file instead of typing it. Drop a CSV where each row is a creative — tag markup in one column, size in another (Google Ads Editor shape) — and each row becomes its own mapped creative. Or drop a CSV/manifest alongside your tag files (or inside a zip) that references them by filename; it fills each file’s missing size and then dissolves. A CSV dropped on a “needs input” tag row also re-runs mapping for tags already on the campaign. Headers are matched case- and space-insensitively, and sizes read from a
WxHcell, a comma-separated list, or split width/height columns. A plain data CSV with no tag or filename column is still read as a document, not a creative. - Fixed the buyer storefront list and detail endpoints returning the storefront
idas a string instead of the documented integer, which caused the marketplace browse surface to fail to load storefronts. - Delivery reports for non-video inventory (display, audio-only, DOOH-without-video) now ingest correctly. Sellers on these formats legitimately report
nullfor the video-only metricscompletion_rateandquartile_data; the reporting webhook previously rejected these payloads, so the affected delivery data never reached buyer reporting. Bumping@adcp/sdkto 11.1.0 (AdCP spec 3.1.2) loosens these fields to acceptnullas the “not applicable” signal, while still enforcing the[0,1]bound on any non-nullcompletion_rate. - Murph plain product discovery now uses progressive quick discovery by default, so storefront results can appear as sellers answer instead of waiting for the slowest seller. Explicit
progressive,waitMode, andwaitSecondschoices are still honored, refine calls still wait for the final answer, and elevated support responses include trace diagnostics for auditing slow runs. - Sizes supplied via a CSV/manifest sidecar now survive to a later turn. Previously, if you dropped a sizeless tag with its sidecar CSV before picking a campaign, the declared size was lost — the tag landed on the campaign unmapped and asked for its size again. The declared sizes are now stored on the saved creative (a dedicated
declared_sizesfield on its asset, distinct from probed dimensions) and used when the creative is assigned to a campaign in a later turn, so the tag auto-maps to every placement its declared sizes fill — same as a same-turn upload. - Agents now receive the exact request format for every buyer and storefront operation that takes a request body, instead of only some of them. Previously an agent calling an operation whose shape wasn’t published had to guess the request body and often failed several times before succeeding. Every body-taking operation that has a defined request shape now exposes it up front.
- Adding products to a discovery session no longer requires
salesAgentId,groupId, andgroupNameon every selection. When omitted, the server resolves them from the session’s saved selections or the discovery result cache, and a budget-only re-add of an already-selected product preserves its stored seller/group provenance. This removes the visible first-turn delay where chat agents had to run product discovery twice — once for products, and again just to reconstruct group metadata before selections could be saved. - Tidied the storefront left rail: your chat history now takes only the room it needs — and scrolls once it gets long — instead of leaving a large empty block, so the rest of the navigation stays in view.
4.24.0 — July 8, 2026 at 12:22 PM UTC
- Approvals widget now surfaces flight dates (including end-only and ASAP starts), CPM bid price, and product names from package payloads on media-buy approvals. Creative reviews show explicit brand and size fields parsed from the submitted payload, so operators don’t have to query Murph for basic metadata. Advertiser/brand name resolution also handles BrandReference objects and nested account paths.
- Answer “why isn’t my media buy live?” in one call. Media buys now carry a
pendingReason(e.g.awaiting_storefront_approval,awaiting_source_moderation,scheduled_not_started) that says what the buy is waiting on and whose side owns the wait, a buyer-safeerrorCodewith ownership (buyer_input/platform/seller) plus the source’s sanitized rejection or moderation message when forwarding fails,forwardedAt, and abuyerReferencesupport handle to quote to the seller or Scope3. The fields appear on the nested media buys inGET /campaigns/:id, on the media-buy status poll, and on the newGET /media-buys/:mediaBuyId(get_media_buy) single-buy lookup. Transition events (media_buy.forward_failed,media_buy.awaiting_source_moderation,media_buy.source_rejected,media_buy.stuck) now ride the buyer notification stream, fired once per state change with the same fields in the payload. Existing calls are unchanged — the new fields are optional and appear only on storefront-routed buys. - Fixes a bug where creatives added across turns did not auto-map to the correct ad format, causing format_id to remain unset and blocking campaign assignment.
- Fixed a false “AAO compliance pending” status on the storefront readiness panel for agents whose endpoint URL includes a transport suffix (e.g.
/mcp,/a2a). The compliance check now queries the verbatim stored URL first; it falls back to the bare-root URL only when the verbatim lookup returns unknown. - Fixed: updating the budget on a media buy created before the July 2026 pricing-terms migration no longer fails with “pricing terms could not be determined.” The system now resolves and pins fresh pricing terms for those buys at update time, so the campaign ceiling check can proceed.
- Fixed: creatives synced to storefront sources now correctly complete the acknowledgment flow. Previously, the webhook callback used the storefront’s customer ID to look up buyer-owned creatives, causing a silent mismatch that left creative syncs permanently in-progress on the buyer’s side.
- Added
status_refresh_sourceto media-buy status responses so buyers and agents can distinguish direct status polls from storefront route rollups. This preventsagents_queried: 0orupdated: falsefrom being mistaken for stale delivery state when a storefront-routed buy is already current. - Storefront approval-requested email alerts now use the configured notification address as the explicit recipient instead of also emailing every active user on the storefront account; when that address is missing, they temporarily fall back to active users and raise an internal setup alert.
- Fixed storefront agent debug call traces so transport payloads are scoped to the matching ADCP task instead of occasionally showing an adjacent call.
- Storefronts now tell you when they need something from you. When a source problem only you can fix appears — expired ad-server credentials, a source that stopped responding, a stale pricing feed — you get a notification in the app and by email naming the problem and the fix, and a follow-up when it’s resolved. To receive these in Slack too, add the new source-action alert types to your Slack notification settings. Problems on our side never become your tasks.
- Storefront media buys delivered by poll-based or source-push sources now populate their media-buy summary metrics (impressions, spend, clicks, and last-updated) from the storefront delivery feed, so
GET /media-buys/:idreflects real delivery instead of zeros.
4.23.0 — July 7, 2026 at 8:35 PM UTC
- Brought video and audio creatives now auto-map to their campaign placements, not just images. Murph matches a video by the placement’s size (fixed, multi-size, or responsive range) and its duration window (e.g. pre-roll :15/:30), and an audio spot by its duration — plus bitrate/codec where the placement declares them. On a match the creative lands
mapped, credits format coverage, and the confirmation card shows “Maps to: …”; anything that fits no placement staysrecognized. This also repairs cross-turn auto-map (attaching creatives saved in an earlier turn), which previously left every creative — including images —recognizedbecause the saved creatives were looked up under the wrong advertiser id. - Product
format_idsnow carry the inline params the seller’s format definition pins (width,height,duration_ms) instead of being stripped to bare{agent_url, id}references. Buyers see fully-parameterized format references inget_productsand media-buy responses, and echoing them back oncreate_media_buyno longer risks rejection by duration-pinned seller products. Existing composed catalog products are backfilled from the seller’s own product definitions; other stored products pick the params up on their next catalog re-sync.
4.22.0 — July 7, 2026 at 6:50 PM UTC
- A fluid or multi-size ad tag now maps to every campaign placement its declared sizes can serve, not just one. When a buyer brings a tag that declares multiple sizes (e.g. 300×250 and 728×90), Murph auto-maps it to each matching required placement and the confirmation card shows all of them (“Serves N placements”). Tags with no declared size still ask which placements they run on.
- The buyer rail’s Campaigns and Creatives items now match the storefront rail: once a conversation is underway they drop their selected highlight and show a ”+” on hover, and clicking one opens its widget into the current chat. On a fresh chat, opening one is a clean start point that replaces the other; once chatting, opening another keeps the prior widget and both stay in the conversation. Rail-launched widgets — on both the buyer and storefront rails — now render in chronological order at the point they were opened, so the transcript reads top to bottom as it happened.
- Connecting an ad platform now tells you whether it’s actually buyable. When a
- connect surfaces ad accounts but none of your advertisers are mapped to them,
- Interchange sends a “connected, but 0 advertisers mapped” notification with a
- path to the Advertiser mapping tab — before the first buy fails. Murph
- narrates completed connects (what was linked — a Business Manager, MCC, or a
- single ad account — how many accounts it surfaced, and the mapping state) and
- answers agency-access questions from the new per-platform agency runbooks in
- the connecting guide, which cover how a client grants your agency access on
- Meta, Google Ads, TikTok, Snap, LinkedIn, Pinterest, Reddit, and Amazon Ads.
- Fixed: updating the budget on an active media buy now works even when other buys on the same campaign were created before per-buy pricing terms were required. Previously, any campaign with legacy (unpriced) sibling buys would block all budget changes on any buy in the campaign. The validation now uses the available raw-media allocation as a conservative lower bound and still enforces the campaign ceiling.
- Budget headroom (
unallocatedBudget) now reflects pending budget-reduction requests immediately, before storefront acceptance. Buyers who submit a budget cut will see the freed amount available for other buys right away. - The creative upgrade endpoint (
POST /campaigns/:campaignId/creatives/:creativeId/upgrade) is now reachable via theapi_callMCP tool, allowing agents to setformat_kindon a creative that hasrequires_upgrade: true. - Fix Murph in-chat Approve control not completing durable writes. Clicking Approve now correctly executes the pending action instead of issuing a fresh confirmation request.
- Agent-driven catalog sync, event-source sync, and signal updates are more reliable. Some endpoints require the same identifier in both the URL path and the request body; an agent that supplied it in only one place previously got a “missing path parameter” or validation error. The API now backfills the missing side from the one you provided, so the id need only be stated once. A genuine mismatch between the two is still rejected, and the request contract is otherwise unchanged.
- Sellers now have public docs for publisher coverage, network
adagents.json, GAM key-value site lists, and buyer property-list briefs. - The “storefront adapter connection — mapping required” alert is now delivered always-on, alongside its credential-action sibling, instead of appearing as a mutable notification preference. Like the other storefront readiness signals (“your storefront is offline / not traffickable”), an operator can’t mute a buys-are-blocked-until-mapped alert, so it no longer shows as an opt-in category for sellers.
4.21.1 — July 7, 2026 at 1:47 PM UTC
- Fix Murph approval flow so attaching a chat-uploaded creative (
create_creative_manifest) executes when you click Approve. Previously the pending record kept the upload as a placeholder, so by the time the click landed on a later turn the buyer API rejected the write and Murph looped on a fresh approval instead.
4.21.0 — July 7, 2026 at 12:57 PM UTC
- Property lists now apply to active media buys automatically. Creating a new property list pushes it to all active media buys for that advertiser. You can also push an existing list to a specific campaign at any time — no need to recreate media buys that were already running when the list was created.
- Fixed an issue where product discovery returned zero results against AdCP 3.0 sellers (e.g. Ozone) when a currency filter was active. The
pricing_currenciesfield is only supported in AdCP 3.1; 3.0 sellers responded withUNSUPPORTED_FEATUREand no products. The SDK adapter now strips this field before the request reaches 3.0 sellers. - Fixed two channel-filtering bugs in storefront discovery:
-
- Audio storefronts (e.g. Talpa Media / Triton) were excluded from product discovery when buyers filtered by
channel: audio. Agents advertisingprimary_channels: ['audio']now have that alias normalized to the canonicalstreaming_audiovalue before storage, matching how buyer-requested channels are normalized.
- Audio storefronts (e.g. Talpa Media / Triton) were excluded from product discovery when buyers filtered by
-
- Storefronts with no declared channels or regions (most storefronts) were invisible in the marketplace browser when a channel or region filter was active. The filter now treats undeclared metadata as unknown and includes those storefronts, consistent with how product discovery handles agents with unknown capabilities.
- Show the buyer account name for requested supply when an internal customer link is missing, instead of showing an internal account identifier.
- Fixed a bug where deleting the last inventory source left the
products_availablereadiness check showingcompleteinstead ofmissing. The storefront now correctly reports zero products available after all sources are removed. - Manual wholesale pricing issues now surface as pricing-upload tasks instead of generic ad-server sync failures.
- Murph: surface every pending confirmation from a multi-write turn so all Approve widgets render, not just the first. When Murph queues N writes in one turn (e.g. six
delete_campaigncalls), the orchestrator previously collapsed the pending_confirmations to a single artifact via.find(...)— matched by the client hydration/state model which stored only one artifact per messageId, silently dropping N-1. The buyer chat surface promised “N Approve controls below” and rendered one.MurphChatResponsenow carries a pluralpendingConfirmations: T[]alongside the singularpendingConfirmation(retained for back-compat with older clients and the Slack handler), and the buyer runner renders one panel per element. - The progressive discovery experience is now complete end to end. The opt-in
- API (
progressive: trueondiscover_products, withrevision, resultsComplete,pendingAgents, and aguidancefield naming the exact- next call), the server-sent event stream
- (
GET /api/v2/buyer/discovery/:id/events), and progressive rendering in the - buyer chat — results populate as sellers answer, with a waiting affordance
- naming who is still working — are all live. Calls without the flag behave
- exactly as before.
- Progressive product discovery now serializes first-wave cache snapshots behind earlier seller revision writes so
sinceRevisionpolling cannot observe a lower revision than the initial response. - Creatives that pin a
format_option_refwithscope: "product"are now validated at assignment time — the referencedformat_option_idmust appear in at least one product’s declaredformat_options. At execute time, the pinned option’s canonical params (e.g.duration_ms_exact) are forwarded to the seller instead of the full option set.
4.20.0 — July 7, 2026 at 3:33 AM UTC
- Local MCP clients that use loopback OAuth callbacks, such as Codex, can now complete browser authorization instead of being blocked by hosted-client origin approval checks.
- Buyer agents can now inspect storefront capability diagnostics per active source. Managed ad-server-backed sources are counted as
probeable: falseinstead of disappearing from the response, and external AdCP rows report credential requirements from the latest non-synthetic capability payload when available. - For buyers and agent builders, this makes product-discovery troubleshooting clearer: a storefront with managed inventory no longer looks empty, and agents can tell when a buyer-owned credential is required. Sellers do not get new setup controls or need to take action; their managed storefront rows may now be shown to buyers as managed and not probeable rather than omitted. No pricing, packaging, billing, or margin changes.
4.19.0 — July 7, 2026 at 2:54 AM UTC
- Fixed cancel and delete failing for storefront media buys where the source accepted the buy asynchronously (returning a pending task instead of a confirmed upstream ID). The error “No media buy on this storefront” no longer occurs when cancelling or deleting a buy that is still awaiting source confirmation.
- The API now says
advertiser_ideverywhere it previously saidseat_id, completing the seat→advertiser naming migration. The published buyer and storefront OpenAPI specs already used advertiser naming — this change renames the remaining internal request/response fields (the internal signal provider mapping API and unused input schemas) so noseat_idfield name survives anywhere. No action needed: v2 buyer and storefront requests that send a strayseat_idkey are automatically corrected to the advertiser field, so existing integrations keep working. Useadvertiser_idin new integrations.
4.18.0 — July 6, 2026 at 11:07 PM UTC
- Creative manifest validation now accepts
format_kind-only creatives (AdCP 3.1 canonical path). Creatives that carryformat_kindwithout aformat_idare now validated against the format kind catalog instead of failing with a format-not-found error. - Bring-your-own-creative now handles ad tags. When a buyer pastes or uploads a display, rich-media, or VAST tag (standalone, or inside a zip bundle), Murph recognizes the tag type and its declared size and shows it on the confirmation card (e.g. “300×250 display tag”, “VAST 4.0”). Tags with no declared size are flagged so Murph can ask which placements they run on, and tags mangled on paste (HTML-escaped, curly quotes, truncated, or garbled encoding) are flagged as malformed with a prompt to re-paste or upload the tag as a file.
- Activate a buyer catalog directly from the UI. The Data sources → Catalogs view now has three distinct actions — Refresh, Preview, and Activate — instead of a combined “Refresh and activate”. Activation no longer depends on a feed refresh, so you can activate an inline/uploaded catalog (not just URL-backed feeds) and re-run activation on an unchanged feed on demand. Refresh now applies only to URL feeds.
- Fixed the buyer left rail rendering the “Recents” heading twice.
get_campaignnow returnspackages[](and itspackageIdvalues) beforeproducts[]andcreatives[]in each media buy, so it survives LLM context truncation on large responses. Previously,packagesappeared last in the object and was silently dropped when the response was too large, blocking budget edits on active buys with many creatives.- Also fixes a silent no-op bug where submitting a package budget update with an unrecognized
packageIdreturned success without changing anything. An unrecognizedpackageIdnow returns a validation error with an actionable message. - Fix Approve button not rendering in Murph when the model made multiple failing tool calls in the same turn before proposing a gated action.
- Fixed an issue where spec-compliant external sales agents declaring
media_buy.portfolio.primary_channelswere stored with empty channel lists. The SDK reads the wrong key (portfolio.channels), so channels are now extracted directly from the raw capabilities response with fallback to the SDK-parsed value. - Fixed a bug where
browse_discoveryalways bypassed the discovery result cache on the first page of results (offset 0), causing every browse call to trigger a new live query to the seller. This produced non-deterministic product counts across consecutive calls to the same discoveryId and made the discovery cache effectively useless for initial page loads. - One campaign can now mix routed and decisioned media buys. Routing (
ROUTEDvsDECISIONED) and pricing terms are now properties of the media buy, not the campaign: each buy takes its routing type from its storefront at create — derived server-side, never a client input — and locks its own pricing terms for that routing type. Each buy’s fee is calculated at its own rate, so a campaign’s fee is the sum of its buys’ fees, and the campaign carries a single all-inbudget_totalthat caps every buy’s media plus its fee. - Breaking:
campaignTypeis now ignored oncreate_campaign/update_campaignand no longer returned on campaign responses (detail or summary) — routing and pricing are determined per media buy. On storefront and discovery responses (list_storefronts/get_storefront, product and proposal discovery),supportedCampaignTypesis renamedsupportedRoutingTypes(sameDECISIONED/ROUTEDvalues). - Pricing is unchanged: each buy still prices from the same contract rate card, now selected per buy’s routing type instead of once per campaign. Nothing changes on seller-facing surfaces, and sellers still never see buyer margins.
- Murph: fix the “click Approve below but nothing renders” failure mode observed in the buyer chat surface. Root cause traced in the transcript: on a “re-offer” / “retry” request, Murph was text-narrating the corrected proposal (“This will set the budget to $X…”) without actually invoking the write tool — so no
pending_confirmationwas issued server-side and no widget could ever render, no matter how many times she said “click the Approve control below”. The prompt now: -
- Requires a tool call on re-offer/retry. New section makes explicit that any retry request MUST invoke the write tool in that turn; a text-only reply describing the offer produces zero widgets. Called out as the single most common failure mode.
-
- Softens the “widget will render” language. Previous fix (#5749) said “A fresh Approve control now sits under THIS turn” — reworded to “SHOULD render, tell me if it doesn’t”, with an explicit ban on asserting the widget WILL appear.
-
- Handles the “no widget rendered” report. On first report — after a real tool invocation — Murph offers
report_issuewith the pendingconfirmationUidinstead of looping back to “click the Approve control below”.
- Handles the “no widget rendered” report. On first report — after a real tool invocation — Murph offers
- Storefront left-rail nav items now read as “add to chat” once a conversation is underway: they drop their selected highlight and reveal a ”+” on hover, signaling that clicking them drops the widget into the current chat rather than navigating away. New chat and Dashboard keep their normal navigation behavior.
- Ad-server source setup now shows the real credential or vendor error when a create or credential update fails, warns about copied credential characters that can be mistaken for ASCII, and makes source creation and disabling available from the secure setup form.
- This is a seller setup change only; buyers do not see new controls or different catalog copy.
- Fixed creative assignment silently dropping all creatives when a product declares its accepted formats only via
format_kindinformat_options(no v1format_option_id). Creatives whose format ID resolves to the declared canonical kind are now correctly assigned on both create and update paths.
4.17.0 — July 6, 2026 at 6:59 PM UTC
- You can now register a webhook to receive push events instead of polling. This is opt-in — nothing changes if you don’t register one. Register a URL and secret once, and we’ll
POSTmatching events to it as they happen — starting withdiscovery.revision, which fires the moment a new seller result lands in a progressive discovery session, the same event the discovery event stream already pushes over a live connection. Deliveries are HMAC-signed so you can verify they came from us. See Webhooks for setup and the full event catalog. - Fixed: HTML/CM360 tag creatives (
display_300x250_html) now pass format validation for products that declare image-only format IDs (display_300x250_image). Many seller product catalogs list only_imagevariants for display banner slots even though their ad servers accept HTML tags. Display banner slots of the same size now accept both HTML and image creative formats. - Storefront operator-domain verification now recognizes trusted
brand.jsonhouse portfolio website properties as alias evidence, so approved sellers are not left pending when their account and operator domains are linked throughbrands[].properties. - Fix media buy failure when a MANAGED_SALES_AGENT product’s internal inventory source identifier was mistaken for the sales agent ID, causing “agent reference broken” errors on product execution.
- MCP authorization failures now show the specific reason (for example, “An account admin must add this browser origin before authorizing this MCP client”) instead of a generic “Failed to complete MCP authorization” message, and internal server errors on this route are now captured in Sentry.
- Murph: when a confirm-gated write’s post-approval retry returns
pending_confirmationagain (the approval didn’t propagate —writeExecuted: false,plainAffirmativeAccepted: false), Murph no longer points at the already-spent Approve widget. She now tells the user plainly that the approval didn’t land and asks them to click the fresh Approve control that renders under the new turn. Also spells out concrete past-tense openers that are forbidden while a write is unconfirmed ("Set — …","Updated — …","Bumped — …","Your budget is now …", etc.) so the specific narrative violation seen on the buyer chat surface can’t slip past the generic “no past tense” rule.
4.16.0 — July 6, 2026 at 4:46 PM UTC
- Wholesale catalog products now carry a
pricingScopefield ("public"or"account") so your agent can tell whether a cached price is the seller’s public rate card or specific to your account. No action needed — the field is additive. - Setup surfaces now show only the tasks you can actually do, each with a one-click recheck where the platform can verify the fix for you. The ad-server setup surface has a clear binary posture — “Connected and syncing, nothing needed from you” or a short list of exactly what we need — with our own background work shown as a passive status line instead of alarms.
GET /api/v2/storefront/esa/{esaId}/statusnow returns the same typeddiagnosesas readiness, scoped to the ad-server failure modes, and every seller-owned diagnosis links its troubleshooting guide. - Supply requests you tracked before this week’s update are visible again in
list_requested_supply. Asks recorded under the previous storage model are now automatically carried into the new demand store on a recurring sweep, so nothing you requested is lost — and new asks continue to appear immediately. - Finalizing a proposal on a storefront now returns a structured expiration timestamp, so buyer agents can tell exactly when they need to complete the purchase without parsing a text note.
- Storefronts with product composition now support the full AdCP proposal
- lifecycle with third-party buyer agents. A draft proposal returned by
get_productscan be finalized viarefine[{scope: "proposal", action: "finalize"}]— the storefront- re-validates that every product in the plan is still available at current
- pricing and commits the proposal with an
expires_atdeadline — and a - committed proposal can be executed in one step by passing its
proposal_id - and a
total_budgettocreate_media_buy, which expands the proposal’s - allocations into packages server-side. Each committed proposal executes at
- most once; unknown, expired, still-draft, and already-used proposals are
- rejected with specific ADCP errors. A committed proposal is a price and
- composition commitment bounded by its expiry, not an inventory reservation.
- Scope3 buyers are unaffected — their agents already execute composed plans
- directly; this closes the loop for third-party AdCP buyers.
- Settings → Connections is now two purpose-driven screens. The Connections tab
- is the accounts you’ve linked — each row is one grant showing who authorized
- it, credential health, and how many advertisers it maps — with link and unlink
- as the only actions. The new Advertiser mapping tab groups platform ad
- accounts under their manager container (Business Manager, MCC), maps or
- unmaps each to your advertisers, filters to unmapped or unreachable, and
- shows preserved unreachable mappings with a relink-to-restore path. A
- “connected, but 0 advertisers mapped” banner links straight to the unmapped
- view before a buy can fail.
4.15.0 — July 6, 2026 at 2:35 PM UTC
- MCP OAuth now accepts dynamically registered loopback callback subpaths, allowing local clients like Codex to complete authentication.
- Ad-server source status now shows manual wholesale pricing uploads as the required fix when a source is configured for uploaded pricing, instead of telling sellers to reconnect pricing access to their ad server.
- Murph no longer tells you to click Approve again when a confirm-gated write fails after you’ve already approved it. Instead, Murph now surfaces the underlying error (e.g. “your campaign’s remaining budget is short”) and proposes a concrete fix — the previously-approved control has been consumed and can’t be clicked twice.
- Reporting polls to sales agents now carry the same
accountreference the seller received oncreate_media_buy. Previously, if the buyer had no linked account for the seller (the common shape for implicit-auth sellers like pubx), the poll worker dropped theaccountfield entirely — even whencreate_media_buyhad sent a natural-key{brand, operator}account and the seller had accepted the buy on that basis. The asymmetry caused strict seller handlers to null-deref onctx.account.id, which surfaced asINGESTION_FAILEDon every daily poll with no observable data ever landing in reporting. - In deliberately shared Slack channels, the data owner can now approve sharing a specific campaign with the counterparty: Murph asks for explicit confirmation, only owner-side users can approve or revoke, the approval covers settings-level details only and lasts until revoked, and every grant and revocation is audit-logged.
- Allow multiple publisher organizations to connect the same third-party sales-agent endpoint with separate inventory-source credentials.
- Storefront readiness now returns typed source-health diagnoses.
GET /api/v2/storefront/readinessincludes adiagnosesarray with one entry per source problem, each carrying who owns the fix (seller,scope3, orvendor), an impact-based severity (blocking,attention, oradvisory), plain-language copy, and an inline typed action — including a ready-to-call recheck endpoint where the platform can re-verify on demand. Setup surfaces and agents can now show sellers only the tasks they can actually complete: problems Scope3 owns (like a stale catalog cache) no longer appear as seller to-dos or block readiness, and a stale signal catalog that nothing depends on yet is advisory instead of critical. - Slack confirmation prompts now include Approve and Cancel buttons, so pending write actions can be completed without copying a confirmation code back into the chat.
4.14.0 — July 6, 2026 at 9:44 AM UTC
- Interchange now posts release notes to your shared Slack channel after production releases — a few bullets covering only the changes relevant to your role and setup, with the assistant on hand to explain any of them.
- Notification settings now include browser notification controls for shared Murph mentions, so users can explicitly enable live desktop alerts from the app.
- Wholesale product and signal catalogs for managed ad-server sources now refresh automatically when their cache goes stale, so newly created or edited products reach buyer discovery even if a catalog-change notification is missed. Previously a missed notification could leave a source’s catalog stale indefinitely.
- Added
GET /api/v2/buyer/discovery/{discoveryId}/events, a Server-Sent Events - stream for progressive discovery. Instead of polling
browse_discoverywith sinceRevision, callers can open this stream to have each newly landed- seller group pushed as it lands, with a terminal event once every seller has
- settled. Same continuation contract as polling, delivered as a stream.
- Managed ad-server sources can now distinguish ad-server-synced wholesale pricing from manually uploaded wholesale pricing, so pricing health prompts sellers to upload current pricing instead of reconnecting pricing access when the source is intentionally manual.
- Shared Murph room mentions now refresh faster in the app and can surface browser notifications when users have already granted notification permission.
- The provider account mapping list now carries the platform hierarchy
- (
accountType,parentExternalId,parentName) for grouping accounts under - their manager container, includes preserved unreachable mappings (accounts
- whose connection was unlinked) with a
mappingStatus=unreachablefilter, and - each mapping entry exposes
linkIdandunreachableAt. A new DELETE /advertisers/{advertiserId}/accounts/{linkId}endpoint unmaps an- account from an advertiser.
discover_productsover MCP now emitsnotifications/progressmessages as sellers answer during the discovery fan-out. Pass the MCP protocol’s_meta.progressTokenon theapi_calltool call and your client receives one progress notification per settled seller — e.g. “Magnite answered — 11 products (3 of 14)” — before the tool result returns. Works on both progressive and non-progressive discovery calls; clients that don’t send a progress token are unaffected.- Resolve typed Murph room @mentions server-side so valid same-customer handles still invite and notify teammates when the client omits mention IDs.
- Add same-customer @user mention suggestions and durable room invite events for shared Murph conversations.
- Activate OAuth-backed storefront agents after a successful credential callback, backfill already-authorized pending sources, capture the customer action blocked by each escalation, count customer-blocking storefront escalations in health, and auto-verify storefront operator-domain aliases when an approved account domain has trusted AAO/brand linkage evidence.
- Polish shared Murph room participant avatars with clearer initials, image-ready rendering, and consistent room presence stacks.
- The product discovery widget now renders progressive discovery results as
- sellers answer instead of waiting for every seller to respond. It shows a
- “Waiting for X, Y… (N of M sellers)” banner while sellers are still
- answering, accretes newly-landed seller groups into the view as they arrive
- (polling automatically), and once results are complete, drops the banner and
- flags any sellers that timed out.
- Rename the buyer “seat” concept to “advertiser” across the entire wire surface (hard cutover, no aliases — the platform is in beta). What changed for integrations:
- MCP tool names:
customer_get_seats→customer_get_advertisers,seat_details_list/seat_details_get→advertiser_details_list/advertiser_details_get,seat_create/seat_update/seat_delete→advertiser_create/advertiser_update/advertiser_delete,select_seat/switch_seat→select_advertiser/switch_advertiser. Old names now return unknown-tool errors; MCP clients that cache the tool list must reconnect. - Tool scope value:
seat→advertiser. - Response keys:
seats/seat/seatId→advertisers/advertiser/advertiserId(e.g.GET /api/customers/:id/seatsnow returnsadvertisers; syndication, signals, audit-log, media-buy and campaign payloads returnadvertiserId). - Request fields: service-token creation
scope: "SEAT"→scope: "ADVERTISER",seatName→advertiserName; signals/audit-logsseatIdquery param →advertiserId(a legacyseatIdparam is now ignored); UTMsource: "seat"enum value →"advertiser". - Unchanged: the
x-scope3-seat-idrequest header (stable wire contract; carries the advertiser ID), all SQL/DB column names, and the/api/customers/:id/seatspath (response keys renamed, path kept). - This aligns the public API with the terminology used everywhere else in the product.
- Render selected Murph user mentions as recognized people chips in the composer.
- MCP OAuth clients can now self-register callback redirects during dynamic client registration, and account admins can self-serve exact browser origins for non-credentialed MCP/OAuth CORS access.
- Murph now audits who can read each connected Slack channel. When a channel’s members span more than one customer account, Murph pauses account-specific answers there — explaining why and pointing to DMs — until a Scope3 admin reviews the channel, so one company’s data is never shown to another.
- In Slack channels deliberately shared between two customers, Murph now scopes itself to the relationship: it discusses supply tracked for the named counterparty and general product questions, keeps every other account detail out of the channel (redirecting to a DM), and limits supply tracking there to the counterparty’s own domains.
- Shared Murph rooms now create in-app notifications when a teammate mentions you.
- Shared Murph rooms can now be started and linked before the first Murph prompt is sent.
- Shared Murph room lists now update from a live stream instead of repeated browser polling.
- Unlinking an ad-platform connection now preserves your advertiser mappings
- instead of leaving them orphaned. Mappings whose account is still reachable
- through another connection of the same platform keep working; mappings only
- the unlinked connection reached are marked unreachable (
unreachableAton - the linked-account resource), never resolve at buy time, and recover
- automatically when you reconnect the platform or re-map the account — a
- temporary disconnect/reconnect never loses mapping work.
- Products with an FX-converted price (a rate-of-the-day quote into a currency
- the storefront doesn’t natively price in) now carry an
expiresAttimestamp - through
discover_products,browse_discovery, and product details — the - hold expires at the next UTC midnight. Buyer-side caches (the discovery
- snapshot and the per-query fan-out cache) now treat any cached quote past its
expiresAtas stale and transparently re-fetch a fresh price instead of- serving the expired one. Natively-priced products are unaffected and continue
- to cache freely.
- Added a downloadable wholesale avails and pricing CSV template and clarified how sellers should prepare manual wholesale pricing uploads for ad-server-backed sources.
4.13.0 — July 5, 2026 at 6:31 AM UTC
- Adapter connections are now keyed by grant identity — who actually authorized
- the platform grant (the authenticating user, and organization for org-scoped
- grants; captured from the platform’s identity endpoint on Meta and Snap, and
- derived from the reachable account set elsewhere). Reconnecting the same
- account updates its existing connection instead of duplicating it, a reconnect
- can no longer attach a fresh credential to a different grant’s connection, and
- intentionally distinct grants (an agency manager account alongside a client’s
- directly-shared account) coexist as separate connections.
- Progressive discovery documentation: end-to-end worked example (request, first-wave response, sinceRevision polling loop, stop conditions) across the discover-products and browse-products task pages and the discovery guide. The
guidancefield — the human-readable next-step hint returned on progressive responses and campaign-unbound sessions — is now declared in the DiscoverProductsResponse schema and OpenAPI spec. - Hosted managed ad-server sources no longer receive sustained source-outage Slack or Pylon notices that ask sellers to restore infrastructure operated by Interchange. Reconnect-labeled ESA timeout failures are now treated as Interchange runtime issues instead of seller credential-repair tasks.
- Validate FreeWheel ad-server credentials before accepting the managed source, so invalid credentials are rejected during setup instead of creating a broken source. The source dashboard now also separates first-sync progress from action-required failures.
4.12.0 — July 4, 2026 at 10:09 AM UTC
- Murph now treats supply-tracker phrasing as requested-supply intent and gives the correct account-connection path when it cannot record the request from the current channel.
- Product discovery supports progressive responses. Pass
progressive: truetodiscover_productsand the first response returns already-answered sellers within seconds — withresultsComplete, a monotonicrevision, andpendingAgentsnaming who is still working — while remaining sellers keep landing in the background. Pollbrowse_discoverywithsinceRevisionto receive only newly landed seller groups untilresultsCompleteis true. Sellers’ answers arrive one at a time, flight-search style, instead of everyone waiting for the slowest storefront. - Murph conversations can now be feature-flagged into same-customer shared rooms with shareable room links, live room presence, participant-authored room messages, @Murph/@room composer routing, same-customer @mention suggestions, per-person chat avatars, and a room-level stream that refreshes viewers when new messages are persisted.
4.11.0 — July 3, 2026 at 7:17 PM UTC
- Clarify how
adagents.jsonhosting modes relate to publisher-origin verification and AAO-hosted records.
4.10.0 — July 3, 2026 at 5:17 PM UTC
- Buyer reporting now handles multiple advertiser currencies honestly and can consolidate across them. Each advertiser block names its native currency; cross-advertiser totals carry a
totalsCurrencyand their money metrics are null (never a mixed-currency sum) when advertisers span currencies. A newdisplayCurrencyparameter — defaulting to your home currency when your advertisers share one — returns aconsolidatedblock: each advertiser’s spend converted at the current rate-of-the-day and then summed, with a per-advertiser audit trail andconversionInfometadata (rates, as-of day, anything unconverted,estimate: true). Consolidated figures are display estimates only and never affect billing or settlement. - Adapter connection summaries now report
mappedAdvertiserCount— how many of - your advertisers have an active mapping to one of the connection’s currently
- active accounts. A connected storefront with 0 mapped advertisers is not yet
- buyable (a media buy for an unmapped advertiser fails with
account_mapping_required), and this field lets buyers and agents surface- that gap right after connecting instead of at the first failed buy.
- Media buys on ad platform storefronts now resolve their external account
- through the advertiser mapping — the account mapped to the campaign’s
- advertiser under Settings → Connections — instead of the connection-level
- default account. An unmapped advertiser fails fast with a structured
account_mapping_requiredblocker carrying the Connections link, rather- than silently buying on a shared default account. Existing selected
- accounts are backfilled into mappings automatically where exactly one
- advertiser has transacted through the connection; ambiguous connections
- are left unmapped and surface the blocker instead. Buy account resolution
- (connection, credential, and how the account was chosen) is now logged for
- audit.
- Reporting metrics documentation now correctly describes spend as denominated in the advertiser’s primary currency rather than claiming USD (which was only true for USD advertisers).
- Add storefront adapter credential health writeback, a nightly expiry/refresh sweep, and lifecycle docs for reconnecting or rotating unhealthy credentials.
- Fix two defects that could leave a storefront-routed media buy’s package budgets out of sync with what was approved. Approved budget updates now locate the buy under either media-buy id space, so an operator approval actually persists the new budgets instead of failing silently; and package backfill from a resolved source route no longer overwrites newer, locally-staged budgets with the create-time snapshot.
- A creative that fails to sync to a sales agent is no longer reported as successfully synced, and sync failures now carry the agent’s rejection reason instead of a bare agent name — so buyers see when a creative did not reach the sales agent and why.
4.9.0 — July 3, 2026 at 12:05 PM UTC
- Brief requests to composition storefronts now return only composed products and proposals — the raw wholesale catalog is no longer merged into brief responses, and a discovery deadline no longer substitutes the catalog for a composed answer. Ask with a brief and every product you get back was composed for it; ask in wholesale mode for the full catalog. Source pass-through still serves as the fallback when composition fails.
- Add an in-chat campaigns widget for buyers. Ask Murph (or use the Campaigns
- rail item) to see an advertiser’s campaigns as a table with status, flight,
- and budget, then drill into a single campaign for its delivery metrics, media
- buys, and creatives. Gated behind the buyer creative v2 rollout.
- Storefronts with product composition can now return ADCP proposals from
get_products. When a brief gives a basis for a multi-product plan, the composition engine emits draft proposals — named plans with budget allocations across the composed products, per-allocation rationale, and brief alignment — with deterministic proposal IDs that stay stable across re-discovery. Buyers see these as recommended plans in discovery and can execute them viaapply_proposal. - Murph approval prompts now use clearer wording when an action was suggested after reading external or uploaded content.
- Connecting an adapter account (Reddit, Snap, Meta, TikTok, and other
- provider storefronts) is now one click: the
connectionUrlreturned by connect_storefrontsends the buyer straight to the provider’s OAuth- consent screen instead of the Connections page, and every adapter has a
- permanent shareable link at
/connect/{provider}(for example /connect/reddit) that works without a pre-minted customer URL.- External-agent pass-through storefronts now keep Interchange-owned merchandising features off, including Chef composition and Storefront approval queues.
- Product discovery results now refresh immediately after a seller updates their catalog. Seller catalog-change webhooks retire cached discovery fan-out results, so buyers no longer see a pre-change product set for up to 10 minutes after a seller publishes changes.
- Retrying a discovery with a longer wait (
waitSeconds/waitMode: long) now actually re-queries the sales agents that missed the shorter window. Previously the retry could return the cached partial result from the quick pass, leavingincompleteAgentsunchanged no matter how long you offered to wait. - Fix two storefront currency setup issues. (1) The setup checklist did not update after saving — the embedded setup widget cached read responses and never refreshed them after a write, so confirming your settlement currency left the step showing as incomplete until a full page reload, even though the change had saved. Writes now invalidate cached reads so the checklist reflects the change immediately. (2) The currency picker in the create-account flow rendered its label on top of the placeholder text; the label now floats correctly so the two no longer overlap.
- Cross-currency buys are no longer blocked by a temporary FX rate-feed outage: the most recent locked rate-of-the-day (up to 7 days) is carried forward as the day’s rate, with operations alerted. When no recent rate exists, cross-currency requests now fail with an explicit
FX_RATE_UNAVAILABLEerror instead of a generic pricing error, and stale FX quotes are rejected withFX_QUOTE_EXPIREDon every create path. - Clarify MCP customer-switching errors so agents use the dedicated
customer_switchtool, then retry the original API operation without per-call customer scoping. - Documented response bodies for eleven API operations that previously showed
- no response schema — creative preview, discovery product details,
- optimization suggestions (list/get/approve/reject), notification read and
- acknowledge, advertiser account, storefront connection archive, and the
- adapter-storefront connect handoff (including its
connectionUrlbrowser - link). Also corrected the ad-server source refresh docs: it returns the sync
- run status and ids with 200, not an empty 204.
- Sellers whose ad server can execute but can’t expose commercial data (e.g. GAM publishers who won’t let us run the pricing query) can now supply wholesale price and availability by uploading a percentile-CPM feed keyed on their ad-server selectors. The platform validates it deterministically, prices the seller’s products from it (floor derived from p25; p50/p75 as guidance), and exposes per-country availability and expected CPM as a product forecast rather than splitting the catalog per country. Inventory too thin to clear the storefront’s minimum line item is held back, and a source that has enabled the module can’t go live until it has a current, non-stale feed.
- Priced wholesale products can now be purchased end-to-end. Previously a wholesale product was shown and priced during discovery but failed at execution, because media-buy pricing was resolved only from the internal products table where wholesale products have no row. Execution now resolves a wholesale product’s price from the wholesale catalog — the same source discovery reads — so a priced wholesale product completes a buy. Wholesale buys are supported in the source’s settlement currency; selecting a converted (FX) currency returns a clear, specific error rather than failing obscurely.
- Wholesale products can now be purchased in a converted (FX) currency, not just the source’s settlement currency. At execution the buyer’s converted-currency selection is priced by re-minting the same buyer-currency option discovery served (converted at the rate quoted when the product was selected); a stale quote or an unavailable rate fails with a clear error rather than a wrong price. Re-reconciling an open wholesale buy now keys it to its native settlement currency, so it matches the existing buy instead of creating a duplicate.
4.8.0 — July 2, 2026 at 10:10 PM UTC
- Buyer Creative v2: creative evaluators now run through an extensible registry that declares each evaluator’s default gate posture (blocking vs advisory), and the creative-session evaluate boundary accepts the full buyer-creative workflow stages (generation, selection, refinement, finalization, adaptation, approval, live_learning) alongside the legacy draft/final values. Draft variants are scored 0-100 from their evaluator results and the highest-scoring variant is recommended.
- Discovery responses no longer block on LLM-generated group descriptions and product relevance copy in long-wait mode.
waitSeconds/waitMode: longnow only extend the time upstream sales agents get to answer; descriptive copy is served deterministically inline and upgraded in the background, cutting up to 15 seconds from long-wait discovery latency.
4.7.0 — July 2, 2026 at 9:45 PM UTC
- Flighted media buys no longer fail when part of the pacing schedule has already elapsed. Fully-elapsed pacing periods are skipped across campaign execution, per-buy pacing changes, and campaign pacing cascades — only still-live flights are sent to the seller — and executing a buy whose entire schedule has elapsed now returns a clear, fixable error instead of a seller rejection.
- Documented 21 previously-undocumented storefront API operations in the
- OpenAPI reference — storefront compliance, agent capability refresh, the
- embedded sales agent connection lifecycle (list, get, test, refresh,
- deactivate, reactivate, status, service account), the ESA catalog surfaces
- (products, signals, signal candidates, adapter capabilities, publisher
- properties, ad-server selectors, creative formats), and the storefront
- product catalogue. The
refresh_esaMCP operation now returns the refresh - result body (
status+syncRunIds) instead of an empty response, - matching the REST endpoint.
4.6.0 — July 2, 2026 at 8:24 PM UTC
- Managed ad-server source health now reflects the booking write path: a source
- whose last media-buy forward failed at the infrastructure level shows as
- degraded until a booking succeeds or the evidence ages out, and successful
- bookings count as positive health evidence.
- Polished the buyer Marketplace widget so buyers can open and manage supply they would buy, including editing buyer ask details and removing tracked supply from the widget.
- Documented 18 previously-undocumented buyer API operations in the OpenAPI
- reference — advertiser restore, discovery product details, creative
- list/preview/duplicate, creative sessions, optimization suggestions,
- advertiser accounts, storefront connections, notifications, and campaign
- property lists. The notification endpoints (list, read, acknowledge) are
- also documented for the storefront API.
4.5.0 — July 2, 2026 at 7:24 PM UTC
- Murph inventory-source test campaigns can now select wholesale buyer products by the source product IDs shown in the test plan.
- Fixed a pair of bugs where a package/budget update to a storefront-routed media buy could either silently self-activate without operator approval and without ever reaching the seller, or (the inverse) have a legitimate, already-approved update wrongly rejected. Both were caused by an internal check that assumed a live media buy always has an activation timestamp recorded, which isn’t true for buys accepted asynchronously.
4.4.0 — July 2, 2026 at 6:26 PM UTC
- Brief-based product discovery on ESA-backed storefronts is faster: products
- are served directly from the managed catalog instead of waiting on a live
- sales-agent call. A storefront whose catalog is still being set up now returns
- quickly with no products instead of timing out.
- Storefront operators are now notified (in-app and email always, plus Slack once they’ve enabled that event type in their Slack settings) as soon as a new approval work item — a media buy, creative, ad-server approval, or inventory-shortfall review — is waiting for them, instead of only being discoverable by checking the Approvals page.
update_campaignnow rejectsmediaBuys[].products[].budget/pacing/bidPriceon a media buy that already has deployed packages (ACTIVE, PAUSED, COMPLETED, INPUT_REQUIRED, or a PENDING_APPROVAL version staged on top of one of these) instead of silently accepting the request with no effect. Once packages exist, the product-level field is informational only: updatepackages[].packageId+budget/pacing/bidPriceinstead (fetchpackageIdviaget_campaignwithincludeProductDetails=falseto avoid response truncation on buys with many creatives).
4.3.0 — July 2, 2026 at 5:58 PM UTC
- Adapter connection accounts now carry account hierarchy: each discovered account
- reports an
accountType(advertiser,organization, or a platform subtype such - as Amazon
sponsored_ads/dspor TikTokpublisher_identity) plus parentExternalId/parentNamefor its parent business or manager account. Google- connections now expand manager (MCC) accounts into their client accounts, so
- agency users whose access flows through an MCC see the buyable child accounts.
- Organization (manager) accounts are listed for context but cannot be selected,
- mapped, or used for buys.
- Clickthrough URLs on media-buy creatives are now automatically wrapped in the Scope3 click tracker across all outbound paths (sync_creatives, create_media_buy, and update_media_buy inline creatives), so per-media-buy click attribution works regardless of which path a creative ships on and without the format having to declare a tracker slot. No action needed: existing tracker URLs and creatives without a clickthrough are left untouched.
- Avoid unnecessary Redis scans during product discovery enrichment cache invalidation.
- The storefront MCP
api_calltool can now fetch the seller-analytics rollup - — as the named operation
get_seller_analyticsor as raw GET /api/v2/storefront/seller-analytics. This fixes the seller dashboard- widget failing to load its analytics view over MCP.
- Fixed a
create_media_buyfailure classification bug: a fixable, non-refusal source failure (for example, a stale or invalid product reference) was being reported as a seller rejection. These failures are now categorized separately from a deliberate rejection. - Detect ADCP sandbox support from raw account capability metadata as well as normalized sandbox extensions.
- The Source Health workbench now shows a source’s TRANSACT axis — the outcome of the last
create_media_buyforward to it — as its own cell, distinct from discovery/reachability health. When a storefront forwards a buy, the source’s transact cell records the outcome (succeeded,pendingfor an async acceptance still awaiting confirmation,business_rejected,not_authorized,invalid_request,source_unavailable, orfailed) plus the media-buy reference and amaskedflag. This is recording-only: it never changes a source’s health status and raises no work items or alerts — interpretation is deferred to the diagnosis layer, mirroring the conformance-vs-health separation. A curated (linked) source records withmasked: true, because its buyer-facing failure category is identity-masked and therefore not yet trustworthy for diagnosis. - Use warmed managed sales agent products directly when cached wholesale data is sufficient, avoiding unnecessary live upstream discovery calls.
- Managed ad-server source health now reflects the managed pipeline (sync
- status, catalog freshness, connector reachability), refreshed by the platform
- every 15 minutes. Sellers are notified with the specific cause when a failure
- needs their action (for example, reconnecting ad-server credentials);
- platform-side failures alert Scope3 operations instead of asking the seller
- to fix them.
- Realign the signal
keyTypeenum to the AdCP context-match spec: added context signals (country,region,metro,topic,eidr,gracenote,isrc,gtin,rss_guid,isbn,custom) and identity signals (rampid_derived,hashed_email); removed values Scope3 does not resolve end-to-end (coreid,yahoo_connect,property,postal_code,uk_postal_district,lat_long_radius). A new privacy-boundary validator rejects any signal (or custom-signal targeting profile) that mixes context and identity key types. - Fixed linking or unlinking a creative on a campaign sending a no-op
update_media_buyto every media buy in the campaign, including legs whose contracted format has nothing to do with the changed creative. - Chat composer now tells you when a file can’t be attached instead of silently dropping it. Files that are too large, an unsupported type, or over the per-turn attachment limit surface a dismissible warning naming the file and the reason, so an oversized upload never disappears without a trace.
- Creative uploads that hit a size or file-count limit now tell you exactly which files were skipped and why (e.g. “chime-video.mp4 wasn’t added — the upload went over the 100 MB limit.”) instead of dropping them silently. The creative-intent and creative-confirmation responses carry a
skipped_files_noticeand the fullskipped_fileslist; the in-chat card shows the ratio (“3 of 4 saved”) and lists every dropped file so you can re-add exactly those without re-uploading the whole batch; and Murph relays it in one line rather than telling you to re-upload everything. - Storefront onboarding now judges the Walk → Run step by how much of your committed inventory you are actually expressing, rather than a fixed coverage checklist. Once your plan’s target model has enough substance, “Run” means you are fully expressing the inventory you have committed to — channels or properties you have declined lower the bar rather than counting against you; until then the previous coverage heuristic still applies. This makes the phase Murph coaches you toward reflect real expression progress.
4.2.0 — July 2, 2026 at 9:52 AM UTC
- Advertise sandbox support on storefront wrapper agents when their active backing inventory sources support sandbox tests, so sandbox advertisers are not skipped during buyer discovery.
4.1.0 — July 2, 2026 at 8:36 AM UTC
- Allow buyers to include the exact supply, package, audience, placement, or capability they would buy when tracking requested supply.
- Inventory source diagnostics now include a structured issue breakdown so sellers can see every active source-health signal, not only the top cause.
- External sales-agent storefronts with merchandising off now skip Chef
- composition and answer buyer briefs through live source passthrough, while
- composition ingredient loading reads only cached components and does not
- synchronously warm upstream sources. Public and internal docs now explain
- component-cache success, passthrough behavior, and Murph diagnostics language.
- Sandbox advertiser discovery now force-refreshes seller capabilities before
- checking sandbox eligibility, and storefront sandbox filtering no longer drops
- agents from stale cached capability rows before that refresh can run.
- ADCP account credential registration and rotation also trigger a scoped
- background account-inventory refresh, while unregistering a credential
- immediately cancels its locally cached discovered accounts.
- Storefront readiness now carries a persisted onboarding plan — the durable, shared record of what your storefront could sell. It includes a target model (seeded cheapest-first from your connected agents’ declared capabilities and your business profile), which setup steps are complete, and how your storefront has moved through the Crawl → Walk → Run phases over time. The phase is still derived live from your setup; the plan records the transitions for history so any surface can answer “where is this seller?” from one source of truth.
- Buyer integration account mapping tables are clearer, with less repeated platform/source text and a precise default-account label.
- Connection handoff links now preserve the full destination through login and can resolve provider-style targets before starting adapter OAuth.
- Sellers may now receive a supply nudge notification (
storefront.supply_nudge) - in their notification feed — a human-reviewed heads-up from the Scope3 team when
- something on their storefront needs attention (e.g. a sales agent that’s stopped
- responding, or an unconfirmed settlement currency). It’s delivered like the other
- operational alerts (in-app + email, plus Slack if enabled) and is always-on. The
- value is additive to the notification
typeenum in the v2 API. - A storefront media-buy leg that a source never accepts no longer polls forever. A never-resolved route (one that never received an upstream media-buy id — e.g. its source became unreachable) still un-accepted past a 14-day age backstop is now force-terminalized to
canceled(an operational terminal, not a seller rejection), so the buy stops showing an indefinite pending status. Buys that DID resolve upstream are never affected — a legitimately future-dated flight sittingpending_startuntil its start, a buy awaiting creative upload, and liveactive/pausedbuys are all exempt. Operationally, a pendingupdate_media_buythat misses its resolution deadline now also alerts on-call, matching the existing acceptance-timeout alert. - Supply requests now resolve the requesting customer strictly by authenticated account, closing a cross-tenant data exposure where customers sharing a company name or domain could see or modify each other’s requested supply.
4.0.0 — July 2, 2026 at 4:39 AM UTC
- Adapter storefront connection links now open the selected provider’s OAuth flow directly instead of only landing on the Connections page.
get_campaign/list_campaignsresponses no longer includemediaBudgetorfees— these were derived campaign-level values that no longer reflect how the Scope3 fee is tracked. The Scope3 fee is now recorded per media buy in the platform ledger (previously it was a single campaign-wide figure), so a campaign-levelmediaBudget/feessplit is no longer meaningful. Usebudget.total,feeType,allocatedBudget, andunallocatedBudget(all unchanged) to reason about a campaign’s budget.- Clarify that creative manifest validation is an optional diagnostic, not a launch prerequisite, send upgraded creative manifests to sync_creatives with canonical format_kind, and return a clear unsupported-capability error when an agent does not support ADCP validate_input.
- Clarify setup documentation around AdCP, AAO, and publisher authorization: external sales-agent sources authorize the external agent URL, ad-server sources using Interchange’s hosted storefront agent authorize
https://interchange.io, AAO registration blocks source connection, AAO compliance is advisory for activation, and publisheradagents.jsonauthorization is surfaced as an advisory setup/product signal today. - Adapter connection deep links now preserve storefront context when launched with tool-style snake_case query parameters.
- Discovery sessions can now hold the same product selected more than once. Each selection carries its own
selection_idand becomes an independent media-buy line item (distinct budget, pacing, and flight), matching whatcreate_media_buy/update_media_buyalready support. Omitselection_idfor a product’s single default selection; supply a distinct value to add a repeat. Re-sending an existingselection_idupdates that instance instead of creating a duplicate. - Breaking: the
selected_productsfield on thestart_product_discoveryandupdate_discovery_session_productsoutputs changed from an object keyed by product id to an array of selection instances (to represent repeats). Consumers that indexed it asselected_products[productId]must iterate the array and read each element’sproduct_id/selection_id. - Creatives with
target_format_idsset now count toward campaign format coverage and are synced to the sales agents whose formats they cover, so one creative can satisfy multiple publishers’ format IDs instead of needing a separate duplicated creative per publisher. - Fix
discover_products,auto_select_products, and product detail responses (REST and MCP) always prefixing CPM/budget amounts with$regardless of the product’s or campaign’s actual currency. A non-USD product (e.g. a ZAR-priced Ozone package at 450.23) rendered as$450.23, misrepresenting the price by the FX rate. Prices now carry and display their real currency (e.g.ZAR 450.23), falling back to$only when currency is genuinely unknown or when a price range mixes multiple currencies. - Fix storefront discovery under a tight deadline: when the buyer-discovery budget
- is nearly exhausted by the time a source’s live get_products would run, serve the
- source’s warmed catalog instead of issuing a doomed sub-viable live call. Prior
- behavior floored the timeout to ~1ms, which failed instantly (“timed out after
- 1ms”) and wrongly marked the source unhealthy — so a live-only third-party source
- briefly dropped out of discovery. A budget-exhaustion skip is no longer treated
- as a source-health failure.
- Murph sandbox inventory source and buyer-infra test campaigns now execute through the normal buyer campaign, discovery, product-selection, and execute_campaign tools instead of constructing direct upstream ADCP media-buy probes.
- ESA managed ad-server sources now expose explicit sandbox-account readiness and ensure endpoints so no-spend buyer tests can verify or create the tenant-managed sandbox account instead of inferring sandbox setup from the source type.
- Require confirmation before Murph records or removes requested supply, let buyers remove specific seller/channel supply they no longer want to buy, block requested-supply writes during admin simulation dry-runs, and have Murph share the public seller signup link instead of creating seller-outreach workflows when buyers ask what to send sellers.
- Fix Murph confirmation token replies so they continue the original conversation before executing the approved action.
- Murph’s confirmation prompts now explain exactly why a follow-up confirmation was rejected (for example, a dropped conversation thread id) instead of a generic “expired or didn’t match” message, and consistently remind the calling client to keep passing the same conversation thread id when confirming a gated action.
- Normalize embedded sales agent sandbox account domains before provisioning managed storefront sources.
- Adaptive onboarding phase (Crawl → Walk → Run, plus Pass-Through). The storefront readiness response now includes a derived
phase, and Murph frames onboarding conversationally by phase — orienting a seller (“you’re in the Crawl phase; your next step is …”) instead of reading a flat checklist.pass_through(a finished-products sales agent) has no rungs; composition storefronts progress Crawl → Walk → Run. Derived live from setup-mode + readiness — no new persistence. - Open the Marketplace widget for filtered storefront browse questions and keep supply requests focused on named sellers.
- Operational source failures on a storefront media buy no longer surface as a seller rejection. When a source fails to resolve a previously-accepted buy — its task
failed/canceled/aborted, or it went silent past the acceptance deadline — the leg now settles ascanceled(a terminal fault) rather thanrejected(a seller “no, don’t retry”). Only a genuine merits refusal (rejected/governance-denied) settles asrejected, and it now carries the seller’s reason through toget_media_buys.rejection_reason(redacted per source kind). A source that reportsrejectedon its delivery feed also surfaces a rejection reason. - Remove the standalone creative
validatepre-flight (POST /api/v2/buyer/campaigns//creatives/validate and the validate_creative diagnostic). It provided no value over submitting a creative directly — attach/create the manifest and deliver it through sync_creatives / campaign execution, which runs the necessary manifest checks and surfaces any issues. - Deleting a media buy that is still awaiting approval is now treated as a retraction: it withdraws the pending request instead of adding a spurious “approve media buy” task to the seller’s operator approval queue. Cancelling a buy the seller has already committed to is unchanged.
- Separate ready supply from waiting supply in the Marketplace widget and return buyer-safe ready dates for supply requests that are now available.
3.31.3 — July 1, 2026 at 10:35 PM UTC
- Coerce forwarded ADCP product-discovery time budgets to integer seconds so seller agents reject fewer valid discovery requests.
3.31.2 — July 1, 2026 at 7:17 PM UTC
- Polish the Marketplace widget so requested supply uses the public status contract and remains visible from the storefront discovery surface.
- Fix creative upload dropping duplicate-named files: when a zip bundle contained the same filename in different folders (e.g. two versions of a video), only one was saved. Every uploaded file is now kept as its own creative, with folder-qualified names to tell same-named versions apart.
- Direct sales adapter storefronts run by our expert agents no longer require seller settlement currency readiness checks, and adapter media buys preserve the buyer-declared currency without requiring an Interchange payout currency.
- Tighten Marketplace supply-list copy so the widget avoids repeating the same label across the header, rail, and panel.
3.31.1 — July 1, 2026 at 6:18 PM UTC
- Clarify the seller readiness nudge for settlement currency setup, including multiple payment currencies and Interchange’s automatic currency conversion.
update_campaignwithmediaBuys[].products[].budgeton a pacing buy now propagates the new budget to the corresponding packages proportionally, preserving the existing period split. Previously the write landed only on the informationalbudget_amountfield and left spend authority unchanged.update_campaignno longer targets archived media buy versions when a buy with the same ID has both an archived and an active row withvalid_to IS NULL, which could cause budget updates to silently write to the wrong version.
3.31.0 — July 1, 2026 at 5:30 PM UTC
- Add shelf filters to the advertiser creative library listing (
GET /api/v2/buyer/advertisers/:advertiserId/creatives): filter byrole(evergreen/reference),source(uploaded/generated/connected),format_kind,asset_type, anddimensions(e.g.300x250), alongside the existingsearchandpromotedfilters. - Storefront media buys accepted asynchronously by a source (including ESA / managed-sales-agent buys) now create their packages when the hourly status poll activates them, matching the synchronous and push/poll acceptance paths. Previously these buys could go active with no packages, which blocked package-level delivery reporting and optimization.
- Fixed a race condition where adding creatives to a campaign in quick succession could silently fail to sync some media buys, instead of the intended “a pending version already exists” error.
- Fix
POST /api/v2/buyer/campaigns/{campaignId}/creatives/validate(and thevalidate_creativeMCP tool) silently dropping VAST/DAAST-specific fields (delivery_type,vast_version,vpaid_enabled,companion_ads) from a creative manifest before validation. A correctly-formed VAST or DAAST asset was matched against an earlier, looser asset schema in the manifest’s asset-type union and had its distinguishing fields stripped, causing the downstream ADCP agent to reject the manifest as missingdelivery_typeeven though the buyer had supplied it. - Also accept the standard AdCP
asset_typediscriminator (e.g.asset_type: "image") on every asset shape, including insideimage_carouselcards. Previously an asset carrying it would be rejected outright (for carousel card media, which has no lenient fallback) or silently downgraded to unvalidated passthrough (for top-level manifest assets). get_media_buysnow returnsrejection_reasonon a storefront media buy whose rolled-up status isrejected, so a buyer can see WHY a source refused the buy without a separate delivery call. The reason is the source’s merits-refusal message (already redacted, carrying no seller identity); operational failures (unreachable source, credential fault) map to a non-rejected status and so never surface a rejection reason. The field is present only when the buy is rejected and a reason was reported — never fabricated.- Hide internal Linear ticket identifiers from buyer-facing requested supply responses.
- Limit buyer-facing requested supply responses to customer-safe tracking status instead of internal workflow details.
- Make the buyer Marketplace nav item open the storefront discovery widget directly instead of redirecting through Murph, and hide it when supply browsing is not enabled.
- Media buys now support the same product as multiple distinct line items, and multiple media buys per storefront in the same currency. A buyer can add a product more than once to one media buy (each line item carries its own budget, pacing, and flight — e.g. parallel optimization arms or pacing periods) and run several media buys on the same storefront and currency. Each line item has a stable
buyer_refreturned on reads; pass it toupdate_media_buyto update or remove one specific line item when a product appears more than once.
3.29.0 — July 1, 2026 at 2:59 PM UTC
get_campaignnow acceptsincludeProductDetails=falseto stripformatOptionsfrommediaBuys[].products[], exposingpackages[]without response truncation for media buys with many creatives. This unblocks callers that needpackageIdvalues to submit package-level budget updates viapackages[].budget.
3.28.0 — July 1, 2026 at 1:55 PM UTC
- Fix buyer-side errors hit when setting up cross-currency campaigns:
POST /api/v2/buyer/campaigns/{campaignId}/creatives/validateno longer returns a 500. Creative-manifest validation now invokes the ADCPvalidate_inputtask through the supported SDK entry point.- Adding a product to a discovery session now FX-converts the product’s pricing options during validation. A buyer whose advertiser transacts in a marketplace-FX currency (e.g. ZAR) can now select inventory that settles in another currency (e.g. USD) using the cross-currency pricing option they were quoted at discovery, instead of being rejected as a currency mismatch.
- Adding a product that was never in your discovery results (a stale or invalid id) is now rejected at selection with a clear message, instead of being silently accepted and failing later at execution. The execution-time “no pricing options” error is likewise clearer, pointing you to re-run discovery.
3.27.2 — July 1, 2026 at 1:08 PM UTC
- Capture A2A server task handles when storefront source forwarding receives async media-buy responses.
3.27.1 — July 1, 2026 at 12:02 PM UTC
- Fix Murph sandbox inventory-source test diagnostics so async
create_media_buyresponses preserve the returned task id for follow-up status checks. - Clarified that GAM key-value targeting is supported through ESA signals, and labeled key-value-based property targeting as coming soon.
3.27.0 — July 1, 2026 at 11:15 AM UTC
- Storefront creation now captures settlement currencies up front, suggests an obvious storefront currency from the entered domain, lets the provided operator domain use normal auto-verification instead of forcing it back to unverified, and shows pending domain approval as an explicit readiness state.
3.26.1 — July 1, 2026 at 7:54 AM UTC
- A media-buy leg that fails to forward to a source is now recorded as a terminal route, so it appears in the media-buy status rollup (
get_media_buys/ status polling) instead of silently vanishing — a partial forward no longer under-represents its failed source(s). The stored leg status reflects the cause: a source that refused the buy on its merits reads asrejected, while an operational failure (unreachable source, credential fault, forward-chain error) reads as an unobservable leg — so an operational blip is never mislabeled to the buyer as a seller refusal and never terminally demotes a still-delivering partial buy. Failed legs carry no delivery and are never re-polled.
3.26.0 — July 1, 2026 at 7:07 AM UTC
- Fix managed (embedded sales agent) inventory sources that could strand at
PENDINGafter provisioning — leaving their products and signals invisible to buyer discovery even though the ad server was fully connected and synced. Provisioning no longer ties a source’s active status to a sandbox test account; the ESA sync-health pass now advances a connected managed source toACTIVEand warms its buyer-discovery catalog; and a connected, inventory-synced source whose product catalog never populated is now surfaced as a critical health alert instead of failing silently. - Add timeline buckets to inventory source diagnostics so source call failures, rejections, timeouts, and latency movement are visible inside the selected window.
- Reddit and TikTok discovery and community mirror catalogs now avoid advertising creative formats that their current media-buy creation paths cannot fulfill.
- All campaigns now use GROSS budgets: the budget you supply is the all-in total and the Scope3 fee is carved out of it (media budget = budget − fee). The
feeType(GROSS/NET) choice has been removed from campaign creation — NET (fee added on top) is no longer selectable. Existing campaigns keep their recorded fee type, and the campaign response still returnsfeeType. - The
campaignBudgetTypefield has been removed from advertiser create, update, and detail responses. It was a single-value setting that did not affect behavior. - Buyers can now select products that settle in different currencies within a single campaign — across storefronts and within a single multi-currency storefront. Previously a discovery session was restricted to one currency. The buyer always transacts and is billed in their own primary currency; products are split into one media buy per storefront and settlement currency, each denominated in the buyer’s primary currency with its own locked FX rate.
- Move storefront marketplace browsing out of Connections into a buyer storefront discovery MCP app widget, keeping Connections focused on provider credentials, accounts, and integration feature policy. The widget now also exposes customer supply-wishlist requests through the existing supply-request API.
- Campaign creative template responses now include V2 product format options alongside legacy format IDs.
- Fix mapping a connected ad-platform account (Reddit, Meta, Snap, and other adapter integrations) to an advertiser — the discovered account now appears in “External account mappings” and can be linked to an advertiser as expected.
- Fix cross-currency product discovery for foreign-currency advertisers. Buyer
discover_productsstamps the advertiser’s primary currency onto the request asfilters.pricing_currencies, which drives the FX overlay’s convert-to-buyer-- currency in the storefront
get_productshandler. The in-process ESA dispatch - was dropping those filters, so a storefront routed through an in-process sales
- agent returned products in the source currency (e.g. USD) to a foreign-currency
- advertiser (e.g. ZAR) — the FX overlay never fired. The dispatch now threads the
- request filters through, matching the MCP seam, so discovery quotes are converted
- to the advertiser’s currency.
- Keep buyer Connections focused on adapter/provider integrations instead of listing every marketplace storefront.
- Make Marketplace easier to reach and make requested supply statuses read as supply the buyer would buy when it is live.
- Read publisher domains from nested embedded-sales-agent inventory metadata so wholesale products expose their declared publisher properties in discovery and storefront product identity.
- Product discovery API responses now include live storefront timeout retry hints at the top level whenever the discovery service detects incomplete agents.
- Source diagnostics now compare each source’s current lookback window with the prior window, making newly worse, improved, and recovered call-health patterns visible in the diagnostics overview.
- Source diagnostics now show whether a reliability issue is owned by the seller’s source operator or Scope3’s managed runtime, so teams can route call, latency, timeout, and callback problems faster.
- Product discovery responses now surface live storefront timeout signals in
incompleteAgentseven when the upstream agent reports the timeout as an error reason rather than a structured timeout flag. - Upgrade Sonnet-tier AI defaults to Claude Sonnet 5, including Murph, chat, cost tracking, and supporting tools.
3.25.0 — June 30, 2026 at 7:29 PM UTC
- The advertiser creative library now distinguishes its two durable roles. Creatives can be promoted with a
creative_roleofevergreen(serve-ready, reusable across campaigns) orreference(a generation input, not served) viaPOST /advertisers/:id/creatives/save-to-library(identify the creatives bycreative_idsor bycollection_id; no campaign required). - Brought creative now persists the instant it’s uploaded, even before an advertiser is chosen:
POST /buyer/creatives/stashsaves the upload customer-scoped and returns ids, andget_creative_intentaccepts thosecreative_idsto adopt them into an advertiser later — so naming the advertiser in a later turn no longer loses the upload. The creative-intent widget now owns advertiser selection via an in-widget dropdown (defaulted to a named advertiser, switchable) that re-surfaces that advertiser’s campaigns, and the saved creatives route to whichever advertiser is selected on commit. Uploads that are never claimed (no advertiser, no campaign) are automatically reaped after 7 days so abandoned stashes can’t accumulate. Promoting creatives now renders the advertiser’s creative-library shelf with the newly-saved item in it, and the shelf can be opened on demand (GET /advertisers/:id/creatives) — so a buyer can see and confirm their library in chat. The library list (GET /advertisers/:id/creatives) returns each creative’screative_role, itscreative_source(provenance — uploaded/generated/connected), and itsreuse_count(campaigns it is actively attached to), and accepts?promoted=trueto return only library creatives — flight-specific creatives stay attached to their campaign. - Fix media buys placed through a manual-approval storefront getting stuck in PENDING_APPROVAL with a
status_refresh_failederror after the operator approved them. The storefront’s submitted-task envelope now returns the storefront-minted media buy id astask_id(the id every routing, status-sync, and settlement rail joins on) instead of the internal operator-queue record id, so the buy’s status reconciles to active once the source accepts.
3.24.0 — June 30, 2026 at 7:23 PM UTC
- Cross-currency buys now work end to end from discovery to media-buy creation. When a buyer transacting in a marketplace-FX currency selects a product priced in a storefront’s settlement currency, the buy is created at the FX rate the buyer was quoted at
get_productsand the buyer-facing budget is recorded in the buyer’s (campaign) currency — instead of being rejected as “not sold in that currency” or stamped in the seller’s currency. The quote is honored for the UTC day it was issued (the rate-of-the-day lock); a selection from a prior day is rejected so the buyer can re-discover at the current rate. - Storefront media buys accepted asynchronously by a source (e.g. behind manual moderation) now have their packages created when the acceptance resolves, instead of going live with no packages. This restores package-grain delivery, reporting, and optimization for those buys.
3.23.0 — June 30, 2026 at 6:00 PM UTC
- Product discovery now surfaces inventory priced in any currency, not just the advertiser’s primary currency. Buyers with a ZAR advertiser can see and select GBP or USD products; FX conversion is handled at booking time.
3.22.1 — June 30, 2026 at 4:46 PM UTC
- Improved quick product discovery latency for storefronts with non-guaranteed managed wholesale products by returning warmed storefront products immediately and moving uncached LLM relevance enrichment out of the quick response path.
- Signing up again when you already have access to an organization no longer triggers new-member side effects. Previously, a repeat signup for an existing member (e.g. an OAuth re-auth, a retried request, or a stale signup tab) could send a false “new user signed up” notification to the organization’s admins and overwrite the organization’s recorded email domain. The signup flow now detects that no new access was granted and routes the user to log in instead, leaving the organization untouched.
3.22.0 — June 30, 2026 at 3:03 PM UTC
- Use adapter-declared sandbox support and channel metadata when routing discovery through Scope3-hosted adapter storefronts.
- Fixed product discovery so deadline-bound storefront searches can return available storefront products instead of timing out while additional product composition is still running.
- The launchable seller Dashboard now renders the learned default posture and learned auto-approve suggestions, matching what the agent shows inline — the REST analytics path previously omitted them (a shared enrichment helper now backs both). Docs also explain how a held or rejected media buy maps to the seller’s acceptance policy, for both sellers (the pre-screen verdict) and buyers (why a buy was held/rejected).
3.21.0 — June 30, 2026 at 2:22 PM UTC
- Advertise sandbox support from v6 storefront adapter capabilities so sandbox advertisers can discover connected adapter inventory.
- Disabled inventory sources no longer affect storefront readiness checks or source diagnostics.
- Route-polled storefront deliveries now record per-package delivery onto the buyer’s packages, so package-grain pacing and optimization reflect real delivery on poll-based sources, not only sources that push the delivery webhook.
3.20.0 — June 30, 2026 at 1:21 PM UTC
- Provider account mappings are now recorded in buyer activity so teams can audit when an integration account was mapped to an advertiser.
- Add an in-chat “Per-buyer auto-approve” view. Ask Murph to open it to see which trusted buyers skip your media-buy review queue and how many of each buyer’s buys auto-forwarded that your acceptance policy would have held — the would-have-held count surfaces the carve-outs worth revisiting first. Opt a buyer in or remove one inline (handed to Murph). Read-only and media-buy-only.
- When the bounded discovery setup-phase capabilities probe times out (or fails), product discovery now falls back to the agent’s last-known capabilities instead of treating it as “unknown”. A previously-probed but momentarily slow agent keeps routing correctly rather than being mis-handled on its first cold discovery; only a never-probed agent is treated as unknown. Warm cache hits are unaffected.
- Update
@adcp/sdkto 9.4.0 so outbound AdCP requests carrying push notification authentication are signed by the SDK before seller capability-based signing decisions.
3.19.0 — June 30, 2026 at 12:25 PM UTC
- Buyer-direct adapter media buys on providers that don’t yet report buy status (those that expose campaign creation but no status read) no longer show a perpetual “status refresh failed”. The status sweep now recognizes a provider that can’t report status as a capability gap rather than a failure, and leaves the buy at its last-known status — no false error, no alert — until status reporting is available for that provider.
- Publishers can now connect an AdsWizz source (streaming audio + podcast) as a managed ad server, alongside Google Ad Manager, FreeWheel, and SpringServe. The connection takes an AdsWizz agency API key; inventory, products, and delivery surface to buyers through the storefront like any other managed source.
- TikTok adapter media buys now support live status polling through
get_media_buys, so buyer campaign status refresh can read back TikTok campaigns created through delegated adapter auth. - Fix the reporting
completionRateto be completions per paid impression (completedViews / impressions) instead ofcompletedViews / views. The previous denominator (viewable impressions) was non-standard for a completion rate and could exceed 100%; the corrected rate is bounded at ≤ 1 and is now consistent across buyer, seller, and tactic reporting. For CPM video the paid unit is the served impression; CPV/TrueView buys (billed per view) will track the billed view as the denominator when that inventory is supported. - Product discovery no longer hangs when a single sales agent’s endpoint accepts the connection but never responds. The per-agent capabilities pre-load is now bounded by a short deadline, so a non-responsive agent is skipped and the remaining agents’ products return quickly instead of stalling the whole discovery up to the client’s request ceiling.
- Add external account mappings from buyer integrations to advertisers.
- Storefront catalogs now recover wholesale products from upstream sales agents that reject the platform’s AdCP version. When a source returns
VERSION_UNSUPPORTEDfor a release it should have accepted within the same major version, the catalog warmer retries once at the highest release that source advertises, so a source on an older build no longer empties its catalog.
3.18.0 — June 30, 2026 at 8:18 AM UTC
- Keep seller-authored wholesale products discoverable during quick product discovery when a live storefront product query is slow, without dropping live managed ESA avails.
- Stop reporting successful pending media-buy status polls as status refresh failures.
- Fixed OAuth callback handling so successful logins do not get stuck on the signing-in screen when the callback route restarts mid-exchange.
- Fix Meta adapter media-buy status refresh for buyer-direct adapter buys. Status
- polling now uses the storefront delegated adapter credential for route-less
- adapter buys, so
get_adcp_statusand background polling can refresh get_media_buysstatus without incorrectly falling back to direct ADCP agent- auth. Missing delegated credentials now surface a specific
adapter_credential_unavailableblocker instead of a generic status refresh- failure.
- Harden seller settlement-currency validation.
create_media_buynow re-validates - the storefront’s resolved settlement currency against the marketplace-supported
- set: a storefront whose
defaultCurrency/paymentCurrenciesholds an off-list - code (persisted before the write-side guard) now gets a clear
settlement_currency_unsupportederror instead of an opaque spread-ledger CHECK- failure deep in booking. The storefront update API also now enforces that
defaultCurrencyis part ofpaymentCurrencieswhen both are provided (the- primary settlement currency is always part of the payout set).
- Internally, seller-settlement validation now runs against a dedicated
SETTLEMENT_CURRENCIESset (the seller-payout axis), separate from the- buyer-side
MARKETPLACE_FX_CURRENCIESFX-admission set, with the invariant MARKETPLACE_FX_CURRENCIES ⊆ SETTLEMENT_CURRENCIESenforced by test — so a future- change to the FX-admission set can never wrongly reject a legitimate
- direct-settlement currency.
- Storefront media buys now record per-package delivery from source push notifications, so package-grain pacing and optimization reflect each package’s real delivery instead of staying at zero.
- Fix the Buyer Discounts widget, which couldn’t load — the host had no REST allow-list row for it, so every API call it made was denied. A new CI gate keeps each widget’s directory, build list, both resource registries, README index, host REST-policy, and reachability in sync, so this class of drift (dead or unreachable widgets) can’t ship again.
3.17.0 — June 30, 2026 at 4:21 AM UTC
- Stop abandoned adapter-connection OAuth attempts from piling up on the
- Connections page. Starting a fresh connect now supersedes prior expired,
- credential-less attempts for the same provider, so you no longer see duplicate
- “saved connection but no usable credential” cards. Completed connections and
- in-flight connects (including a second account being connected) are preserved.
- Fix a 500 when disconnecting an adapter storefront connection (Settings →
- Connections). Disconnecting now succeeds and terminalizes the connection, its
- credentials, and its mirrored accounts.
- Murph now infers catalog purpose from context (feed type, existing setup, conversation) and confirms with the buyer instead of presenting a menu of internal concepts during catalog setup.
- Fixed
probe_sales_agentreturning a false “unreachable” verdict when called with a numeric database id instead of the agent’s external string slug. The tool now returns an actionable error in that case. Also improved the error message from the capabilities-refresh endpoint to include the failure kind and HTTP status, making it easier to diagnose transport or auth issues. - Cross-currency (FX) media buys are now supported on storefronts that require operator approval. The quoted rate-of-the-day is snapshotted when the buy is submitted and held for 24h pending review; on approval the held rate is replayed exactly, so the buyer is billed at the rate they were quoted. If approval lands after the hold window expires, the buy is rejected (
fx_quote_expired) and the buyer must re-discover and re-buy at the current rate. - Cross-currency (FX) media buys can now be updated (re-budgeted) on storefronts. An
update_media_buyrecovers the buy’s already-locked rate-of-the-day from when it was created and re-applies it — the source is billed the settlement-currency budget (buyer budget ÷ the locked rate) and the buyer is never re-quoted, so a later update never drifts the rate. Changing a buy’s currency is rejected (currency_change_not_supported): a buy’s currency is fixed for its whole life. - Polish the seller Test Runs widget: loading and error states now use a card-bordered treatment consistent with other seller MCP app widgets, and the empty state is replaced with a structured card that explains how to get started with sandbox test runs.
- Sellers can now choose any marketplace-supported settlement currency. The
- self-service currency picker offers the full set the marketplace supports
- end-to-end (21 currencies, including launch markets IDR and ZAR plus KRW, INR,
- MXN, PLN and others) instead of a partial list, so a seller in those markets can
- get paid directly in their own currency. The storefront update API now rejects a
defaultCurrencyorpaymentCurrenciesentry that is ISO-valid but not- marketplace-supported (e.g.
AED), which would otherwise produce a buy the - ledger cannot record and the FX overlay cannot price. The setup widget also
- explains that buyers paying in other currencies are converted to your primary at
- the daily rate, so you never need to add a currency just to sell into it.
- Fix storefront media buys from a source that PUSHES delivery (a signed source webhook rather than being polled) showing zero in buyer reporting. The push path only ran the seller spread-ledger accrual, so the delivery never reached
GET /reporting/metrics. It now also feeds the same buyer-reporting sink the poll path uses, scoped to each leg’s route under the verified source.
3.16.0 — June 29, 2026 at 7:03 PM UTC
- Product budgets can now be updated on active media buys without pausing delivery. Adding or removing products still requires draft status.
- Fix Murph erroring on long Slack answers: the message-splitter used the wrong Slack size limit, so a long answer still posted in one piece and hit
msg_too_long. Answers are now split to fit Slack’s limit, and a very long answer is bounded to a few messages instead of a wall. - Add
url_hashto the signalkeyTypeenum. Clients that already hold AdCP-canonical URL hashes (44-char std-base64 of blake3-256 over the canonicalized URL) can register signals againsturl_hashdirectly. The pre-existingurlkeyType keeps working: writers that project URL signals into the AdCP context-agent’ssignal:*keyspace translateurl→url_hashand canonicalize+hash the value at the wire boundary, so buyers continue to see raw URLs throughout the API while the wire format matches whatadcp-goexpects.
3.15.0 — June 29, 2026 at 5:50 PM UTC
- Sign-in no longer shows an error when an OAuth authorization code is exchanged a
- second time (e.g. a redirect re-entry after the first exchange already
- succeeded). The callback now resolves
invalid_grantidempotently: if a session - already exists it continues to your destination; otherwise it restarts sign-in.
- Per-buyer auto-approve now keeps trust honest: when a trusted buyer’s media buy is auto-forwarded that your acceptance policy would have held, the gate records it (it never holds the buy). Each override exposes a
policyBypassCountandlastPolicyBypassAtonGET /api/v2/storefront/buyer-auto-approvals(and via Murph), so you can see whether a buyer you opted in is pushing buys you’d otherwise have flagged and revisit the carve-out. The forward decision is unchanged — this is visibility only. - Complete the in-chat bring-your-own-creative flow. When a brought creative fits no placement on the campaign it’s flagged as a misfit with the nearest placement suggested (non-blocking — the creative still attaches), and the buyer can map it to a placement of their choice from a menu on the card: rows go green as you pick, and one Save commits the whole batch in a single write (no per-action chat turn) with the card updating in place. Buyers can also reassign a creative to a different placement directly in chat (e.g. “move the 300×250 to the leaderboard”) via the new
remap_creative_placementoperation. Size→placement matching now falls back to the size encoded in a canonical format id when the format agent’s spec is unavailable, so mapping no longer silently fails; placements that can’t be read at all are surfaced honestly on the card instead of leaving creatives unexplained. Mapped creatives now name the placement they cover (“Maps to: …”) on the card, and each creative shows its detected specs — image dimensions, video dimensions and duration, audio duration — read from the file at upload (including creatives uploaded inline). The in-chat creative widgets show a loading state instead of a blank frame while results load. Buyer-creative-v2 only. - Clarify storefront lifecycle and health labels so storefronts that accept buyer transactions are shown as transacting instead of generically active or live.
- The storefront media-buy approval pre-screen now reads your written acceptance policy more thoroughly and sorts each buy into three tiers instead of two: clearly on policy (auto-forwarded), needs a look (queued), and clearly against an explicit rule you wrote (surfaced as a strong decision-support signal on the queued item — the buy still queues; nothing is auto-rejected yet). It generalizes past a fixed category list — a rule like “we don’t accept fast-food advertisers” is honored even though it isn’t a built-in category — by reading what you actually wrote, and an AI second-opinion can flag a conflict the keyword pass missed before a buy auto-forwards. The new
recommendationvalueauto_rejectandrejectionReasonfield appear on the evaluation response. The pre-screen errs toward human review whenever it is unsure or the AI layer is unavailable, and the AI layer can only ever route a buy to human review — never approve or reject one on its own. - Murph no longer leaves a Slack message frozen on “On it…” when the service restarts mid-answer. An interrupted turn is now replaced with a clear “I got interrupted — please re-ask” message instead of a status that never resolves.
- Guaranteed media buys that exceed the ad server’s availability forecast are now held for operator review instead of silently overbooking. The sales agent stamps an inventory-availability signal on the buy; the storefront surfaces it as a “Guaranteed availability review” work item plus a readiness item. This is per-buy (it does not change the storefront’s auto-approve setting) and does NOT auto-clear when the order goes live — the operator confirms or adjusts the goal. Non-guaranteed buys are unaffected. Also fixes the discovery-time
bookabilitysignal, which was inert because it read the ad server’s object-shaped forecast availability as a string. - Murph widget activity lines now persist, so a committed action (e.g. “Approved Acme Motors”) stays in the conversation after a page reload, not just for the current session.
- The Murph chat request accepts an optional
modelContextfield — the latest widget activity-line writeback — which is sanitized and fed to the model as a<widget_activity>context block on the next turn, so Murph knows what a widget just did without a re-prompt. - Add customer-scoped requested supply tools backed by Linear customer needs, plus an internal Storefront Brain rollup for requested seller/channel demand.
- Seller analytics now flags buyers whose media buys consistently clear your review and recommends opting them into per-buyer auto-approve. When the buys from one buyer that came to you for review have all cleared and forwarded with no rejections, the agent surfaces a
learned_auto_approvesuggestion insellerRecommendations[]that points you at the per-buyer auto-approve control for that buyer. It looks only at media-buy approvals (not creative review or delivery), and it’s suggest-only — the agent recommends and you decide; it never changes an approval gate on its own. Evidence-gated, so a short or mixed approval history yields no suggestion.
3.14.0 — June 29, 2026 at 3:31 PM UTC
- The
/auth/tokenendpoint now returns400 invalid_grant(instead of500) - when an OAuth authorization code is expired, already used, or otherwise invalid
- — for example when a single-use code is exchanged twice. Sign-in clients get a
- clear, actionable signal to restart the flow, and these expected client
- conditions no longer page as server errors.
- Fix cross-currency (FX) accounting and discovery for wholesale passthrough inventory. A ZAR (or other marketplace-FX) buy against a USD-settling storefront’s passthrough product now records its FX leg in the spread ledger and currency book — the buyer currency, held rate, settlement amount, and zero break-even spread are captured even when the source’s per-unit rate isn’t exposed (previously the position was dropped, so the currency book under-reported FX exposure). Separately, wholesale products whose source omits
channelsnow passget_productsresponse validation (the field defaults to an empty array) so they remain discoverable and buyable. - Sponsored-buyer actions (approve / suspend / reactivate) now post a non-prompting activity line to the chat — e.g. “Approved Lakeside Motors” — so what you did stays visible in the transcript without re-prompting Murph.
- Fix storefront media buys accepted asynchronously (the source returns
submitted) never showing as active or in reporting. The storefront-minted routing id arrived as a task id and was not persisted as the buy’sadcp_media_buy_id, so the status-sync job and the buyer reporting feed (both keyed on it) could not resolve the buy. It is now persisted on the storefront-parked acceptance path.
3.13.0 — June 29, 2026 at 2:05 PM UTC
service_token.active_adcp_agent_idsnow contains everyadcp_agentrow in the token’s scope, not juststatus = 'ACTIVE'. Downstream consumers (rtdp, rt-audience) treat membership as “this token has access to this agent” rather than “ACTIVE-right-now”, so flipping an agent to DISABLED/FAILED/PENDING no longer silently revokes access. The booleanactive_adcp_agentsflag retains its ACTIVE-only semantics.- Improve the adapter connection OAuth callback (Settings → Connections). A failed
- or timed-out connection now shows a clear page with a “Back to Connections”
- action instead of a raw error-JSON page, and a successful connection returns you
- to the Connections page with that provider preselected instead of the app
- homepage.
- Storefront/managed (GAM) media-buy delivery now flows into buyer reporting. The route-poll worker feeds the delivering leg’s per-day metrics into the reporting pipeline under the buyer-facing media-buy id, so
GET /api/v2/buyer/reporting/metricsshows impressions/spend for managed buys instead of zero. Metrics are attributed to the real delivery day, and only legs carrying a daily breakdown are fed (a breakdown-less snapshot is held back so it can’t double-count against later per-day data). Correct per-day attribution depends on the companion sales-agent change that surfaces the daily breakdown. - Murph no longer presents an ad-server source and its owning Storefront as two peer agents when sellers test products.
3.12.0 — June 29, 2026 at 10:50 AM UTC
- Manage buyer discounts in chat. Sellers can now open a Buyer discounts widget to see, add, edit, and remove their rate-card discounts grouped by axis — the buyer’s advertiser brand and its buying operator. The add form previews where a typed domain keys in its published corporate hierarchy (so you can tell whether a discount covers a whole house or just one subsidiary), and a discount never prices a quote below your wholesale cost.
- Add
GET /api/v2/storefront/house-discounts/resolve?domain=— a read-only helper - that resolves a brand or operator domain up its published corporate hierarchy
- (e.g.
converse.com → nike.com) and reports the chain, the house it rolls up to, - and whether that hierarchy is known. It lets a discount-authoring surface preview
- where a discount will key — and warn when a domain only covers itself — before
- the row is saved. Creates and matches nothing.
3.11.0 — June 29, 2026 at 8:56 AM UTC
- Fix media-buy delivery status incorrectly showing
pending_startfor buys that are actually delivering. When a sales agent’s reporting read is temporarily unavailable, the status poller no longer regresses an in-flight buy topending_start; it preserves the last-known status and retries. - Fixed a race condition in Murph conversation creation that caused a
duplicate key value violates unique constrainterror when two concurrent requests attempted to start the same conversation simultaneously. - Fix the Signal components MCP app launch so the standalone seller widget is registered, served, and allowed to call its signal authoring endpoints.
- Persist seller analytics chat artifacts as assistant-turn blocks and rehydrate them when a Murph conversation is reopened.
- Murph no longer errors out when its Slack answer is long. A thorough, docs-grounded reply that exceeded Slack’s message-size limit previously failed the whole turn (“I hit an error trying to answer that”); long answers are now split across threaded replies, and Murph keeps Slack answers concise rather than pasting large doc excerpts.
- Cross-currency FX quotes now hold for the day.
get_productsandcreate_media_buyresolve the same deterministic rate-of-the-day per currency pair (fixed at first use each UTC day, sourced from the spot feed), so a buyer quoted “ZAR 52” books at “ZAR 52” as long as they transact within the day — no more intraday drift between the quote and the buy. FX-converted products carry a hardexpires_at(the next UTC midnight); after it, re-discover to be re-quoted at the new day’s rate. The expiry encodes the marketplace’s FX-risk hold window and is tunable. - Cross-currency FX now works on wholesale / passthrough products, not just composed ones. A buyer transacting in a marketplace-FX currency is admitted on the wholesale discovery path, the source’s settlement-currency options are converted to the buyer’s currency at the rate-of-the-day (a natively-priced currency is never re-converted), and the passthrough leg books the cross-currency split on the spread ledger — the source is still paid in its own currency. Conversion happens once, at the buyer’s edge: internal storefront-to-storefront (pool/cascade) hops carry the settlement currency through and never re-convert, so a buy is never FX’d twice.
- When a buy matches both a brand discount and an operator discount, the buyer now
- gets the larger of the two (ties resolve to the brand axis) — rather than the
- brand discount always winning. Brand and operator are independent buyer
- identities, so neither hides a better deal from the other, and discount
- composition is now uniformly larger-of across both axes and across the
- house/buyer-instruction rails. Nearest-ancestor-wins still governs within a
- single axis.
- Improve Meta app-install discovery guidance with mobile-first creative, placement, and iOS measurement readiness recommendations.
3.10.0 — June 29, 2026 at 4:32 AM UTC
- Added a Components widget for mapping ad-server inventory into products and a bulk signal creation tool so sellers can create many signals after one approval.
- Storefront operators can now opt a specific trusted buyer into automatic approval
- for their media buys while the storefront stays in manual review for everyone else.
- Set it with
PUT /api/v2/storefront/buyer-auto-approvals/{buyerCustomerId}(or ask - Murph), and list current overrides with
GET /api/v2/storefront/buyer-auto-approvals. - It is relax-only and media-buy-only — an enabled buyer’s media buys skip both the
- review queue and the acceptance-policy screen, creative review is unaffected, and it
- only takes effect while
mediaBuyApprovalismanual. Buyers must have submitted a - media buy to the storefront (no pre-arming an unknown buyer), and disabling keeps the
- record for audit.
- Removed the standalone
validate_signalsstorefront operation and thePOST /esa/{esaId}/signals:validateREST route. Signal validation now runs through the dry-run path —manage_esa_signalwithaction: "validate"— which returns the same validation result plus a preview of the signal, in one non-persisting call.
3.9.0 — June 28, 2026 at 10:28 PM UTC
- Cross-currency buying is now global and automatic. Which currencies the marketplace accepts via FX is a single marketplace-curated set — the major traded currencies plus key emerging markets, including the launch markets Indonesia (IDR) and Brazil (BRL) and the pilot currency ZAR. A buyer in an accepted currency is admitted at every storefront and converted to that storefront’s settlement currency at the platform spot rate; the source is always paid in its own currency. A storefront operator still decides which currencies it settles in directly (
paymentCurrencies) — there is no FX on those, and no per-storefront FX configuration. - Storefront creation now accepts an operator domain, storefront readiness blocks go-live until that domain is set and verified, and account customer-domain updates preserve storefronts that intentionally operate under a different domain.
3.8.0 — June 28, 2026 at 9:35 PM UTC
- Murph no longer deflects credential-policy questions to the secure credential form. Questions about bearer-token rotation, replacing compromised credentials, audit logs, or governance now get a real answer. The secret-in-chat backstop still redirects when an answer actually routes a secret into the chat (“paste your token here”), but no longer discards an answer that merely explains how credentials work.
- Storefronts with an FX overlay enabled can now accept and book a media buy in a buyer currency they do not settle in (e.g. a ZAR-locked buyer against a USD-settling storefront).
create_media_buyadmits the buyer currency, snapshots the operator’s rate, and bills the source in its own currency (buyer budget ÷ rate); the cross-currency edge — the USD cost leg and the buyer-currency sell leg plus the booked rate — is recorded on the storefront’s spread ledger. Default off; same-currency buys are unchanged. - Not yet covered (follow-ups): FX buys on a storefront that requires media-buy approval are rejected until the approval path carries the rate snapshot;
update_media_buyon an FX buy and FX over raw-passthrough inventory are not yet currency-aware; and FX spread rows are recorded but not yet surfaced in margin reports. - Cross-currency curation now sources FX rates automatically: a storefront with the FX overlay enabled lists the buyer currencies it accepts (
allowedBuyerCurrencies) and each is priced at the current platform spot rate — operators no longer have to hand-enter a rate, though they may pin a per-pair override inrates. The rate in effect is locked onto a media buy when it is created, so it bills the source and settles the campaign at the booked rate for the campaign’s whole life. Spot rates only for now (no hedge); a forward rate for the settlement horizon is a later refinement. Default off. - Murph now opens each conversation aware of the support requests you’ve already filed. On the first turn it sees your open and recently-resolved requests, so it won’t ask you to re-file something already in flight, can pick up an open item when your message relates to it, and will let you know when a related issue looks resolved.
3.7.0 — June 28, 2026 at 7:52 PM UTC
- Murph now proactively follows up in your support channel when an issue you reported is resolved — a one-time “we believe this is now fixed, could you retry?” message, so you’re not left guessing whether to try again.
- Creative format specs derived from a canonical
format_kindnow use the - asset_type the manifest validator actually detects (
vast,daast,html) - instead of names it never produces (
vast_tag,daast_tag,tag,html5). This - restores per-asset validation (duration, codec, dimensions) for VAST, DAAST, and
- HTML/HTML5 formats, which was previously silently skipped — so a non-conforming
- VAST/DAAST/HTML creative for such a format is now caught at validation instead of
- at the ad server.
- Creatives for adapter/canonical formats (e.g. Snapchat) no longer fail
- validation when the format’s per-platform creative agent is unreachable. The
- format spec is now resolved from the format declarations the storefront adapter
- already provides on the product (
format_options) before falling back to the - agent, so a retired or unavailable creative-agent host can’t block a creative
- whose spec we already hold. Genuinely unknown formats still return a clear
- “format not found” error.
- Refreshed the seller Signals widget with a new header and tabbed layout, plus a collapsible Adapter capabilities panel that surfaces what your connected ad server supports for signals — mapping kinds, source types, value types, and grouped (include/exclude, AND/OR) semantics. The panel is driven by the adapter’s own capability manifest, so it reflects each adapter accurately rather than assuming a single ad server.
- Added a Signal components entry to the seller menu that opens the Signals widget directly. When you have more than one ad server connected, the widget includes an ad-server picker so you can browse and author signals on each one (two ad servers of the same type are distinguished by network code), and switch between them in place.
- Storefront budget updates now retry version activation on transient lock contention before giving up, and report the buyer’s
update_media_buytask honestly: the task completes when the new budget is live (including when a prior attempt already applied it) and fails only when the change genuinely never landed. Previously a never-staged update could be falsely reported as completed. - Buyer product discovery (
get_product_details) now surfaces a product’s - canonical
format_options(format_kind / format_option_id) alongside the v1 - product cards, so buyers can reference a format without the per-platform
- creative agent_url. The storefront adapter already provides these; the read
- path now carries them.
3.6.0 — June 28, 2026 at 5:44 PM UTC
- Retry the creative asset media probe on transient read failures so uploaded image/video/audio dimensions and specs are reliably detected and persisted. Previously a transient network/timeout/5xx while reading the freshly-uploaded file could silently drop width/height/codec with no backfill.
3.5.0 — June 28, 2026 at 4:39 PM UTC
- A posture you pin as the storefront’s learned default now sticks: the Merchandising Agent will not relearn over a pinned default, even as it keeps learning from outcomes, until you change it. Clearing the default returns it to agent-managed so the agent can learn a new one again. This makes the operator override durable once automatic learning is enabled for a storefront.
3.4.0 — June 28, 2026 at 2:33 PM UTC
- Ad-server provisioning probe failures now carry their recovery on the tool result. When a
storefront_api_calloperation fails with a structured upstream code (e.g.ADAPTER_PERMISSION_DENIED,ADAPTER_NETWORK_NOT_FOUND), the error response now surfaces that upstream code and the upstream remediation hint — so a seller’s agent gets precise next steps at the moment of failure instead of a generic validation message. Murph’s storefront-setup guidance no longer hard-codes the per-error-code remedies; it relays the remediation the result carries and keeps the operator out of raw adapter internals.
3.3.0 — June 28, 2026 at 2:14 PM UTC
- Storefront adapters now align to the AAO registry’s canonical model: the
- deprecated per-platform creative-agent advertisement (the
creative_agent_url - field in generated adagents.json and the buyer-facing
list_creative_formats - catalog surface) is removed, and each adapter’s publisher domain is aligned to
- the domain the registry publishes (e.g. Snap
ads.snap.com→snapchat.com, - Meta
business.facebook.com→facebook.com). Creative formats are discovered - canonically via
get_productsformat_options; the registry already publishes - these formats canonically with no creative agent.
manage_esa_signalgains anupdateaction to edit an existing signal (a full replacement, like create), and itsvalidatedry-run now previews an update when given asignalId(otherwise a create). Theupdatewrite is confirmation-gated like create/delete.- ESA ad-server connection errors now carry structured recovery. The
test_esa_connectionandget_esa_statusstorefront operations classify adapter-probe failures (permission denied, network-code not found, invalid credentials) as400 VALIDATION_ERRORwith the upstreamADAPTER_*code and remediation hint — matching connection creation — instead of a generic503 Service Unavailable. Murph’s ESA tools surface that code and remediation in their results, so a seller gets precise next steps when a provisioning probe fails. - Author buyer discounts conversationally through Murph and the storefront API.
- Discounts are structured rate-card objects keyed to one of a buyer’s two
- identities: a brand discount (the advertiser or its house, e.g.
nike.com - reaching Converse) or an operator discount (the buying agency/DSP or its
- holdco, e.g.
wpp.com), set via the requiredscopefield. Each resolves up the - buyer’s brand hierarchy; the nearest ancestor wins within an axis and a brand
- discount beats an operator one.
create_house_discountand update_house_discountare typed storefront operations (list/delete reachable- through the storefront API), and
(houseDomain, scope)is unique per storefront - so the same domain can carry both a brand and an operator discount. New
- documentation frames these as the structured discount rail alongside buyer
- instructions (the tool for operator-and-brand intersections, country terms, and
- freeform notes), including how they compose and the wholesale-cost floor.
- The storefront media-buy forward worker no longer re-attempts a still-undelivered approved buy indefinitely. It now stops retrying a buy whose source forward has not succeeded within 6 hours of approval — on a wholesale forward failure the buyer was already notified on the first attempt, so the further re-attempts only burned upstream calls. Buys keep retrying within the window so a transient source outage still recovers automatically.
- Sellers can now clear or pin the Merchandising Agent’s learned default negotiation posture. Ask your agent to clear the saved default (revert to none) or to pin a specific posture yourself — the saved reason then reads “Pinned by you”. The learned default remains a fallback the agent uses only when it has no fresher read for the buyer in front of it, and your operating instructions always take precedence. The learned-default reason now reads with a friendly posture label (e.g. “Hold value booked 64% over 14 runs”).
- The storefront signal create endpoint (
POST /esa/{esaId}/signals) now accepts?dry_run=true, which validates and previews a signal draft via the sales agent’s dry-run route without persisting it (returns{ valid, issues, preview }). - Seller analytics now surfaces the Merchandising Agent’s learned default negotiation posture — the rule the agent saves for itself once a posture has been converting consistently. The
sellerAnalytics.learnedDefaultpayload (and the “What your agent learned” panel) shows the saved posture, why it was learned, and when. The agent uses it only as a fallback when it has no fresher read for the buyer in front of it — never a forcing override — and your operating instructions always take precedence. - A media buy budget update that is forwarded to the inventory source but then fails to activate on the storefront side (the new budget version doesn’t flip live) now terminalizes the buyer’s
update_media_buytask with afailedwebhook instead of leaving it open indefinitely. The failure is reported with a distinct reason so a buyer can tell “the update reached the source but the live budget didn’t change” apart from “the source rejected the update” — and it is never falsely reported as completed, since the live buy is still on the old budget. Previously a push-only or polling buyer was left with no resolution at all on this path.
3.2.1 — June 27, 2026 at 9:41 PM UTC
- Creatives can now be assigned to products that declare formats only as canonical
format_options(no v1format_ids). Creative↔product format matching now folds- each product’s
format_options[].format_option_idinto its accepted format set, - so a creative whose
format_id.idequals a product’sformat_option_idmatches - by that exact canonical id — fixing assignment to v2-native catalogs (e.g. Snap)
- that previously reported “no declared formats” or filtered out every creative.
3.2.0 — June 27, 2026 at 8:26 PM UTC
- Approved creatives that fail to forward to an inventory source are now retried automatically (bounded) instead of being stranded after a single attempt, and the buyer’s
sync_creativeswebhook fires on the terminal outcome. A transient source failure is retried in the background for up to 30 minutes; on eventual delivery the buyer gets the approved webhook, and if the forward is structurally impossible or the retry window is exhausted the buyer gets afailednotification (with a generic message — the inventory source is never disclosed) so a push-only buyer is no longer left believing an undelivered creative is live. Previously an approved-but-undelivered creative produced no buyer notification at all. manage_esa_signalwithaction: "validate"now runs through the sales agent’s dry-run route, so it returns a preview of the signal (what buyers would see) alongside the validation result — and surfaces would-be create/update conflicts as issues — all without persisting anything.- Sellers can now set a discount scoped to a corporate house. A discount keyed at a house (e.g.
nike.com) automatically reaches every descendant — so it applies to aconverse.combuy that rolls up to it — and a discount can also be keyed at an exact brand or operator domain. It matches on either the buy’s advertiser brand or its buying operator. When more than one applies, the nearest node in the corporate tree wins (a brand-specific discount beats its house’s; a parent never overrides a child), and the brand dimension takes precedence over the operator dimension. Author them through the new/api/v2/storefront/house-discountsendpoints (list, create, update, delete). The discount is applied at product discovery and always floored at the wholesale cost.
3.1.0 — June 27, 2026 at 6:01 PM UTC
- Reduce repeated no-op
sync_accountscalls to third-party storefront inventory sources by reusing a prior successful account sync for unchanged account payloads. dryRun: trueoncreate_esa_product/update_esa_productnow runs through the sales agent’s single dry-run pass — the same validation and preview a real create or update would produce, with nothing persisted. An update dry-run also checks the product you’re editing, so it surfaces not-found and inventory-profile conflicts before you commit. A dry-run check no longer asks for write-confirmation (it changes nothing); only the real commit does.- Fixed
ask_murphreturning an invalid MCP result (error -32602) whenever a turn surfaced a widget. The embedded UI resource now carries the widget HTML inline, so MCP clients receive a valid tool result instead of a protocol error. - Fix
update_media_buyemitting a wire-invalidformat_id(agent_url: "", or a missingagent_url) when falling back to a product’s declared formats. The AdCP format-id schema requires a realagent_url, so a forged empty value produced a reference the sales agent could reject. The update now drops any product format that lacks a usableagent_url/idinstead of forging one. - Fixed a bug where Murph’s write-confirmation prompt (“reply with the confirmation phrase…”) was sometimes replaced with an unrelated “I can’t take credentials in chat — open the secure form” message. The credential-safety check no longer fires on confirmation turns, which carry no secret.
- Validating or previewing a wholesale product now surfaces an advisory warning when a declared publisher property (by id or tag) isn’t found in the registry or on the publisher’s live
adagents.json— usually a typo. This is a warning only — it never blocks authoring. It’s lag-aware (a publisher that exposes no property list yet is not flagged) and skips publishers that haven’t authorized the agent, since the authorization advisory already covers those. - Seller analytics now shows what your Merchandising Agent learned: which negotiation posture is actually converting, and whether following its own history-derived recommendation booked better than diverging from it. This surfaces the
postureConversiondata in the seller-analytics widget (both the Ask Murph panel and the seller dashboard) and documents it in the seller analytics reference. - Reduce production Sentry noise from known Slack setup drift and harden several root causes found in prod triage, including catalog cache upserts, Murph conversation creation races, invalid Cloud Function metric values, creative sync source-health diagnostics, and indexes for scheduled health/insights jobs.
- Storefront media buys and updates that a buyer submits with a
push_notification_confignow fire the buyer’s AdCP task webhook when the inventory source resolves acceptance asynchronously — on final acceptance, terminal rejection, and the pending-acceptance timeout. Previously only the operator-approval path emitted these webhooks, so a buyer that relied on push delivery (rather than pollingtasks_get) was never told the outcome of an asynchronously-settled buy or update despite our “await your webhook” promise. update_campaignnow reports which campaign creatives were dropped from each media buy during auto-link. When a campaign creative’s duration or slot doesn’t satisfy a buy’s product format, the cascade drops it (and proceeds with the compatible ones) — previously that drop was silent. The response now includes adroppedCreativesarray ({ mediaBuyId, dropped: [{ creativeId, reason }] }) so the buyer can see exactly what wasn’t applied and fix or resubmit those creatives.
3.0.0 — June 27, 2026 at 7:16 AM UTC
- Fix Murph stalling when creating products or signals on an embedded ad-server source. It now validates, previews, and proceeds to call create — the in-chat Approve control is the confirmation step — instead of repeatedly validating and never creating. The ad-server source widget’s draft buttons drive to creation rather than asking to confirm beforehand.
- Prevent duplicate managed FreeWheel ESA connections from bypassing the duplicate check when authenticated with a client ID.
- Remove the managed ad-server source
provisioningStatusfield. Thepending → provisioning → active → failed → deactivatedlifecycle was a stored state machine that nothing reliably advanced (sources stranded inprovisioningindefinitely) and that misrepresented usability. A source’s enabled/disabled state is now conveyed solely bydeactivatedAt(null = enabled), and whether it is live/sellable is derived from upstream facts via the managed-source status (operational.isLive). TheprovisioningStatusfield is gone from the ad-server connection and managed-sales-agent responses under/api/v2/storefront/inventory-sources. - The managed-sales-agent summary now also exposes
lastErrorCode— the machine-readable classification of the most recent provisioning failure (same vocabulary asEsaConnection.lastErrorCode), or null when there has been no failure.
2.201.0 — June 27, 2026 at 6:49 AM UTC
- Auto-linking campaign creatives to existing media buys no longer fails all-or-nothing when one campaign creative doesn’t fit a buy. The auto-sync now drops creatives whose duration or slot doesn’t satisfy the buy’s product format and proceeds with the compatible ones (it already dropped format-mismatched creatives this way) — so a single incompatible campaign creative can’t block every other creative from syncing to that buy. Dropped creatives are logged for the operator.
- Media buys now validate the full set of attached creatives against each product’s format requirements (duration, dimensions, slot types) on both create and update. Previously a creative could skip the duration/slot check depending on how it was attached — a campaign creative auto-linked into a new media buy on create, or a creative attached per-package via
packages[].creative_idson update — so a creative whose duration didn’t fit a product’s slot (for example a 15s creative on a 30s-only slot) could slip through to a downstream ad-server rejection instead of being flagged up front. Both paths now run the same gate that top-level creative assignments already did. - Agent discovery now surfaces a publisher’s self-published creative formats. When a publisher’s
adagents.jsonresolves, the discover-agents response includespublisher.formats(the AdCP 3.1formats[]inventory-identity catalog), read directly through the publisher’s own canonical document — never assembled or stored by the platform. Absent when only the registry mirror resolves; an empty array for a pre-3.1 file that declares no formats. - Buyer product discovery now forwards quick/long wait windows through storefront chains and returns structured timeout and upstream incomplete signals so agents can ask before retrying slow storefronts with a longer wait.
create_esa_productandupdate_esa_productnow acceptdryRun: trueto check a draft and return validation + preview without persisting — one dry-run step instead of separate validate/preview calls.validate_esa_product/preview_esa_productremain as deprecated aliases.- Agent discovery now resolves a publisher through a single resolver that reports provenance. The discover-agents response carries the registry’s
hostingverdict and afreshnessblock indicating whether the authorization verdict came from the registry’s crawl (source: "registry") or the publisher’s liveadagents.json(source: "live_origin"), along with the registry’s last-crawl time. When the registry’s crawl lags a publisher’s live file, the platform now asks the registry to re-crawl so its mirror converges, instead of silently overriding the stale verdict. - Validating or previewing a wholesale product now surfaces an advisory warning when the product declares no publisher properties (it hasn’t said which publisher inventory it covers). This is a warning only — it never blocks authoring; declaring publisher properties is recommended, not required. It complements the existing publisher-authorization advisory.
- Validating or previewing a wholesale product now surfaces an advisory warning when a declared publisher’s live
adagents.jsonhasn’t authorized the storefront’s sales agent. This is a warning only — it never blocks authoring (publisher authorization isn’t required at this distribution stage), and it reads the publisher’s liveadagents.json(not the lagging registry mirror) so a not-yet-crawled publisher isn’t falsely flagged.
2.200.0 — June 26, 2026 at 9:43 PM UTC
- Clarify the AAO check when connecting an inventory source. The connect-time gate verifies the agent’s own AAO registration; its messaging now says so explicitly and distinguishes it from a publisher’s authorization (
adagents.json) to sell inventory, which is enforced later when traffic is served. The “agent not registered” rejection (400) is also clearly separated from a “registry temporarily unreachable” outcome (503, retryable), and both are documented on the create-inventory-source reference. - Learn each GAM inventory source’s approve-capability from real order outcomes and use it to stop stranded buys. When a create is structurally blocked at the ad server’s approval step (the service account lacks Approve + Overbook, or the network mandates manual approval), the source is marked blocked: the storefront then refuses to enable auto media-buy approval — telling the operator to grant Approve + Overbook in Google Ad Manager — instead of accepting an auto setting it can’t honor, and surfaces a readiness remediation. It recovers automatically once a subsequent order is created without an approval block, after the permission is granted. Detection is lazy — there is no synthetic probe order; the first real order is the probe. (This covers the approval axis — Approve/Overbook permission and mandatory-approval networks — not forecast or inventory availability.)
- When a managed inventory source rejects a creative or media-buy request as invalid, the buyer now sees the source’s actual reason (for example, “creative needs a 4:3 640×480 rendition”) instead of a generic “rejected as invalid” message — so the problem is actionable. The storefront operator owns the managed sales agent, so its validation rejection is the seller speaking to the buyer and is passed through. Authorization and transport failures stay generic (they are credential/plumbing problems, not a seller message), and rejections from cross-storefront linked sources remain redacted. Validation rejections are now identified by structured signals only (never a free-text message match), so a transport error can never be mistaken for a validation rejection.
- Murph now gathers a required creative format up front (via
list_esa_creative_formats) before validating an embedded sales-agent product, so sellers no longer hit an avoidable “missing creative formats” round-trip when authoring a product.
2.199.0 — June 26, 2026 at 8:51 PM UTC
- Storefront inventory-source compliance is now actionable instead of inscrutable: it surfaces AAO’s advisory observations (the
observationsarray was previously always empty), labels skipped/not-run compliance tracks clearly (“not run” / “no coverage”) instead of showing a blank track at 0 ms, and adds an explicit advisory when a registered agent has no scored compliance tracks yet (coverage-gap skips or a pending run). Compliance remains informational and never blocks going live. - AAO inventory-source compliance is now informational at go-live: a non-
passingcompliance verdict no longer blocks a storefront from going live and transacting. The verdict is still surfaced prominently as an advisory warning (in storefront readiness and Murph’s health snapshot) so you can see and address it. Connect-time registration and the agent-active readiness check are unchanged, and per-publisher authorization remains enforced. - Discover-agents now explains a null AAO
memberinstead of collapsing every cause into the same null. Each ofoperatorandpublishercarries alookup_status:member,not_member,scope_limited(looked up without your AAO key, so members-only records may be hidden), orlookup_failed(the registry was unreachable — retry withrefresh). Publisher lookups have no visibility tiers, so a null publisher member is always definitive. Transient lookup failures are no longer cached, so a refresh reflects a recovered registry immediately. - Add AdCP integration docs, split by perspective: “Connect your sales agent” (seller/storefront side — how Interchange uses AdCP to integrate your agent as a storefront source, AAO compliance, and a governance/audit FAQ) and “How Interchange uses AdCP (buy side)” (cross-seller discovery and campaigns). Each pairs Interchange behavior with the AdCP spec.
- Buyer campaign targeting can now list targeting dimension dictionaries, resolve localized or messy Nielsen DMA labels such as “LA DMA” and “Dallas/Ft. Worth” to code candidates, and request geo metro display labels on campaign reads with
fields=geo_metro_names. - Creative attachment now checks a creative’s duration against the format slot’s required
duration_msrange before a media buy is created or updated. A creative whose duration falls outside the slot’s range — for example a 15s video on a 30s-only slot — is rejected up front with a clear reason, instead of being synced and then hard-rejected by the publisher’s ad server. Linked creative assets accept an optionalduration_msso a VAST tag’s duration can be declared, and uploaded video duration is measured automatically. Creatives whose duration is unknown are not blocked. - Creative recognition now probes video and audio specs at upload, not just image dimensions. When a buyer brings a video or audio creative, the upload reads its intrinsic specs and surfaces them in the recognition card alongside the file:
- Video: dimensions, duration, codec, frame rate, overall bitrate, and container (MP4/MOV).
- Audio: duration, codec, sample rate, and bitrate (MP3, AAC/M4A, WAV).
- Detected specs are persisted on the asset and returned on the creative manifest (
duration_ms,codec,bitrate_kbps,frame_rate,sample_rate,container), so they’re available to the buyer and to placement auto-mapping without re-reading the file. Probing is best-effort: an unreadable or unsupported file still uploads, just without the extra specs. Dimensions continue to be confirmed against the filename, with disagreements flagged. - Audio and QuickTime creatives now upload cleanly across both surfaces that feed recognition — the in-chat dropzone and the campaign creative-assets page. The chat dropzone accepts MP3, WAV, M4A, and
.movalongside MP4 (previously only MP4), and the creative upload endpoint now accepts.m4aand the common.wav/.mp3MIME variants (e.g.audio/x-wav,audio/x-m4a) that some browsers send, normalizing them to a canonical type so they classify and probe correctly instead of being rejected as an unsupported file type. - Reduce database timeout exposure on the agentic database: replace the per-row LATERAL JOIN in storefront diagnostics with a set-based CTE, eliminate a duplicate COUNT(*) query in agent activity listing, add expression indexes on murph_test_runs task_id paths, and raise the agentic DB connection pool ceiling in production.
- The diagnostics
windowobject now includesactivityTruncated: boolean. Whentrue, the 200-row sample cap was reached andrecentActivity[]shows only the most recent 200 rows — performance rates and counts are derived from that sample, not the full window. - Package-level budget updates for media buys backed by ESA storefronts are now correctly forwarded to the upstream source.
- Fix auth failure that blocked cancel (and silent false-ACTIVE on execute) for managed-storefront sales agents. The cancel path now routes in-process for platform-internal storefronts instead of calling their public OAuth-gated URL. Execute no longer marks a campaign ACTIVE when no upstream media_buy_id was returned.
- Fixed an intermittent “MCP app failed to initialize” error that could leave in-chat widgets blank. The widget-to-host handshake now arms when the widget frame mounts instead of waiting for its load event, so a large widget bundle can no longer send its initialization before the host is listening.
- Fix Murph chat attachments getting stuck on a loading spinner and never attaching. A drop cancel-guard was set when the chat unmounted but never re-armed on remount, so after a remount (or React StrictMode in dev) every dropped file silently skipped the attach step and spun forever.
- Fix source-webhook callback URL using wrong customer ID for storefront-routed buys. Async accepts (e.g. Ozone manual moderation) now route to the buyer’s customer context instead of the storefront’s.
- Murph now grounds answers in the AdCP protocol spec alongside the Interchange docs. The docs index is built from both corpora (the AdCP spec is fetched fresh at build time so it tracks the latest), search results are tagged by source and balanced so the larger AdCP corpus can’t crowd out our own docs, and Murph cites the AdCP docs for protocol questions and the Interchange docs for platform behavior.
- The Murph chat composer now surfaces each attaching file as a chip with a spinner in its leading slot while the file is read and encoded, so attaching large files no longer feels unresponsive. Sending is held until encoding finishes so a file can’t be dropped from the turn. The attach-file button is now a plus icon.
- Raise the per-turn chat attachment limit from 4 to 5 files. The 50 MB total-size cap per turn is unchanged.
2.198.0 — June 26, 2026 at 2:29 PM UTC
- Bound synchronous buyer product discovery so slow sales agents degrade instead of holding REST discovery responses open past client and deploy-gate timeouts.
- Product discovery now defaults to a 30-second quick wait, exposes opt-in longer waits, and reports storefront response timing so buyers can debug slow or timed-out storefront calls.
- Murph is now added automatically to newly provisioned Slack support channels and those channels are connected to the right customer account. A scheduled customer setup invariant reconciler also keeps existing Slack support channels repaired if Murph membership or the customer binding drifts.
- Make ESA product authoring resilient to stale creative-format catalogs and partial data. A single malformed or partially-authored wholesale product no longer blanks the entire seller product list — valid products are still returned and the bad row is logged. Product validation downgrades a “creative format not found” error to a warning when the format is present in the source’s live creative-format catalog (so a stale validator snapshot no longer blocks authoring a format that is actually available), tolerates variation in the validator’s message phrasing, and logs clearly when it cannot. When saving a product (create or update) is rejected because a creative format is missing from the source’s discovered catalog, the seller now gets an actionable message — distinguishing a stale discovered catalog that needs refreshing (the format is available in the source’s live catalog) from a format the source genuinely doesn’t support — instead of a raw upstream error.
- Fixed storefront async budget-update rail: a source-rejected update no longer leaves a wrong budget live, and the seller spread ledger is now re-booked when an async update confirms. On a multi-source buy, a budget version is no longer promoted live when any leg was rejected, and a failed activation no longer reports the update as succeeded.
- Buyer product discovery now applies the quick/long wait deadline to the full per-storefront agent task, including account sync and in-process storefront dispatch, so wholesale discovery cannot hang beyond the requested wait.
- Legacy non-storefront product discovery has been removed. The
product_discoverandmedia_product_listtools on the legacy/toolsendpoint no longer return products from standalone sales agents. Product discovery now runs exclusively through storefront-backed discovery (POST /api/v2/discovery/discover-products), which surfaces each storefront once rather than returning both a storefront and its underlying direct agent. Buyers still integrating against the legacy/toolsdiscovery tools should move to the storefront discovery surface.
2.197.0 — June 26, 2026 at 11:08 AM UTC
- Add the
browse_ad_server_selectorsstorefront MCP tool. It opens the in-chat inventory browser over an embedded sales agent’s ad-server inventory: call with anesaIdto list the adapter’s available selector types, or add aselectorTypeto browse selectors of that type (narrowed byquery/parentId, paginated withcursor). As a standard MCP Apps tool — it declares its widget binding and returns the inventory asstructuredContent— any MCP host renders the inventory-selector surface from the tool result, not just the in-app guide. ask_murphnow surfaces a turn’s primary widget as a conformant MCP-UI tool result — an embeddedui://resource plus the widget’s render data onstructuredContent— so any MCP-UI host (Claude, ChatGPT) renders the widget from the result, not just the in-product drawer. Previously only the selleropen_<widget>directive was surfaced as a resource; discovery, creative, inventory, analytics, and escalations widgets were invisible to external hosts. One primary widget is chosen per turn (an MCP-UI result carries one render payload); the in-product experience is unchanged.- Paced campaigns now correctly split into per-period packages on first execute. A regression caused the first execute of a campaign with pacing periods to ship a single flat package instead of one package per period, so the configured weekly schedule was silently ignored. Executing a paced campaign now produces the expected per-period packages.
- Clarify campaign creation guidance so buyers leave
campaignTypeunset by default and let the first media buy lock the campaign type. - Expose sanitized ADCP transport request and response diagnostics for source debug calls.
2.196.1 — June 26, 2026 at 9:40 AM UTC
- Fix Murph storefront diagnostics so seller-scoped MCP sessions can access their sales-agent debug calls after customer switching, and allow source diagnostics to be filtered by either source slug or source row id.
2.196.0 — June 25, 2026 at 7:13 PM UTC
- Buyer creative v2: buyers can bring creative into chat and get it onto a campaign, whether or not they name the campaign up front.
- Drop a zip bundle of creatives and it unpacks into one creative per file, each titled from its filename and auto-mapped to a placement by size (images today). Unsupported files, SVG (active content), manifest/CSV sidecars, and macOS junk are skipped.
- Upload then pick later: uploads are saved as advertiser-level creatives up front (building on the advertiser creative library), so picking a campaign in a later turn — via the picker, a typo’d name, or “a campaign” left vague — still attaches and maps them. No more lost upload or picker loop.
- Name the campaign with the upload and it attaches directly, skipping the picker.
- Flagged behind
buyer-creative-v2, off by default. - Fix 500 error on storefront source webhooks caused by referencing a non-existent
customer_idcolumn onstorefront_inventory_source— the column belongs tostorefront_agent_source. - Fixed inbound ADCP source webhooks returning 500 INTERNAL_ERROR for every callback. The source resolver scoped the customer filter on the wrong table (the inventory source, which is storefront-scoped and has no customer column) instead of the agent source that actually carries it. As a result, create_media_buy activation callbacks and media_buy_delivery reports from third-party sources were rejected and not ingested; they now resolve and process correctly.
- Fix a media-buy activation edge case: an approved budget-change update could activate a brand-new buy that was still awaiting its initial source acceptance, flipping it live outside the normal create path. Storefront version activation now only promotes a budget change that is staged on top of an already-live version, leaving an unaccepted new buy untouched.
- Fix catalog warm crash when a seller returns the same product_id on multiple pages. The error appeared in Sentry as a duplicate key violation on
storefront_catalog_wholesale_products_pkey. Duplicate products are now skipped with a warning log so the rest of the catalog persists correctly.
2.195.1 — June 25, 2026 at 3:57 PM UTC
update_esa_productnow surfaces the salesagent’s validation detail when a product update is rejected with a 400. Previously Murph received a generic “salesagent PUT … returned 400” with no indication of which field failed or why. The salesagent returns a{valid: false, issues: [{field, message}]}body on these rejections (e.g.format_missing_durationfor video_standard on GAM requiring duration_ms); the error parser now readsissues[]in addition toerrors[]so the full field-level message reaches the operator.- Fixed a bug where the Notifications Settings modal could not be reopened after being closed. Closing the modal now clears the
settingsSectionquery parameter so subsequent clicks correctly reopen it.
2.195.0 — June 25, 2026 at 2:32 PM UTC
- Video creative assets now carry a bitrate. The server estimates a hosted video’s bitrate from its file size and duration and forwards it on the creative manifest as
video_bitrate_kbps(kilobits per second), so sales agents that require a bitrate on video asset metadata (e.g. Google Ad Manager) can traffic the creative. The video and audio asset bitrate fields are nowvideo_bitrate_kbps/audio_bitrate_kbps(integer kbps), aligning with the canonical AdCP naming. - Fix creative sync sending raw landing page URL instead of Scope3-wrapped click tracker URL to sellers.
- Fix campaigns to embedded storefronts silently reporting success when the inventory source rejects the forwarded buy on authentication. A forwarded media buy that the source refuses on auth — an
auth-requiredstatus, an HTTP 401/403, or a failed task naming an identity/permission problem — now fails with a clearnot_authorizederror instead of being reported as accepted. Buyers are no longer told a campaign is live when it never reached the storefront. - Creatives assigned to a campaign via the advertiser-library join table now appear correctly on the campaign card and count toward format coverage.
- Campaign type (DECISIONED vs ROUTED) no longer has to be chosen up front.
campaignTypeis now optional on campaign creation: leave it unset and the campaign is created untyped, then locks to the type of its first media buy — a buy through an adapter storefront locks it to ROUTED, every other buy to DECISIONED. Once set, the type is immutable and later media buys of the other type are rejected, so a single campaign still can’t mix the two. SetcampaignTypeexplicitly only when you want ROUTED on a non-adapter agent before adding any media buy. - Fix execute gate using stale product-level budget instead of package budgets. When a storefront accepts a media buy and creates sub-packages with different amounts than originally requested, the execute reconcile check now reads the same packages-aware allocation as the buyer-visible remaining budget, so available budget shown to buyers matches what execute will honor.
- Fix existing-user signup so an invitation join lands on the invited org. When an existing user (typically an OAuth/SSO re-signup) accepts an invitation to an org we cannot resolve by id, domain, or tenant, provisioning now resolves the invited org from the invitation and grants the invited role there — instead of falling back to the user’s oldest membership and reporting them against the wrong org. The oldest-membership fallback is reserved for genuinely idempotent calls with no invitation.
- Source diagnostics now include partner-safe debug IDs, bounded time-window lookup, and copyable redacted request details for recent sales-agent failures and timeouts.
update_media_buyon a storefront now resolves edits a source accepts asynchronously (e.g. parked for manual moderation) instead of reporting a false failure. When a source takes the update out-of-band, the storefront returns a spec-compliantsubmittedtask envelope with atask_idto poll (or await via webhook); the edit is applied to the buy once the source finishes accepting, and the task resolves tocompleted(orfailedif the source rejects it). Previously such an update returnedSERVICE_UNAVAILABLEeven though the source had accepted it.- Fix media-buy budget changes not persisting and SCD2 versions losing child-row history.
- Reducing a package/product budget on a live media buy is now recorded locally as the buyer’s intent (it no longer depends on the sales agent echoing the change back, which adapter/GAM/3rd-party AdCP paths don’t do). The change is staged on a new PENDING_APPROVAL version that owns its own duplicated
packagesandmedia_buy_productscarrying the new budget, while the still-ACTIVE version keeps running its current budget until approval. On activation the version markers flip without deleting or moving child rows, so the superseded version keeps its history. A migration scopespackagesuniqueness to(media_buy_id, package_id)so each version can own its package copy. Reads that aggregate budgets across a media buy are scoped to a single live version to avoid double-counting during the approval window, and the campaign ledger commitment is recomputed/posted when an approved budget change goes live.
2.194.0 — June 25, 2026 at 12:52 AM UTC
- Agent widgets in the Murph chat no longer repeat as you work — only the most recent widget stays open, at the latest turn, instead of stacking a new copy each time it’s surfaced. Reopening a conversation now restores a single live widget rather than one per past turn.
- Fix AAO compliance reader URL normalization: strip /mcp and /a2a transport path suffixes before registry lookup so storefront compliance checks correctly find agents registered under their bare root URL.
- Fix Murph in-chat widgets (product discovery, creative, inventory, and seller surfaces) rendering as a black box when the operating system is set to dark mode. The widget canvas is now pinned to the host’s theme so content is always visible.
- Murph can now check a domain’s
adagents.jsondirectly and resolves managed/network publishers via the ads.txtmanagerdomainfallback, so domains that host no file of their own (e.g. Raptive/CafeMedia-managed publishers delegating tocafemedia.com) no longer read as “no adagents.json”. Thediscover-agentsresponse now also reports how the file was resolved (discovery_method,manager_domain,resolved_url). - Fixed signup notifications so the admins of the organization you join are notified of your signup, even when you accept several invitations at once. Previously the notification could target the wrong organization and report that no admins were found.
- Media buy products in
get_campaignnow include aformatOptionsfield with the publisher’s declared creative format requirements. For video products this shows required duration, dimensions, and aspect ratio: use it to tell buyers what creative spec to provide before executing. - Creative format references are now reconciled to the product’s advertised format when a media buy is created. When a creative’s stored format
agent_urldoes not match theagent_urlthe matched product advertises for the same formatid(for example a bare host on the creative versus an authoritative path on the product), the buy now uses the product’sagent_urlfor the format-spec lookup and for the format reference sent to the sales agent. This prevents a mismatched creativeagent_urlfrom breaking the buy with a validation error. Formats a product does not advertise are left unchanged, so direct (non-storefront) buys are unaffected. - Deselecting a product in discovery now removes it from a bound DRAFT media buy and frees its budget. Previously a removed product lingered on the DRAFT (still carrying its budget) and was forwarded to the sales agent on execute, so a buyer who dropped a product could still see it submitted to the source. Reconcile now drops the deselected product from the DRAFT before execution, keyed on the durable selection identity, and only ever touches DRAFT (non-executed) buys.
- Murph chat now redraws in-chat widgets and attachment references when a conversation is reopened or refreshed. Product-discovery and creative-iteration widgets persist their data so they reappear on reload (previously only a text recap showed), and files you attached are surfaced as reference chips showing what was sent (the file contents themselves are still not retained).
- Use the storefront media buy id for the utm_media_buy attribution parameter on synced creative clickthrough URLs, so clicks map to the correct buy for storefront-routed media buys.
2.193.1 — June 24, 2026 at 5:46 PM UTC
- Apply campaign UTM attribution to creative clickthrough URLs on media buy execution, not only on media buy update, so initial sync to sellers carries the buy and creative identifiers for attribution.
2.193.0 — June 24, 2026 at 5:25 PM UTC
- Creative clickthrough URLs synced to sales agents now carry the campaign’s UTM attribution parameters (source, medium, campaign, content, media buy), so per-media-buy and per-creative click attribution works end to end.
- Product discovery no longer drops a sales agent’s entire catalog when the account-billing handshake (
sync_accounts) times out or fails. Discovery now falls back to the natural-key account and still fetches products, so a slow or flaky third-party handshake can’t zero out an otherwise-healthy source. Sources that genuinely require a synced account still surface their error to operators. - Fixed an issue where accepting an invitation during signup could create a duplicate organization instead of joining the organization you were invited to.
- Media-buy attribution now reaches sellers on creative sync: impression and click tracker URLs (and the embedded HTML pixel) carry the resolved media buy id instead of an unresolved macro.
- Murph now surfaces the interactive product-discovery widget in chat when you discover products. Discovered products render as the same selectable card surface used by external MCP hosts — browse, view details, and select products directly in the conversation — and the widget appears above Murph’s reply. Instead of repeating the full product list in text, Murph gives a short orientation (totals, price range, recommended plans) and steers you to next steps.
2.192.0 — June 24, 2026 at 3:09 PM UTC
- Text slot validation now fails with a clear error when format spec is unavailable, instead of silently skipping per-slot length limits.
create_media_buyandupdate_media_buynow returnext.source_references— the upstream media buy id (and, for pass-through agents, the source name) that your buy maps to on each inventory source, so you can reconcile against the system that actually serves it. Disclosure is gated: pass-through agents include the source name, the storefront’s own managed agent returns the upstream id under a neutral label, and curated or in-process sources are omitted. The per-source breakdown on these responses now masks the underlying source identity for non-pass-through sources.- Two ways to manage ad-server products faster. In the ad-server view you can now edit a product’s name and description or delete it inline, without going through a full chat cycle. And for bulk work, drop a product spreadsheet (CSV/XLSX) straight into the chat — the agent reads the rows, validates them, and creates the whole set in one batch, then tells you which landed and which need attention.
- Fixed campaign start_date set to today failing at execution. When a media buy’s start time is today’s midnight, the platform now treats it as “start immediately” (asap) rather than stamping the execution clock as the start time, which ADCP would reject as a past timestamp.
- Fixed duplicate media buys when re-running discovery or execute on a campaign. Composed products are now reconciled by a durable selection identity that stays stable across the targeting variations that previously made the same inventory look like a brand-new product, so re-binding or re-executing a campaign no longer spawns duplicate media buys for the same selection.
- Fixed ESA product validation incorrectly blocking products when a creative format exists in the live catalog but not in the validator’s discovered catalog. The validator’s discovered catalog can become stale after new formats are added to the creative agent. When this mismatch is detected, the
creative_format_not_foundvalidation issue is now downgraded from an error to a warning so product authoring can proceed. - Fixed streamed Murph chat requests preserving selected workspace context, and let watched Slack channel requests reach Murph with supported Slack file attachments.
- Fixed the storefront navigation rail cutting off its menu and reserving empty space for recent chats. The menu now sizes to its content and the recent chats list fills the remaining space, with “New chat” set off from the section navigation by a divider.
- Fixed update_media_buy failing schema validation for sources that require an account field.
- Updated FreeWheel ad-server setup to collect and forward partner-program client ID and client secret credentials.
- Fixed a self-built sales-agent source being falsely reported as “unreachable” and unable to activate. The connectivity probe and capability refresh now reach a PENDING agent’s endpoint to verify it, instead of short-circuiting before the request — so a healthy agent reflects its real connection status and can move to active.
url_typeis now required when supplying aurl_asseton the create or update creative manifest endpoints. Previously the field was optional; clients must now explicitly declare the URL classification (clickthrough, tracker_pixel, tracker_script, or vast).
2.191.0 — June 24, 2026 at 12:32 AM UTC
- Clearer error when a campaign end date cannot be shortened. The API now lists every media buy that ends after the requested date and explains that active buys have to be shortened first, instead of a generic “update or complete the media buy” message that left buyers unsure what to do.
- Fixed an issue where a campaign’s media buys could show no packages while a pending change was awaiting approval. The campaign endpoint now reports the current packages, products, and budget on each media buy, while still surfacing the pending status on the campaign’s media-buy summary so reviewers can see a change is in flight.
2.190.0 — June 23, 2026 at 6:09 PM UTC
- Bulk creative updates can now set
format_idandtarget_format_ids, not justclick_url. This lets you retype many creatives to a sales agent’s required format (for example OpenAdsdisplay_300x250_nongenerative) in a single call, matched by size, instead of editing each creative one at a time. - Campaign execution now returns a clear, actionable error naming the affected product when a selected product cannot be funded within the campaign’s remaining media budget, instead of failing later with an internal database error. Raise the campaign budget or reduce other media buys, then re-run execute.
2.189.1 — June 23, 2026 at 4:46 PM UTC
- Fixed available account discovery for adapter storefronts after connecting buyer-managed provider accounts.
- Fixed creative approval and assignment handling across the campaign → media buy → storefront flow:
- Creative approval status syncing back from sales agents: operator approvals (delivered as an “updated/approved” review verdict) were being recorded as still-pending and triggering spurious “changes requested” notifications; the per-agent approval status was also written in a different case than the readers expected, so approved creatives could read back as unregistered. Creative status is now derived across every sales agent a creative is synced to, so a creative one routed seller rejected can no longer appear approved.
- Attaching creatives to an active media buy no longer leaves its per-package creative assignments stale (they were silently not updated once a buy went live), so get/list responses now reflect the attached creatives.
- A creative-only change to a routed buy no longer forces an unnecessary seller re-approval.
- Murph now returns a user-friendly “temporarily unavailable” message when the Anthropic API is overloaded (HTTP 529) or encounters a temporary server error (HTTP 500), instead of propagating an unhandled exception.
- Fixed a 500 error when executing or re-syncing a campaign whose draft media buy already exists and the campaign has optimization goals set. The goals are now stored correctly instead of failing with a database serialization error.
- Normalized creative format identifiers during seller sync when a product declares a base format that covers sized variants.
2.189.0 — June 23, 2026 at 2:18 PM UTC
- Creating products on an ad-server inventory source from chat now works reliably, and you can create several at once. Ask the agent to build a batch of products (for example from a spreadsheet) and approve the whole set in a single confirmation. Creation continues even if one product fails. You get a clear summary of which products were created and which failed, with the reason, so you can retry just the ones that didn’t land.
- You can now update several ad-server products at once from chat. Ask the agent to change a batch of products and approve the whole set in a single confirmation. Updates continue even if one fails. You get a clear summary of which products changed and which failed, with the reason, so you can retry just the ones that didn’t update.
- Fixed video creatives failing to upload to the ad server (“failed to upload creative”) when a video file was supplied for a VAST slot. The video was forwarded labeled as a VAST tag pointing at a raw MP4, which the ad server’s VAST parser rejected. The video is now correctly sent as a video asset on every upload path — including syncing creatives directly and creating a media buy — not only the format-adapted path.
2.188.0 — June 23, 2026 at 1:49 PM UTC
- Murph no longer writes the auto-vs-manual approval mode into the acceptance-policy document. The acceptance policy now covers content rules (which advertisers/creatives are accepted and what needs review); whether creatives and media buys auto-approve is the separate approval setting. This stops the acceptance-policy page from showing a stale “manual review” posture after the approval setting is changed.
- Fixed deleting a media buy leaving the ad-server order live. When a buyer deletes an executed media buy, the platform now cancels it at the sales agent / ad server first (archiving the upstream order, e.g. a GAM order) before archiving locally, instead of stranding an orphaned order.
- Fixed video media buys being rejected by the ad server. When a media buy was forwarded with a video creative, the video asset was sent without its name and pixel dimensions, so the sales agent rejected the buy. The forwarded video asset now carries its name, width, height, and (when available) duration.
- Storefronts can now be paid in more than one currency. A new
paymentCurrenciessetting lists the ISO-4217 currencies a storefront will be paid in (the primarydefaultCurrencyis always included). There is no FX — the currency a buyer pays in is exactly the currency the seller is paid in — so a storefront cannot sell a pricing option in a currency outside this set. Product discovery returns products in the buyer’s advertiser currency; if the storefront isn’t paid in that currency it returns no products (rather than ones the buyer could never buy). A media buy is accepted only when denominated in a single one of the storefront’s payment currencies. A storefront that sets nopaymentCurrencieskeeps its previous single-currency behavior, falling back to itsdefaultCurrency. - Murph now shows Approve / Cancel buttons in Slack when an action needs confirmation. Previously a Slack user had to reply with a long confirmation phrase to approve a gated change; now a tap approves it. Only the person who requested the change can approve it.
- Storefront readiness now surfaces the real per-track AAO compliance results (e.g. core, products, audiences) with their pass / fail / partial status and scenario tallies, instead of collapsing every agent to a single track that could report “0 tracks executed”.
2.187.0 — June 23, 2026 at 1:12 PM UTC
- Video media buys now carry the product’s exact required duration to the seller. When a product declares a canonical video format with a required duration, the package sent to the sales agent includes that duration (
duration_ms_exact/duration_ms_range) alongside the existing format selection, so duration-sensitive video inventory traffics correctly instead of dropping the requirement. - Product discovery now documents and types the accepted video delivery containers and codecs a seller will accept. For hosted-video formats,
formatOptions[].params.containers,params.video_codecs, andparams.audio_codecsadvertise the allowed values (for example, MP4 with H.264/AAC), so a buyer’s agent can avoid sending a creative that would be rejected downstream. VAST formats intentionally omit these — the codec is carried inside the VAST document. The legacyformatsreference array is also now documented on the product response. - Fixed approval queue action buttons so approving one media-buy approval does not show a busy state on unrelated approvals, and approval decisions now return immediately while source forwarding continues in the background.
2.186.0 — June 23, 2026 at 10:36 AM UTC
- Hosted video creatives now carry their duration. The duration is extracted from the video file (including non-faststart MP4s, via a tail read) when a creative is published and when it is adapted to a publisher format, so downstream duration limits — such as a sales agent’s maximum video length — can be checked. A missing duration is non-fatal: the creative still syncs, and only width/height remain required.
- Fixed a crash in the buyer catalogs view that prevented catalog details from rendering when an item count was shown.
- Fixed hosted video creatives failing to sync when they fill a VAST format slot. A hosted video used for a VAST slot is now sent as a video asset carrying its width and height, instead of being relabeled as a VAST tag pointing at the raw video file — which sales agents rejected as invalid (and which dropped the video’s dimensions).
2.185.0 — June 23, 2026 at 6:03 AM UTC
- Your business profile now reads as structured cards — the pitch buyers see, plus your channels, regions, verticals, and authorized domains as legible tagged groups — instead of a flat gray list, and “Update profile” is a clear primary action.
- Fixed approved creatives not delivering on approval-gated storefronts. When a seller approved a creative, it was created on the ad server but never associated with the line item, so it could not serve. The storefront approval now forwards the creative’s package assignment to the source, so the ad server creates the line-item creative association.
- Added a manual refresh control to the seller Approvals view, clarified pending media-buy review copy, and surfaced prior approval decisions with reviewer notes in the media-buy detail pane.
- Third-party storefronts can now leave Interchange merchandising tools off without being blocked by storefront-managed approval setup, and sellers can opt those tools back in from the Sales agent widget or Storefront settings.
2.184.3 — June 22, 2026 at 10:55 PM UTC
- Fixed an issue where
sync_creativescalls could fail withIDEMPOTENCY_CONFLICTwhen the set of package assignments changed between calls. The upstream idempotency key now includes a content fingerprint covering the creative and assignment payload, so different payloads always produce a distinct key even when the caller reuses its own base key.
2.184.2 — June 22, 2026 at 9:48 PM UTC
- Fixed a crash when updating a storefront’s publisher domain and operator domain in the same request.
2.184.1 — June 22, 2026 at 9:05 PM UTC
- Fixed creatives being synced to a seller without the media buy id or package assignments for media buys placed through a storefront. The storefront sync dispatch forwarded only the creatives and account, so the storefront fanned them out to every connected source unattached to a buy or package. The media buy id and per-package assignments are now forwarded through the dispatch, so creatives route to the buy’s source(s) and attach to their packages on the seller.
2.184.0 — June 22, 2026 at 8:11 PM UTC
- Signing up with an email domain that already has an account but no owner now lets the first verified user from that domain claim the account and become its owner. Previously, only brand-new domains could create an account: if an account already existed for the domain but had no owner, the first user was blocked and routed to request access (which no one could approve). Accounts that already have an owner are unaffected.
- Fixed creatives being synced to a seller without their package assignments for media buys placed through a storefront. The assignment step resolved formats from the wrong product record and produced no assignments, so creatives reached the seller unattached to any package. It now resolves each package’s own product formats and routed sales agent, so creatives are assigned to their packages on the seller for storefront-routed buys.
2.183.0 — June 22, 2026 at 8:02 PM UTC
- Fixed delivered spend (and other delivery metrics) being lost when a media buy is edited or re-synced. Delivery metrics are now carried forward to each new version of a media buy, and a one-time backfill restores metrics on existing media buys, so reported spend stays accurate after updates.
- Fixed client-side validation in the credentials form to allow Basic Auth with an empty password.
2.182.1 — June 22, 2026 at 6:16 PM UTC
- Fixed standalone creatives (submitted to a storefront without a media buy and held for manual operator review) failing to reach the underlying seller on approval. The forwarded sync_creatives request was missing an account, so it was rejected before delivery. The buyer’s account is now preserved on the review record and reused when the approved creative is forwarded.
2.182.0 — June 22, 2026 at 5:33 PM UTC
- Inventory sources that use basic auth or an API key can now be registered without supplying the secret up front. The source is created pending credentials, and the credential is collected afterwards through the secure in-chat form rather than being typed into the conversation. OAuth and no-auth sources are unchanged.
- Fixed two bugs in the storefront creative approval evaluator: the evaluator was incorrectly using the seller’s own brand ID as the expected brand when validating buyer-submitted creatives, and a brand metadata mismatch was treated as a hard block that prevented approval entirely. Brand mismatches now escalate to manual review instead of blocking.
- Fixed creative approval getting stuck in pending when ad-server forwarding fails. Operators can now approve a creative even when the source forward encounters a transient error — the approval decision is recorded immediately, and forwarding is retried separately.
- External sales-agent sources now accept Basic Auth credentials with an empty password.
- Murph now says “Scope3 has been notified” when it files a report and tells users they can track status under the ? menu. The offer to notify Scope3 also uses plain language (“Would you like me to notify the Scope3 team?”) so users know what the action means.
- Action buttons across the seller widgets now name what they do — “Fix this run”, “Build my profile”, “Update profile”, “Get a recommendation” — instead of naming the assistant (”… with Murph” / “Ask Murph”). The agent still does the work; the button just says the outcome.
2.181.0 — June 22, 2026 at 3:44 PM UTC
- Fixed a bug where hosted MP4 video creatives could not be forwarded to sales agents. Dimensions for MP4 video assets are now extracted from the file’s ISOBMFF container at upload and execution time, so video creatives proceed through media-buy execution without a “numeric width and height” validation error.
- Fixed service tokens showing no active agents when agents became active after the token was created. A token’s active agent list is now kept current whenever an agent is registered, activated, disabled, or reassigned, and existing tokens have been backfilled.
- Fixed an issue where creatives synced to a media buy placed through a storefront could fail to reach the underlying seller. The forwarded sync_creatives request was missing the account the media buy was created under, so it was rejected before delivery and the buy could stay in
pending_creatives. Creative syncs now reuse the correct per-source account. - Inventory-source health alerts are now owner-aware. When an official Scope3-hosted adapter (e.g. Pinterest, Reddit, Snap) has a runtime outage, Scope3 is alerted internally instead of notifying the seller about infrastructure they don’t operate. When the issue is the seller’s own adapter credentials, they still get a notification telling them to reconnect. Sources the seller operates directly are unchanged.
- Sellers now receive an “all clear” notification when a previously-unhealthy inventory source recovers, closing the loop on the unhealthy alert. It fires only for sources we actually alerted on, exactly once per outage, so it never spams.
- When a sales-agent connection check fails, diagnostics now report the specific failure — the HTTP status, whether it was an authentication/audience rejection, a timeout, or a network/DNS error, plus a redacted response excerpt — instead of a generic “not reachable” message. This makes it possible to tell an OAuth token or audience mismatch apart from an endpoint that is simply down.
2.180.0 — June 22, 2026 at 2:30 PM UTC
- Your acceptance policy now reads as a traffic-light — what you Accept (green) vs Decline (red) — instead of one flat gray list, so the two sides of the policy are clear at a glance. “Update policy” is now the clear primary action.
- Murph in-chat approval controls are more reliable. The window to approve a pending action is longer, so a review that takes more than a few minutes no longer lapses mid-decision, and a lapsed approval now shows an explicit “expired — ask again” state instead of a blank step that looked like the controls were missing. A pending approval also survives when the click that approves it is handled by a different server instance or after a restart, so approvals are no longer silently stranded. Approving an action started while signed in as another user (support-assisted setup) no longer fails with a confirmation error.
- Fixed several notification types that were silently failing to deliver — most notably the “your ad-server connection needs action” alert for sellers, plus outcomes-agent registration/update notices. These types were defined in the API but missing from the database’s notification-type list, so the platform dropped them instead of sending them; they now deliver as intended.
- Fixed a managed media buy failing at ad-server line-item creation when a product offered both a sized display format (e.g. 970×250) and the dimensionless display family format. The buy now forwards the sized format so the line item can be trafficked, instead of sending the dimensionless one alongside it and failing.
- Merchandising rules now has one clear primary “Update rules” action instead of a row of look-alike low-contrast buttons, and its actions are named for the task (“Update rules”, “Write merchandising rules”) rather than the tool.
2.179.0 — June 22, 2026 at 1:48 PM UTC
- You can now stop an in-flight Murph chat turn. While Murph is working, a Stop control appears in the composer — pressing it ends the turn immediately instead of waiting for it to finish. Stopping does not undo anything Murph already did on that turn (for example, a change it had already applied); the reply makes that clear.
- Storefront readiness now reflects when Stripe later disables, restricts, or disconnects your connected payout account. Previously, once payout onboarding completed it was recorded as done permanently — so if Stripe turned off payouts afterward, your storefront still showed billing as complete and “ready to sell” even though you couldn’t be paid out. Readiness now re-flags payout setup when Stripe reports the account can no longer pay out.
- Signal lifecycle status now shows a color-coded badge (active / draft / archived) instead of a flat gray pill where every state looked the same, reusing the shared seller-widget status badge.
- Fixed approved creatives getting stuck at “0/1 source” when forwarded to an ad server (e.g. Google Ad Manager) that reviews creatives asynchronously. An async-accepted creative is now correctly recorded as forwarded, so the operator’s approval lands instead of bouncing back as pending.
- Murph can now attach URL-backed creatives reliably. The
create_creative_manifestoperation now publishes its request schema throughdescribe_operation, so the agent uses the correct shape (a URL asset, an object-form format id) instead of guessing and failing. - Product discovery no longer hangs indefinitely when a single sales agent is slow to respond. Each agent now has a hard per-call ceiling, so one unresponsive seller is skipped (and reported) instead of stalling the whole discovery run.
- Stop Murph from re-issuing the same failing tool call turn after turn. When a request with byte-identical arguments has already failed in multiple previous turns, Murph now tells you the request keeps failing and stops retrying, instead of silently re-sending it. Mutations that are simply awaiting your approval are not affected.
- Fixed a confirmation-loop bug where Murph’s in-chat Approve button could misattribute a banner-attach (or other buyer write) approval to a discovery re-run when multiple pending confirmations were in context. The server-injected approval message now names the specific operation, so Murph cannot confuse which call to replay.
- Murph now presents the complete product discovery results to the user before offering curated recommendations. Previously, Murph could jump directly to a shortlist without giving the buyer a chance to browse the full inventory.
- Fixed the Murph sidebar recents empty state so it no longer creates unnecessary scrolling in compact layouts.
- Fixed Murph chat occasionally failing with a “network blip” error during long-running turns. The chat stream now sends a periodic keep-alive so a multi-minute response (for example a large product discovery) is no longer cut off by an idle-connection timeout.
- Fixed a loop where registering a third-party sales agent with no authentication kept redirecting to the credential form. Murph’s post-registration guidance (“add a bearer token later via /source credentials”) was being misclassified as an in-chat credential solicitation and replaced with a secure-credential redirect, leaving the registration visibly incomplete.
- Fixed the “Confirm currency” control in the seller setup checklist, which silently did nothing when clicked. The settlement-currency update is now applied, and a failed save surfaces an error instead of leaving the step unchanged.
- Storefront readiness now reflects real product availability for storefronts backed by a managed sales agent. Previously these storefronts always showed products as ready regardless of whether any products or signals existed; go-live now blocks only when a storefront genuinely has nothing to sell (no wholesale products and no signals to compose from). A storefront with signals but no pre-built products is correctly treated as sellable.
- The approvals view now shows a clear “you’re all caught up” confirmation when nothing is waiting on your review, instead of a bare line of text that could look like a broken panel. Introduces a shared empty-state used across seller widgets.
- Event source health now shows a color-coded status (Receiving / Needs attention / Not seen) that stays legible in dark mode, instead of a flat gray pill where every state looked the same. Introduces a shared status badge used across seller widgets.
- When a seller-operated inventory source stays unhealthy past a short threshold (default 10 minutes), Interchange now opens a Pylon support issue so the seller is reached in their support channel — and auto-closes it once the source recovers. Sporadic blips that self-heal within the threshold never open a ticket, and Scope3-hosted adapter outages route to Scope3 rather than the seller.
2.178.0 — June 22, 2026 at 8:54 AM UTC
- Sellers are now proactively notified when a third-party inventory source they operate goes unhealthy, so they can restore it before it stops serving demand — instead of only finding out by opening diagnostics. The alert is operational (always-on, customer-scoped) and debounced so a flapping source cannot spam. Official Scope3-hosted adapters are excluded for now; their owner-aware alerting is a follow-up.
2.177.0 — June 22, 2026 at 6:25 AM UTC
- Removing an inventory source no longer leaves it able to block your storefront. Source removal is a soft delete, so an unresolved trafficking error on a removed source previously kept readiness blocked indefinitely (and the resolved item lingered in your work queue). Readiness and the work queue now exclude items on removed sources.
- Inventory-source diagnostics now identify who owns a failure. The
diagnosisblock ofGET /api/v2/storefront/inventory-sources/{sourceId}/diagnosticsincludes anownerfield: for an official Scope3-hosted adapter (Pinterest, Reddit, Snap, …) a runtime failure is attributed to Scope3 — with guidance that it recovers automatically — instead of asking you to debug infrastructure you don’t operate. Adapter credential issues and your own external sales agents remain yours to fix.
2.176.0 — June 22, 2026 at 5:55 AM UTC
- A separate action-required indicator now appears in the top navigation when your storefront is blocked from selling, and opens the “Get ready to sell” readiness view so you can fix the blockers. It’s distinct from the notifications bell (which stays for passive updates) and only shows while there’s something to act on, clearing once your storefront is ready.
- Ad-server connection alerts (“sync action required”) are now always-on like other storefront readiness alerts — delivered to your whole team and shown in the notifications feed regardless of preferences, since a broken ad-server connection stops your storefront from selling. They no longer appear as a toggle in notification settings.
- Storefront readiness alerts — your storefront was paused, or products aren’t ready to traffic — are now delivered to your whole team automatically rather than being something you had to opt into. These operational alerts can’t be muted, so a storefront problem never goes unnoticed, and they no longer appear as toggles in notification settings.
- Fixed the Ad server item in the seller navigation doing nothing when clicked — it now opens your ad-server inventory view (connections, sync status, wholesale products, and signals), the same surface the inventory link already opened.
- Notification settings no longer show a duplicate “Storefront” category, and the list now only includes the categories relevant to your account — buyers see buyer notifications, sellers see storefront notifications. The sales-agent notification category is now labeled “Sales agent.”
- Murph now acts immediately when you approve a change it proposed (for example a campaign start-date edit), instead of repeating the confirmation in a way that left it unclear whether Murph had already made the change or was still waiting on you.
- Fixed Murph confirmation messages to unambiguously use future tense so users can tell whether Murph has acted or is waiting for their approval.
- Murph confirmation and approval summaries now use plain language — no API field names, ISO codes, JSON paths, or internal schema reasoning. Before any gated action (campaign creation, policy write, advertiser setup), Murph describes what will happen in terms of the buyer’s intent, not the underlying API call structure.
- Murph no longer warns that a campaign or flight start date of today is in the past — a start date of today is valid and is accepted without friction. When you ask which inventory covers a channel or region, Murph now leads with the storefronts that match and offers to run discovery for actual products and pricing.
- Fixed duplicate approval prompts appearing for product discovery actions in sessions where discovery had previously been run. Returning buyers no longer see a second confirmation gate when re-running discovery in the same conversation.
- Improved the error message shown when Murph is temporarily unreachable server-side. The message no longer instructs users to check their own connection when the issue is on Scope3’s end.
- Murph no longer infers an advertiser’s primary currency from seller-side storefront data (name, domain, region, pricing, or rate card). Currency is now always sourced from the buyer’s own stated preference or by asking directly.
- Fixed an issue where Murph incorrectly rejected today’s date as a campaign flight start date. The validator now correctly uses UTC midnight for date comparisons, matching how ISO 8601 date strings from clients are parsed.
- A new seller’s menu now keeps the focus on getting set up. Until the storefront
- is live, the Merchandise and Operate sections start collapsed — one click opens
- them — so the rail shows the foundational steps instead of every option at once.
- They expand automatically once the storefront is live, or whenever you’re working
- in one of them.
- The Approvals item in the seller navigation now opens the full approvals view, where you can see every pending creative review and media-buy approval and approve or reject each one inline — instead of a read-only summary of the most recent few.
- The Self-serve buyers item in the seller navigation now opens its full in-chat view, where you can create and share your buyer invite link, copy or disable it, and approve, decline, suspend, or reactivate the buyers who have joined — all in one place.
- The Business profile and Pricing & terms items in the seller navigation now open their full in-chat views — your profile, voice, and pitch; and your rate-card rules and approval settings — instead of a condensed summary panel.
- Once a seller’s storefront is live, the menu now collapses the set-once “Set up”
- section and leads with the ongoing Merchandise and Operate work — mirroring how a
- not-yet-live storefront keeps Set up open and collapses the rest. Collapsed
- sections are one click away, and any section you’re working in stays open.
- Rebuilt the seller “Get ready to sell” surface into a go-live readiness dashboard and extended it to reflect live operational health. It now leads with your go-live progress and one clear next action, lets you confirm simple settings like your settlement currency right in the surface, and offers accept-default / upload-your-own / build-with-help for your acceptance policy. Once you’re live it stays a glanceable health check: if an inventory source goes down or buys fail to traffic, it flags exactly what’s stopping you from selling — with direct “reconnect” and “resolve” actions — in step with the action-required indicator.
- The Test runs item in the seller navigation now opens its full in-chat view: your sandbox test history, and for each run the per-sales-agent breakdown (which agents returned products, came back empty, or failed — with the raw call payload), the run’s context, and a one-click handoff to Murph to fix a failed run.
- When a campaign’s selected products include a sales agent that can’t be used with the campaign’s routing type (for example, a decisioned storefront selected into a routed campaign), that agent is now skipped with a warning instead of failing media-buy creation for the entire campaign. Compatible sales agents in the same campaign still get their media buys.
2.175.0 — June 22, 2026 at 1:06 AM UTC
- Advertisers are now unique within a customer by the pair of brand domain and primary currency, instead of by brand domain alone. The same brand domain can back more than one advertiser as long as each uses a different currency (e.g. one in USD and one in EUR). Creating — or updating an advertiser onto — a brand domain + currency pair already taken by a sibling advertiser returns a conflict.
- Murph now coaches sellers all the way through acceptance-policy setup instead of stopping to say the decision “has to come from the operator.” When a step asks which advertisers or creatives to accept, decline, or send for review, Murph asks the questions, drafts the policy, and writes it on your confirmation — rather than handing back a generic template. The in-product recovery after a hiccup also no longer implies a change that already saved cleanly failed.
- Fixed Murph chat scrolling and added clearer debug-call provenance, including timestamps, initiators, and whether calls came from sandbox tests or non-test demand traffic.
- Murph now proactively coaches sellers whose storefront isn’t live yet. On the
- first message of a conversation, Murph leads with where the storefront stands —
- how many steps remain before it can answer its first buyer brief and what the
- immediate next step is — and offers to walk through it one step at a time,
- instead of waiting to be asked. The offer is made once per person, with a
- lighter “pick up where you left off” nudge on a later visit, and it stops
- automatically once the storefront goes live.
- When a seller opens Murph without an active conversation, it now opens directly
- to the right place — the setup checklist while the storefront isn’t live yet,
- the dashboard once it is — instead of a blank screen next to the full menu.
- Starting a new chat still gives a clean chat to type into.
- Sellers can now attach pricing to wholesale signals (CPM or revenue-share), so audience signals can be sold with an incremental price.
2.174.0 — June 21, 2026 at 3:47 PM UTC
- Storefronts now flag products synced from a connected sales agent that can’t be trafficked — for example, video formats missing a duration. The issue appears in your storefront health and raises a notification naming how many products are affected, so you can fix them in your sales agent and re-sync. This extends the same not-traffickable detection that managed ad-server products already have.
- Fixed Murph chat consistently failing with “Murph chat stream ended without a result” even though the reply was generated and saved. The streaming response now reliably delivers its final result.
- Product activity entries now record the full set of seller-meaningful fields (delivery type, inventory type, formats, pricing, exclusivity) instead of only name and pricing, so edits to those fields are no longer silently omitted from the activity feed. The audit row no longer stores the raw product payload, keeping unbounded upstream data out of the activity log.
- Murph no longer stops a conversation when an account reaches its daily usage
- budget. During the beta we meter usage and watch instead of blocking, so a
- seller or buyer is never cut off mid-task. A high runaway-safety limit still
- guards against abuse or a stuck loop.
- The seller rail’s “Get ready to sell” now opens the coached go-live checklist (the Setup widget with a highlighted “do this next” step and a walk-me-through option) instead of the older state drawer — so the most important setup row lands a new seller on the guided surface.
- The “connect an inventory source” and “ad-server source” go-live checks now name the actual ad servers (Google Ad Manager, FreeWheel, SpringServe) and the sales-agent option in their guidance. This makes the step clearer for a new seller and routes Murph’s “walk me through it” hand-off to the GAM-access documentation, so the most common setup question is answered at the moment of friction.
- Reorganize the seller agent’s navigation rail into three teaching sections — Set up, Merchandise, and Operate — with plain-language labels, so a new publisher can see the whole journey at a glance. Renames the opaque rows (“Demand inbox” → “Demand”, “Selling terms” → “Pricing & terms”, “Source sales agent” → “Sales agent”, “Source ad server”/“Inventory” → “Ad server”, “Go live” → “Get ready to sell”, and more), splits ad-server vs. sales-agent connection into distinct rows, and surfaces Acceptance policy, Merchandising rules, and a Components coaching entry directly in the rail.
- Added a Setup view to the seller chat experience. Ask Murph “is my storefront set up?” (or use
/setup) to see your go-live checklist — the single most important next step is highlighted, required steps come first, and every step can be done with Murph right there. “Walk me through it” hands the whole sequence to your agent. - Renamed the app support menu status link to “Scope3 service status”.
- The not-traffickable product check now covers every connected source’s synced catalog — not just third-party sales agents — and runs even when a storefront also has a managed ad server, so any source with products that can’t be trafficked (e.g. video missing a duration) is caught and named per source. Managed ad-server sources continue to be covered by their own setup checklist.
2.173.0 — June 21, 2026 at 4:58 AM UTC
- Creative changes now appear in your activity feed: creating, updating, archiving, and assigning or removing a creative to/from a campaign — and bulk creative updates — are each recorded with who did it and when. Previously the creative service wrote no activity at all.
- More seller actions now appear in your activity feed: creating a storefront, resetting brand verification, linking an agent as an inventory source, and approving or rejecting an ad-server (ESA) workflow are each recorded with who did it and when. This clears the last of the known audit-coverage gaps.
- Your activity log is now reachable from chat: type
/activityin the composer to open it. The log opens on recent account-wide activity instead of requiring you to pick an advertiser and campaign first — those filters now refine the view rather than gate it. The buyer Diagnostics shortcut also now opens the diagnostics view as intended. - Storefront API calls scoped to your own storefront (listing products, demand signals, the dashboard summary, and responding to a demand signal) no longer require you to pass a
storefrontId— the server resolves your storefront from your account. A wrong or guessed id is corrected automatically, and calling before you have a storefront returns a clear “start onboarding first” message instead of a confusing missing-parameter error. Inventory-sourceexecutionTypeandstatusvalues are documented as the uppercase enums the API requires (AGENT,PENDING/ACTIVE/DISABLED). - Added a Dashboard view to the seller chat experience. Ask Murph “how am I doing?” (or use
/dashboard) to open your storefront performance at a glance — win rate, booked budget, delivery, how your agent’s negotiation postures convert, and what to improve — without leaving chat. - Storefronts now flag go-live blockers when a product cannot be trafficked (for example, a video product missing its duration). The blocker is surfaced the moment you ask your storefront agent about capabilities, and it raises a notification (with email for opted-in operators) — naming how many and which products are affected — so you know your storefront is not live and exactly what to fix.
2.172.0 — June 20, 2026 at 3:21 PM UTC
- Added an in-chat Acceptance Policy view to the seller Murph experience — see your storefront’s acceptance policy (which advertisers, categories, and creatives your agent accepts or declines) with version history, and ask Murph to summarize, explain, or update it.
- Added an in-chat Activity Log for storefronts. Ask your agent to “show the activity log” (or type
/activity) to open a read-only feed of recent changes — each entry shows what changed, whether it was a person, the agent, or automation, and whether the action succeeded, was denied, or was blocked. You can also just ask “who changed this?”, “what changed yesterday?”, or “what got blocked?” and get the answer in chat. - Added an Approvals view to the seller chat experience. Ask Murph for “Approvals” (or use
/approvals) to see your review-gate settings alongside anything waiting on you — pending creative reviews and pending media-buy approvals — and hand decisions or gate changes back to Murph in chat. - Activity feed entries now record how each action was initiated. A new
actorOriginfield on buyer and storefront audit logs distinguishes a change made directly by a person (human) from one the Murph agent made on a user’s behalf (agent), as well asautonomousandsystemactions. The activity timeline shows a “via Murph” badge on agent-initiated changes so you can tell at a glance who — or what — made a change. - Added an in-chat Business Profile view to the seller Murph experience — see your storefront’s channels, regions, verticals, properties, and the pitch buyers see, and ask Murph to update it.
- Added an in-chat Merchandising Rules view to the seller Murph experience — see how your agent turns your inventory into sellable products (your operating instructions), with version history, and ask Murph to summarize or update them.
- Sellers now choose the country their business is based in when connecting a Stripe payout account. This country is set when the account is created and determines the payout/settlement currency (for example, a seller in Germany settles in EUR), so it can no longer default to US. Provisioning a Stripe Connect account now requires a
country(ISO 3166-1 alpha-2) value, restricted to countries Stripe supports for payouts; an unsupported country returns a clear validation error instead of a generic failure. - The seller Approvals view is now a place to do the work. Open Approvals (or
/approvals) to drill into a pending creative review or media-buy approval, see how it was pre-screened (the policy/brand/readiness verdict and what was flagged), preview hosted creatives inline, and approve or reject it with a note — without leaving the view. Changes to live media buys are flagged; approving a flagged item asks for a deliberate confirm; and when an approval can’t reach your ad server you now get the specific reason (and the item stays pending to retry) instead of a generic error. Approval automation settings now live with your other policies rather than in the queue. - Advertiser edits, archives, and restores — and attaching a discovery run to a campaign — now appear in your activity feed, with who made the change and when. Previously only advertiser and campaign creation was recorded.
- Closed two gaps where changes weren’t reaching the activity log. Creating an advertiser is now recorded (it previously left no audit entry, so “who created this advertiser?” had no answer), and a new
ADVERTISERresource type is filterable in the activity feed. Storefront product changes — including floor-price edits — are now recorded as updates with a before/after diff instead of being logged as a fresh “create” with no history; identical re-saves are no longer logged at all, so routine discovery refreshes don’t add noise. - Managed ad-server source changes and billing changes now appear in the activity log. Connecting, reconfiguring, rotating credentials for, deactivating, and reactivating a managed ad-server source, plus connecting a payout account and updating billing terms, are each recorded — so operators can see who changed what. Credentials and Stripe identifiers (account ids, onboarding links, client secrets, tokens) are never written to the log.
- Product discovery now only surfaces products priced in the storefront’s settlement currency. A storefront sells in one currency and can’t settle a buy in another, so products (Chef-composed or passed through from sources) with no pricing option in the storefront’s currency are no longer returned, and off-currency pricing options are dropped from the products that remain. Storefronts that have not yet confirmed a settlement currency are unaffected.
- The buyer and storefront activity feeds can now be filtered by who and how. New query parameters on the audit-log endpoints let you narrow to a specific actor (
actorUserId/actorUserEmail), to how a change was initiated (actorOrigin, e.g. only changes the Murph agent made), to a single resource (resourceId), and to specific actions (actions). This makes questions like “what did the agent change last week?”, “who deleted this?”, and “what has this user done?” answerable directly. Murph’s recent-activity lookup also now reports the origin and the before/after of each change, supports an end-of-window bound, and returns more rows. - Setting credentials now opens the sales-agent management surface (where credentials live alongside setup and diagnostics) instead of a separate standalone credentials screen that showed “no sources found”. The seller rail’s sales-agent entry opens the same consolidated widget.
- Connecting an ad server no longer shows a server error on the Signals or Creative-formats tabs when the upstream ad-server adapter is briefly unavailable or doesn’t advertise those capabilities. Capability and creative-format probes now degrade gracefully to an “unavailable / not supported yet” state instead of failing the whole source view, so inventory, signals, and formats stay usable independently.
- Simplified seller source-management entry points around Source ad server and Source sales agent, with credentials, setup checks, and diagnostics managed in the sales-agent source widget.
- Media buy responses now populate creative formats for composed (storefront-curated) products, which previously came back empty because composed products aren’t in the raw product cache. The media buy list additionally fills in the product name and publisher for composed products. These are resolved from the storefront’s composition data and product index.
- Fixed media buy execution against embedded storefront sales agents whose in-process ADCP endpoints are stored as relative paths.
- Clarified that a storefront settles in one currency, which must match its connected Stripe payout account. The go-live currency copy no longer implies the currency is derived from your ad server, and the storefront agent now explains that clearing a second currency means setting up a second storefront rather than adding a currency to an existing one.
- The activity log now records mutation attempts that did not take effect, not just successful changes. Actions blocked by a permission or Terms-of-Service gate are recorded as “denied” and ones that errored mid-execution as “failed”, so you can answer “who tried to change this and why didn’t it stick” — including the “I didn’t do that” dispute case. The buyer and storefront audit-log endpoints accept a new
outcomefilter; by default the feed still shows only changes that succeeded, and passingoutcome=denied(orfailed) surfaces the attempts across all resource types. Murph’s recent-activity lookup can report and filter on the outcome too. - Sellers can now ask Murph about their storefront’s activity log — who changed the storefront config, billing, or a managed ad-server source (connect, reconfigure, rotate credentials, deactivate), whether it was a person or the agent, and what got blocked or failed — over a time window. Connecting a Stripe payout account now appears in the seller activity feed.
- Advertisers are now single-currency.
primaryCurrencyis required when creating an advertiser, and it can only be changed while the advertiser has no campaigns — once the first campaign is created the currency is locked. Every campaign is created in its advertiser’s currency: ifbudget.currencyis supplied on campaign creation it must match the advertiser’s currency, otherwise the advertiser’s currency is used. - Source management is clearer and more self-serve in Murph and the seller widgets:
- Murph now explains the difference between an ad server source and a sales agent source and which you need, instead of dead-ending on the question.
- “Debug my sales agent” no longer silently assumes your ad server — when you have both, Murph asks which one, then diagnoses the right source (live connection probe, ranked likely causes, and next steps for an external agent; sync health for an ad server).
- The ad-server source widget adds a Health view that lists every blocking and warning issue with the exact next action — including a one-click Set default advertiser fix for the most common go-live blocker — and now consistently calls it your “ad server” (not “ESA”).
- The sales-agent source widget can now connect a new external AdCP agent directly (name, endpoint, protocol, credentials) instead of leaving you with nowhere to start.
- Opening a source widget now previews what you can do next instead of a bare “Opening…”.
- Ensured approved storefront creatives forwarded to third-party inventory sources register callback webhooks when asynchronous source-side review is available.
- Storefront media buys are now validated against the storefront’s settlement currency. A
create_media_buywhose stated budget currency differs from the storefront’s confirmed currency is rejected with anINVALID_REQUEST(currency_mismatch) error rather than silently accepted. A storefront clears in one currency — to transact in another currency, use a storefront that clears in it. Buys that omit a currency are unaffected and are treated as denominated in the storefront’s currency. - A storefront’s confirmed settlement currency is now verified against its connected Stripe payout account before go-live. The payout account’s settlement currency is captured when Stripe onboarding completes, and go-live is blocked if the storefront’s currency doesn’t match it — preventing payouts that would otherwise silently convert into a different currency.
- Campaign creation now accepts a
feeTypeofGROSSorNET(defaults toGROSS), and campaign pricing is resolved through the Pricing Engine.GROSSmeans the budget is the all-in total the customer pays and the Scope3 fee is carved out of it (media budget = budget − fee);NETmeans the budget is the media spend and the fee is added on top (media budget = budget; total paid = budget + fee). The fee is the same percentage of the budget either way, and the campaign’s total budget is stored unchanged.feeTypeis returned on the campaign and is immutable after creation. The pricing rate is pinned at creation and refreshed on each budget edit while the campaign is still a draft; once the campaign is live the rate is frozen and budget edits re-split at that pinned rate — so a rate-card change can never silently re-price a running campaign. Media buys always draw against the media budget, never the total budget. Media-buy and package budget updates are now validated against the campaign’s media budget — raising a media-buy budget past what the campaign can fund is rejected instead of silently over-allocating.
2.171.0 — June 19, 2026 at 1:58 PM UTC
- Improved campaign media-buy status responses to distinguish draft, pending creative review, upstream submission, and delivery states, and added read-only ESA media-buy diagnostics for verifying upstream persisted buy state.
- Allow Murph creative workflows to attach MP4 video files up to 50 MB and preserve creative dashboard deep links from account-level URLs.
- Added in-chat Test Runs and Selling Terms views to the seller Murph experience, restored direct Murph seller navigation, and opened inventory sources in the inventory setup widget.
2.170.0 — June 19, 2026 at 11:41 AM UTC
- Advertise AdCP 3.1 release negotiation on storefront agents and use the stable 3.1 client pin for external seller calls.
- Storefront get_products now honors pricing currency filters when returning pass-through source products.
- Added customer notifications for managed storefront sync issues that require reconnecting an ad server adapter.
- Added embedded sales agent webhook and buyer discovery cache diagnostics to ESA status and admin sync health, with clearer storefront product-authoring validation in Murph.
- Storefront media buy creation now echoes source-returned package status fields while preserving storefront product and package identifiers.
- Improved chat widgets so they use the available width by default and long Inventory Sources sync views remain scrollable.
- Storefront product discovery now preserves product-scoped signal targeting metadata returned by upstream sources.
- Storefront product discovery now preserves vendor metric reporting and optimization metadata returned by upstream sources.
2.169.0 — June 18, 2026 at 8:39 PM UTC
- Publisher discovery now follows redirects and the ads.txt
managerdomainfallback when resolvingadagents.json, so domains managed by a network (e.g. Raptive/CafeMedia) correctly surface their authorized agents and properties. - Murph can now set authentication credentials on an ADCP inventory source directly in chat through a secure credential form — basic auth and API key are entered inline, and OAuth sources get an Authorize button that opens the provider’s consent page. This replaces a storefront menu path that no longer existed. Open it with the
/source credentialscommand or by telling Murph you have credentials to provide. - Fixed a crash on
POST /api/v2/storefront/resolve-brandwhen a brand manifest from the AAO registry contained non-string field values (arrays, numbers). The advertiser-industry classifier now filters these out instead of throwing a TypeError.
2.168.0 — June 18, 2026 at 7:16 PM UTC
- Fixed creative format validation incorrectly rejecting raw video creatives for VAST video placements when the publisher’s format declared the video slot without an explicit asset type. These creatives can now be assigned to and kept on media buys for those placements.
2.167.0 — June 18, 2026 at 6:04 PM UTC
- Fixed Murph approval controls so pending storefront setup confirmations stay visible when a conversation is reopened and stale approvals no longer block follow-up setup.
- Fixed Murph wrongly interrupting unrelated actions (like filing a report) with an ad-server credential redirect, and pointed the secure credential link for FreeWheel and SpringServe setup at the working inventory-source screen.
- Storefront legacy links now open the matching Murph storefront surfaces.
- Route the buyer creative workspace root through Murph so all creative asset entry points share the dashboard surface.
- Seller inventory-source links now open the shared Murph diagnostics widget instead of a standalone legacy page.
- Legacy advertiser and supply discovery URLs now open the equivalent Murph buyer surfaces.
2.166.0 — June 18, 2026 at 3:51 PM UTC
- Added a source diagnostics MCP app for third-party sales agents and modular inventory sources, including tool-level latency, timeout, outcome, and next-step rollups that Murph and other MCP hosts can launch with “open diagnostics.”
- Fixed an error when approving an action in Murph (such as filing a report). Approvals
- now reliably go through instead of occasionally failing with a confirmation error.
- Route the buyer activity deep link through Murph while preserving the full campaign activity workflow.
- Route advertiser-scoped creative asset deep links through the Murph creative dashboard surface.
- Migrated legacy product URLs with equivalent Murph surfaces so planning briefs, reporting, supply browse, and buyer connections open inside the unified Murph surface instead of standalone pages.
- Added a
+menu and/commands to the Murph composer so launchable MCP widgets open from chat instead of static navigation. Sellers can open demand inbox, buyers, and sales-agent diagnostics from the composer, including/diagnosticsand/inventory sources.
2.165.0 — June 18, 2026 at 1:18 PM UTC
add_discovery_productsandapply_proposalnow report whether the discovery session is attached to a campaign. The response includescampaignBound, and when it isfalseacampaignWarningexplains why no campaign reflects the products: either the session was never attached to a campaign (passcampaignId, or run discovery withcampaignId, to bind it), or the campaign it was attached to has been archived (restore it, or passcampaignIdfor an active campaign). This removes the “add reported success but the campaign still shows 0 products” confusion.- Improved media buy creative validation errors so invalid video assets are reported as invalid requests instead of source availability failures.
2.164.0 — June 18, 2026 at 10:13 AM UTC
- Added an explicit Linear visibility status to Murph escalation artifacts so clients can distinguish unavailable Linear tickets from role-redacted ticket references.
- Added customer-facing guidance for connecting ad platform accounts, including recommended Meta, TikTok, Google Ads, and other platform access levels, and linked it from the Connections setup experience.
- Improved activity diffs so long brief-style updates remain readable.
- Buyers can now request
audioanddoohchannels indiscover_products. Both were previously rejected by schema validation even though the underlying ADCP layer already supported them. - When
discover_productsreturns zero results, the response now includes a specific reason - e.g. how many publishers were queried, how many were skipped and why, or whether no publisher connections are configured for the account. This prevents agents from blind-retrying identical calls. - Keep MCP connections alive during long-running tool calls. Tool calls that take several minutes to complete (such as product discovery against a slow sales agent) no longer get dropped by the connection idle timeout before the result is returned.
- Fixed Murph incorrectly redirecting to the secure credential form when explaining ad-server setup steps. Guidance like “you’ll need to provide your FreeWheel credentials to complete the setup” is no longer mistaken for an in-chat credential request, while Murph still redirects genuine attempts to paste passwords or tokens directly in Slack.
- Fixed DMA code-to-market-name resolution so the buyer agent correctly identifies Nielsen DMA markets by name rather than relying on model memory.
- Fixed a bug where a campaign with a stranded DRAFT media buy (from a prior failed execution) could not be re-executed. The execute endpoint now bypasses the discovery session gate when DRAFT buys already exist, and the media-buy-status endpoint now surfaces DRAFT buys so they are visible rather than silently hidden.
- Fixed Murph starter prompt labels so they use the selected interface language instead of falling back to English.
- Ask Murph can now show you a “Your requests” panel — the issues and requests you’ve escalated to the Scope3 team, each with its current status, how long ago it was filed, and what’s happening next. Ask Murph to show your requests (or use the escalations shortcut) and the panel renders right in the chat, covering everything from open to resolved.
- Fixed product discovery only returning the first page of a sales agent’s catalog. Both catalog enumeration and buyer product discovery now retrieve the full catalog by following
get_productspagination, so products on later pages (for example CTV, interstitial, or banner inventory listed after a first page of other formats) are discoverable and available for deals. Large catalogs that previously truncated at the first page are now returned in full. - Make a curator’s media buy from a pool seller work end to end. Two gaps blocked the in-process buy that only a real (un-stubbed) buy exercised: the bridge’s SDK client refused
create_media_buybecause a storefront advertises itself as a discovery agent (its capabilities null out themedia_buyprotocol), and the curator’s forward only accepted acompletedupstream status and rejected thepending_start(accepted-but-trafficking) state a storefront seller returns. The bridge now skips the pre-flight feature gate for the trusted in-process seller, and the forward accepts a linked seller’s create whenever it returns a media buy id. Adds an end-to-end real-Postgres test of the full cascade (curator → bridge → seller → modular terminal) with both spread-ledger legs booked.
2.163.0 — June 17, 2026 at 11:57 PM UTC
- Added selection and refinement actions to buyer starter proposal cards, and surfaced seller-side demand coverage in storefront readiness.
- Added seller documentation for diagnosing third-party sales-agent inventory sources, including source health, recent AdCP activity, and buyer discovery debug output.
- Brand resolution now classifies each resolved brand into a canonical AdCP advertiser-industry code (e.g. a steakhouse →
food_beverage.restaurants), surfaced asadvertiserIndustryon the brand manifest. Brands now share one category vocabulary across the platform and with AdCP, so a brand.json can advertise its canonical industry. This is the foundation for category-based starter briefs. - Standardized the buyer dashboard page headers. Every section — Campaigns, Creatives, Data sources, Reporting, and Activity — now renders a consistent header at the correct size, with each section’s controls in the header: Reporting’s date filters, Creatives’ campaign filter, Data sources’ Catalogs/Conversions tabs, and Activity’s kind filter. Buyer page headers also stay pinned while scrolling, and the Planning Briefs page uses the standard page-header layout for a consistent title, description, and primary action.
- Storefront interchange is now an open marketplace pool. A curator storefront automatically discovers and composes wholesale inventory from every listed storefront whose offerings match the curator’s own channels — there is no per-storefront linking or approval step. A storefront participates simply by being listed in the marketplace, and a seller’s price floor and content policies are always enforced on every resale.
- Streamlined the storefront navigation. The rail is reordered around going live and daily demand, renamed for clarity (“Reporting”, “Agent training”), and Team and Billing moved into Settings to keep the rail focused on selling. Storefront testing now lives in the Demand inbox.
- Fixed a bug where multiple Anthropic API 500 errors from the same call site would each open a new GitHub issue instead of deduplicating onto a single issue. The Anthropic SDK embeds a unique
request_idin each error message, which was causing the error fingerprinter to generate a distinct hash per occurrence. - Fixed the activity feed rendering a campaign brief change one word per line. Long brief edits now show the new brief as a full-width paragraph instead of a cramped side-by-side diff.
- Customer account lists now include active child accounts accessible through parent administrator permissions.
- Fixed publisher authorization discovery so live authorization can clear stale verification results, and Murph checks specific seller domains with a fresh domain lookup instead of browsing cached catalogs.
- Corrected storefront setup documentation to use the canonical Interchange storefront agent URL and updated managed ESA publisher-property lookup to avoid treating ESA authorization checks as the source of truth.
- Fixed
PUT /storefrontrejecting a settlement-currency update with “At least one field must be provided to update”.defaultCurrency(andsupportedLanguages) were valid fields but were missing from the update body’s non-empty check, so sending onlydefaultCurrency— the call required to clear thecurrency_confirmedgo-live blocker — failed validation. These fields now satisfy the check, so a currency-only update works. Also documented the field in the storefront agent skill’s Update Storefront reference. - Fixed media buy status not updating for buys placed through a storefront. A storefront fans a single media buy out to multiple upstream sources, so its status is now rolled up from those per-source statuses rather than left stuck at “pending approval”. A buy that is live upstream now correctly reports as active, and reflects paused, rejected, completed, and other states the same way.
- Localized buyer activity filters, empty states, pagination copy, and invitation accept prompts.
- Localized advertiser management copy, table labels, advertiser dialogs, and archive/restore prompts.
- Localized buyer storefront connection copy, status labels, account prompts, feature controls, and notification preference labels.
- Localized Discover Supply table, page, note, and submit copy.
- Localized storefront account card metadata and archive dialog fallback copy.
- Localized storefront card preview fallback messages and Supply page empty states.
- Localized storefront card channel/status labels and Supply page filter copy.
- Localized storefront demand signal cards and locale-formatted their budget, flight, and fit details.
- Localized storefront drawer readiness, pricing, and performance summaries.
- Localized storefront drawer chat prompts for setup, readiness, approvals, catalog, and document-processing actions.
- Localized storefront test-run diagnostics and helper status labels.
- Localized storefront inventory and source status labels across source tiles, details, and catalog rows.
- Localized storefront inventory-source chooser, filters, empty states, and adapter connection labels.
- Localized storefront link request dialogs and inbound request actions.
- Localized storefront setup task controls and demand contact editing copy.
- Localized storefront setup task rows and translated their status, action, and sync-health copy.
- Localized the storefront state drawer, including setup guidance, source diagnostics, buyer invite actions, and document-processing details.
- Re-validating a publisher’s
adagents.jsonis now reliable when a fix has just gone live. If you publish or correct youradagents.jsonand product creation is still rejected as “not authorized”, you can ask the assistant to re-check your domain and it will re-read the live file, refresh authorization, and re-sync your properties so you can create products without an out-of-band support request. Storefront agent discovery also now self-heals a stale authorization flag when your liveadagents.jsonis valid, regardless of how many properties are already registered. - Murph campaign summaries now include stored campaign constraints, including AdCP geo metro targeting codes.
- Storefront interchange discovery now scopes the ambient wholesale pool by geo/region in addition to channel. A curator storefront discovers wholesale inventory from LISTED storefronts whose declared regions overlap its own (legacy region-code aliases are honored). Region scoping is lenient on the seller side: a storefront that has not declared regions stays discoverable everywhere — only a seller that explicitly serves non-overlapping regions is filtered out.
- Restored seller demand inbox and buyer management surfaces as MCP app widgets in the Murph chat shell.
- Brought the storefront chat experience in line with the buyer one: New chat and recent conversations are always visible in the rail, prompt suggestions now fill the composer (so you can add context before sending) instead of sending immediately, the chat input shows only in the chat view, and rail spacing, labels, and suggestion styling are tightened and consistent across buyer and seller.
- You can now delete a chat from Murph’s Recents list: hover a conversation, open the ”⋯” menu, and choose Delete chat. Deleting removes the chat from your sidebar right away. Behind the scenes the conversation is retained so support can review product issues, but it no longer appears anywhere in your view.
- The storefront overview now shows your realized margin and margin % alongside delivery metrics, so a curator can see resale profitability at a glance — what you charged buyers, minus what you paid sources — for the current period. Margin is reported in your primary settlement currency; it fills in once your media buys start delivering.
- The buyer assistant can now look up an operation’s exact request schema and a canonical example before calling it, so it gets field names and types right the first time instead of guessing. It also adds discovery products to a campaign through a verified workflow that confirms the campaign-facing product count actually rose — preventing a silent zero-count attach from being reported as success.
2.162.0 — June 16, 2026 at 6:58 PM UTC
- Fixed a media buy failing to save at execution when an inventory source returns tokenized product identifiers containing colons (e.g.
wh:<source>:<product>). The id validation now accepts the colon-delimited token format these sources use, so the buy completes instead of erroring with an “invalid format” message after the source already accepted it.
2.161.0 — June 16, 2026 at 5:20 PM UTC
- Added
GET /api/v2/storefront/reporting/margin— a curator’s resale P&L. It reports booked vs realized buy/sell/spread and margin %, rolled up buyer → media buy → package → source leg, so a storefront operator can see what it paid each source, what it charged its buyer, and the spread between them. Amounts are signed (a resale at a loss is shown, not hidden) and are reported per settlement currency, never summed across currencies. This is a cumulative as-of snapshot, scoped to the calling storefront. - When you create an advertiser from a domain, the brand profile shown for confirmation is now the exact profile that gets saved — a freshly built profile is briefly cached and reused at save time instead of being re-derived, so what you confirm is what you get.
- Brand resolution now builds a profile from a buyer’s own website when the brand isn’t in the registry. Previously a domain that wasn’t registered (most local, regional, and smaller brands) resolved to nothing; now we read the site’s declared metadata (name, logo, description), its page content, and — when a brand publishes one — its
/llms.txtsummary to fill in name, industry/vertical, tagline, audience, and tone, so the buyer still gets a co-branded experience and a personalized proposal. Harder-to-read or ambiguous sites are read more thoroughly, including additional pages. The profile is always shown for confirmation and is never saved until the buyer reviews it. - When creating an advertiser, a buyer can now look up their brand by domain and see a “here’s how I see you” confirmation card — logo, name, and industry/tagline resolved from the brand registry — before committing. A new
POST /api/v2/buyer/brands/resolveendpoint resolves a domain to a brand-confirmation card with no side effects; the buyer confirms by creating the advertiser as before. Unregistered domains return a friendly “we’ll create one when you save” state instead of an error. - Added a clear way to return from account settings to the main account screen.
- Restructured the Murph seller storefront surface so Dashboard and setup action areas are first-class left-rail widgets, added a go-live training dashboard for sellers, and fixed OAuth signup so new users reach signup reliably and remain signed in after completing it.
- Fixed an issue where a creative created or updated with a recognized format (such as VAST video) could be rejected when assigned to a new media buy. The canonical format is now inferred automatically, so these creatives attach without an extra step.
- Localized the storefront operating instructions tab.
- Localized the storefront ad-server connection dialog.
- Localized the storefront agent connection dialog.
- Localized the storefront AI usage reporting tab.
- Localized the storefront API access settings panel.
- Localized the storefront directory card modal.
- Localized the storefront communications settings panel.
- Localize storefront settings copy for state controls, brand identity, approvals, visibility, and regional settings.
- Localized the storefront inventory source detail dialog.
- Localized storefront inventory source status tiles.
- Localized the storefront single sign-on settings panel.
- Localize storefront team management copy, invite modal text, role labels, and membership auto-join settings.
- Fixed media buys to agent-backed storefront inventory sources being rejected with a “product not hydrated for account” error. The buyer’s brand is now forwarded consistently on both product discovery and the buy, so the source resolves the same account for both legs even when account sync is unavailable.
- Storefront product discovery and composition now transparently retry the underlying inventory source on transient connection failures (e.g. a brief upstream restart) instead of immediately surfacing a “service unavailable” error. Only idempotent reads are retried, with capped exponential backoff.
2.160.0 — June 16, 2026 at 8:31 AM UTC
- Creative assets now report their actual pixel dimensions (
width,height) in the manifest response for image and video files. Uploads are validated at creation time: awarningsarray on each asset surfaces filename-vs-actual mismatches (e.g. a file named300x250.pngthat is actually 600x500) and flags unusually small assets auto-assigned as the primary creative. When a media buy targets a format with explicit pixel requirements, those dimensions are also verified at assignment time. - Added HTTP Basic Auth support for external inventory sources. Publishers can now register inventory sources that use username/password credentials by specifying
authenticationType: 'BASIC_AUTH'withauth: { type: 'basic', username: '...', password: '...' }. - Completed HTTP Basic Auth support for storefront inventory source registration, UI configuration, polling clients, and local end-to-end validation.
- Fixed create_media_buy failing with PRODUCT_NOT_FOUND (“not hydrated for account … call get_products first”) when forwarding to a pass-through sales agent. The buy now syncs and forwards the same account the get_products discovery leg established, so the source resolves the buy against the account its products were hydrated under instead of a different one.
- Localized activity feed labels and controls, including locale-aware activity timestamps and campaign budget details.
- Localized the buyer planning brief list, detail view, response cards, and sharing dialog.
- Localized proposal cards and storefront media buy approval review surfaces, including locale-aware budget and submission date formatting.
- Localized the storefront proposal queue and proposal code composition flow.
- Add a centralized seller dashboard summary endpoint and wire the Closer widget to use it for buyer brief closing analytics.
2.159.0 — June 15, 2026 at 7:03 PM UTC
- Expanded reviewed UI translation catalogs and added safeguards for new localized UI copy.
- Murph now treats portfolio seller onboarding and avails intake as explicit storefront setup flows, with checklist guidance for missing seller materials before inventory can be loaded.
2.158.0 — June 15, 2026 at 6:40 PM UTC
- A buyer sponsored into a storefront now lands on a bespoke proposal — “here’s what can do for you” — instead of a blank planning brief. A new
GET /api/v2/buyer/proposalsendpoint runs a brief-less product discovery scoped to the buyer (confined to the sponsor’s storefront for a sponsored buyer) and returns the resulting media-plan proposals, and the buyer home renders them as a card grid (plan, why it fits, placements, budget guidance). Selecting a proposal carries it into the chat to set up. Buyers with no advertiser yet, or storefronts whose agents don’t return plans, degrade gracefully to the co-branded home. - Murph can now draft a concrete avails-feed request and CSV template when seller-provided material is market context rather than actual sellable availability rows.
- Fixed “Service token with ID 0 not found” error when deleting API keys from the UI.
- Fixed product discovery returning no results from strict sales agents. Outbound get_products requests now send only the brand identity (domain and brand id), matching the behavior already applied to create_media_buy and sync_accounts.
- Storefront modular avails feeds can now preview and commit raw seller rows from CSV text, JSON text, or spreadsheet-like row objects before publishing updated availability.
- Murph now distinguishes seller market summaries from actual avails feeds and asks for real sellable inventory rows before committing modular feed updates.
2.157.0 — June 15, 2026 at 2:43 PM UTC
- Catalog sync responses and catalog listings now expose feed health, freshness, version summaries, and item-change summary fields. Catalogs can also store deterministic transform definitions that turn feed items into campaign groups, creative prompt cache keys, budget hints, and backend-inferred seller sharing plans; syncs with an active transform automatically generate a latest activation plan. Item-level catalog changes remain internal to support catalog-driven campaign, creative, and seller re-syndication workflows.
- Creative collections now fan out member creatives into campaign assignments on attach, respecting the format_kind upgrade gate. Added advertiser-scoped collection endpoints (
GET/POST /advertisers/:advertiserId/creative-collections) andowner_scopefield on collection summaries. - Added locale-aware Murph preference plumbing, reviewed core-language UI catalogs, and a glossary-aware translation workflow for seller-facing Murph actions.
- Added a storefront demand inbox: every buyer brief sent to your storefront, how your agent responded, and the commercial outcome.
GET /api/v2/storefront/intelligence-runsnow accepts abuyingModefilter (brief,wholesale,refine) and acommercialResultfilter (booked— forwarded upstream or delivering;pending— awaiting your acceptance-policy approval;rejected) so you can pull just the demand that converted, the demand still waiting on your sign-off, or the demand that didn’t — and each run carries its qualification reason and composed-product explanation. - Added a buyer MCPUI setup widget and workspace launcher for registering advertiser event sources with expert-run setup, integration mapping metadata, basic ingestion health, and alignment with the shared ADCP event taxonomy.
- Fixed the buyer Ask Murph landing page so it no longer uses seller Merchandising Agent naming.
- Fixed product discovery returning no results from sales agents pinned to AdCP 3.0. Discovery get_products calls no longer attach a discovery webhook (push_notification_config) when the client is below AdCP 3.1; results are retrieved synchronously via polling instead.
- Fixed media buy execution and account sync failing against sales agents that strictly validate the brand field. Outbound create_media_buy and sync_accounts requests now send only the brand identity (domain and brand id); brand-kit and other inline brand overrides are resolved by the seller from the brand’s published brand.json.
- Fixed Murph handing out broken ad-server credential-connection links outside of Slack. Links now always point at the configured storefront domain so the secure FreeWheel/SpringServe credential form is reachable.
- Campaign-level postal-code guardrails now merge correctly with the country-local postal area shape: the country is preserved and postal codes are no longer merged across different countries that share a postal system. Targeting a single country’s postal codes (e.g. South Africa) through a campaign guardrail now produces valid, country-scoped targeting.
- Storefront
update_media_buyis more honest when a multi-source buy only partially applies: if some sources accept the update and others reject it, the storefront now returns an error with per-source detail instead of reporting a clean success for a half-updated buy. Budget changes that the storefront cannot parse (for example a non-numeric amount) now require seller approval rather than being auto-forwarded, and a buyer’s push-notification callback config is no longer forwarded to upstream sources. - Fixed storefront media-buy updates so mutable fields are forwarded to inventory sources, material updates enter seller approval before taking effect, and pending update tasks emit terminal webhooks.
- Storefront
update_media_buynow forwards each change to the correct source instead of broadcasting the buyer’s full update to every source. Per source, the storefront keeps only that source’s packages (translated to the upstream package IDs) — each package carrying its own budget — and passes through lifecycle and flight changes (pause/resume, cancel, start/end, targeting). This fixes over-committing on multi-source media buys, where every source previously received every package. - Added an opt-in FreeWheel modular inventory source setting that attempts campaign, insertion order, and placement execution automatically while falling back to the source work queue when execution cannot complete.
- The capability gate that rejects unsupported targeting on ROUTED media buys now covers metro-area systems (
geo_metros) in addition to postal codes, and is structured as a generic per-dimension registry so future targeting dimensions are covered without bespoke wiring. Behavior is unchanged for postal and for any seller that does not declare a given dimension (fail-open). - Extended the seller dashboard spec with contract metadata, data sources, metric definitions, data status, and the Closer widget for seller brief outcomes.
- The identity-match targeting feed now accepts root-relative seller agent endpoints (e.g. platform-hosted storefronts) in addition to absolute URLs, so packages backed by hosted storefronts are no longer dropped from the feed.
- Storefront sales agents now declare postal-code targeting per country (ISO 3166-1) and translate buyer-supplied country-local postal codes into each platform’s native geo targeting. Snap and Meta read the buyer’s
geo_postal_areas(previously dropped) and emit country-scoped postal targeting; Reddit no longer advertises postal targeting it cannot honor. Declared postal support remains US-only pending per-country platform verification. - Storefront-to-storefront buying is now end-to-end: a curator storefront with an ACTIVE link can place, update, and track a media buy against a linked seller storefront’s inventory. Create/update/delivery forward in-process to the seller, the seller’s manual-approval responses are reconciled automatically, and the buyer-facing status rolls up across linked and direct sources. A reach-fence restricts the linked connection to buyer operations only, the loop/depth guard and call-time link-active recheck extend to every mutating call, and the seller is never disclosed to the buyer.
- Added seller-facing endpoints and storefront controls for modular inventory source work items.
- Improved buyer catalog refresh and activation history so feed updates show clearer downstream impact and seller delivery readiness.
- Improved buyer catalog feed visibility with recent refresh and fan-out history in catalog responses.
- Murph no longer pauses ESA product creation when a publisher domain has no
adagents.json/ AAO record. AAO publication remains a separate, optional- setup step in the business-profile flow — operators can author products
- immediately and add AAO authorization on their own timeline.
- A buyer sponsored into a storefront now enters a co-branded experience scoped to that sponsor. A new
GET /api/v2/buyer/scopeendpoint surfaces the sponsoring storefront (name, branding, channels, regions, and account status), the buyer home and shell are framed in the sponsor’s brand, and Murph speaks in the sponsor’s voice — scoping guidance and starter actions to advertising through that storefront. While an account is awaiting the storefront’s approval (or suspended), the home and Murph explain the status and steer toward setup instead of buys that can’t go through yet. Ordinary marketplace buyers are unaffected. - Storefronts can now decline buyer briefs that clearly don’t match what they sell or violate their acceptance policy, before composing products — cutting wasted composition cost and capping buyer-driven spend. Fit is judged from the storefront’s actual inventory (its packages, channels, regions, and verticals); policy is judged from its acceptance policy. If you set an acceptance policy, briefs that violate it are declined automatically. Buyers receive a standard “no matching products” response — the seller’s reasons are never exposed. Every incoming brief is recorded with its outcome (responded / declined for fit / declined for policy), filterable via
GET /api/v2/storefront/intelligence-runs?disposition=..., so sellers can see exactly which briefs they’re winning and missing. This applies to every configured storefront, and the qualifier fails open (composes) on any error so a fault never silently turns away demand. - The storefront intelligence-runs list endpoint gains a
qquery parameter for case-insensitive brief search, alongside the existingdispositionfilter:GET /api/v2/storefront/intelligence-runs?disposition=declined_fit&q=fintech. Find the demand you’re winning and missing by searching brief text and filtering by outcome. get_media_buy_deliverynow reports a real, rolled-up status for a media buy that spans multiple sources, instead of always returningpending_start. The status reflects the worst material leg — a rejected or unreachable source is never hidden behind a delivering one — and per-source problems (a refused leg, a source that could not be reached) are listed in the responseerrorsarray. When no source returns observable delivery, the call returns aSERVICE_UNAVAILABLEerror rather than zeroed totals under a misleading status.get_media_buysnow reports a real, rolled-up status for each media buy instead of always returningpending_start. A background reconciler keeps each source’s upstream status fresh, and the list folds the per-source statuses into one buyer-facing status — fail-visible, so a rejected or unreachable source is never hidden behind a delivering one. The list is cached for cheapness;get_media_buy_deliveryremains the live, authoritative current status.- Added structured buyer brand context to planning briefs and storefront proposals, and forwarded storefront product selectors through live passthrough discovery.
- Offering-based postal targeting now honors each offering’s country. Previously, postal codes supplied via an offering’s
geo_targetswere always targeted in the US — a non-US offering’s postal codes were silently mis-targeted. Offerings now carry country-aware postal areas (geo_targets.postal_areas), and the legacy country-lesspostal_codesfield is wrapped using the offering’s country (falling back to US only when no country is known). On Meta, package-level targeting supplied by the buyer is also preserved when an offering adds its own geo, instead of being dropped. - Storefront MCP connections now stay reliable across multiple server instances. A follow-up request that lands on a different instance than the one that opened the session is transparently recovered instead of intermittently failing, matching the behavior of the buyer and creative MCP surfaces.
2.156.0 — June 14, 2026 at 3:08 AM UTC
- ROUTED media buys are now rejected at execution when the selected sales agent has not declared support for the requested postal-code targeting (
geo_postal_areas), instead of silently dropping the targeting or failing with an opaque seller error. The seller’s declared postal support is read fromget_adcp_capabilities.
2.155.0 — June 14, 2026 at 12:46 AM UTC
- Added storefront acceptance policies plus creative and media-buy policy evaluation so approval workflows can distinguish definitely-on-policy, definitely-off-policy, and human-escalation cases instead of relying on generic operating instructions.
- Optimization suggestions awaiting operator approval are now automatically expired when the underlying media buy is updated. Previously, an operator could approve a suggestion only to discover at apply time that the media buy had been edited and the suggestion was no longer valid. The expiry now happens at the moment the new media buy version becomes active.
- Fixed optimization suggestion apply flow so that when a media buy is updated between when a suggestion is produced and when it is applied, the suggestion is correctly handled based on whether the content actually changed. Stale pins where the underlying configuration is identical now retarget to the current version automatically; pins where the configuration has drifted are marked as expired with a clear reason. Suggestions that pre-date this change continue to use the prior strict-version-equality check.
- Deleting a creative manifest now succeeds even when the creative is actively synced to sales agents. Instead of returning an error, the creative is archived, unlinked from any media buys it was assigned to, and the removal is synced to those sales agents.
- Your Merchandising Agent now learns which negotiation strategy actually wins deals and leans into it. Its strategy recommendation favors the posture that has booked the most for you recently — but only once there’s enough evidence to trust (at least four runs that used it, and only if it’s actually converting). Your operating instructions and a buyer’s live signals still take precedence, and the reasoning is recorded with each run so you can see why a strategy was chosen. Below the evidence threshold, the agent falls back to its existing heuristics.
- Advertiser-scoped creative, discovery, and account-sync calls now use the advertiser’s linked brand reference so downstream partners receive the resolved brand identity consistently.
- Murph now publishes reviewed brand.json updates to the AAO community registry through the ADCP SDK registry client.
- Every storefront now starts with default selling behavior: the Merchandising Agent uses your wholesale products and signals to answer briefs as best as possible from the moment the storefront is created. Operating instructions no longer appear in the storefront panel or block going live — you refine how your agent sells by coaching Murph in plain language, and the readiness check now reads “Selling behavior.” Pricing stays separate throughout: wholesale rates come from your inventory sources (your embedded or third-party sales agent), and your rate card shapes buyer-facing pricing. The version history remains available on the operating instructions tab for audit.
- The storefront detail endpoint (
GET /api/v2/buyer/storefronts/:storefrontId) now includes anadcpCapabilitiesfield exposing which AdCP operations the underlying agent declares support for. Buyers can checksupportsUpdateMediaBuy,supportsCreateMediaBuy,supportsGetReporting,supportsSandbox,extensions,protocols, and reporting delivery methods before attempting calls, without needing to call the agent directly. ThecapabilitiesCachedAttimestamp indicates when the manifest was last refreshed from the agent. - Murph and buyer agents now explicitly warn that
budget.currencyis immutable after campaign creation and must always be confirmed with the user before callingcreate_campaign. This prevents campaigns from being silently created in the wrong currency (e.g., USD when EUR was requested), which required a full campaign recreate to fix. - Fixed a bug where creating a GAM advertiser via the storefront ESA endpoint (
POST /api/v2/storefront/esa/:id/gam/advertisers/ensure) failed with a validation error on the live path while the dry-run path succeeded. The upstream service returns a numeric advertiser ID on real creation; the response schema now accepts both string and numeric IDs and coerces them to strings. - Updated Google Ads offline conversion logging to use the Google Data Manager API.
- Added modular inventory source controls for operator-confirmed avails feeds, reservations, lifecycle readiness, demo Cadent handoff preparation, booking release, and source-side work queues.
- Storefront diagnostics now live with the storefront. Each inventory source’s drill-in shows its recent ADCP calls and status changes next to its health diagnostics, so a failing source carries its evidence with it. The seller navigation slims down to chat and history: the standalone Diagnostics and Dashboard pages are no longer in the seller nav (test runs live in “Test your storefront”, change history and activity are available by asking Murph), and the conversation-history sidebar starts collapsed.
- Before your Merchandising Agent is selling, the storefront panel now shows the journey instead of a console: the header counts what stands between you and your first buyer brief (“Two things stand between you and your first buyer brief.”), each open blocker is a numbered step you can tap to fix with Murph (with consequence framing — “No sources connected — your agent has nothing to sell yet”), and everything non-blocking is tucked into a single “How your agent represents you” section. The status chip now reads “Selling” / “Not selling yet”. Once the agent is selling, the panel becomes the health dashboard as before.
- Media buy execution failures against storefront agents now preserve the structured AdCP error envelope, including
details.per_source. When every inventory source rejects a media buy, the per-source errors appear in debug output (errors[].debug.response.adcpError) instead of being flattened to a single message string. - Your storefront now prices to value, not to cost. For every brief, the Merchandising Agent sets the price from what the brief is worth to that buyer — premium format, scarce audience, advertiser type, urgency, stated budget — bounded by your wholesale floors and any ceilings you’ve set, never anchored to a historical auction-clearing percentile. The old fallback percentile is retained only for explainability and no longer sets prices; Murph no longer asks you to choose one. Explicit rate-card targets still act as a value floor the agent can exceed for higher-value briefs, and wholesale rates continue to come from your inventory sources.
- The “Watch your agent sell” card now leads with reality: when buyer demand signals are queued for your storefront, the card shows the actual brief — buyer name, audience, geo, budget — and “Answer this brief” takes it straight to Murph. With no queued demand, briefs are generated from your business profile (your channels, regions, and verticals) instead of a generic pool. Before a storefront exists, the storefront panel now shows a single action — create your storefront — and sections appear only as they become real.
- Improved the storefront Merchandising Agent screen with clearer onboarding copy, a live seller performance dashboard, and cleaner action hierarchy.
- REST error responses with a 5xx status now return a generic message (“An internal error occurred…”) instead of the underlying error detail. Internal errors previously embedded the raw error string — which can include database/driver internals — into the response body; that detail is now logged server-side only. Intentional 4xx messages (validation, not-found, conflict) and the 503 retry message are unchanged.
- Seller analytics now breaks conversion down by the negotiation strategy your agent actually used. The
show_seller_analyticspayload includes apostureConversionrollup: per-posture run count, booked count, win rate, and booked budget, plus an adherence summary comparing how often your agent followed its recommended posture and whether following it converted better. This turns the per-run strategy capture into “which strategy wins deals” — the evidence base for tuning your selling terms. - Murph’s seller starter prompts now speak in selling verbs instead of setup verbs — “See my agent handle a brief”, “Train how I sell”, “Connect what I sell”, “Is my agent ready to sell?” — and the seller chat header reads “Train the agent that sells your inventory.”
- Murph now stays in the seller’s register when things break or go deep: connection failures are summarized in plain language with an offer to write up the technical details for your developers, ad-server objects keep the names operators use (never internal identifiers), and acronyms are expanded on first use. Copy refresh from the fresh-eyes audit: the example brief on the chat home is labeled “Example brief”, and the starter chips say “Show me my latest buyer briefs” and “What can my agent sell right now?”. The panel header no longer clips its collapse button in narrow layouts.
- The Merchandising Agent panel now has a “Selling terms” section showing the enforced facts your agent prices and gates on. Under “How it prices”, each rate-card rule shows its floor / target / ceiling by pricing model, marks enforced floors (“Hard floor”) versus advisory guidance, and names the brief it applies to. Under “Reviews & approvals”, your creative-review and media-buy approval gates are shown in plain language, with a one-tap “Change approvals” action. When you have no price rules, it says so plainly — your agent prices from your sources’ rates — with a one-tap “Set selling terms” action. Wholesale rates always come from your inventory sources; these rules shape the buyer-facing price.
- The inventory-source health indicator now tells the whole truth. A source no longer reads “healthy” while its connection is failing or degraded, while nothing has ever successfully synced or been called, or while its inventory list hasn’t been pulled — each of those states now downgrades the verdict, explains itself in the status tooltip, and marks the matching row in the source’s detail view.
- Storefront sellers can now see their AI usage by model over time in a usage dashboard.
- The storefront api_call tool now supports a named
operationfield (e.g.list_partner_agents,get_storefront,create_esa_connection), matching the buyer surface. Operation mode derives method and endpoint automatically, validates path parameters before dispatch, and rejects unknown operations and unexpected path params — so agents call storefront operations by name instead of constructing raw endpoint URLs. Raw method+endpoint mode still works as a fallback. - Sellers can now see how their agent is selling, broken down by negotiation strategy. A new
GET /api/v2/storefront/seller-analyticsendpoint returns the posture-conversion rollup — per-posture run count, booked count, win rate, and booked budget, plus how often the agent followed its recommended strategy and whether following it converted better. The Merchandising Agent rail surfaces this as a “How your agent is selling” section once the storefront is live, so the answer to “which strategy wins deals” lives on a durable surface, not just in chat. - Manual-approval media buys are now visible end-to-end. Storefront operators see pending media buys on the storefront homepage (live count) and can review, approve, or reject them on the new Media buy approvals page. Buyers can see which layer a
PENDING_APPROVALmedia buy is waiting at via the newpendingAtfield (storefront,salesagent, orunknown) on campaign media buys. Executing a campaign with no media buys to execute now returnsmediaBuysExecuted: 0withreason: no_media_buys_to_executeand no longer marks the campaign ACTIVE. The execute-campaign request body now rejects unknown fields with a 400 that names them. - The seller chat home now opens with “Watch your agent sell”: a synthetic buyer brief your Merchandising Agent answers honestly from your actual setup — naming the missing supply when no inventory is connected, asking to be trained when selling rules are missing, and offering to run the brief once you’re live. “Train how I answer this” starts the coaching conversation with Murph; “Try another brief” rotates briefs, leading with the channels you sell.
2.154.1 — June 12, 2026 at 9:38 PM UTC
- Brand identity for product discovery, campaigns, and media buys is now always governed by the brand configured on the advertiser — it can no longer be set or overridden per request. Previously a
brand_manifestsent on a media buy could override the advertiser’s brand at execution time, producing a brand domain that didn’t match the one products were discovered under; valid products were then reported as unknown and the buy failed before reaching the sales agent. Media buy execution and product discovery now both resolve the brand solely from the advertiser, so the two can never disagree. Additionally, an advertiser must have a brand configured before product discovery can run or a campaign or media buy can be created: these actions now fail with a clear validation error directing you to add a brand to the advertiser first, instead of failing later with confusing errors.
2.154.0 — June 12, 2026 at 9:06 PM UTC
- Creative manifests now expose a
requires_upgradeboolean field. Legacy manifests (created without aformat_kind) haverequires_upgrade: trueand must be upgraded via the newPOST /campaigns/:campaignId/creatives/:creativeId/upgradeendpoint before they can be assigned to new media buys. Existing media buy assignments are unaffected. - Fixed optimization suggestion HIL expiry so that newer suggestions correctly supersede older pending suggestions for the same media buy, even when a media buy update created a new version between them.
- Fixed optimization-suggestion expiration so that a new suggestion only expires prior pending suggestions for the same media buy. Previously, a new suggestion on one media buy expired pending suggestions across all media buys in the campaign, leaving only one pending suggestion per campaign at any time.
- Storefront media-buy and creative approvals now surface consistently in the storefront-managed approval queue, execute against the underlying sales agent after approval, and send buyer ADCP webhooks when queued approvals resolve.
- Reframed the storefront setup panel around your Merchandising Agent. The panel header now shows how far the agent is from going live and names the next blocker, the readiness section is a blocker-led go-live checklist, brand identity and business profile are combined into a single “About your business” section, and sandbox test plans are now “Test your storefront”. Section summaries lead with what needs attention (for example “1 of 2 sources needs attention”) instead of raw counts. Every empty state now offers a one-click action — Connect inventory, Run a test brief, Build my profile, Draft my instructions — that drops a ready-made prompt into the Murph composer, and suggested prompts stay available above the composer mid-conversation instead of appearing only on a new chat.
- Media buys forwarded through a storefront to its inventory sources no longer fail client-side schema validation on creative asset values the seller would accept — most notably VAST tag URLs containing
[MACRO]placeholders (e.g. IAS[OMIDPARTNER]), which previously failedformat: "uri"validation before the request ever reached the source. The source now adjudicates its own request schema; validation issues are logged as warnings. - TikTok adapter now preserves the upstream HTTP status and response body when a request fails. Gateway errors and timeouts previously collapsed into an opaque “Upstream request failed” with no detail; they now surface the real HTTP status and a body snippet so failures are diagnosable.
- TikTok adapter now logs the upstream error code, message, and request ID when TikTok rejects a request with a structured error (e.g. budget below minimum, invalid parameter, account/permission issue). Previously these rejections were masked to a generic “Upstream request failed” with no detail in logs, making the actual cause impossible to diagnose.
2.153.0 — June 12, 2026 at 6:00 PM UTC
- Currency pickers (advertiser primary currency, planning brief budget) now offer every ISO 4217 currency instead of a fixed list of ten.
- Campaign currency now defaults to the advertiser’s primary currency when not specified on create (instead of hard-defaulting to USD); an explicit budget currency still takes precedence. Contract rate cards no longer constrain a campaign’s currency — only product pricing must match the campaign currency. An advertiser’s primary currency can now be changed at any time, even when existing campaigns use a different currency (each campaign keeps its own currency); the previous block has been removed. The advertiser creation form now prompts for the primary currency (defaulting to USD) so it is set explicitly during setup.
2.152.0 — June 12, 2026 at 5:08 PM UTC
- Fixed a bug where package budget and bid allocations were not persisted locally after an optimization suggestion was applied. Agents that don’t return
affected_packagesin theirupdate_media_buyresponse left the optimizer with stale baseline data for future runs. - Improved Google Ad Manager buyer-routing diagnostics for storefronts, including safer advertiser-create recovery guidance and warnings when an advertiser sync completes without reporting how many advertisers were retrieved.
- The Terms of Service update prompt now requires admins to tick a confirmation checkbox before the “Agree” button becomes active, so accepting updated terms on behalf of an organization is a deliberate two-step action rather than a single dismiss-the-popup click.
2.151.0 — June 12, 2026 at 2:40 PM UTC
- Adds an advertiser-level creative library. Creative manifests can now be created directly under an advertiser (without requiring a campaign), stored as reusable masters, and assigned to campaigns via new endpoints:
POST /advertisers/:id/creatives/create- create an advertiser-level creative masterGET /advertisers/:id/creatives- list the advertiser’s creative libraryPOST /advertisers/:id/creatives/:creativeId/campaigns- assign a master to a campaignDELETE /advertisers/:id/creatives/:creativeId/campaigns/:campaignId- remove a campaign assignment- Existing campaign-scoped creative endpoints are unchanged.
- Child accounts can now create campaigns using their parent organization’s contract pricing. Previously, creating a campaign from a child account failed with “No active contract found for customer” even when the parent organization had an active contract.
2.150.1 — June 12, 2026 at 1:38 PM UTC
- Capability-mismatch errors (
CAPABILITY_NOT_SUPPORTED) from update operations are now classified ascorrectableand include suggestions naming the specific actions the sales agent does not support (for exampleupdate_pacing), so you can remove the unsupported field(s) and retry. Previously they were classified astransientwith no guidance, which could prompt repeated identical retries of a request that can never succeed as-is.
2.150.0 — June 12, 2026 at 1:21 PM UTC
- Fixed storefront inventory source assessments so AdCP 3.0 agents that support signals are probed with a schema-valid signals discovery request instead of being marked unsupported before a request is sent.
- Fixed product discovery returning zero products from storefronts whose connected inventory source requires a buyer account. The buyer account is now passed through when discovery runs against an in-process storefront agent.
- Improved buyer campaign creation guidance so explicitly requested budget currencies are preserved when campaigns are created.
2.149.0 — June 12, 2026 at 2:38 AM UTC
- Added embedded sales agent signal management endpoints and an interactive widget for authoring mapped and composite signals.
- Allowed advertiser creation to register a reviewed brand identity when registry enrichment has no brand data.
- Buyers can now inspect the AdCP capability manifest for any storefront via
GET /api/v2/buyer/storefronts/:storefrontId/capabilities. Returns the supported operations, account resolution mode, billing types, and raw capability payload for each source agent — useful for diagnosing why an operation likeupdate_media_buymay be gated.
2.148.1 — June 11, 2026 at 10:12 PM UTC
- Fixed format_option_ref to use the AdCP 3.1 scope-discriminated union. Now accepts
scope:"publisher"(requirespublisher_domain) andscope:"product"(forbidspublisher_domain). Legacy flat input without ascopefield continues to work — scope is inferred frompublisher_domainpresence.
2.148.0 — June 11, 2026 at 8:40 PM UTC
- Clarified and implemented campaign-level budget reductions for executed media buys: lowering a campaign budget now proportionally reduces live package budgets when needed, while explicit package amounts remain available through the campaign update operation.
2.147.0 — June 11, 2026 at 6:44 PM UTC
- Operating instructions now make their effect clear during storefront setup. The storefront panel keeps a plain-language “what this does” line on the active instructions — that these rules drive every buyer request to decide what it offers, prices, and rejects — instead of collapsing to a bare version/status once a version is live. Murph also states the effect and next step while showing the assembled draft, before asking to activate.
- Tidied the embedded sales-agent catalog view in the storefront panel so its create-product and add-signal actions read as a consistent, matched pair.
- Fixed media buy pacing and budget queries to exclude pending update proposals, ensuring calculations use only the current active version of each media buy.
- Fixed a bug where Murph would abandon the GAM inventory-source provisioning flow after the operator confirmed the service-account grant. Murph now calls the provisioning endpoint immediately on confirmation instead of stopping the flow.
- Murph’s inventory selector widget now hands selections to chat without
- requiring a product name up front. After you click “Send selection to
- Murph,” Murph proposes a sensible default name based on your publisher
- and selectors and asks you to confirm or rename before validating or
- creating the product. Empty selection now shows a clear next-step
- prompt instead of a disabled form.
- A storefront can no longer be opened for transactions when it has no products available, so buyers only see “Active” storefronts they can actually buy from. Storefronts whose product availability cannot yet be confirmed are unaffected.
2.145.0 — June 11, 2026 at 3:14 PM UTC
- Added creative collections for grouping saved creatives and source assets, plus a bulk creative update operation for previewing and applying saved creative changes with canonical click-through URL updates that refresh creative tracking metadata.
- Allowed buyers to connect multiple provider accounts for the same official adapter storefront, such as separate Snap business accounts.
- Reducing campaign budget and active media buy budget in the same request now works correctly. Previously the validation checked the campaign budget against current allocations before applying the media buy changes, causing atomic reduce requests to fail with INSUFFICIENT_MEDIA_BUDGET even when the new budgets were consistent.
- Fixed an inventory-selector search error that affected storefronts on SpringServe (and would have affected any adapter whose selectors carry null
name,path, orstatus). Previously the response parser rejected the upstream payload as malformed; it now accepts the documented contract shape so SpringServe operators can browse cached selectors and author wholesale products. - Storefront inventory-source views no longer surface an embedded sales agent connection that has no ad server attached (and was never provisioned) as a separate source. These incomplete connections previously rendered as a second “Embedded” card next to the real ad-server connection — reading as a confusing duplicate — and inflated the inventory-source count and health summary. Embedded connections that have an ad server attached continue to appear, including ones that are still provisioning or have failed, so genuine setup work stays visible.
- Improved advertiser setup guidance so agents research brand domains before asking follow-up questions and avoid unnecessary optimization-mode prompts.
- Sped up the buyer storefronts list (
GET /api/v2/buyer/storefronts). Adapter-connection status is now resolved only for the storefronts on the requested page, so response time no longer grows with the total number of adapter storefronts a buyer has accumulated. - Storefront cards now show the status chip in the footer next to the “Visit website” action, giving the brand name the full card width so longer titles no longer wrap awkwardly.
2.143.0 — June 11, 2026 at 3:28 AM UTC
- Expanded the buyer Murph workspace rail with campaign and reporting prompt actions alongside creative and asset context.
- Buyer MCP API calls now mirror additional REST routes and filters, including campaign product lookup, data delivery credential revalidation, and measurement record date/geography filters.
- Improved creative-session MCPUI review data so buyer agents can render source assets, processed renditions, and shared creative review widgets more consistently.
- Expanded the buyer Murph workspace rail with creative, audience, catalog, and event prompt areas for advertiser setup and iteration workflows.
- Prevented discovery product selections from reporting success when the request is bound to a different campaign discovery session.
- Fixed Murph customer switching during multi-customer admin conversations so scoped writes can recover from customer ambiguity.
- Hid storefront sandbox test runs from the buyer creative workspace so the rail starts with creative work and advertiser assets.
- Murph customer list tools now use server-side filters, larger default pages, and explicit pagination metadata for advertiser, campaign, and sales-agent audits. Buyer advertisers can also be filtered by linked partner account before pagination.
2.142.0 — June 10, 2026 at 10:26 PM UTC
- Added the reactivate-campaign endpoint to the buyer API reference and made it callable as the
reactivate_campaignnamed operation.POST /api/v2/buyer/campaigns/{campaignId}/reactivatereactivates a paused campaign and cascades to its paused media buys, returning the per-media-buy outcome. Previously this endpoint existed but was undocumented and could not be invoked through the named-operation path. - Added clickable asset URLs, copy actions, and a gallery view to buyer creative asset management.
- Made Murph’s agent call trace control a compact footer icon instead of a full-width button below each message.
- Fixed formatted creative previews so they no longer reload the raw preview URL as a fallback.
2.141.0 — June 10, 2026 at 8:43 PM UTC
- Added an embedded sales agent inventory browser for searching, expanding, selecting ad-server selector hierarchies, and drafting wholesale products with observed ad sizes.
- The buyer storefront detail response (
GET /buyer/storefronts/:storefrontId) now reports a single storefront-level connection status instead of a per-sourcesources[]array. Each storefront returnsconnected(ready to transact),requiresCredentials(the buyer must register credentials first), andcustomerAccounts(the buyer’s registered accounts for the storefront, deduped across sources). Credentials are still registered against individual sources. - Improved Murph creative generation workflows with connected creative-adapter discovery, richer draft/refine/finalize guidance, locked asset and rendition handling, creative workspace previews, and current default image generation models.
- Scoped the Murph creative workspace brand and asset views to the selected advertiser.
2.140.0 — June 10, 2026 at 5:48 PM UTC
- Storefront operators can now invoke ADCP protocol tools directly on connected seller agents via
POST /api/v2/storefront/agents/{agentId}/invoke. Supported tools:get_products,create_media_buy,update_media_buy,get_media_buys,get_media_buy_delivery,get_adcp_capabilities. Use this to drive deal validation flows and test agent integrations end-to-end.
2.139.3 — June 10, 2026 at 4:30 PM UTC
- Fixed pacing period packages submitting a past start time when a period’s start date has already begun. The package start time is now clamped to the current time, enabling same-day execution.
- Buyer agent lookup and media-buy creation now reject a storefront’s underlying inventory-source agent. Buyers transact with the storefront, which routes to its sources; the source agents are not addressable directly.
- Product discovery now resolves inventory exclusively through storefronts. Buyers transact with the storefront, which routes to its underlying sources, instead of addressing those sources directly. Discovered products are attributed to the storefront that surfaced them.
2.139.1 — June 10, 2026 at 1:28 PM UTC
- Murph now surfaces the correct endpoints for browsing GAM ad units and placements when operators ask how to search inventory selectors on an ESA. Previously,
ask_about_storefront_capabilityreturned no guidance for selector search, causing 404s on incorrect paths.
2.139.0 — June 10, 2026 at 12:38 PM UTC
- Creative sessions now track derived asset renditions for locked product assets, including transparent cutouts and thumbnails, while preserving the original source asset.
- Murph can now compare uploaded or linked brand artifacts against current AAO brand.json state, upload logo images to AAO review, preview proposed updates, and publish confirmed brand.json updates to AAO for verified storefront operator domains.
- Fixed ESA connections not triggering initial reporting, pricing/availability, and signal coverage syncs after creation. These data streams now start automatically when a new embedded sales agent connection is provisioned.
- Fixed
GET /campaignsreturning 500 when any campaign in the list had an end date on or before its start date. The date-ordering validation is now applied only on create and update requests, not when reading persisted campaigns. - Murph now gives tighter, more scannable replies during multi-step flows like campaign setup: it leads with the decision you need to make instead of re-stating context it already covered, and keeps each turn focused on one thing.
- Surface embedded sales agent creative-format discovery errors instead of returning an empty format catalog when discovery is unavailable.
- Embedded sales agent signal listing now surfaces upstream failures instead of silently returning an empty list. Previously any error while fetching signals was swallowed and shown as “no signals”, which could make a populated signal catalog look empty. Genuine “not found / not wired” responses still degrade to an empty list.
2.138.0 — June 9, 2026 at 10:16 PM UTC
- Fixed an issue where pacing period dates on draft media buys could not be modified, even though draft buys have never been submitted to a publisher.
- Ask Murph’s side panels now adapt to the window width. As the window narrows, the conversation rail collapses to a slim strip first, then the state rail — each expanding into a panel that floats over the conversation when opened, instead of squeezing it. Wide windows keep both rails docked side by side; narrow windows stack the panels into a single column.
2.137.0 — June 9, 2026 at 7:55 PM UTC
- Refreshed the buyer test-runs rail in Ask Murph to match the storefront sandbox-test layout: scan the run list with at-a-glance status icons, then click a run to drill into its full diagnostics — execution trace, agent calls, and a copyable diagnostic trace. Failed or blocked runs can be sent straight to the chat composer for help.
- Improved creative session planning so image, audio, and video adapters expose generation strategy, composition strategy, and native capability metadata, with cleaner evaluator selection for modality-specific creative review.
- Creative sessions can now carry locked brand assets such as logos from advertiser brand data or chat uploads through draft, refinement, preview, and finalization.
- Property list creation with large domain counts no longer intermittently times out when the AAO registry is slow. The registry lookup phase is now bounded to 45 seconds; when that limit is reached, domains are classified as unresolved (the same behaviour as when the registry is unavailable).
- Storefronts that cannot serve products due to a missing operating-instructions ruleset are now automatically paused and the operator is notified. Buyers see “This storefront is temporarily unavailable” instead of an internal configuration message.
2.136.0 — June 9, 2026 at 4:54 PM UTC
- Added a Murph diagnostics workspace for test runs, third-party agent debug calls, and account change history.
- Audio creative sessions now preserve requested AudioStack ad duration/language, allow ElevenLabs voiceover drafts without requiring a separate image-generation key, and keep draft preview links stable across API instances.
- Fixed external signals catalog probes so AdCP 3.0 sellers are not sent unsupported wholesale signals requests.
- Keep the Ask Murph chat composer focused after sending a message, so you can keep typing without clicking back into the input.
- Murph now treats staying in character as a hard rule. When a tool fails, a validation step errors, or the customer must supply inputs Murph doesn’t hold, it states the limitation in Interchange terms and asks for what it needs instead of stepping back to describe its underlying model or deny being Murph.
2.135.0 — June 9, 2026 at 1:53 PM UTC
- Added a buyer creative iteration workflow with draft variant galleries, natural-language refinement, linked asset preservation, staged evaluator checks, creative previews for image/video/audio assets, and finalization into campaign creative manifests.
- Creative sessions now plan draft target formats and required manifest assets from a plain brief, can start AudioStack draft audio variants without raw adapter JSON, and treat fal.ai as the creative provider while using transformers such as FLUX for model-family selection.
- Buyer-stack sandbox test runs resolved by storefront name are now recorded against their storefront, so they appear in that storefront’s test history instead of being saved without a storefront.
- Corrected the discovery selected-products response schema: the per-product price field is now documented as
bidPrice(the value the API actually returns) instead ofcpm. The wire response was alwaysbidPrice; only the schema and generated reference were mislabeled. - Murph now always replies with a clear message when it can’t complete a request. Previously, if Murph ran out of tool steps mid-task (for example, while repeatedly probing for data that wasn’t available), it could return a blank “no answer” response and the user had to ask again. Murph now makes a final pass to explain what it found and why it’s stuck, falls back to a plain-language message if it still has nothing to say, and stops probing failed calls sooner so it spends its effort on a useful answer.
- Murph now offers publishers a faster path to going live. As soon as an ad server is connected, Murph can propose a set of run-of-site starter products — one per authorized site and creative size, with no targeting — that are sellable as-is as a non-guaranteed CPM auction, surfacing the ad server’s pricing guidance, and frames targeted packages, curated bundles, and guaranteed deals as later steps to grow revenue rather than go-live requirements.
- Storefront sandbox test plans now show every test run for that storefront, scoped per storefront instead of per signed-in user. Operators on the same account now see each other’s test runs, and a storefront’s drawer no longer mixes in runs from other storefronts on the account.
- Murph can now retrieve storefront catalogue and embedded sales agent wholesale product lists through the storefront API tool.
2.134.0 — June 8, 2026 at 10:18 PM UTC
- Fixed BYOK creative-family storefronts so ElevenLabs and Veo expose usable audio and video creative formats.
- Fixed
PayloadTooLargeError(413) onget_productswebhook callbacks. Seller product catalogs can exceed the previous 64KB body-size cap; the limit is now 5MB forget_productsand remains 64KB for all other task types. - Fixed generated creative manifests so image, audio, video, text, and URL assets include ADCP-required asset type metadata.
- Fixed generated creative manifests so text and URL assets include required delivery metadata.
- Fixed an issue where extra creative assets (not declared in a publisher’s format spec) were included in media buy submissions, causing publisher validators to reject the request.
- Fixed create_media_buy payloads for fixed-price CPM products to include an impressions count derived from budget and CPM rate.
- Removed unused incrementalityTestingEnabled field from advertiser measurement configuration.
- The storefront panel now surfaces sandbox buyer test-run diagnostics. Each run lists its status and a step-by-step execution trace, and you can drill into a run to see per-agent get_products results — including the upstream request and response summary for each agent. When a run fails or is blocked, an “Add to chat” shortcut sends a prefilled prompt (the failed steps and any suggested next actions) into Murph chat so you can resolve it without retyping the diagnostics.
- When a seller rejects a media buy update because it falls outside the original quote envelope, the error is now logged with the specific field(s) that triggered the rejection and actionable recovery guidance.
- Publishers can now declare base template format IDs (e.g.
display_html,video_vast) on their products and buyers’ sized creatives (e.g.display_300x250_html,video_vast_30s) will be correctly matched and assigned. Previously only exact format ID matches were accepted.
2.133.0 — June 8, 2026 at 2:17 PM UTC
- Added webhook callbacks for adapter-hosted creative review status transitions.
- Add storefront adapter support for Gemini, OpenAI, FLUX, Veo, and ElevenLabs creative generation families.
- Added MCP endpoints for family-filtered creative generation and preview tools.
- Buyers now land on the Ask Murph chat experience when opening their home page, keeping the same URL. Accounts without Ask Murph enabled continue to see the existing buyer home.
- Fixed embedded sales agent (ESA) product authoring so validation failures and product lists are reported accurately. A failed product validation now surfaces the specific offending field(s) instead of an opaque error, and the product list no longer renders empty when the upstream response can’t be read — it now reports a clear “couldn’t load” error so a real fault isn’t mistaken for “no products yet”.
- Fixed Murph occasionally rendering its closing question merged into the last bullet of a list instead of as its own line.
- Media buy creative updates now send inline package creatives to sales agents that do not support creative library sync. For library-only sellers, creative sync failures now fail the update synchronously instead of continuing with local-to-seller creative state drift. Malformed creative format agent URLs are rejected before inline creative delivery.
- Storefront adapter OAuth metadata now points developers to the agentic-api adapter documentation.
- Added storefront API controls for inspecting modular inventory source setup state and updating non-secret module configuration.
2.132.0 — June 5, 2026 at 7:00 PM UTC
- Added a seller-side preview discovery endpoint so storefront owners can test how buyer agents respond to a brief before going live.
- Fixed Murph losing access to buyer write tools (create advertiser, create campaign) mid-conversation when the router classifies short affirmative messages (“yes create it”, “go ahead”) as knowledge-only. Buyer API tools now remain available for any turn that follows a turn where they were already successfully used.
- Fixed product validation during campaign execution blocking media buy creation when sales agents return non-deterministic product IDs across calls. Products are now trusted as valid until their expiration date once discovered, eliminating the re-query that caused spurious “product not found” errors.
- Creative manifests now accept
format_kind(AdCP 3.1 canonical format kind, e.g.image_carousel) as an alternative toformat_idwhen creating or updating a manifest. Also addedformat_option_refto pin a manifest to a specific product format option viacapability_id, andindustry_identifiersto attach Ad-ID, ISCI, Clearcast clock, or IDcrea identifiers. All three fields are returned in manifest responses. - Format spec lookups now correctly handle parameterized (template) format IDs such as
{id: "display_static", width: 300, height: 250}. Dimension and duration parameters are applied as asset slot requirements in the resolved spec, and different parameterizations of the same template get distinct cache entries so validation results are accurate per variant. - Exposed managed GAM advertiser search, ensure, and default selection operations through the storefront MCP API so sellers can complete buyer-routing advertiser setup from chat.
- Data Delivery Outputs now substitute date placeholders in object-store path prefixes.
{YYYY},{MM},{DD}, and{HH}are filled from the delivery period start (UTC) and{DATA_DELIVERY_TYPE}from the Output’s data type, so a prefix likelld/{YYYY}/{MM}/{DD}/{HH}/{DATA_DELIVERY_TYPE}/writes tolld/2026/06/03/14/IMPRESSIONS/. Previously these tokens were written literally. - A
pathPrefixthat contains an unsupported placeholder (for example{YYYYMMDD}or{yyyy}) is now rejected when the Output is created or updated, instead of being silently written into the object key. Any text that is not a brace-delimited placeholder is still used verbatim. - The format detail endpoint (
GET /formats/:agentUrl/:formatId) now returnscapability_idalongsideformat_id. Use this value inbuild_creativeorPackageRequest.capability_ids[]to target a specific format option on a product.
2.131.0 — June 5, 2026 at 1:14 AM UTC
- Bumped the Storefront MCP AdCP SDK integration to include the latest task polling and authorization error behavior.
- Fixes an issue where storefront adapter media buys would fail after pod restarts when scoped product IDs couldn’t be resolved to their product config.
- Enabled async completion webhooks for storefront inventory source product discovery.
- Fixed submitted product discovery polling so account-scoped inventory sources can return completed get_products results.
- Improved third-party inventory discovery so async product lookups can register callbacks and complete reliably with AdCP 3.0 seller agents.
- Child customers now inherit alpha access over MCP when their parent organization is enrolled. Previously the MCP tool-listing and execution gates only matched a customer’s own ID, so child accounts saw an empty tool list and “access denied” even when their parent was opted in — REST and the web app already honored this inheritance.
- Fixed media-buy product validation so account-scoped sales agents receive advertiser account context when products are revalidated before execution.
- Fixed
refresh_agent_capabilitiesMCP tool surfacing a garbled error message when the remote agent is unreachable. The tool previously doubled the “Failed to refresh capabilities:” prefix; the message now surfaces cleanly. - Fixed a crash on the storefront Intelligence tab where the page failed to load with “Something Went Wrong” for runs that were skipped or that listed matched products.
- Send campaign creatives inline when creating media buys so sellers without a creative library can transact from buyer workflows.
- Added a Dashboard view to Ask Murph for storefront operators. The sidebar now offers a “Dashboard” entry that swaps the chat column for a tabbed surface — Overview, Reporting, Activity, and Merchandising engine — without leaving Murph, while the conversation sidebar stays in place.
- Updated the AdCP SDK used by buyer and storefront integrations to 9.0.0-beta.24.
2.130.0 — June 4, 2026 at 6:05 PM UTC
- When connecting Google Ad Manager, Murph now explains what access Scope3 needs, what it will not do, and what the granted role allows, then asks for explicit consent before walking a publisher through granting access to their network.
- Fixed access token cookie expiry being set to 1 hour regardless of the token’s actual lifetime. The cookie now expires when the JWT does, preventing unnecessary session interruptions for long-lived tokens.
- Wait for async product discovery results from third-party inventory sources before falling back or returning no products.
- Fixed credential rotation so stale credential secret references can be replaced when the existing secret cannot be updated.
- Fixed the assistant chat not scrolling to follow new messages when a conversation is started fresh. Auto-scroll now engages as soon as the first message is sent, keeping the latest reply and the “writing it up” indicator in view.
- OAuth token exchange and refresh now delegate to adapter-provided methods when available, enabling TikTok and other providers with non-standard OAuth flows. TikTok is now a refresh-supported provider.
- Flight date updates (start and end time) on active media buys no longer require seller pre-approval. The update is still dispatched to the seller via the normal ADCP flow.
- The assistant chat now keeps the latest message in view as you send and receive messages, automatically following the conversation. When you scroll up to read earlier messages it stays put instead of yanking you down, and a control lets you jump back to the latest. Auto-scrolling respects your reduced-motion preference.
- Multi-day delivery reports now produce correct per-day, per-package metrics in delivery reporting. Previously a report covering several days collapsed its package metrics onto a single day; reporting timeseries now attribute each day’s spend and impressions to the correct date.
- Refreshed the storefront cards to a clean, consistent look. Every card is now the same light surface with a thin brand-color accent on top, so a directory of storefronts reads as one cohesive set instead of a patchwork of differently colored headers. Each logo sits on a tile chosen to contrast it — dark or colored logos on a clean white tile, light/knockout logos on a dark tile drawn from the brand’s own colors (e.g. a white wordmark on the brand’s signature color) — so logos never wash out. Whether a logo is light or dark is resolved once when the brand is looked up — from the
brand.jsonlogos[].backgroundfield, the logo’s color tags (light/dark), or its filename — and persisted on the storefront, so cards render instantly with no per-card image processing.
2.129.0 — June 4, 2026 at 1:48 AM UTC
- Buyer storefront listings now include each storefront’s coverage
regionsalongsidechannels, so buyers can see and filter the marketplace by region.
2.127.3 — June 3, 2026 at 10:55 PM UTC
- Fixed adapter storefront product discovery so returned products remain valid when executing media buys for the selected provider account.
- Fixed routed adapter storefront execution so scoped products discovered through adapter storefronts can be purchased without being rejected by repeat product validation.
- Allow adapter storefront sales agents to execute routed media buys without requiring legacy operator-auth flags.
- Fixed adapter storefront MCP calls so buyer-connected provider accounts are passed through to sales adapters.
- Fixed campaign execution so selected product budgets are constrained to the campaign’s remaining media budget after fees.
- Fixed
GET /campaigns/:idreturning duplicatemediaBuyRefsentries and staleoptimizationGoalswhen a media buy had both an ACTIVE and PENDING_APPROVAL version due to SCD Type 2 versioning. The response now de-duplicates bymedia_buy_id, preferring the pending version which reflects the most recent buyer-requested state. - Fixed routed campaign execution for adapter-backed storefronts so buys dispatch through the storefront adapter with delegated provider authorization.
- Prevented storefront-backed media buy status refresh from reporting spurious upstream agent URL errors.
- Fixed storefront
sync_accountsdry-run responses so clients receive the expected structured result. - Fixed third-party storefront inventory sources so buyer account sync and account-scoped product discovery use the submitted natural-key account instead of upstream account discovery.
2.127.1 — June 3, 2026 at 4:58 PM UTC
- Improved error propagation in the account-switch flow: internal errors now preserve their original cause for easier diagnosis, and creating a child account now correctly returns a 500 instead of an empty response when user-info retrieval fails after account creation.
- Database circuit-breaker errors now return HTTP 503 with a
Retry-Afterheader instead of HTTP 500, and no longer trigger spurious GitHub error reports. - Fixed storefront cards on the Browse storefronts page briefly rendering in the default palette before swapping to each storefront’s real branding. Cards now show a loading placeholder until branding resolves.
2.127.0 — June 3, 2026 at 4:38 PM UTC
- Connections are now accessible from Account Settings in the buyer UI. OAuth-capable providers no longer show a redundant bearer token option.
- Fixed product discovery for BYOK adapter storefronts (Snap, Meta, etc.) returning zero results. The buyer’s connected provider credential is now correctly resolved and forwarded when discovering products across adapter storefronts.
- Storefronts backed by a third-party sales agent no longer require an operating-instructions ruleset to return products. When no ruleset is active, these storefronts now pass the sales agent’s catalog through directly instead of returning a
composition_pendingerror — matching the behavior already in place for embedded sales agents. - Fixed TikTok OAuth authorization URL to use
app_idparameter instead ofclient_id, resolving the “app_id: value is required but missing” error when connecting TikTok from the buyer connections page. - Ask Murph now lets you keep typing while a reply is still streaming. Follow-up messages you send mid-reply are queued and delivered one at a time as each turn finishes, so you no longer have to wait for an answer before lining up your next question. Queued messages show as pending bubbles and can be removed before they send.
- Storefront operators can now refresh a sales agent’s cached capabilities themselves via
POST /api/v2/storefront/agents/{agentId}/capabilities/refresh(also available through the storefront MCP). This previously required platform admin access. Use it when an agent changes what it advertises (for example, whether it requires operator credentials or which billing modes it supports) and the cached state hasn’t caught up yet. Sellers can only refresh agents their own storefront owns.
2.126.0 — June 3, 2026 at 2:31 PM UTC
- Added compatibility handling for media buy delivery reporting webhooks that are sent without an ADCP task envelope.
- Adapter storefront inventory is now identified as ROUTED-only and rejected when used with DECISIONED campaigns.
- Added an account analysis MCP tool for adapter-backed storefronts, including structured findings, recommendations, and an interactive analysis viewer. The tool uses delegated storefront adapter connections for provider auth, and Spotify is available as a wired storefront adapter provider.
- Added
adapterProviderTypefield to the buyer storefront list response, indicating the adapter platform (e.g. “meta”, “tiktok”) or null for non-adapter storefronts. - Buyer storefront browse now filters by status, channel, and region server-side.
GET /api/v2/buyer/storefrontsaccepts three new optional query params:status(configuring|transacting|archived),channel(an ADCP channel code such asdisplay,olv, orctv), andregion(a region code such asEMEA,NORAM, orAPAC), returning only matching storefronts. On the browse page, the status, channel, and region filters are now populated from known option sets and drive the query directly, so they render fully on first paint instead of appearing only after the storefront cards finish loading. - Delivery webhooks now deduplicate on idempotency_key, preventing duplicate processing when sellers retry delivery reports.
- Murph seller analytics now returns historical performance and strategy signals, and product composition can use recent storefront outcome history to tune built-in negotiation defaults.
- Added seller recommendation signals to Murph seller analytics.
- Products now surface
formatOptionsin discovery responses when the sales agent publishes AdCP 3.1format_options[]declarations. Each entry carries aformat_option_idthat buyers can reference viaformat_option_refsincreate_media_buyto select a specific format option. - Added durable storefront adapter connections so server-side workflows can use delegated provider credentials without client-held tokens.
- AM-1287: Derived managed ad-server operational health from the upstream tenant status feed, and treated local provisioning state as lifecycle bookkeeping rather than request-readiness.
- Added Spotify as a supported expert-run adapter provider for Storefront configuration.
- Fixed adapter storefront discovery so connected adapter storefronts can be used from buyer-agent product discovery workflows.
- Added buyer-facing provider connections for official adapter storefronts, including browser handoff URLs for OAuth providers and bearer-token setup for direct adapter credentials.
- Documented the storefront source graph architecture, clarified the Storefront routing boundary, and exposed storefront-level routing metadata plus adapter OAuth discovery for expert-run adapter storefronts. Linked storefronts and embedded sales agents are private Chef sources, not Storefront routing modes.
- Expanded Murph seller analytics with buyer-level negotiation conversion, monthly seasonality signals, and richer guidance for storefront negotiation strategy.
- Fixed third-party sales-agent calls (get_products, create_media_buy) failing with a spurious ADCP error. Activity capture is now best-effort: when a source has no entry in the shared agent registry, the activity is skipped rather than failing the underlying call.
- Fixed the adapter OAuth success page close button so it works under the deployed content security policy.
- Fixed adapter OAuth authorization so allowed localhost callback URLs can be used with providers that auto-register OAuth clients.
- Fixed a race condition in Ask Murph where clicking “New Chat” while a response was streaming would be overridden by the completing stream, leaving the user in the old conversation instead of starting fresh.
- Fixed buyer agent access to official adapter storefront connection management.
- Improved Buyer MCP tool discovery so agents can reliably find and use the API call tool after selecting an account context.
- Fixed carousel creatives being rejected during sync when the format spec declares only a repeatable group (no individual asset slots). The asset builder was incorrectly falling back to generic type-based keys (
image,image_2, etc.) alongside the correctcardsarray, causing the pre-sync asset validator to flag those keys as unrecognized and block the request. - Fixed a 500 (
Failed to browse products) in product discovery when a sales agent returns a product card without a format id. The product-card projection now tolerates a missingformat_idinstead of throwing, matching the guarding already used elsewhere in the same path. - Fixed list tables showing a contradictory “Page 1 of 0” pager when there were no results. The pagination footer is now hidden whenever a list is empty, across the campaign creatives page and all tables built on the shared entity table (storefront, proposals, advertisers, connections, discover supply, and others).
- Fixed storefront media buys so products backed by embedded sales agents can be bought and have creatives synced end to end.
- Fixed Storefront adapter OAuth authorization so allowed redirect URIs can be used reliably after server restarts or across multiple API pods.
- Improved storefront product pricing so audience signals do not incorrectly apply unrelated inventory rate card rules to premium packages.
- Fixed a budget error that blocked executing a campaign whose selected products carry no explicit per-product budget (for example a single discovered product executed directly). Such products now default to a share of the campaign’s post-fee media budget rather than the fee-inclusive total, so they no longer overshoot the media budget and get rejected during execution.
- Product discovery is now resilient to a single sales agent returning a malformed response. Previously, one agent’s unparseable products (for example an invalid format list) could fail the entire discovery request with a 500; now the offending agent is skipped and recorded, and the remaining agents’ products are still returned.
- Updated the buyer storefront browse copy: renamed “Browse the Interchange” to “Browse storefronts” with the subtitle “Discover who sells on the Interchange.” on both the home-page section and the full storefronts page.
- Renamed the embedded-sales-agent surface from “PSA” to “ESA” across the storefront API. Storefront REST routes move from
/api/v2/storefront/psa/...to/api/v2/storefront/esa/..., the inventory-sync webhook moves from/webhooks/psa-sync/...to/webhooks/esa-sync/..., and the response/schema names (PsaConnection,PsaTenantStatus,PsaSyncHistoryResponse, etc.) are renamed to theirEsa...equivalents. The unrelated Platform Services Agreement (“PSA”) used in terms-of-service acceptance is unchanged. - Fixed adapter storefront product discovery routing when existing storefront agent rows had stale MCP endpoints.
- Storefronts now compose third-party sales-agent inventory into their own branded catalog, alongside embedded sources. A connected third-party agent’s products are warmed, offered to Chef composition as single-source products, and exposed pass-through — all routable on
create_media_buy. If composition is briefly unavailable, the storefront still serves each source’s own products rather than returning empty. - Storefront MCP sessions now use the AdCP SDK platform handler at the existing
/storefront/:platformId/mcpendpoint. Storefront discovery, buyer session binding, and config-derived capabilities are preserved. Mutating Storefront tools now advertise and enforce AdCP idempotency with a 24-hour replay window, SDK request/response validation is strict, and buyer-visible SDK tasks are persisted in Postgres for restart and cross-pod polling safety. - Storefront source diagnostics now report per-source health. Each entry in a storefront’s readiness
sourceDiagnosticsincludes ahealthobject —status(healthy/degraded/unhealthy/unknown), the last error message and code, and the last error / success / check timestamps — so operators can see when an upstream inventory source last responded and why a read degraded.
2.125.0 — May 30, 2026 at 6:45 PM UTC
- Added a Murph-guided sandbox buyer campaign test planning flow that checks storefront visibility, sandbox advertiser readiness, and the buyer-infrastructure steps Murph would run once server-issued approval tokens are available.
- Added buyer-level outcome and ask rollups to Murph seller analytics.
- Improved Murph document processing so uploaded files can be converted into structured facts, gaps, recommendations, next steps, and brand.json mapping candidates during offline processing.
- Added attributed booking and delivery outcome summaries to Murph seller analytics.
- Added an optional seller analytics panel to Murph responses so storefront operators can visualize recent pricing, composition, and refine activity.
- Improved storefront product composition guidance for price objections, packaging changes, and buyer-history negotiation context.
- Added storefront outcome attribution so seller analytics can connect product exposure to media-buy booking and delivery events.
- Add card-by-card authoring UI for image_carousel creatives. The creative detail page now switches to a carousel editor when the format spec declares a repeatable_group asset slot, letting buyers add, edit, reorder, and delete cards with image uploads and text fields.
- Fixed a bug where deleting a sales agent did not remove it from
service_token.active_adcp_agent_ids. The cleanup query was using the numeric database id instead of the stableagent_idstring, so deleted agents could remain referenced in service-token active agent arrays. - Improved Murph document uploads by summarizing PDF contents, highlighting gaps and recommendations, separating next steps, and recording first-pass processing status for the storefront state rail.
- Added a Murph-operated sandbox test execution path for connected external sales-agent inventory sources.
- Added Murph guidance for planning a test campaign against a connected external sales agent before running any campaign execution steps.
- Improved Murph’s storefront setup flow for registering and assessing external sales agent inventory sources.
- Added per-inventory-source diagnostics to storefront readiness and surfaced them in Murph’s setup rail.
- Returned a clear client error when ADCP webhooks use an unsupported payload envelope.
2.124.0 — May 30, 2026 at 3:54 PM UTC
- Murph seller analytics now includes attributed booking and delivery outcome summaries. The
sellerAnalyticspayload adds a top-leveloutcomesobject and per-runoutcomedetails using last-touch product-overlap attribution. - Murph seller analytics now includes buyer-level outcome and ask rollups, and booked budget is counted once per attributed media buy instead of being inferred from the latest event.
- Murph now surfaces storefront health blockers, including managed sales agent setup tasks, when operators start a storefront conversation.
- Added storefront composition pricing settings for value-based pricing facts, fallback auction pricing targets, Murph-authored structured pricing rules, composed-product pricing options, wholesale product pass-through, and negotiation analytics capture.
- Fixed operator domain setup incorrectly failing with “Domain is already registered to another organization.” Multiple organizations can now share the same operator domain. Setting a shared domain no longer reassigns another organization’s signup routing.
- Allowed storefront owners to test product discovery and Murph-run brief evals against their own configuring storefronts before opening them for transactions. Murph now offers candidate test briefs and runs pre-built, imagined, or pasted briefs through the same dry-run storefront eval path, and intelligence-run records include a user-facing explanation of why products were selected, priced, omitted, or rejected.
- Added buyer endpoints to poll and cancel media buy update proposals: GET /api/v2/buyer/update-proposals/:id and DELETE /api/v2/buyer/update-proposals/:id.
- Show all returned storefronts in Browse the Interchange, simplify the section description, require storefronts to pass marketplace review before appearing to buyers, and notify Slack when a storefront is ready for review.
2.123.0 — May 29, 2026 at 8:18 PM UTC
- Data Delivery is now discoverable from the buyer MCP. Added a Data Delivery section to the buyer skill documentation (concept model, field reference, Probe lifecycle, advertiser-vs-campaign scoping) so
ask_about_capabilitycan surface it, and registered arevalidate_data_delivery_credentialoperation that re-runs the destination Probe without resubmitting the credential. Also published a buyer guide for end-to-end setup across GCS, S3, and Azure Blob destinations. - Added storefront API support for managed-sales-agent buyer advertiser routing, including GAM advertiser search, advertiser ensure, buyer mapping management, recent buyer visibility, and readiness checks for upstream Sales Agent setup blockers.
- Advertisers now have a primary currency. Campaign budget currency defaults to the advertiser’s primary currency when not specified. Selected product pricing is rejected when it uses a currency that does not match the campaign budget currency.
- Aligned Storefront setup, inventory-source, and Merchandising Agent terminology across the v2 API descriptions, docs, and UI copy.
- When a media buy update requires seller approval (
requires_approvalmode), the campaign update endpoint now returns HTTP 202 with aproposalsarray instead of a blocking error. Each proposal entry includesproposalId,mediaBuyId, andstatus: PENDING_SELLER_APPROVAL. Updates that requirerequires_proposalmode continue to return an error until that flow is implemented. - Clarified storefront readiness checks by separating required go-live checks from setup guidance and optional status checks.
- Closed multiple cross-tenant authorization gaps in the
/toolsroute-handler surface (also reached via Murphinvoke_action): customer_getandcustomer_get_seats: now reject requests for customers the caller is not authorized to view (matches existing MCP tool behavior).customer_invitation_approve/resend/reject/cancel: now verify the invitation belongs to a customer the caller can access before forwarding to the internal backend.product_save/product_discover: now scope writes and reads to the caller’s customer for non-SuperAdmin callers; non-SuperAdmins can no longer pollute or read another customer’s product catalog or create generic (null-customer) Scope3 products.seat_details_get: cross-tenant seat fetches by non-SuperAdmin callers now return a not-found error instead of leaking seat name, members, and connected agents.- PSA storefronts now return their warmed catalog products when buyers call
get_products, instead of blocking with acomposition_pendingerror due to missing operating instructions. - Fixed media buy delivery webhooks failing with
VALIDATION_ERRORon thestatusfield since the SDK 8.0.0 upgrade. The delivery notification the SDK passes to handlers contains only the inner report data, not the task-envelopestatusfield thatGetMediaBuyDeliveryResponseSchemanow requires. The fix mergesstatusfrom the webhook metadata before schema validation so sender payloads in the correct MCP format are accepted again. - Non-admin users whose organization has an unaccepted Terms of Service now see a blocking modal with a “Notify your admins” button, instead of landing on a page where all API calls fail silently. If no admins exist on the account, the modal directs the user to support@scope3.com.
- When a media buy update is blocked because the sales agent requires seller approval (rather than a self-serve flow), the API now returns a distinct
SELLER_APPROVAL_REQUIREDerror code instead of the genericCAPABILITY_NOT_SUPPORTED. The error message and recovery suggestions tell the buyer to have the seller approve or activate the buy before retrying. - Surface Sales Agent cached product pricing guidance, forecast freshness, bookability, and managed sync-health drill-down in storefront discovery.
2.122.0 — May 28, 2026 at 1:56 PM UTC
- Added a storefront managed-sales-agent connection test action and secure credential-form deep links so publishers can re-check ad-server connectivity after setup or credential updates.
- Murph chat now supports dragging and dropping PDFs, images, and common document formats into the conversation.
- Added secure Slack handoff buttons for Murph ad-server credential setup so operators can enter SpringServe and FreeWheel credentials in Storefront instead of chat.
- Added
POST /campaigns/:campaignId/creatives/validatefor dry-run creative manifest validation. Calls the ADCP agent’svalidate_inputtool and returns per-target results indicating pass, fail with slot-level violations, or unvalidatable (for nondeterministic formats). - Allow shipping the same Data Delivery type (e.g., IMPRESSIONS) to multiple credentials on a single advertiser or campaign scope. The uniqueness rule on Data Delivery Output arrays is now
(dataDeliveryType, credentialName)instead ofdataDeliveryTypealone — list one Output per destination to fan a type out to several buckets or warehouses. - Fixed signup notifications failing to reach admins when a customer has no domain mapping configured. The system now automatically populates the customer domain and mapping table after the first signup for that customer, so subsequent signups resolve admins correctly without manual intervention.
image_carouselmanifest validation now enforces theallowed_card_media_asset_typesconstraint declared in the format specification. Submitting a card with a disallowed media type (e.g. a video card in an image-only carousel) now returns acard_media_type_invalidvalidation error instead of silently accepting the manifest.- Murph can now read transcript text from supported Loom links and clearly reports when a Loom recording has no readable transcript available.
- Fixed Data Delivery transfers failing with “Anonymous caller does not have storage.objects.list access” by aligning the worker’s
google-auth-libraryversion with the one bundled inside@google-cloud/storage. Impersonated credentials now attach correctly to the export-bucket read, so GCS, S3, and Azure deliveries can complete. - Prevented Murph from confirming reports, learnings, or business profile writes unless the corresponding action completed, and corrected report confirmations to use the ticket ID returned by the filing action.
- Prevented Murph from self-disclosing as an underlying model or treating routine action confirmations as roleplay tests during active conversations.
- Improved Murph storefront setup guidance so next-step questions continue the setup flow instead of reworking agent personality suggestions.
- Kept Murph’s storefront setup tools available throughout storefront setup conversations so operators can activate confirmed product-rule versions from chat.
- Fixed re-inviting users who were previously removed: admins can now successfully re-add users who had been removed from a customer or seat.
- Fixed signup blocking new domains: the CSP backend returns
showPsaBoxbut the agentic API was readingshowTosBox, causing all first-time signups from unregistered domains to be incorrectly blocked. - Fixed brand name drift between
POST /storefront/resolve-brandand the cachedstorefront.brand_namecolumn. The endpoint now persists the resolved brand name and logo URL back to the caller’s storefront row when the resolved domain matches their operator domain, so the Configuration view and the storefront state drawer no longer disagree. The drawer also falls back to the live resolution when the column is null. Also pointed the storefront gear icon at the Account tab instead of Configuration. getFormatDetailsnow discovers AdCP v2 canonical formats (image_carousel,sponsored_placement,responsive_creative,agent_placement) via static SDK definitions, and supplements format discovery withget_adcp_capabilities → creative.supported_formatsfor seller-declared formats.url_typevalues in URL assets now normalize to lowercase (clickthrough,tracker_pixel,tracker_script,vast) to match the AdCP spec. Uppercase inputs are still accepted and automatically lowercased.- Improved managed sales agent sync status reporting so storefronts show derived refresh health, safe warnings, and retry progress instead of raw sync-run failures.
- Renamed the storefront’s per-pass observability endpoints from
/chef-runsto/intelligence-runs. The endpoints now sit under a “Storefront intelligence” framing that scales to future input → reasoning → output use cases beyond product composition (creative approval, media-buy approval, pricing, policy). GET /v2/storefront/chef-runs→GET /v2/storefront/intelligence-runsGET /v2/storefront/chef-runs/:id→GET /v2/storefront/intelligence-runs/:idPUT /v2/storefront/chef-runs/:id/label→PUT /v2/storefront/intelligence-runs/:id/label- The wire field
ingredientsSnapshoton each row is renamed toinventorySnapshotfor consistency with the storefront’s “inventory sources” vocabulary. The OpenAPI schemasChefRun*/LabelChefRunBodyare renamed toIntelligenceRun*/LabelIntelligenceRunBody. - The readiness check id surfaced via
GET /v2/storefront/readinesschanges fromfirst_chef_runtofirst_intelligence_run. - Simplified the S3 Data Delivery Credential shape. The
config.authblock (withmode: ASSUME_ROLE,roleArn, andexternalId) has been removed — S3 credentials now require onlybucketandregion. Scope3 writes objects into the buyer’s S3 bucket using a single shared IAM principal; grants3:PutObject(ands3:DeleteObjectfor the Probe sweep) to that principal in your bucket policy under the Output path prefix. - Carousel card validation now rejects
ctavalues not in the format’s declaredcta_valueslist, returning a structuredcard_cta_invaliderror with the allowed values. Whencta_valuesis not declared, any CTA is accepted.
2.121.0 — May 27, 2026 at 1:18 PM UTC
- Added Data Delivery query support for impressions, clicks, MMP postbacks, and media-buy delivery report types. Outputs configured with these
dataDeliveryTypevalues now produce log-level exports against the corresponding signals tables. TheMEASUREMENTdata delivery type has been removed from the API — it was never wired and is not on the near-term roadmap; submitting it on an Output now returns a validation error. - Add carousel authoring support: POST /campaigns/:id/creatives/create and the buyer MCP api_call tool now accept a cards array for image_carousel format creatives. Each card supports filename (for multipart file uploads) or url (for pre-hosted assets), plus optional headline, description, cta, and landing_page_url.
2.120.0 — May 27, 2026 at 3:23 AM UTC
- Storefronts now appear in buyer-side product discovery as first-class ADCP agents. Every storefront has a matching row in the ADCP agent registry so buyers can reach the storefront’s curated product surface through the same discovery flow they already use for third-party agents. Existing storefronts are backfilled automatically.
- Pre-flight capability guard on campaign update now consumes the structured
available_actions[]vocabulary from AdCP RFC #4480 (PR #4514), with fallback to the legacyvalid_actions[]for sellers that pre-date the spec. Direction-of-change for budget and flight mutations is resolved per-buy (extend vs shorten, increase vs decrease), so mismatches surface before any downstream call. The runtime path additionally parses the structuredACTION_NOT_ALLOWEDerror so failure responses carry the typedattempted_action,reason, andcurrently_available_actionsfields.
2.119.0 — May 26, 2026 at 9:47 PM UTC
- Added Azure Blob Storage as a Data Delivery destination. Buyers can now register a Data Delivery Credential with a container-scoped SAS token and a Data Delivery Output pointing at it; scheduled deliveries write JSONL files into the buyer’s Azure container. The SAS expiry (
se=claim) is parsed at credential submission and surfaced on the credential response asexpiresAtso the credential can be rotated ahead of time. - Creative manifests now accept carousel/multi-card creatives. The
image_carouselcanonical format is fully supported: thecardsasset slot accepts an array of card objects (each with a requiredmediaimage or video, plus optionalheadline,description,cta, andlanding_page_url). Cardinality bounds from the format declaration are validated (min/max card count). Previously, repeatable-group slots were silently dropped during validation. - Bump @adcp/sdk to 8.1.0-beta.13 and wire the beta.13 get_products cache_scope behavior through storefront MCP responses.
- Account-scoped composed products are partitioned from public products across brief and refine flows, and async ADCP response errors are surfaced as advisory errors without making synchronous seller errors non-fatal.
- Added
channelsfield to buyer storefront list and detail responses, surfacing the ad channels each storefront supports (e.g. CTV, display, audio).POST /api/v2/storefront/resolve-brandnow prefers iconographic logo variants (icon, mark, square) over wordmarks when selectinglogoUrl, so storefront cards render a brand mark next to the brand name instead of duplicating it as a wordmark image. - Fixed
apply_proposalfailing with “No discovery results cached” after Redis cache expiry. Proposals are now persisted to the database when discovered so they can be recovered even after the cache expires and ADCP re-discovery fails. - Fixed campaign budget-mode pacing allocating incorrect package budgets when media buys were executed from separate discovery sessions. Each media buy’s packages now receive the correct proportional share of its own product budget across periods.
- Fixed advertiser update so a single PUT can replace Data Delivery Credentials and Outputs together when the new Outputs point at new credentials. Previously, the request was rejected because the old credentials were archived before the Outputs that referenced them were cleared. Updates now upsert credentials first, replace Outputs, then archive credentials no longer referenced.
- Duplicating a creative now generates fresh tracking URLs for the new creative, so the click-through and impression tracker URLs are present immediately after duplication.
- Fixed a crash when setting per-buy pacing periods on campaigns where the media buy start_time is stored as a text string rather than a Date object.
- Fixed platform-managed (PSA) storefronts not appearing in buyer storefront listings. Storefronts backed by Scope3-managed sales agents were invisible to buyers due to a query that required an agent ID - PSA sources have no agent ID by design. These storefronts now appear as connected with no credentials required.
- Fixed storefront not appearing in buyer discovery after going live. When a storefront was set to transacting, any inventory sources whose agents were still pending at registration time would remain stuck in a pending state and be excluded from buyer listings.
- Fixed a validation error when syncing HTML and text creatives to sales agents. Assets are now stamped with the required
asset_typediscriminator field before being submitted to the ADCP protocol. - Accounts that inherit their organization’s contract no longer have their own row, no longer prompt for ToS, and contract reads transparently walk to the organization. New
/api/v2/contractresponse fields (inheritedFromOrganization,organizationId,organizationName) and new status values (inherited_active,inherited_hidden,organization_contract_missing). NewPATCH /api/v2/contractlets organization admins toggle whether inheriting accounts can see contract details and rate cards.POST /api/v2/accept-tosreturns 403 for accounts that inherit. - The
.well-knowndiscovery endpoints (/.well-known/jwks.json,/.well-known/brand.json,/.well-known/oauth-authorization-server,/.well-known/oauth-protected-resource,/.well-known/openid-configuration) now return the same response on bothhttps://interchange.ioandhttps://api.interchange.io. Programmatic API and MCP endpoints remain athttps://api.interchange.io.
2.117.0 — May 25, 2026 at 5:06 PM UTC
- Added per-storefront buyer instructions: notes + discount rules scoped by (operator_domain, brand_domain) and optionally filtered by country. Storefront operators manage rows via
GET/POST/PATCH/DELETE /v2/storefront/buyer-instructions; the product-composition agent resolves matching rows atget_productstime (most-specific notes ordered first, MAX discount across matches). - Approving a pending media buy now forwards the stored request to the underlying source(s) and records the routing so subsequent
update_media_buy/get_media_buy_deliverycalls work end-to-end. When an operator decidesapprovedonPOST /api/v2/storefront/media-buy-approvals/{mediaBuyId}/decide, the service replays the buyer’s create_media_buy payload, fans it out per source, persists the upstream media_buy_ids, and stampsforwardedAt. The response now includes per-source forward results so the operator UI can render partial failures. The decision itself is recorded regardless of forwarding outcome — partial or failed forwards are retryable separately. Direct-forward (offersCampaignApproval=false) and post-approval modes share a singleforwardMediaBuyToSourceshelper. - The product-composition agent now owns pricing arithmetic deterministically: each composed product’s baseCpm, operator discount, and finalCpm are computed server-side from the selected bundles and signals plus any matched buyer instructions. Prompts to the model carry a precomputed price playbook and explicit guidance to vary channel mix and record any excluded bundles in the run rationale.
- Storefront agent hardening from review feedback: scope every storefront media-buy route to the buyer that opened it (cross-buyer leak fix on
get_media_buysand friends), bind each per-storefront MCP session to its authenticating customer (refuse 403 on hijacked session ids), only stampforwarded_atafter every source completes (adds aPOST /api/v2/storefront/media-buy-approvals/:mediaBuyId/retry-forwardfor the operator UI), and stamp a deterministicidempotency_keyon each forwarded source call so retries dedupe upstream. Tightens chef pricing (clamp final CPM at zero, take the min CPM across multi-priced bundles, warn on dropped currency-mismatched signal addons) and trims a few storefront wire shapes (creative-review response is camelCase end-to-end,get_adcp_capabilitiestucks the scope3 storefront block underextensions.scope3, list endpoints drop the fake pagination envelope when the service doesn’t paginate yet). - PSA-backed storefronts now honor operator-stored workflow flags for
offersCreativeReviewandoffersCampaignApproval. Previously all three capability flags were force-locked on for any storefront with a PSA inventory source — operators could not opt their PSA storefront into pass-through review or pass-through approval even when that was what they wanted.offersProductCompositionremains locked on (a PSA must surface composed products or it has nothing to sell), but the review and approval workflow flags now flow fromstorefront_config.settings.capabilitiesverbatim so operators can configure either queue-mode or pass-through per storefront. - Adopted the AdCP SDK’s typed response builders across the storefront MCP surface:
productsResponse,mediaBuyResponse,updateMediaBuyResponse,getMediaBuysResponse,deliveryResponse,syncAccountsResponse,syncCreativesResponse, andtaskToolResponse. Replaces hand-rolledstructuredContentobjects with builders whosedataparameter is the canonical AdCP type — TypeScript now catches schema drift at compile time instead of at storyboard runtime. As a side effect,sync_accountsnow returns properSyncAccountsSuccess.accounts[]entries withbrand,operator,action, andstatus;create_media_buydirect-forward returns a properCreateMediaBuySuccesswithmedia_buy_idandpackages;get_media_buy_deliveryreturns the canonicalGetMediaBuyDeliveryResponsewithreporting_period,aggregated_totals, andmedia_buy_deliveries. Storyboard runner moves from 22-passing/18-failing to 25-passing/16-failing. - Storefront operators can now inspect the product-composition agent’s reasoning over time. Each
get_productspass writes an internal compose-run record capturing the buyer scope it resolved against, the prompt it built, the raw and parsed LLM output, the matched buyer-instructions rows, and the products it persisted. Operators read these viaGET /v2/storefront/chef-runsandGET /v2/storefront/chef-runs/:id; evaluators attach structured labels viaPUT /v2/storefront/chef-runs/:id/label. - Added per-storefront creative review endpoints. When a storefront takes over creative review from the underlying salesagent, buyer-submitted creatives land in a review queue that operators can browse and decide via
GET /api/v2/storefront/creative-reviews,GET /api/v2/storefront/creative-reviews/:creativeId, andPOST /api/v2/storefront/creative-reviews/:creativeId/decide. The decide endpoint acceptsapprovedorrejected. Submissions are idempotent on(creative_id, buyer_customer_id)— a buyer resubmitting the same creative updates the stored payload without resetting a prior operator decision. - Storefront
get_productsnow honors AdCPbuying_modeand therefine[]change-request array.buying_mode: 'brief'is the existing fresh-discovery path;buying_mode: 'refine'lets a buyer iterate on a previous response — entries withscope: 'product'reference an existingproduct_idand an action (include/omit/more_like_this, optionally with anask),scope: 'request'adds whole-response asks, andscope: 'proposal'is acknowledged but not yet honored. Product identity is preserved across refines:more_like_thisandaskmodifications keep the existingproduct_idand update the recipe in place;omitdrops the product from the response;includewith noaskis a verbatim passthrough. The response includes a position-matchedrefinement_appliedarray.buying_mode: 'wholesale'returnsUNSUPPORTED_FEATURE— storefronts are curated discovery surfaces, not raw catalogs. - Storefronts now expose a per-storefront AdCP MCP endpoint at
/storefront/:platformId/mcp. The tool surface is capability-filtered- from the storefront’s flags:
get_adcp_capabilitiesis always available; get_products,sync_creatives, andcreate_media_buyare registered- only when the matching storefront capability is enabled. Pass-through
- storefronts (
advertiseAsAgent === false) and unknown platform IDs - return 404. The endpoint accepts scope3 customer API key auth this
- round; product composition, creative review, and campaign approval
- handlers remain placeholders while their pipelines land.
- Storefront MCP surface (
/storefront/:platformId/mcp) now exposes the full AdCP buyer tool set, not justget_products. New tools:sync_accounts,sync_creatives,create_media_buy,update_media_buy,get_media_buys,get_media_buy_delivery. Capability flags drive the implementation path, not whether a tool is exposed:offersCreativeReviewandoffersCampaignApprovalswitch between operator-managed queues and direct pass-through to the underlying sources.create_media_buyresolves each package’s source from the composed product’s stored implementation_config and fans out per source. Subsequent calls toupdate_media_buy,get_media_buys, andget_media_buy_deliveryread a newstorefront_media_buy_routestable so they route per source automatically.sync_accountsregisters buyers on every connected source and records the per-source upstream account id instorefront_account_routes. - Added per-storefront media-buy approval queue endpoints. When a storefront opts into operator review of buyer-submitted media buys, buyer
create_media_buycalls land in a pending queue and operators decide via the new REST surface:GET /api/v2/storefront/media-buy-approvals(defaults to pending;?status=approved|rejected|revokedto filter),GET /api/v2/storefront/media-buy-approvals/:mediaBuyId(single entry), andPOST /api/v2/storefront/media-buy-approvals/:mediaBuyId/decidewith body{ status: 'approved' | 'rejected', reviewerNotes? }. Decisions are recorded with the reviewing operator and timestamp; double-decide attempts are rejected. Re-submitting the same media_buy_id while pending is idempotent; re-submitting after a decision requires a fresh id. - Added per-storefront operating instructions endpoints. Operators can author versioned markdown rules that the storefront’s composition agent consumes when producing products:
GET /api/v2/storefront/operating-instructions,GET /api/v2/storefront/operating-instructions/active,GET /api/v2/storefront/operating-instructions/:version,POST /api/v2/storefront/operating-instructions(creates a new version, never overwrites prior versions), andPOST /api/v2/storefront/operating-instructions/:version/activate(swaps the storefront’s active version). Versions are immutable and per-storefront monotone — creating a new version produces a clean cutover so composition output for the new rules is distinguishable from the prior generation. - Storefront
get_productsresponses now meet the AdCP v3 schema contract. Every product carriespublisher_properties(derived from the storefront’s platformId),reporting_capabilities(daily UTC reporting with the standard impressions+spend metrics anddate_range_support), and pricing options now use the canonicalpricing_option_id+fixed_priceshape (not the previousrate/is_fixedpair). The response envelope itself includes the v3 canonicalstatusfield and echoes the buyer’s requestcontextback unchanged.get_adcp_capabilitiesaccepts and echoescontextas well. These changes move the AdCP storyboard runner from 3-passing/33-failing to 22-passing/18-failing on the same agent surface — the remaining failures are protocol-level error-code conformance (PRODUCT_NOT_FOUND, VERSION_UNSUPPORTED, TERMS_REJECTED, etc.) and response-shape work on sync_accounts / sync_creatives / create_media_buy envelopes. - Storefront MCP tools now echo the AdCP
contextfield on every response (success and error), reject unsupportedadcp_major_versionvalues with the canonicalVERSION_UNSUPPORTEDenvelope, and validatestart_time/end_timesemantics oncreate_media_buybefore forwarding (reversed dates and past start times returnINVALID_REQUESTdirectly). Every tool’s inputSchema now declarescontext+adcp_major_versionso MCP doesn’t strip them from incoming args. Fixed a column-name bug in the storefront-source resolver (source_kind→execution_type) that was hiding the inventory sources from sync_creatives + sync_accounts fan-out. Storyboard runner moves from 25-passing/16-failing to 34-passing/8-failing on the same agent surface — schema conformance is now table stakes; the remaining failures cluster around behavioral seller errors (TERMS_REJECTED, accept-buy returns media_buy_id) and a single security_baseline assertion. - Simplified
sync_accountson the storefront MCP surface. For embedded storefronts the storefront is the buyer agent, so the call now echoes the submittedaccount_refs back as acknowledged rather than fanning out to underlying sources. Advertiser provisioning on the source side is deferred tocreate_media_buyand owned by each source’supstream_advertiser_modeconfig — the storefront does not remember per-source upstream account ids. Thestorefront_account_routestable was dropped (it was never referenced by approved code paths).storefront_media_buy_routes(the routing forupdate_media_buy/get_media_buys/get_media_buy_delivery) is unchanged.
2.116.0 — May 22, 2026 at 8:19 PM UTC
- Creative manifest list now includes
target_format_ids— additional format IDs a creative covers beyond its primary format. The campaign creative assets page shows which formats are already covered (alongside which are still missing) and allows assigning an existing creative to a missing format without re-uploading assets. - Fixed
apply_proposalreturning “No discovery results cached” when the discovery cache had expired. It now automatically re-runs discovery to repopulate the cache before retrying, matching the existing recovery behavior in other discovery operations. Also extended the discovery cache TTL from 30 minutes to 4 hours. - Fix format selector missing format IDs (e.g. banner_728x90) that are declared on products but not returned by the ADCP creative agent’s listFormats call.
2.115.0 — May 22, 2026 at 11:51 AM UTC
- Child customers can now view their contract from Account Settings → Contract,
- Billing & Invoices. Rate cards inherited from a parent customer are surfaced
- under an “Inherited rate cards” label — when the parent has opted to share
- them the rates appear, otherwise the section indicates that rates are
- inherited from the parent.
- Fixed a race condition where simultaneous storefront inventory source auto-activations (e.g. a source creation and an agent-activation hook firing at the same time) could fire duplicate activation events. The auto-activation UPDATE is now idempotent and only emits a log/audit event for the writer that actually transitions the row from PENDING to ACTIVE.
- Fixed a bug where package budget, pacing, and bid_price updates were not sent to the SSP when updating an active media buy. The SSP would receive the existing values instead of the requested changes, leaving the media buy stuck in PENDING_APPROVAL. Also added Sentry capture for ADCP sync failures that were previously only logged to GCP.
- Fixed inventory sources backed by OAUTH sales agents being auto-activated before the OAuth token exchange completed. Sources now stay PENDING until the agent has a stored credential reference; only NO_AUTH sources skip that check.
- Fixed a bug where verifying one storefront’s operator domain would incorrectly mark all of the customer’s other storefronts as verified. The auto-verification backfill is now scoped to the specific storefront whose domain was just verified, so storefronts with different operator domains remain unverified until each is independently checked.
- Fixed a server-side request forgery vector in the storefront discover-agents flow. The server-side fetch of
https://{domain}/.well-known/adagents.jsonno longer follows redirects, so a third-party host cannot bounce the request to an internal address and have the response surfaced through the discover-agents response. - Fixed
POST /api/v2/storefront/resolve-brandandGET /api/v2/storefront/discover-agentsto return the standard response envelope ({ data, error }) on both success and failure. Previously these endpoints returned raw bodies on validation errors, breaking clients that rely on the consistent wire format used everywhere else in the v2 API. - Hardened Stripe Connect onboarding callback tokens by binding each token to the specific Stripe account and adding a 15-minute expiry. Leaked or replayed callback URLs can no longer be used to mark onboarding complete or mint fresh onboarding redirects.
2.114.0 — May 21, 2026 at 8:00 PM UTC
- Added duplicate creative endpoint. POST /campaigns/:campaignId/creatives/:creativeId/duplicate creates a copy of an existing creative manifest (including all assets) with a “Copy of” prefix on the name.
- Add domain auto-join setting for customer orgs. Admins can enable allowDomainAutoJoin on their customer to let users with a matching verified domain email join immediately as members without requiring admin approval.
- Added S3 as a supported Data Delivery destination. Data Delivery Credentials and Outputs can now target a buyer-owned S3 bucket, with cross-account access via AWS STS AssumeRole. Buyers create an IAM role that trusts the Scope3 AWS principal (with an optional
externalId) and reference it incredential.config.auth.roleArn. Probe validation and per-cadence object delivery use the assumed role; no long-lived AWS access keys are stored. - Operator note: the Temporal worker pod must provide a base AWS identity that the SDK’s default credential provider chain can read, so that
STS AssumeRolecalls can be made. Supported options: (a) GKE Workload Identity Federation → AWS via OIDC (AssumeRoleWithWebIdentity); (b)AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEYenv vars for a Scope3 IAM principal withsts:AssumeRolepermission; (c) IAM Roles Anywhere. The buyer IAM role’s trust policy must trust whichever principal we use. Without one of these, the first delivery will fail withCredentialsProviderError. GET /api/v2/accounts/currentnow includescustomerDomainso callers can tell whether the current customer has a registered organization domain (required before enabling domain auto-join).- Fixed inventory source status badges and Activate/Disable actions always showing the wrong state. The UI was comparing lowercase status strings against the API’s uppercase values (
PENDING,ACTIVE,DISABLED), causing health indicators to always appear as “Pending” and status-toggle requests to be rejected by the server. - Fixed CORS rejection for requests from the
https://interchange.ioapex domain to the PSA storefront proxy endpoints. The previous allowlist regex required at least one subdomain, causing fetch requests from the PSA admin iframe to be blocked in production. - Fixed a gap where toggling
transacting: trueon a storefront could bypass the readiness check if the request went through the MCP storefront tool surface or any other internal caller that did not pre-check readiness. The gate now runs insideStorefrontService.update()itself, so every path returns the same blocker list when required setup is incomplete. - Murph conversations are now persisted and retrievable. Added two member-scoped endpoints —
GET /v2/murph/conversationsandGET /v2/murph/conversations/:conversationUid— and a shareable/$customerId/murph/c/:conversationUidroute in the UI so the chat history survives page refresh and can be linked to a teammate. - Add Murph proactive surfaces: a digest endpoint that summarizes unread notifications, personalized starter prompts driven by user state, an online/health indicator, and a closed-set
?askMurph=<intent>&entity=<entityRef>deep-link convention with “Ask Murph about this” buttons on campaign, advertiser, and sales-agent detail pages. The digest is automatically folded into the orchestrator’s first-turn context so Murph can answer “what changed?” without an extra round-trip. - Storefronts now carry a
capabilitiesblock on the v2 response declaring which AdCP extensions the storefront advertises to buyers:offersCreativeReview,offersCampaignApproval,offersProductComposition. A derivedadvertiseAsAgentboolean tells callers whether the storefront should be addressed as an AdCP agent (vs. pass-through to the underlying inventory source). Embedded (PSA-backed) storefronts have all three capabilities locked on withcapabilitiesLocked: true; third-party storefronts default all off (pass-through). ThePATCH /api/v2/storefrontbody accepts acapabilitiespatch — locked storefronts reject writes that would turn any capability off. - Buyer-facing surfaces now display the storefront’s name as the seller identity instead of the underlying sales agent’s name. The storefront IS the agent buyers see in this product — underlying sales agents (third-party AdCP agents and embedded managed agents) are internal routing detail, not separate seller identities. Product cards, the discovery
productCardmodal, media-buy sections, and proposal badges all read fromstorefrontNamenow. Discovery responses stampstorefrontId/storefrontNameon every Proposal and persist them through cached rails so the seller label is reliable across both fresh discovery and saved discoveries that get replayed. Cached rails group by storefront instead of sales agent — products from multiple underlying agents that belong to the same storefront collapse into one rail.
2.113.0 — May 20, 2026 at 11:19 PM UTC
- Measurement sources now expose an
outcomeTypesarray field listing all record-level outcome type slugs the source produces. This enables correct linkage between multi-metric sources (e.g. video reports delivering impressions, clicks, and video quartile events) and their individual measurement records. - Fixed the Creatives tab being blank when “All advertisers” is selected on the buyer home page. The tab now auto-selects the first available campaign and loads creatives correctly.
- Fixed seat-scoped API tokens being rejected with
ACCESS_DENIED(“No user context available for seat permission check”) when calling endpoints scoped to their assigned advertiser. The token’s seat role was set during authentication but not propagated into the service-layer context used by seat access checks. - Reporting data now persists additional AdCP delivery metrics when sales agents report them: conversion value, ROAS, new-to-brand rate, cost per acquisition, cost per click, reach unit, viewed seconds, attention seconds, attention score, engagements, follows, saves, and profile visits. Package-level breakdowns also persist delivery status, paused state, and is-final flags. Previously these fields were dropped during ingestion; they are now stored alongside existing impression, click, view, and conversion metrics.
- Replace the storefront
statusenum (PENDING / ACTIVE / DISABLED) with two simpler stored fields:transacting(boolean) andarchivedAt(timestamp). The API now returns a derived, read-onlydisplayStatuswith one of three values —configuring,transacting, orarchived— computed from those two fields. Clients toggle live/paused by settingtransacting: true | falseonPUT /storefront; archiving is now a single explicit operation atPOST /api/v2/storefront/archivethat setsarchivedAtand forcestransacting = false. Archived storefronts are read-only — every mutation against an archived storefront is rejected. Existing rows are migrated automatically (status = 'ACTIVE'→transacting = true; everything else →transacting = false).
2.112.0 — May 19, 2026 at 10:42 PM UTC
- Property list file uploads now return 202 Accepted immediately and process identifier resolution in the background. Poll the GET endpoint for status updates. Large uploads no longer risk load balancer timeouts.
- Users who request access to an existing organization now see “Your access request is pending approval” on the signup screen instead of the misleading “An invitation is required” message. We also post a Slack notification listing the org’s admins (and page oncall when there are none) so requests don’t sit unanswered when an org’s only admins are stale or unreachable.
- Grouped the
logEventendpoint under the Event Sources section in the Buyer API reference, alongsidelistEventSourcesandsyncEventSources, so all event-source-related endpoints appear together. - Improved ad-product retrieval on campaigns:
mediaBuys[].products[]onGET /campaigns/:idnow includeproductNameandpublisherNameso callers no longer need to reconstruct names from reporting CSVs or audit logs.GET /campaigns/:id/productsis now the authoritative list of every ad product attached to a campaign. It sources from the campaign’s media buys (joined with the local products cache) and folds in any discovery-staged products not yet executed. Each entry includesproductName,publisherName,salesAgentName, pricing, and the media buys it lives on.GET /campaigns/:id/productsnow accepts amediaBuyIdquery param (single or repeated) to narrow the response to specific buys, avoiding context-window truncation on campaigns with many products.- Property lists now create a local
Propertyrow for every uploaded site domain that didn’t already have one (same shape as the canonical web property creation path:DISPLAY-WEBchannel,AUTO_SYNC,BROWSER). Previously, identifiers without a matching Property fell intounresolvedIdentifiersand were silently dropped from the list, so they didn’t take effect at bid time. Buyer-submitted exclusion and inclusion lists now honor the full domain set. - Reframed the Add inventory source chooser around what storefront operators actually know about their setup. Two side-by-side cards — “I don’t have a sales agent” (Managed) and “I have my own sales agent” (BYO/AdCP) — replace the title-cased “Connect an ad server / Connect an agent / Link a storefront” rows. Federation moves into a quiet “Coming soon” rail below the cards so it stops competing for attention before it ships. Downstream forms are unchanged.
2.111.0 — May 19, 2026 at 2:40 PM UTC
- Added
POST /api/v2/identity-match/targeting, returning the seller-keyed audience targeting configuration for every package available to the authenticated token. System tokens receive every active package; customer tokens receive packages they own as a buyer or host as a seller. An optionalafterISO-8601 cursor switches the response to delta mode, returning only configs whose package or owning media-buy was updated/archived since that instant.targetSegmentsis audience-only —audience_includemaps toanyOf,audience_excludetononeOf. - Allow attaching a clickthrough URL alongside uploaded creative assets on every format. Previously the Clickthrough URL field was hidden (and the slot rejected by the API) when the resolved format spec didn’t declare a
click_url/clickthrough_url/landing_pageslot, forcing buyers to choose between files OR a click URL. The slot is now accepted universally and stored on the manifest; formats that declare it continue to render it in the AdCP payload. - The ADCP property list resolve endpoint (
GET /lists/{listId}) now supports pagination viamax_resultsandcursorquery parameters and returns apaginationobject withhas_more,cursor, and (on the first page)total_count. Defaults to 1000 identifiers per page; max 5000. - Storefront demand contact now enforces a both-or-neither rule: name and email must be set together or both cleared. The operator UI has an explicit “Remove contact” action, and partial updates that would leave the pair half-set are rejected with a validation error.
2.110.0 — May 19, 2026 at 3:31 AM UTC
- Added a demand-contact name and email to the storefront configuration. Operators can curate the person who fields buyer demand signals (RFPs, prospective briefs, weekly digests); the fields are surfaced via
GET /api/v2/storefrontasdemandContactNameanddemandContactEmail, and can be edited any time throughPUT /api/v2/storefront. Passnullto clear either value. - Fixed two ways a customer’s operator domain could be incorrectly auto-verified:
-
- Parent-fallback ignored the child’s own domain. The CHILD-customer verification fallback was returning
verifiedwhenever the parent customer had any active member matching the parent’s registered domain, regardless of whether the child’s owncustomerDomainmatched the parent’s. As a result, a child customer parented under (e.g.) Scope3 could appearverifiedfor an unrelated operator domain because Scope3 employees matchscope3.com. The fallback now only applies when the child’scustomerDomainequals the parent’scustomerDomain.
- Parent-fallback ignored the child’s own domain. The CHILD-customer verification fallback was returning
-
- Approval rows were keyed only by customer. Each
customer_domain_approvalrow is now bound to the specific domain it was issued for (approved_domaincolumn). Previously the read path returnedverifiedwhenever any approval row existed for a customer, even if the customer had since changedcustomerDomainto a different value than the one originally approved. Legacy rows withoutapproved_domainare no longer trusted; customers who still qualify via an active member’s email re-verify automatically on the next read, otherwise a SuperAdmin must re-attest under the current domain.
- Approval rows were keyed only by customer. Each
2.108.0 — May 18, 2026 at 10:48 PM UTC
- Creatives now support promoting a different asset to “primary” (the renderable source). Pass
primary_asset_idon the update endpoint to demote the current primary and promote the target asset. Only IMAGE, VIDEO, AUDIO, HTML, and VAST assets may be set as primary. - Pre-launch campaigns can now be edited freely. Start date and pacing periods may be modified after the original start date has passed, as long as the campaign has no live media buys (any non-draft, non-archived buy blocks the edit). Pacing periods also accept a budget or weight of
0so a single week can be skipped without removing the period. - Cleaned up the campaign creative assets page: the upload modal no longer auto-opens when a creative has unresolved HTML asset refs (the missing-assets banner now has an inline upload button instead), and the Native copy tab is always visible across both the create-creative flow and the upload-to-existing-creative modal with clear empty states when a format hasn’t been picked or doesn’t declare native slots.
- The single-creative upload paths on the campaign creative assets page (both create-creative and add-files-to-existing) now accept
.ziparchives. Dropped zips are expanded client-side into their constituent files before upload, matching the behavior of the bulk upload modal. Nested zips are extracted recursively, so standard HTML5 ad bundles work in all upload spots. - Embedded managed sales agents now support SpringServe and FreeWheel in addition to Google Ad Manager.
- When connecting an ad server you can pick the adapter type and supply the appropriate credentials:
- Google Ad Manager — Scope3 provisions a per-customer service account; you grant it access in your GAM admin console and supply your numeric network code.
- SpringServe — log-in email + password (the salesagent caches a 2-hour token and refreshes it automatically). An API token is also accepted for testing.
- FreeWheel — Publisher API username + password (auto-refreshing OAuth2 password grant). A 7-day temporary access key is also accepted under the advanced section for testing.
- Publisher-supplied credentials are forwarded to the upstream salesagent tenant at provision time and never persisted by Scope3. Only non-secret display fields (login, environment, default advertiser/demand-partner id) are stored so the UI can render “connected as …” after provisioning. Rotating credentials on a live tenant preserves all tenant state (products, principals, sync history) via the new
PUT /api/v2/storefront/inventory-sources/{sourceId}/adapter-configendpoint. - Fixed the storefront card editor so selecting “North America” no longer renders as “Namibia”. The region group code now uses
NORAM(matching the signals subsystem) to avoid colliding with the ISO 3166-1 alpha-2 country codeNA(Namibia); existing storefronts that storedNAfor the North America group are transparently migrated on read. - Fixed media buy updates being silently dropped by sellers that dedupe on the ADCP idempotency key. The key for
update_media_buypreviously stayed constant across every edit of the same media buy, so a spec-compliant seller would replay the response of the first update for every subsequent one and the new budget/pacing/bid_price/targeting changes never reached the seller’s ad server. The key now incorporates a fingerprint of the request body, so distinct edits get distinct keys while retries of the same edit still de-duplicate as intended. The same fix is applied to cascade pause/resume and to package-level cancellations. - Storefront now surfaces inventory-sync state from the managed sales agent: an active PSA shows a dedicated “Inventory sync” row in the source detail dialog (with a Retry button when failed), and the setup-tasks checklist shows a blocker task when inventory sync has failed and an informational row while the first sync is running. Closes #2549.
- When a managed sales agent adapter probe fails, the storefront UI now shows a specific next step driven by the upstream’s structured
remediationhint: vendor_enables_role— your account doesn’t have the API role this operation requires; contact your SpringServe / FreeWheel rep to enable it.customer_rebinds_account— re-enter your username (or email) + password.customer_rotates_token— paste a fresh temporary access key or API token.- The full upstream message and any
vendor_faultblock continue to be surfaced as supporting detail so support engineers see exactly what the ad server returned. - Storefront inventory-sync state is now webhook-backed. The salesagent’s
sync_run.completed/sync_run.failedevents land on a new agentic-api receiver (POST /webhooks/psa-sync/:customerId/:tenantId, HMAC-signed) and update a persistedinventorySyncblock on each PSA connection — visible to the UI directly viaPsaConnection.inventorySync. The per-PSA/statuspoll cadence drops from 30s to 5 min as a safety net for missed deliveries; the dialog and setup-tasks panel read the persisted state so they reflect sync changes within seconds. - Set
PSA_WEBHOOK_SECRET(shared HMAC secret) andPSA_WEBHOOK_CALLBACK_BASE_URL(defaults toBASE_URL) to enable the webhook path. When unset, the receiver returns 503 and the polling fallback alone keeps the state fresh. Closes the V2 of #2549. - The Connect Ad Server dialog now shows the right copy when GAM rejects a managed-sales-agent setup. Typos point at the network code, propagation delays show the soft “wait a few minutes” affordance, and an invalid service account auto-pages the operator instead of confusing the publisher. The PSA connection’s
lastErrorCodecarries the new typed values (ADAPTER_NETWORK_NOT_FOUND,ADAPTER_PERMISSION_DENIED,ADAPTER_INVALID_CREDENTIALS,ADAPTER_INVALID_CONFIG,ADAPTER_CONNECTION_FAILED) so external API consumers can branch on the failure class instead of parsing the message.
2.107.0 — May 17, 2026 at 9:26 PM UTC
POST /api/v2/storefront/psais now atomic: it provisions the managed sales agent tenant upstream and writes the local connection row in a single transaction. The connection is either fullyactiveon response or no row is persisted, eliminating the in-betweenpending/failedstates that previously required client-side retry plumbing.- Removed
POST /api/v2/storefront/psa/{psaId}/provisionandPOST /api/v2/storefront/inventory-sources/{sourceId}/provision— they are no longer needed. Retries are clean re-POSTs of the original create request. - Added
POST /api/v2/storefront/psa/{psaId}/reactivateandPOST /api/v2/storefront/inventory-sources/{sourceId}/reactivateto bring a deactivated tenant back online without re-running the create flow. - If the salesagent rejects provision with
EXTERNAL_ORG_ID_CONFLICTand returns the conflicting tenant id, the agentic-api now adopts that tenant into a fresh local row instead of erroring. Self-healing when the local DB lost a row but the upstream tenant survived (and friction-free in local dev when a dev wipes the agentic DB but not the salesagent’s). - Fixed click and impression tracker URLs being generated against
/clkand/imppaths, which return 404 on the tracking endpoint. Tracker URLs now point at/agentic/clkand/agentic/impto match the routes the tracking service exposes. New creatives created after this change will produce working tracker URLs; existing creatives need their tracker URLs backfilled separately.
2.106.0 — May 15, 2026 at 10:57 PM UTC
- Storefront compliance checks are now cached for 30 minutes per agent, so the inventory sources page no longer re-runs the full AAO compliance suite on every load. Each agent tile shows a Retry button next to the health label to force an immediate re-check when you need a fresh answer. Tiles also wait for the compliance result before reporting “Healthy”, which fixes a transient mismatch where a failing agent could briefly read as healthy while the check was still in flight.
- Fixed operator-domain verification status flipping between “Verified” and “Pending verification” depending on who was viewing the storefront. Verification is now decided entirely server-side based on whether any active member of the customer has an email matching the registered domain (no longer restricted to ADMIN role), and the decision is persisted with an audit reason so the chip stays stable across viewers.
- Fixed a flickering “Approve GAM service-account access” row on the storefront inventory-sources setup checklist. The row previously reappeared on every refetch of the managed-sales-agent status feed even when the PSA was already healthy and serving — provisioning success itself proves GAM honored the service account, so the row no longer renders once the connection is active. Later revocations continue to surface via the existing sync-failure row.
- Fixed dynamic HTML5 creative previews showing broken images for Google Web Designer (GWD) banners. The asset-reference rewriter now recognizes the
source=attribute used by<gwd-image>custom elements, and template auto-detection picks the HTML template whenever an HTML wrapper is uploaded alongside sibling images (previously the first image in the upload list won, leaving the creative classified as a static image).
2.105.0 — May 15, 2026 at 7:14 PM UTC
- Creative manifests now accept
text_assetsandurl_assetskeyed by AdCP format slotasset_id, so structured formats like native can carry headline, description, business name, disclosure, and landing page copy without uploading text files. The creative dashboard exposes a Native copy form per format spec. - Added storefront reporting endpoint
GET /api/v2/storefront/reporting/metrics. Returns delivery metrics for every media buy that the storefront’s sales agent(s) are a party to, organized as advertiser → media buy → package. Supportssummaryandtimeseriesviews, date-range filters (startDate/endDate/days), optionalinventorySourceIdfilter,download=truefor CSV export, anddemo=truefor synthetic data. - Storefront Communications: the per-event email/Slack toggle table is now hidden until at least one notification destination (notification email or Slack webhook) has been saved. The table’s toggles cannot fire without a saved destination, so showing it beforehand suggested controls that didn’t yet work.
- Validation errors for enum-like fields (e.g.
geo_metros.system,geo_postal_areas.system, campaign status) now list the accepted values in the error message (“must be one of: nielsen_dma, uk_itl1, …”) instead of returning a generic “Invalid input”. - Storefront Communications: when no notification channel is configured, the page now shows a quiet placeholder card (“Connect a channel above to choose which events trigger a notification.”) in place of the per-event toggle table, matching the design.
- The storefront Team page now lists pending invitations alongside accepted members, with Resend and Cancel actions so admins can manage stuck invites without leaving the workspace.
2.104.2 — May 15, 2026 at 2:14 PM UTC
- Company domain now shows as verified immediately when an admin on the account has an email at that domain — no extra approval step required. Previously, new sellers signing up with their own work email saw “unverified” until they created or edited a storefront, which blocked the “Connect an agent” path.
- Fixed
Forbidden: identity_org_mismatchwhen opening a managed sales agent admin UI for storefronts with multiple sales agents. The proxy now stampsX-Identity-Org-Idwith the exact value the upstream tenant was registered with, instead of the unsuffixed customer id. - When provisioning a managed sales agent fails, the storefront UI now keeps the “Connect an ad server” dialog open and surfaces the actual error inline (previously the dialog closed silently and the publisher was bounced back to an unchanged storefront page with no signal). Provisioning failures against the upstream salesagent also fire a high-priority ops alert to Sentry + Slack so the on-call team is paged immediately instead of waiting for a customer escalation. User-fixable failures (e.g. bad GAM credentials) still surface to the publisher inline but do not page the ops channel.
2.104.1 — May 15, 2026 at 7:38 AM UTC
- Fixed “Connect an ad server” tile in the Add inventory source modal being incorrectly disabled when a storefront already had a managed sales agent. Multiple managed sales agents per storefront are supported, and the tile is now always enabled.
2.104.0 — May 15, 2026 at 2:49 AM UTC
- Campaign
constraintsnow accept AdCP-shaped targeting fields directly:geo_countries,geo_countries_exclude,geo_regions,geo_regions_exclude,geo_metros,geo_metros_exclude,geo_postal_areas,geo_postal_areas_exclude,language,device_type,device_type_exclude, anddevice_platform. When set on a campaign, these flow into every media-buy package’stargeting_overlay— include lists intersect with package targeting, exclude lists union. The legacycountriesfield is accepted as a deprecated alias and normalized togeo_countries. - Storefronts can now add multiple managed sales agents (e.g. one GAM network per brand) instead of being limited to one per customer. The managed-sales-agent REST surface is now id-keyed:
GET /api/v2/storefront/psareturns an array,POST /api/v2/storefront/psacreates a new connection, and per-PSA actions live under/api/v2/storefront/psa/{psaId}/.... Existing managed sales agents continue to work without any data migration. - Customer context selected via
customer_switchnow stays scoped across short breaks. The stored selection slides its expiry forward each time it’s applied, so an actively-used customer scope persists until the user is idle for more than 24 hours. - The storefront card is now operator-curated. The
GET /api/v2/storefrontresponse andPUT /api/v2/storefrontrequest body accept five new fields —membershipStatus(AAO_FOUNDING_MEMBER/AAO_MEMBER/NONE),regions(ISO 3166-1 alpha-2 country codes and group codes likeGLOBAL/EMEA),description,channels(ADCP channel codes), andwebsite— so operators can tune what buyers see on Interchange without re-publishing brand.json. brand.json still seeds identity (name, logo, colors, description, website); these overlays let publishers fill in fields brand.json doesn’t reliably carry.
2.103.0 — May 14, 2026 at 11:20 PM UTC
- Added
DELETE /api/v2/accounts/{customerId}to hard-delete a child customer account. The caller must be an admin on the parent (or a Scope3 SuperAdmin) and cannot delete the customer they are currently scoped into. The endpoint refuses with 409 Conflict if the child still has linked resources, so existing accounts with data continue to require a deactivation flow. - Discovered products are now grouped by storefront instead of by sales agent. Each product carries
storefrontIdandstorefrontNamereflecting the storefront it was discovered through. A single sales agent that backs inventory across multiple storefronts now appears under each storefront’s group with its own slice of inventory, so buyers see inventory the way they configure it — one group per storefront they’ve connected to. - Documented the
POST /advertisers/{advertiserId}/log-eventendpoint in the v2 OpenAPI spec for logging conversion and marketing events (ADCP log_event spec). - Fixed a 404 on the embedded storefront’s “Create product” flow caused by app-level salesagent JSON APIs (e.g.
/api/formats/list?tenant_id=…) not being routed by the storefront proxy. The proxy now also forwards/storefront/psa/api/*to upstream/api/*, resolving the tenant from thetenant_idquery parameter for session validation. This unblocks the format/targeting widget and the downstream 500 onproducts/addthat resulted from posting with empty targeting data. - Fixed an issue where users signing in through enterprise SSO could be silently rejected when the WorkOS access token didn’t carry an exact-match email claim. User lookup by email now falls back to a case-insensitive match so a casing skew between the identity provider and the user record no longer blocks first-time login; subsequent API calls additionally fall back to the WorkOS user id, and the auth middleware logs a warning that names exactly which claims the token did carry, so the failure mode is no longer invisible.
- Fixed an SSO sign-in failure where users with accumulated duplicate auth cookies (for example, a host-only
staging.interchange.iocookie alongside the parent-domain.staging.interchange.iocookie) were silently bounced back to the login page. The browser was sending both cookies on the same request and the server was reading the stale one, so the freshly minted session was unusable. Auth cookie writes now emit clear directives for every historical (domain, path=/) variant before setting the fresh value, so affected users self-heal on their next successful sign-in.
2.102.0 — May 14, 2026 at 2:20 AM UTC
- Reworked the campaign creative assets page: replaced the creative dropdown with a server-paginated list view of all creatives for the campaign (search, multi-select with bulk delete, per-row quick edit and delete) and added a back link from the creative detail view. The list also auto-picks the first advertiser and campaign on landing so you see content immediately instead of empty filters.
- Bulk re-uploading creatives no longer creates duplicates. When a creative manifest with the same name already exists in a campaign, the create endpoint returns the existing manifest with
already_exists: trueinstead of inserting a duplicate. If the request carried files, the response also includesignored_fileswith the count that was dropped (use the update endpoint to add or replace assets on the existing manifest). The bulk upload UI surfaces this as a distinct “Already uploaded” row state with an “N files ignored” hint when applicable, so users can safely re-run a partial upload to finish what was missed. The pre-batch row label changed from “Queued” to “Waiting” to avoid implying a server-side queue. - Fixed a bug where a user invited as admin to a customer they already had a default permission for was silently kept at their lower role. Accepting an invitation now upgrades the existing permission to the invited role (never downgrades).
- Fixed an MCP session bug where switching into another customer would silently revert to the user’s home customer whenever the session was recreated on a different pod. Subsequent writes (e.g. campaign creation) now consistently land in the customer the caller switched into.
- Added a way for admins to invite specific people (vendors, contractors, new teammates) to their customer’s existing Slack or Teams support channel without changing seat membership. Available via the new
POST /api/v2/customer/communication-channel/invite-usersendpoint and the “Invite people to the channel” form in both the admin support-channels section and the storefront Communications settings. Newly invited seat members are now also automatically added to the communication channel when one is provisioned. The communication-channel POST endpoints (set provider, resend invite, invite users) now require anADMINorSUPER_ADMINcustomer role. - MCP clients (Claude Code, Claude Desktop, mcp-remote) can now auto-discover OAuth on the
/mcp/*endpoints. Previously, 401 responses from these endpoints did not advertise the OAuth Protected Resource metadata, so clients without a pre-configured API key had no way to initiate the OAuth flow. They now include a standards-compliantWWW-Authenticate: Bearerchallenge pointing at/.well-known/oauth-protected-resource. POST /api/v2/buyer/campaignsnow rejects withACCESS_DENIEDwhen the request’s customer context does not match the advertiser’s owning customer. Previously, unscoped SuperAdmin sessions could create a campaign tagged to their home customer while pointing at another customer’s advertiser, producing cross-customer data that was invisible to the advertiser’s actual customer.
2.101.0 — May 14, 2026 at 12:20 AM UTC
- Disconnecting an external ADCP agent now keeps the source visible in the inventory list as “Deactivated” (mirroring the managed-sales-agent lifecycle) instead of archiving it. The source detail dialog shows a single “Reconnect” action for a deactivated agent. Reconnecting a
NO_AUTHagent no longer fails with a spurious “Cannot activate agent without authentication configured” validation error. - Extend org-admin-on-parent access to a few remaining surfaces that still required a direct user_permission row on the target customer. The MCP customer_switch tool, the stateless MCP current-customer overlay, and the accept-tos endpoint now all honor admin permission on a parent customer, matching the behavior introduced for service-token creation.
- Fix unsupported MIME types on creative uploads being rejected as ECONNRESET (connection reset) instead of a clean 400 Validation Error.
- Fixed creative file uploads failing with “Unsupported file type: application/octet-stream” when clients (such as Safari or generic HTTP tools) do not set an explicit MIME type. The server now resolves the actual content type from the file extension and returns a proper 400 validation error instead of a 500 when the MIME type cannot be determined.
- PSA provision now returns 503 (instead of 500) when the per-customer service account exists but its Secret Manager key is not yet retrievable. This matches the existing 503 surface for the “SA missing” case and tells the storefront UI to retry rather than showing a generic server error.
- Map upstream salesagent Tenant Management API failures (network errors, 5xx responses, wire-shape drift) to 503 Service Unavailable instead of 500. The storefront UI can now show a “retry” state when the PSA backend is briefly unhealthy instead of a generic server error.
- Added a multipart upload endpoint for property lists (
POST /advertisers/:advertiserId/property-lists/upload) that accepts xlsx or csv files up to 100,000 identifiers per request. Removes the need to batch large exclusion or inclusion lists through repeated JSON calls. - Added a campaign-scoped visibility endpoint (
GET /campaigns/:campaignId/property-lists) and anincludePropertyLists=truequery flag onGET /campaigns/:campaignId. Both return the property lists actually applied to a campaign via its media-buy packages, so callers can verify exclusion / inclusion state at a glance without traversing media buys manually. - Tightened agent guidance on
create_property_listandupdate_property_list: directs the agent to the upload endpoint for large lists, and requires a server-confirmed verification step (list_property_listsafter create,get_property_listafter update) so a write is never reported successful without ground-truth confirmation. - Removed the one-agent-per-storefront limit. Storefronts can now connect as many
AGENTinventory sources as they need;MANAGED_SALES_AGENTrows remain slot-exempt as before. - Storefront homepage now renders real data instead of stubs:
- Inventory source responses include two new optional fields,
reportingTypeandreportingPollingCadence, projected from the underlying agent registration. Use them to show how each agent reports delivery (polling/webhook) and its cadence (hourly,daily, etc.) without a follow-up query. - Storefront setup checklist in the UI now covers operator-domain verification, brand-profile completeness, billing connection, per-source OAuth handshakes, and the GAM service-account grant — each with a deep-linked CTA.
- Source tiles populate the Open work column from
PsaTenantStatusfor managed sales agents, Reporting from the new agent fields, and append the endpoint host and GAM network code as identity chips.
2.100.0 — May 13, 2026 at 6:17 PM UTC
- Adds the Data Delivery Credential entity and the data plane that delivers configured Data Delivery Outputs.
- Credentials: Buyers can now register reusable destination credentials per advertiser via
dataDelivery.credentials[]onPOST/PUT /api/v2/buyer/advertisers. Each credential carries the auth target (e.g., the GCS bucket) and is validated asynchronously by a destination-specific Probe. New and updated credentials are returned withstatus: "PENDING"while the Probe runs; clients should pollGET /api/v2/buyer/advertisers/:id(or call the dedicated revalidate endpoint) to observe terminalVALIDATEDorFAILEDstatus. UsePOST /api/v2/buyer/advertisers/:id/data-delivery-credentials/:name/validateto re-run the Probe after fixing destination-side permissions. - Outputs now reference credentials by name:
dataDelivery.outputs[].deliveryConfigno longer carries thebucketfield. Each Output instead specifiescredentialName(referencing a credential within the same advertiser) and only the per-subscription address (e.g.,pathPrefixfor object stores). The credential’sdestinationTypemust matchdeliveryConfig.type. - Delivery: Configured Outputs now actually ship. A reconciliation workflow materializes Output rows into Temporal schedules, which fire a delivery workflow that exports the data to a staged GCS location and transfers it to the buyer’s destination. Each delivery is recorded in
data_delivery_log. v1 supports GCS only; S3, Azure Blob, Snowflake, and Databricks land additively. - Fix API key creation failing for org admins on child customers. When an admin accessed a child customer via parent-child hierarchy, creating a customer-scoped service token returned “User does not have access to this customer” because the user has no direct UserPermission row on the child. The token is now created as an org-level token in this case, mirroring how SuperAdmin acting on another customer is handled.
- Fixed the Personal API keys page so SuperAdmins impersonating a specific user see only that user’s keys, instead of every personal key at the customer. SuperAdmins scoped to a customer (without user impersonation) keep the admin view that lists all users’ personal keys with the User column.
- PSA provision now returns
503 SERVICE_UNAVAILABLE(instead of400 VALIDATION_ERROR) when the per-customer service account is still being provisioned. The condition is transient — clients should retry — and the new status code reflects that. - Sign-in with Google and SSO now respect the email you type. The login form forwards the typed email as a login hint and asks Google to show its account chooser, so you sign in as the account you typed instead of silently being signed in as whichever Google account your browser already has cached.
- The discovery card modal on
/storefronthas been polished: title is now “Your storefront card” with subtitle “This is how you appear to buyers on Interchange.”, the primary action reads “Edit card” in the brand-primary color, and the floating “Verified” chip has been removed. Card-body typography has been tightened to match the directory rendering. - Fixed
update_media_buyand campaign-update flows incorrectly rejecting updates on media buys with multiple version history rows with “Media buy has no products. Cannot validate creative formats.” Creative format validation now resolves against the live version of the media buy. - Storefronts now get a dedicated GCP service account per customer instead of sharing a single global account. Service accounts are automatically created when a new seller customer is provisioned, with keys stored securely in Google Secret Manager. A SuperAdmin backfill endpoint is available to provision service accounts for existing sellers.
update_campaignacceptspacingPeriodson eachmediaBuys[]entry. Use this to shape spend on one specific media buy (e.g. a heavy-up on a publisher with seasonal or event-driven inventory) without affecting the other media buys under the campaign. The per-buy schedule replaces the campaign-levelpacingPeriodsshape for that buy and uses the samemode+periods[]shape. OnDRAFT/PENDING_APPROVALbuys, the schedule is persisted and used at execute time. OnACTIVE/PAUSEDpaced buys, strict appends are sent to the seller viaupdate_media_buy.new_packages(requires the seller to advertiseadd_packagesinvalid_actions). Bootstrapping pacing onto an unpaced live media buy is rejected, create a new media buy instead. CampaignGETresponses surfacepacingPeriodson each media buy with resolved budgets.- Fixed campaign-level
pacingPeriodscascades inbudgetmode: when appending a new period to a campaign with multiple paced media buys, each period’s budget is now split across the buys proportionally to each buy’s share of total budget. Previously each buy treated the period budget as its own, multiplying total spend by the number of paced buys. - Managed sales agent actions (provision, launch, test connection, refresh, deactivate, status, ad-server config) are now exposed under the unified
/api/v2/storefront/inventory-sources/:sourceId/...surface in addition to the legacy/api/v2/storefront/psa/...routes. New clients should target the inventory-sources path; the legacy/psa/...surface stays for one release while existing UIs migrate. - The managed sales agent now surfaces through
/api/v2/storefront/inventory-sourcesalongside external agents, andexecutionTypevalues move to UPPER_CASE: existing'agent'becomes'AGENT'and the new managed-sales-agent value is'MANAGED_SALES_AGENT'. Inventory-source responses include an embeddedmanagedSablock (provisioning status, tenant id, ad-server config) when the source is managed. - Breaking change: clients reading or writing
executionTypemust use the new UPPER_CASE values. Existing rows are migrated in place (no action required for stored data). The change alignsexecutionTypewith the other UPPER_CASE wire enums on the storefront surface (API_KEY,MCP,SALES, etc.). - Existing
/api/v2/storefront/psa/...endpoints continue to work unchanged; subsequent releases will move actions under the inventory-sources surface. - Disconnecting an inventory source from a storefront now archives the row instead of hard-deleting it, preserving the prior agent binding, original creation time, and audit-trail context. Archived rows are filtered from all list/lookup endpoints, and the same
source_idcan now be reconnected after disconnection. - Breaking: the
statusfield on inventory source responses now returns UPPERCASE values (PENDING,ACTIVE,DISABLED) instead of lowercase. This aligns with every other status field on the API (storefront, agent, media buy). Update any client code that comparedsource.statusagainst lowercase strings. The DB column is also a real Postgres ENUM so dirty values can’t be written through raw SQL. - Storefronts can now federate with each other through “Link a storefront” — a buyer storefront asks a seller storefront to authorize surfacing the seller’s inventory. Once the seller approves, buyer traffic can fan out through the seller’s underlying agents and ad servers. New REST endpoints under
/api/v2/storefront/links(buyer: create / cancel; seller: approve / reject / cancel), plus/api/v2/storefront/storefronts/searchbacking the “Link a storefront” picker. The link state lives inline on the buyer’sinventory_sourcerow — no separate sidecar — and the seller has permission to update thelink_*fields when responding. The link is an authorization handshake only; economic terms (revenue share, scope, exclusivity) are negotiated per-transaction inget_products/create_media_buy, never at link time. - The
/storefrontpage now lives inside a two-tab shell: Inventory sources (the existing unified registry from Path B PR4) and Settings. A page-level header above the tabs surfaces the storefront identity (brand name + handle + “View storefront card” button), and a setup banner tracks the three preconditions to go live — Discovery card (resolved frombrand.json), Inventory source (≥1 connected), and Billing (Stripe Connect). Each banner chip deep-links to the right surface. - The Settings tab covers State (pause/resume), Identity (operator domain + brand.json status), API access (published MCP endpoint), and Billing (deep-linked to the existing
/storefront-billingflow). Visibility, People, Channels, Locale, and Danger sections render as labelled placeholders until their backend wiring lands. - The discovery card modal reads exclusively from the publisher’s
brand.json— if it doesn’t resolve, the modal prompts the publisher to register at agenticadvertising.org (free) rather than offering a manual edit fallback. brand.json is the single source of truth for the discovery card. - The Pause / Resume button in storefront settings is now wired to the API. Pause shows a confirmation dialog since it stops buyer agents from receiving responses to new briefs; resume goes through readiness checks so the same gates that block first-time go-live also block re-activation.
2.99.0 — May 11, 2026 at 8:54 PM UTC
- Add bulk creative upload to the campaign creative assets page. Drop a folder, multi-select files, or a zip and the UI groups them into proposed creatives (one per subfolder, one per loose file, with zips auto-extracted), lets you edit names and remove rows, then uploads them in parallel with per-row progress and retry-failed support.
- Fixed
media_product_listreturningINTERNAL_ERRORwhen an unknownagent_idis passed. The tool now returns a properNOT_FOUNDerror instead. - Password reset now forwards the Firebase
tenantIdfrom the reset-email URL to the backend, fixingINVALID_CODEerrors for multi-tenant users. get_campaignnow returns aperformancesnapshot for each media buy withimpressions,spend,clicks,views,completedViews,conversions,leads, andlastUpdated. The snapshot is refreshed synchronously when sellers push webhook deliveries or when on-demand seller calls fetch fresh data — it represents the latest cumulative totals, not a billing-stable timeseries. For billing-stable daily metrics, continue to use the reporting endpoint.
2.98.0 — May 10, 2026 at 3:18 PM UTC
- Removed the unused
executionConfigfield fromPOST/PUT /api/v2/storefront/inventory-sources. The field was an opaque JSONB pass-through with no consumers; per-execution-type configuration will land as typed fields per integration type when needed. Requests that includeexecutionConfigcontinue to succeed — the field is silently ignored at the schema boundary, matching today’s behavior where it was nulled at the service layer.
2.97.1 — May 9, 2026 at 12:05 AM UTC
- Storefront Go Live checklist now shows agent connectivity/compliance status and hides the Prebid Sales Agent check when irrelevant.
2.96.0 — May 8, 2026 at 6:34 PM UTC
- Fixed a 500 error on
GET /api/v2/buyer/campaigns/:id/productsfor campaigns that have an associated discovery session. - Password reset links no longer auto-verify on page load. Users now click a “Continue to reset password” button before the reset code is checked against the backend. This prevents email security scanners (Microsoft Defender Safe Links, Mimecast, Proofpoint, etc.) from pre-fetching the link and causing the user to see an “expired link” error when they click through. Mirrors the existing signup email verification flow.
2.95.1 — May 8, 2026 at 3:46 AM UTC
- Clarified the Stripe billing copy on the storefront onboarding flow and “Go live” panel to better describe Scope3’s role in consolidated payment processing when sellers opt in or out of Stripe Connect.
2.95.0 — May 8, 2026 at 2:13 AM UTC
- Made storefront billing setup always optional and aligned the buy-side
sync_accountspayload with campaign type and seller billing state. - Seller (storefront):
billing_setupreadiness check now starts as optional for new storefronts. It flips to required (blocker) automatically once a connected agent’s capabilities advertiseagentinaccounts.supported_billing— that’s the buyer-side toggle that asks Scope3 to clear payments, so Stripe Connect becomes mandatory before go-live.- When billing is optional and Stripe is unconfigured the readiness check returns
status: optionalwith description copy warning the seller their sales agent is limited to external agreements with buyers (Scope3 will not clear payments; seller must bill the buyer directly). - When billing is required (some agent supports
agentbilling) the readiness check returnsstatus: missing/partialwithisBlocker: trueand explains why. - The storefront onboarding UI consumes the readiness check directly — the “Set up billing” step’s required/optional label and copy track the server.
- Buyer (media buy execution):
- On every media buy execution, the
billingfield sent tosync_accountsis now resolved per buy: -
ROUTEDcampaigns always sendbilling: operator.
-
DECISIONEDcampaigns against a Scope3-hosted seller without Stripe Connect are forced tobilling: operatorand an internalno_seller_billingflag is logged for ops; the seller’s billing status is never echoed back to the buyer.
-
DECISIONEDcampaigns against a seller with billing honor the buyer’s choice (agentoroperator) when supplied viaexecuteMediaBuyoptions. When the buyer doesn’t specify, the default isagent(Scope3 clears) — the happy path on DECISIONED campaigns.
2.94.0 — May 7, 2026 at 7:01 PM UTC
- Storefront agent picker (
GET /storefront/discover-agents) now only surfaces agents that are actually present in the canonical AAO agent registry. Agents that an operator self-claimed in their AAO operator profile but never registered are filtered out, so the modal can no longer offer agents that the connect call would reject. - The connect-time AAO registry gate on
POST /storefront/inventory-sourcesnow applies uniformly to every caller — the SuperAdmin bypass and thecomplianceBypassedresponse field have been removed. Failing or pending AAO compliance still does not block connecting an agent (going-live continues to be gated by storefront readiness). - Buyer storefronts and product discovery now line up around storefront-level visibility:
GET /api/v2/buyer/storefrontsaccepts avisibilityquery parameter. The defaultvisibility=publiccontinues to return ACTIVE storefronts available to any buyer;visibility=privatereturns ALL storefronts (ACTIVE, PENDING, DISABLED) owned by customers in the caller’s parent org. Buyers can set up credentials, link advertiser accounts, and discover products against any of their parent org’s storefronts regardless of lifecycle state. List and detail responses now include astatusfield on each storefront.GET /api/v2/buyer/storefronts/{storefrontId}no longer 404s when an ACTIVE storefront has no active inventory source — it returns the storefront record with an emptysources[]array. Previously the detail endpoint required at least one wired-up source; that requirement only made sense when the list endpoint hid those rows, which is no longer the case.POST /api/v2/buyer/discovery/discover-productsandGET /api/v2/buyer/discovery/{discoveryId}/discover-productsnow expose a storefront-level filter and no longer acceptsalesAgentIds/salesAgentNames. UsestorefrontIds(integer array, IDs fromlist_storefronts) andstorefrontNames(string array, case-insensitive substring) instead. An empty array on the request is treated the same as omitting the field — both mean “no request-level filter,” and the campaign-level pin is used as the fallback when acampaignIdis also provided.- Campaigns can be pinned to a set of storefronts.
create_campaignandupdate_campaignaccept a newstorefrontIdsfield. When set, everydiscover_productsrun for that campaign auto-applies the pinned filter — buyers don’t need to resend it on each call. Pass an empty array onupdate_campaignto clear the pin. On the campaign response (get_campaign,list_campaigns,create_campaign,update_campaign) the pin is surfaced as a hydratedstorefrontsarray — each entry has the storefrontid,platformId, andnameso the response is renderable without a follow-up lookup. - The
CUSTOMER_SCOPE_REQUIREDerror fromapi_callnow includes the user’s available customers (id + company) and a directive suggestion in its structured payload, so agents can callcustomer_switchdirectly without first callingcustomer_list. - Reporting endpoint cleanup:
- “All time” reporting (
days=0) now returns the actual range of available data (first impression to today) instead of a hardcoded2020-01-01placeholder. The MCP reporting widget initializes from the requested range instead of always defaulting to the last 7 days. - Removed the
breakdownquery parameter fromGET /api/v2/buyer/reporting/metrics. It was a UI-only hint with no effect on the returned data; agents no longer have to ask the user a redundant “how do you want it broken down?” question. The MCP reporting widget’s chart group-by dropdown still works interactively. - CSV exports now round derived metrics (
Spend,eCPM,CPC,CTR,Completion Rate) to at most 4 decimal places, eliminating JS floating-point artifacts like50.00000000000001. - Fixed
/auth/sign-upreturning a misleading “Password is too weak” message when the failure was actually a backend validation error or other unrelated issue. The catch block now matches the structured WorkOSpassword_strength_errorcode instead of the substring “password” appearing anywhere in the error body.
2.93.1 — May 7, 2026 at 12:58 PM UTC
- Fixed ADCP webhook endpoint returning HTTP 500 when a sender’s HMAC signature was invalid. Signature verification failures from the SDK now return HTTP 401 with
UNAUTHORIZEDinstead ofINTERNAL_ERROR. Added a fallback verification path that accepts the legacy rawADCP_WEBHOOK_SECRETso sellers provisioned before the per-agent key derivation rolled out can keep delivering webhooks while their stored credentials are rotated.
2.93.0 — May 7, 2026 at 12:07 AM UTC
- Added managed Prebid Sales Agent (PSA) provisioning for storefronts. New endpoints under
/api/v2/storefront/psaaccept a GAM network code, expose the shared service-account email a publisher must grant access to, and provision a per-storefront PSA tenant against the upstream salesagent Tenant Management API. A newpsa_connectionreadiness check appears in/api/v2/storefront/readiness. Provisioning, test-connection, and deactivation flows are end-to-end whenSALESAGENT_TENANT_API_URLandSALESAGENT_TENANT_API_KEYare configured; without them the endpoints return 503 with a clear “not configured” message. - Add buyer-advertiser routing rules to managed sales agent storefronts. Publishers can now map specific
(operator, brand_house, brand_id)triples to dedicated GAM advertisers and see which buyers in recent traffic are still falling back to the tenant default. New REST endpoints under/api/v2/storefront/psa: GET /mappings— list routing rulesPOST /mappings— create a rulePATCH /mappings/{id}— update a ruleDELETE /mappings/{id}— delete a ruleGET /recent-buyers— distinct buyer triples seen in recent traffic, with the precedence step that won the resolution chain- The storefront homepage gains a “Buyer routing” panel that surfaces both lists side-by-side, with a “Pin to rule” CTA on recent buyers that pre-fills the create dialog.
- Two storefront onboarding cleanups:
- Sync state moves out of the agent card into the dedicated
Importing your inventorypanel below. The card row now shows just operational metrics (workflows, products, packages, creatives) without sync controls squeezed in. The sync panel always renders when the tenant is active and adapts its title to state:Inventory(synced + non-empty),Inventory sync needs attention(synced + empty), orImporting your inventory(running). Refresh button + view-sync-details deep-link live in the panel header. - Setup tasks panel now filters out platform-managed publisher items the upstream emits but the publisher can’t act on in embedded mode (
ad_server_connected,tenant_name,tenant_cname,sso_configuration,multiple_currencies,currency_limits,gemini_api_key,slack_integration,signals_agent). Stopgap until the sales agent suppresses these insetup_tasksforis_embedded=truetenants. Visible items now match what the publisher can actually do — products, principals, creative guidelines, naming conventions, etc. - Hand buyer-advertiser routing back to the sales agent. The Storefront-side
Buyer routingpanel + create/edit dialog and their REST endpoints (GET/POST/PATCH/DELETE /api/v2/storefront/psa/mappings,GET /api/v2/storefront/psa/recent-buyers) are removed. The data lives in the sales agent and so does the management UI — publishers manage routing rules from inside the iframe’s settings/advertisers surface. Storefront keeps the default-advertiser fallback (the one piece publishers commit to early during onboarding); per-buyer mapping work moves entirely upstream. - Inventory sync visibility on the storefront homepage is now honest about empty syncs:
- Item count totaled on the agent card. “Last synced: just now · 0 items” tells the publisher at a glance when something went wrong, instead of “synced just now” implying success.
- Sync progress panel keeps rendering when sync completed but a stream imported 0 items (the “synced but empty” state). Title flips to “Inventory sync needs attention” with a warning explaining common causes and a
View sync details →button that deep-links into the sales agent’s inventory page for per-stream run history and re-trigger. - Per-stream errors surface inline with a red message under the stream name when the upstream reports an error string.
- Storefront onboarding polish from the ad-ops audit:
- Properties panel: redesigned around two big counters (registered + authorized for the chosen agent) with a single gap-aware CTA whose copy adapts to the actual gap (“Authorize Interchange on N more properties”, “Register your properties at AAO”, or “Manage on AAO”). The AAO link now carries
?authorize={agentUrl}&return={currentUrl}so the publisher’s pre-fill and round-trip flow is preserved (assuming AAO honors those query params). - Connect Ad Server dialog: spelled out the GAM service-account onboarding path (
Admin → Access & authorization → Users → New user), the recommended role (Administrator, with Order Manager + Trafficker as a fallback), and the “don’t add it under your personal user settings” gotcha that’s the most common stumble. - House domain + public agent URL are now stamped automatically on the upstream tenant on first provision (operator domain + canonical agent URL), so embedded tenants don’t sit with null platform-managed config.
- Sales agent iframe drops the “Back to storefront” wrapper. The salesagent’s embed-aware breadcrumbs (driven by an
X-Embed-Breadcrumb-Rootheader pointing at the customer’s storefront URL) provide a continuous nav lineage from our app into theirs. - Properties panel on the storefront homepage now always deep-links to AAO’s
/publisher/{domain}page as the canonical “manage my inventory” CTA, regardless of whether the publisher self-hosts adagents.json or has AAO host it. AAO’s publisher page handles the three-way fork (self-host instructions, AAO-hosted CNAME, not-configured) and surfaces the per-agent authorization rollup directly. The self-hosted manifest URL stays visible as informational text so publishers can see where their authoritative file lives. - Storefront homepage now defers publisher and advertiser management to the salesagent’s own screens. A single salesagent tenant can rep multiple publishers (Publisher Partners), and advertiser/principal mapping has its own UI on the salesagent (Principals); duplicating those surfaces on the storefront didn’t fit the multi-publisher model. Removed: the AAO-derived “Properties” panel, the
GET /api/v2/storefront/properties-statusendpoint, the “Pick a default GAM advertiser” dialog, thegamDefaultAdvertiserIdfield onPsaConnection, and the corresponding REST endpoint and DB column. Per-publisher AAO state (property registration, adagents.json verification, agent authorization) and per-buyer advertiser mapping both happen in the salesagent now and surface via itssetup_tasksblock, which the storefront’s Sales agent setup panel renders directly. Each setup-task CTA now correctly deep-links into the iframe at the path the salesagent provided. - Polished the Products stat in the storefront homepage’s agent card. The “Manage” CTA was rendering as a heavy filled button that overpowered the surrounding read-only stats (Workflows, Packages, Creatives). Replaced with a subtle underlined text-link beneath the count so the row stays visually consistent.
- Fixed product discovery returning zero products when sales agents emit responses that fail AdCP 3.0 schema validation. The ADCP SDK no longer silently filters partial-shape products out of
get_productsresponses, and any schema violations on a sales agent response are surfaced as a structured warning log with agent name, product count, and the failing fields. Buyers see the actual products that came back even when an upstream agent omits newly required fields likereporting_capabilities. - Two fixes for the inventory sync surface:
- The
View sync details →button now deep-links to/inventory/browseinstead of/inventory. The/inventoryroute is locked for embedded-mode tenants (Sprint 4 platform-managed-page rework); the actionable diagnostic + manual-sync surface lives at/inventory/browse. - Dropped the
Refreshbutton from the inventory panel header. The Tenant Management API’s/refreshendpoint queues SyncJob rows but doesn’t actually kick off the sync threads (salesagent bug). Pressing it produced a misleading “Refreshing… / last run just now / still pending” state. Until that’s fixed upstream, the panel surfaces a single primary CTA (Open sync page →/Manage sync →) that takes the publisher to the salesagent’s working “Sync All” button. - Storefront onboarding now closes the post-provision dead zone:
- New Importing your inventory panel surfaces the three sync streams (inventory, custom targeting, advertisers) with per-stream status while sync is running. Self-hides once everything’s caught up.
- Default GAM advertiser setup task no longer fires before the advertisers sync completes — picking from an empty cache was a dead-end. The task now waits for
syncs.advertisers.status === 'success'. - Buyer routing panel disables its “Add rule” button and shows a “we’re still importing your advertisers” alert until the same sync finishes, so publishers don’t tap into a form whose advertiser list is empty.
- Storefront customers using the managed Prebid Sales Agent now provision real tenants in the embedded sales agent backend. Previously the request lifecycle fell back to a stub client that returned
service unavailable. Five new env vars (SALESAGENT_TENANT_API_URL,SALESAGENT_TENANT_API_KEY,GAM_SHARED_SERVICE_ACCOUNT_EMAIL,GAM_SHARED_SERVICE_ACCOUNT_KEY_JSON,INTERCHANGE_CANONICAL_AGENT_URL) wire the API to the salesagent service deployed in the same cluster. - Surface managed sales agent product counts on the storefront homepage. The new
productsblock on/api/v2/storefront/psa/status(active / draft / archived counts) flows into a clickable Products stat that deep-links the iframe directly to the sales agent’s/productspage. The launch endpoint now accepts an optionalpathfor path-only deep links (sanitized server-side to prevent escaping the tenant prefix). - Adopt the upstream sales agent’s Sprint 1.8 wire-shape additions:
GET /api/v2/storefront/psa/statusnow returns asetupTasksblock whosepublisher-scope items merge into the storefront homepage’s setup task list. Items the upstream marksplatform-scope are dropped — those represent provisioning gaps Scope3 owns.PUT /api/v2/storefront/psa/default-advertisernow round-trips the value to the sales agent before persisting locally. Upstream errors fail the request instead of being silently swallowed, so the publisher’s chosen advertiser can’t drift between surfaces.POST /api/v2/storefront/psa/refreshproxies straight through to the sales agent’s now-live/refreshendpoint.TENANT_NOT_ACTIVATEDADCP errors raised by the sales agent’s natural-key resolution are surfaced as “Publisher hasn’t finished setup yet.” instead of the raw upstream message.
2.92.0 — May 6, 2026 at 6:44 PM UTC
- Buyers can now configure standing log-level data subscriptions per advertiser and per campaign on the v2 advertiser/campaign endpoints. Use the new
dataDelivery.outputs[]array onPOST/PUT /api/v2/buyer/advertisersandPOST/PUT /api/v2/buyer/campaignsto declare what log-level data to ship (MB_DELIVERY,IMPRESSIONS,CLICKS,VAST_EVENTS,CAPI_ATTRIBUTION,MMP_POSTBACKS,MEASUREMENT), the firing cadence (HOURLY,DAILY,WEEKLY), and the destination. v1 supports GCS only — additional destinations land in a follow-up release. Campaign-scoped outputs override advertiser-scoped outputs bydataDeliveryType. Pass an emptydataDelivery.outputsarray to clear; omitdataDeliveryentirely to leave existing outputs untouched. customer_switchcalled without acustomerId(reset to home) now clears the user’s persisted MCP customer selection instead of overwriting it with the home customer ID. Stateless clients fall back to the JWT-default customer when no overlay is present, so the persisted row was redundant on reset, and leaving the home id written there bypassed the multi-customer mutation guard for users who were exiting a switched context rather than committing to home.- Fixed an issue where users who only had read access on their current customer could not accept an invitation to join another customer. Accepting and declining invitations now both require read-level access, matching the fact that invitation acceptance is a personal action authorized by the recipient’s email.
- Fixed the org switcher hiding organizations the user belongs to as a child customer. When you only had a membership on a child organization (and not its parent), that organization was missing from the “Switch org” list, leaving you stranded after switching to a different org. The dropdown now surfaces those memberships directly so you can always navigate back.
- Fixed
customer_switchMCP tool returningINTERNAL_ERRORwhen switching to a non-existent or inactive customer. The tool now returns aNOT_FOUNDerror for missing or inactive customers, andACCESS_DENIEDwhen the user lacks permission for the target customer. media_buy_executenow returnsNOT_FOUNDinstead ofINTERNAL_ERRORwhen the requested media buy ID does not exist.- Fixed an org-settings navigation bug where users with hierarchical or SuperAdmin access to a parent organization could be redirected back to their child customer instead of landing on the org-settings page.
- Fixed SSO sign-in failures showing a misleading “isAuthError is not defined” message instead of the real authentication error. Failed SSO callbacks now display the actual cause returned by the server.
- Fixed an authentication issue where logging in on
staging.interchange.iowould log the user out oninterchange.io(and vice versa). Auth cookies are now scoped per environment so sessions in one environment can no longer overwrite or invalidate sessions in the other. - Existing buyer customers can no longer log into Interchange unless their customer is in the alpha-opt-in cohort. Buyers who are blocked at login are routed to an inline waitlist on the sign-in page; sellers and SuperAdmins are unaffected. New buyer accounts created via “Add account” by an already-enrolled parent are auto-added to the cohort, so child teammates inherit access without manual onboarding.
- ADCP delivery webhook (
POST /adcp/webhook/...) now responds with400 VALIDATION_ERRORand adetails.validationErrorsarray ({ field, code, message }per issue) when the payload fails schema validation, instead of the previous generic500 INTERNAL_ERROR. This lets sales agents self-diagnose payload mistakes (e.g. uppercasepricing_model: "CPM"when the spec requires lowercasecpm) without needing to contact support. - Hid underlying-agent identifiers from the buyer-facing storefront and account-linking endpoints. Buyers now drive the full register-credentials → discover-accounts → link-account flow in
(storefrontId, sourceId)terms — agent identifiers are never exposed. BuyerStorefrontSourceno longer includesprotocol(MCP/A2A). UserequiresCredentialsto drive registration instead.GET /api/v2/buyer/storefronts/credentials— credentials no longer includeagentId/agentName. Each credential exposes asources[]array of{ storefrontId, storefrontName, sourceId, sourceName }listing the storefront sources it gives access to.accountTypeandupdatedAtare now part of the documented response.registeredBymay benullfor legacy credentials that predate registration tracking.POST /api/v2/buyer/storefronts/:storefrontId/sources/:sourceId/credentials— when the source uses OAuth, the response’soauthobject contains{ authorizationUrl, storefrontId, sourceId, sourceName }instead of{ authorizationUrl, agentId, agentName }.GET /api/v2/buyer/advertisers/:advertiserId/accounts,GET /api/v2/buyer/advertisers/:advertiserId/accounts/available, andPOST /api/v2/buyer/advertisers/:advertiserId/accountsacceptstorefrontId+sourceIdto identify the source.partnerIdis no longer accepted.POST /api/v2/buyer/advertisersandPUT /api/v2/buyer/advertisers/:advertiserId— eachlinkedAccounts[]entry takes{ storefrontId, sourceId, accountId, billingType? }.partnerIdis no longer accepted.- Account responses (
AccountOutput,AccountSummary,AvailableAccountOutput, and the embeddedLinkedAccounton the advertiser resource) no longer includepartnerId/partnerName. They exposesources[]of{ storefrontId, storefrontName, sourceId, sourceName }listing the storefront sources that surface the account. The list can be empty when the underlying source has been deactivated — render those accounts as no longer reachable. - Fixed
/auth/check-email-availabilityso that when the backend rejects an email (for example a typo’d domain or a disposable address), the specific reason is surfaced to the caller as a 400 instead of being swallowed as a generic 500 with no detail. - Fixed
sync_accountsfailing when a sales agent’s capabilities were synthesized from its MCP tool list rather than served from aget_adcp_capabilitiesresponse. The call now retries against a v2-tolerant client instead of surfacing as an error.
2.91.2 — May 4, 2026 at 10:40 PM UTC
- Fixed
get_campaignso themediaBuyIdquery param actually narrows the embeddedmediaBuys[]array when called via the MCPapi_calltool. Previously the filter only worked over REST; through MCP it was silently ignored and the full media-buy tree was always returned.
2.91.1 — May 4, 2026 at 10:03 PM UTC
- Fixed duplicate buttons on the storefront Account setup card. The billing step previously showed both “Connect Stripe” and “Setup” side-by-side; now only the primary action renders while a step is in progress.
- Account discovery for advertisers no longer fails when a sales agent advertises AdCP v3 without declaring
adcp.idempotency.replay_ttl_seconds. The platform now retriessync_accountsagainst a v2-tolerant client instead of surfacing the underlying version error.
2.91.0 — May 4, 2026 at 6:27 PM UTC
get_campaignnow returns amediaBuyRefsarray ({ mediaBuyId, status }per buy) placed early in the response so LLM clients can enumerate every media buy on a campaign even when the heavier nestedmediaBuys[]tail is truncated by their context window.get_campaignalso accepts amediaBuyIdquery param (single value or repeated) that narrows the embeddedmediaBuys[]to just the requested buys without changing the campaign object itself.
2.90.0 — May 4, 2026 at 5:00 PM UTC
- Cleaned up the Go live checklist copy on the storefront onboarding page so each item shows a single concise description instead of a redundant action + status pair.
- Fixed Go-live readiness check showing “Billing — Stripe Connect not configured” for child customers that inherit billing from a parent. The readiness check now resolves billing the same way the storefront billing endpoint does, walking up to the parent customer’s
customer_billingrow when the child has none. - Fixed storefront go-live readiness incorrectly flagging agents configured with
NO_AUTHas missing authentication credentials. Only agents that actually require auth (API_KEY, OAUTH, JWT) now gate go-live. - Fixed three creative format pipeline bugs: the Asset requirements panel now recognizes the
primaryslot as satisfied when a CREATIVE_SOURCE asset is uploaded (instead of always reading “Missing”); the creative preview endpoint normalizes assets before forwarding so the remote sales agent’spreview_creativevalidator no longer rejects them for missingasset_type; and creatives built solely from a URL or webhook now correctly tag that asset as the primary creative source instead of leaving every manifest with no renderable primary asset.
2.89.0 — May 4, 2026 at 4:55 AM UTC
- Storefront onboarding and account configuration improvements.
- Documentation improvements.
2.88.1 — May 3, 2026 at 9:18 PM UTC
- Update SSO configuration page to be under account configuration, and improve documentation.
2.88.0 — May 3, 2026 at 7:26 PM UTC
- OAuth discovery metadata (
/.well-known/oauth-authorization-server,/.well-known/oauth-protected-resource,/.well-known/openid-configuration) and the MCPWWW-Authenticateheader now reflect the hostname the client used to reach the API. Requests toapi.interchange.iogetinterchange.ioissuer/endpoints; requests toapi.agentic.scope3.comcontinue to get the legacy domain. Fixes Claude.ai connector setup at the new domain. - Removed the following v2 endpoints and their corresponding MCP tool operations:
/hypotheses,/test-plans,/allocations,/human-feedback,/learning-cycle/run,/belief-state,/testability, and/learning-records. Measurement source, measurement record, and freshness endpoints remain available.
2.86.0 — May 1, 2026 at 9:03 PM UTC
- Added content moderation guardrails on LLM inputs and outputs. User-supplied campaign briefs (
POST /v2/campaigns,PUT /v2/campaigns/:id) are now screened for prompt-injection, jailbreak attempts, and critical content (hate speech, illegal content, violence uplift) before any LLM call. All LLM provider outputs (Claude, Gemini, Bedrock) pass through an output filter that blocks slurs, CSAM, weapons-uplift, and PII leaks, and counts refusal/identity leaks for monitoring. Content blocked by moderation returns422 CONTENT_MODERATION_BLOCKEDwith structured findings. - The
mediaBuys[]array returned onGET /campaigns/:idnow includes each media buy’sstartTimeandendTime, so buyers and agents can see the media buy’s flight window without a separate call. The media buycreatedAtis now stable across versions: editing a media buy no longer rewrites its creation date, and a backfill aligns existing rows so the live row reflects the original creation timestamp. UseupdatedAt(andvalid_fromon historical version reads) to identify when a specific version was created. As part of this work, campaignallocatedBudgetandunallocatedBudgetare now correct while a media buy update is awaiting approval — previously both versions of the in-flight media buy would briefly count toward the allocated total. - Fixed daily delivery webhooks failing with 403 “Agent does not have access to this resource” for buyers using open-auth partner sales agents (e.g. Ozone, CMI Media Group, Planet Nine VDS). The webhook agent↔customer binding check now allows a customer through when they have at least one media buy on the agent, in addition to the existing case where the customer owns the agent. Resource-level tenant scoping in the downstream handlers is unchanged.
- Versioned agreement URLs now follow a
/agreements/<document>/<version>shape: GET /agreements/terms-of-service/{version}(e.g./agreements/terms-of-service/v3-0)GET /agreements/facilitated-agreement-terms/{version}(e.g./agreements/facilitated-agreement-terms/v1-0)- The previous
/agreements/{version}/terms-of-serviceand/agreements/{version}/facilitated-agreement-termspaths are kept as permanent aliases — they serve identical content (no redirect) so historical PSA links and external bookmarks stay valid. Responses on the legacy paths include aLink: <canonical>; rel="canonical"header pointing at the new shape, so log/analytics tooling can normalize on a single URL. Use the new shape for all new integrations.
2.85.0 — May 1, 2026 at 5:04 PM UTC
- Fixed several documentation bugs found in a follow-up audit. The buyer API reference now shows the correct request body for
POST /advertisers/:advertiserId/test-cohorts(cohortTypeanddefinitioninstead of the non-existenttype/percentage/startDate/endDate) andPUT /advertisers/:advertiserId/measurement-config(mmmEnabled,mmmConfig,incrementalityTestingEnabled,brandLiftEnabled). The reporting endpoint is correctly documented asGET /reporting/metrics(was/advertisers/:id/reporting, which doesn’t exist), with the actual hierarchical response shape. The MCP tools section now accurately lists the six registered tools — includingaccept_tos, which buyers must call after their first403 TOS_ACCEPTANCE_REQUIRED. Removed the phantomhelptool entry. Also fixed shared-router notification paths in both buyer and storefront skill files (/api/v2/notifications/..., not/api/v2/buyer/notifications/...or/api/v2/storefront/notifications/...). Removed phantomPOST /event-sources(only/syncexists) and theaccountPolicyghost field from the storefront skill. Conversion API now correctly shows the requiredaccount: { account_id }field. Added five missing storefront routes to the OpenAPI generator (registered agents listing, agent detail, agent OAuth authorize endpoints, storefront audit logs,PUT /billingadmin update, andPOST /billing/account-session) and regeneratedstorefront-api-v2.yaml. - Bump @adcp/sdk to 6.5.0.
- Pulls in two production-correctness fixes for buyer agents on top of the 6.1.0 pre-send AJV ordering fix:
- 6.4.1 strips top-level
nullenvelope fields (errors,context,ext) before validating v2.5 seller responses, so Pydantic-based v2.5 sellers no longer fail discovery withmust be array/must be object. - 6.4.1 wraps
SingleAgentClient.executeTaskin a try/catch so pre-flight errors (feature validation, endpoint discovery, schema validation, version detection, request adaptation) return{ success: false, status: 'failed', error }instead of throwing — restores the declaredTaskResultcontract for callers likelist_authorized_propertiesagainst v2.5 MCP sellers. - 6.2.0 also ships
decideRetryretry semantics for buyer agents (additive; no callers yet). - Storefront compliance responses (
/storefronts/:id/readiness) gain a newsilentvalue on the per-trackstatusenum: the track was wired but observation-based assertions saw zero resources to attest. Distinct frompass(verified) andskip(didn’t run). - Updates to v2 campaigns that target unsupported downstream sales-agent capabilities are now rejected at the API boundary with a
CAPABILITY_NOT_SUPPORTED(HTTP 422) error, instead of failing mid-flight after partial state changes. The error response includes anunsupported[]array detailing each blocked media buy, the agent, and the missing capability. - Added automatic cascade of appended pacing periods to live media buys via ADCP 3.0
update_media_buy.new_packages. Theupdate_campaignresponse now includes apacingCascadeResultblock reporting per-media-buy outcomes (updated,skipped,failed,unsupported). Only strict appends topacingPeriodsare cascaded; insertions, modifications, and removals continue to require manual new media buys. Sellers that don’t advertiseadd_packagesin theirvalid_actionsare reported asunsupported. - V2 list endpoints (
list_*) now return a fixed summary shape, while detail endpoints (get_*) continue to return the full resource. List rows include identity, display, state, categorization, and at-a-glance scalar signals — embedded child collections, long text, and nested configuration objects are no longer returned on lists. - Summary contracts narrowed across the board. Fields that were previously on list responses but now appear only on
get_*: list_advertisers:description,optimizationApplyMode,campaignBudgetType,linkedAccounts,frequencyCaps,utmConfig,linkedBrandlist_audiences:consentBasis,lastOperationStatuslist_advertiser_accounts:advertiser,billingProxy,house,billinglist_creatives:format_previews,auto_detected_template,message,tracking,html_processing,frequencyCaps, per-asset detailslist_campaigns:brief,mediaBuys,audiences,creativeFormats,frequencyCaps,pacingPeriods,performanceConfig,constraints,fees,mediaBudget,allocatedBudget,unallocatedBudget,products,discoveryId,catalogIdlist_buyer_storefronts: fullsources[]array (replaced by counts)list_partner_agents:customerAccounts[]array (replaced by count)- New derived scalars on list responses (replace previously-embedded arrays):
linkedAccountCount(advertisers),sourceCountandconnectedSourceCount(buyer-storefronts),customerAccountCount(partner-agents),asset_count(creatives),tagCount(allocations). - Behavior change on
list_advertisers: theincludeAccounts,includeBrand, andincludeFrequencyCapsquery parameters are removed (they remain available onget_advertiser). - Wire change on
list_test_plansandlist_hypotheses: responses are now wrapped as{ testPlans, total }and{ hypotheses, total }respectively, to match the rest of v2 (both were previously bare arrays). - Wire-format updates:
list_campaigns:budgetTotalandbudgetCurrencyare replaced by nestedbudget: { total, currency }(matchesget_campaign’s nested shape).list_creatives:sync_syncedandsync_agent_countare replaced by nestedsync_status: { synced, agent_count }(matchesget_creative’s nested shape).Campaign.campaignTypeis now optional. Older campaigns where the type was never recorded will returncampaignType: undefined. Code that narrowed against the previously-required field needs a null-check.- Migration: callers that relied on
array.lengthfor child collections should switch to the corresponding*Countfield; callers needing the full resource should switch fromlist_*toget_*for the resources they care about. - Discover Products MCP widget: surface refine errors as a dismissable banner under the controls row (no longer hidden behind the dropdown), move the selection summary below the product cards, and tighten the radius hierarchy (cards 8px, buttons and nested chips/callouts 4px).
- Discovery sessions are now reused across multiple discovery runs within the same campaign. Each run creates a new search context with its own brief, and products are tagged to the run that discovered them. Added a new
GET /campaigns/:id/productsendpoint (andget_campaign_productsoperation forapi_call) to view all staged products with their discovery context and media buy status. - Links in emails, redirects, and UI navigation now resolve to the correct domain (interchange.io or scope3.com) based on where the user is accessing the platform.
- Fixed a crash on the campaign creative assets page when the manifest or format list responses were not arrays.
- Property lists now accept the full set of AdCP property identifier types — sourced directly from
@adcp/client/typesso the schema stays in lockstep with the AAO property registry. Create / update / check endpoints accept a typedidentifiers: [{type, value}]array; the existingdomains: string[]field remains supported as shorthand fordomain-typed identifiers. Property list responses now include typedidentifiers,unresolvedIdentifiers, andregisteredIdentifiersarrays alongside the deriveddomains,unresolvedDomains, andregisteredDomainsviews. The ADCP resolve endpoint (GET /lists/:listId) and/property-lists/checkendpoint return the typed identifiers. Today the local DB resolves web (domain,subdomain) and mobile/CTV app identifiers (ios_bundle,android_package,apple_tv_bundle,bundle_id,apple_app_store_id,google_play_id,roku_store_id,fire_tv_asin,samsung_app_id); other AdCP types accepted by the schema (DOOH venues, podcast feeds, station IDs, etc.) pass validation but currently fall through tounresolvedIdentifiersuntil corresponding inventory data lands. Non-domain types short-circuit to theassessbucket on/checkpending upstream AAO support. - V2 storefront reporting is now driven end-to-end by AdCP 3.00 capabilities.
- Webhook dispatch on storefront media buys is driven by per-product
reporting_capabilities(supports_webhooks/available_reporting_frequencies/available_metrics) and gated by the seller’smedia_buy.reporting_delivery_methods. If the seller doesn’t advertise"webhook", webhook dispatch is suppressed regardless of product-level capabilities. - Offline (bucket) reporting is now configurable per linked partner account. New endpoint
PUT /advertisers/{advertiserId}/accounts/{linkId}/reporting-bucketsets or clears the bucket; passreporting_bucket: nullto clear. After persisting, the seller is notified viasync_accountsusing the spec-definedpreferred_reporting_protocolfield plus a Scope3 transitionalext.scope3_reporting_bucketextension; if that notification fails, the local row is still updated and the response is 503 with the persisted account in the error details. The same operation is exposed via the v2 MCPapi_calltool as the newupdate_account_reporting_bucketoperation. Seller-provisionedaccount.reporting_bucketvalues returned fromlist_accounts/sync_accountsare also persisted, with buyer-supplied buckets winning on conflict. - When a seller advertises offline-only reporting and no
reporting_bucketis configured for an account, media-buy creation now logs a warning and audit-log marker pointing at the configuration endpoint and proceeds (polling viaget_media_buy_deliveryis always available as a baseline per AdCP 3.0). - The
reportingTypeandreportingPollingCadenceparameters on the agent register tool are deprecated. - Product discovery now skips sales agents whose advertised channel coverage does not overlap with the requested channels, instead of fanning out a request the agent will reject. The skipped agents appear in the per-agent debug output (when
debug=true) with a reason likeAgent does not sell requested channels (supports: display, ctv; requested: social). Failed-agent debug output also includes a newskipReasonfield carrying the human-readable rejection text from the agent, useful for the agents that still respond with an error after passing the pre-filter.
2.84.0 — April 29, 2026 at 11:47 PM UTC
- Customer admins can now remove a member from a customer via the admin members page. Removed members lose access immediately and must be re-invited to regain it.
- ADCP integration upgraded to
@adcp/client5.x with hardened webhook handling and new public discovery endpoints. - New public endpoints
/.well-known/jwks.jsonand/.well-known/brand.jsonfor AdCP RFC 9421 request signing — sellers can verify our outbound calls and resolve our brand profile. UpdateCampaignBodynow rejects explicitnull(previously accepted); send omitted fields instead ofnullto indicate “no change”.billingTypevocabulary updated:brandis nowadvertiser. Existing data is migrated automatically.ComplianceTrackResultSchemano longer acceptsexpected— only the documented values are valid.activate_signalMCP tool now requiresdestinations(minItems: 1) per AdCP v3.- Internal: webhook handlers gain per-tenant + per-agent scoping (
customer_id+sales_agent_idin DB predicates), opportunistic RFC 9421 signing on outbound calls, and improved error surfaces (adcpError,correlationId) propagated from the SDK. - Fixed creative attachment to media buys, which had been silently broken in three independent ways. (1) Uploading a creative to a campaign with existing DRAFT media buys was rejected by Postgres because the auto-link query referenced the UPDATE target inside a
LATERALsubquery; the entire transaction rolled back, leavingmedia_buy.creative_idsandmedia_buy_products.creative_assignmentsunchanged, and execution then skipped sales-agent sync. Eligible product/buy pairs are now resolved in a CTE before theUPDATE. (2) TheautoPublishCreativebrand-domain lookup queried theadvertiser_brandstable (renamed toadvertiser_settings) on a column that never existed, leavingbrand_domainundefined on synced creatives — fixed and the silent catch replaced with an actual log line. (3)update_campaignacceptedmediaBuys[].creative_idsin the request body but the service silently dropped it and overwrote with the campaign’s auto-synced creatives, so buyers had no escape hatch when auto-sync was wrong; the field is now honored verbatim (with the existing format/customer/campaign validation inupdateMediaBuysurfacing any errors) and only falls back to auto-sync when the field is omitted. ThemediaBuys[],mediaBuys[].packages[], andmediaBuys[].products[]schemas now use Zod.strict()so unknown keys (typos, removed fields) fail validation instead of being silently stripped — closes the class of bug that hid #3. - When a sales agent rejects
create_media_buywith anadcp_errorenvelope, surface the agent’s actual error code and message instead of the misleading “Sales agent returned completed status but no packages” protocol-violation error.
2.83.3 — April 29, 2026 at 2:59 AM UTC
- Fixed the campaign creative-upload flow so the “Creatives still required” banner clears once a matching creative is uploaded. Previously, a trailing-slash mismatch in
agent_urlbetween a product’s required formats and the uploaded creative’s format caused the requirement to never be marked satisfied. - Fixed format previews not rendering on the creative detail page for some providers and creative types.
- The “Formatted previews” grid is now driven entirely by the format definition: it no longer hides the entire grid when the manifest has no creative-source asset (which happened for webhook- or URL-only creatives), and per-tile media fallbacks tolerate a missing source asset instead of throwing.
- The agent’s
preview_creativeis now called whenever a format is selected, not just when there are no sized siblings. When both sized siblings (e.g.display_300x250_html,display_728x90_htmlfordisplay_html) and agent-rendered previews are returned, the agent’spreview_url/preview_htmlis merged into each sibling tile by matching dimensions so each size shows the actual rendered creative. - Tile labels and iframe titles now show the format ID rather than the per-render ID.
- Fixed
sync_creativesrequest validation error when syncing creatives to third-party sales agents. Per-package assignments are now sent as the spec-compliant array of{ creative_id, package_id }objects and forwarded on the ADCP request.
2.83.2 — April 28, 2026 at 11:49 PM UTC
- Keep the global navigation header (org/account switcher, notifications, account menu) interactive while the Terms of Service acceptance modal is showing. Previously, the modal blocked the entire page, so a stale ToS on the current org prevented users from reaching any other org or account they had access to. ToS is per-customer, so switching is now a valid path forward without accepting on the current org first.
- Block child accounts from accepting Terms of Service against the parent organization’s contract. When a child account’s effective contract resolves via parent fallback, ToS acceptance is refused unless the request comes from an organization admin. The user info response also surfaces a new
tosBlockedReasonfield so the UI can render the right experience: organization admins see an “Accept for the organization” button, while non-admins see a sign-out modal explaining that an organization admin must accept first. - Fixed creatives being rejected before sync to sales agents because the auto-publish flow was injecting domain assets (
brand_name,impression_tracker,click_url) into the creative payload regardless of whether the format spec actually declared a slot for them. Strict sales agents (e.g. Wonderstruck) reject the creative for unrecognized asset keys, and the same hardcoded asset_ids meant agents that name their slots differently (e.g.brand_text,imp_pixel,clickthrough_url) never got those slots filled. - Replaced the per-field injection logic with a single asset-capability registry that walks the format spec, matches each slot by pattern (asset type + asset_id shape), and writes the resolved value using the asset_id the spec actually declared. Adding a new domain field is now one entry in the registry rather than another bespoke injection block.
- Invite-member error toasts now show only the human-readable message instead of the full JSON error blob (e.g. “Too many invitation requests. Please try again in 15 minutes.” instead of
{"errorCode":"...","errorMessage":"..."}).
2.83.1 — April 28, 2026 at 6:25 PM UTC
- Fixed the Terms of Service acceptance modal not appearing when switching into a member organization that has not yet accepted the latest ToS. The check now correctly distinguishes a SuperAdmin impersonating an unaffiliated customer (bypass ToS) from any user — including a SuperAdmin — switching into a customer they are a member of (must accept ToS for that customer).
2.83.0 — April 28, 2026 at 5:36 PM UTC
- Added public, unauthenticated endpoints to serve Scope3 legal agreements as markdown:
GET /agreements/terms-of-service— latest pinned Terms of Service (currently v3.0)GET /agreements/<version>/terms-of-service— versioned Terms of Service (e.g.v3-0)GET /agreements/facilitated-agreement-terms— latest pinned Facilitated Agreement Terms (currently v1.0)GET /agreements/<version>/facilitated-agreement-terms— versioned Facilitated Agreement Terms (e.g.v1-0)GET /agreements/privacy-policy— Scope3 Privacy Policy- Documents are checked into the repository and versioned in code, so the latest pointer is deterministic per release.
- Fixed two cases where creatives could be silently misrouted on media buys. Product format lookups during creative validation now correctly scope by sales agent and customer, so a creative that doesn’t match the active agent’s product is rejected upfront with a clear validation error instead of being silently dropped at the per-package boundary. Products without declared formats no longer receive every creative; they receive none, surfacing the misconfigured product to the buyer.
- Fixed broken endpoint URLs across the v2 docs and clarified how API versioning works.
- Buyer and storefront REST examples now use the canonical
/api/v2/buyer/...and/api/v2/storefront/...base paths everywhere (previously a mix of/api/buyer/...and/api/storefront/..., which only worked via the 308 redirect alias). Shared endpoints —/notifications,/notification-preferences,/notification-email,/slack-configuration,/service-tokens,/accounts,/accept-tos— are now documented at their correct/api/v2/...(no/buyer/segment) paths. Skill-file and OpenAPI YAML download URLs were updated to the same versioned canonical paths. - Added a Versioning section to the Authentication page explaining the difference between the canonical versioned URLs (
/api/v2/buyer,/mcp/v2/buyer, etc. — pinned to v2 across future major versions) and the unversioned aliases (/api/buyer,/mcp/buyer, etc. — 308-redirect to whatever is currently stable). Corrected two notes in the migration guide and the “Built for Agents” page that previously claimed the versioned URLs auto-roll to latest stable, which is the opposite of how versioning actually works. - Also corrected the discovery POST
budgetexample (scalar number, not{ total, currency }), the creative manifest list endpoint (/creativeManifest), the format catalog endpoint (/formats,/creatives/templates), and the polling example forGET /campaigns/:id/media-buy-status(response shape usesmedia_buys[], not a top-levelstatus).
2.82.0 — April 28, 2026 at 2:14 PM UTC
- Added a storefront activity feed for sellers. A new
GET /api/v2/storefront/audit-logsendpoint returns the recent config and inventory source changes for your storefront, and sellers can now access the feed from the home page under the Organization section. - Exposed the activity feed through the MCP
api_calltool on both the buyer and storefront surfaces. Buyers can now list audit log events via the newlist_activityoperation (GET /api/v2/buyer/audit-logs); the storefrontapi_callroutesGET /api/v2/storefront/audit-logsto the same audit log dispatch. - Synced the storefront API documentation with the live route surface. Removed the legacy Pylon-specific
POST /storefront/notifications/provisionandGET /storefront/notifications/statusendpoints from the storefront skill file and OpenAPI spec, and removedpylonAccountIdfrom any documented response. Communication channel provisioning is configured at the customer/account level and is not part of the storefront onboarding flow, so it is not advertised here. Also corrected the storefront API reference (noDELETE /storefront; clarifiedPOST /storefrontis idempotent), aligned/api/storefront/...examples to the canonical/api/v2/storefront/...form, replaced confidential customer placeholder values withAcme, and fixed the AAO builder URL and the agent compliance shape in the storefront skill file. - Added
GET /api/stripe/payment-method-statusto check whether a customer has a payment method on file. The buyer billing page now surfaces a warning when no payment method is configured, so admins can add one before invoices fail to charge. - Fixed six v2 storefront billing operations that returned “Endpoint not found” through the MCP dispatcher despite being documented: provision Stripe Connect account, get billing config, account status, transactions, payouts, and onboarding URL. The underlying REST endpoints were unaffected.
2.81.0 — April 27, 2026 at 9:05 PM UTC
- Added a customer communication channel flow for support: during signup (or via a new Admin → Support tab / home page prompt) customers can opt into a Slack Connect or Microsoft Teams channel (
ext-agentic-[env-]{customer-slug}-{customerId}). The chosen provider, channel name, and invite state are persisted on the customer. For Slack, the channel is automatically linked to a Pylon account and taggedBuyerorSales agentbased on the customer role. - New endpoints:
POST /api/v2/customer/communication-channel— provision Slack/Teams, or passprovider: nullto declineGET /api/v2/customer/communication-channel— read current provisioning statePOST /api/v2/customer/communication-channel/resend-invite— re-send the invite without re-creating the channel- On provisioning, the channel is auto-populated with configured Scope3 internal support staff (buyer or seller list) and all of the customer’s admins. Same-workspace Slack users are added via
conversations.invite, external admins via Slack Connect; Teams external emails are added as B2B guests via the backing M365 group with retries for Graph propagation lag. - Clarified that the
viewsmetric (in reporting and as an optimization goal) refers to viewable impressions (the MRC-viewable subset of impressions, per AdCP), not raw rendered impressions. Documentation and schema descriptions forviews,completedViews, and theMetricGoal.metricfield have been updated to reflect this and to note that a viewability rate goal can be expressed asmetric: "views"with athreshold_ratetarget. - Embed Stripe invoices and pending transactions directly on the billing page for buyer accounts, storefront accounts, and per-storefront child accounts in collapsible sections.
- Fixed an issue where retrying or rapidly clicking “Connect Stripe” could create multiple orphaned Stripe Express accounts for the same client. Provisioning now uses a deterministic idempotency key per customer, so duplicate requests resolve to the same Stripe account.
- Fixed a duplicate-key error that blocked activating new media buy versions when a sales agent accepted an
update_media_buychange. Status sync now performs the version transition atomically, superseding the old version instead of attempting two simultaneously active rows. New media buy versions also activate immediately when the sales agent’s synchronousupdate_media_buyresponse shows the change is already live, instead of waiting up to an hour for the next status poll. - Fixed inflated reporting metrics on
GET /api/v2/buyer/reporting/metricswhen a media buy had a pending update. Both the active and pending-approval versions were being returned in the breakdown, causing the media buy to appear twice and its metrics to be double-counted in the campaign, advertiser, and grand totals. Pending versions (which have no reporting data) are now excluded from the response. - Notifications are now available to all authenticated customers at
GET /api/v2/notifications. Previously the route was registered only under/api/v2/buyer/notifications, which returnedCUSTOMER_ROLE_DENIEDfor storefront customers and broke the in-app notifications bell on storefront login. The legacy/api/v2/buyer/notificationsREST path has been removed; MCPapi_callpaths are unchanged. - Moved SSO Configuration from the user account dropdown to a new SSO tab on the organization settings page. Existing
/sso-configlinks now redirect to the new tab.
2.80.0 — April 24, 2026 at 8:48 PM UTC
- The Connect agents dialog now offers a “Sign in with AAO” button. Signing in via OAuth adds private and member-only agents registered under your operator domain to storefront agent discovery alongside public agents. The token is used only for the active session and is not stored.
- Renaming a storefront no longer regenerates its
platform_id. The identifier is now stable once assigned at creation, which prevents “A storefront with a matching platformId already exists” conflicts when renaming into a slug another storefront already uses. - Added buyer-side frequency cap configuration (
frequencyCaps) on advertiser, campaign, and creative endpoints. Each cap specifies amaxExposureand a rollingwindow(interval+unit). Single GET always includes active caps; LIST endpoints include them whenincludeFrequencyCaps=trueis passed. CREATE/UPDATE bodies accept an optionalfrequencyCapsarray — omit to preserve existing caps, pass an empty array to clear, or supply a new list to replace. - ADCP webhook endpoint now returns proper HTTP status codes for each failure mode instead of a blanket 500. Malformed webhook payloads return 400 with the underlying error message so senders can see what’s wrong, invalid URL path params return 400, and internal infrastructure failures still return 500.
2.79.0 — April 23, 2026 at 10:47 PM UTC
- Added a notification bell to the v2 app header: opens a dropdown of recent notifications with an unread count badge, mark-as-read on click, and mark-all-as-read.
- Tracking pixel URLs now include the advertiser (seat) ID as an
advidquery parameter alongsidecid(creative) andcamp(campaign). Applies to both ADCP asset tracker URLs and HTML-injected tracking pixels for v2 creatives. - Fixed URL-based creative assets (VAST tags, clickthrough URLs, tracker pixels) so the stored filename is derived from the URL (e.g.
tag.xmlorqawolf.com) instead of the URL type label. Also aligned creative update so VAST URLs are stored withasset_type: VAST, matching creative create — previously updates always stored them asasset_type: URL. - Fixed campaign updates failing with “Creative format validation failed” when a campaign has creatives in multiple formats (e.g. video and display) and is linked to format-restricted media buys. Creatives are now filtered per media buy based on product format compatibility before syncing.
- Fixed campaign creation failing with “No active contract found for customer” when a child customer inherits its contract from a parent. Pricing resolution now walks the parent hierarchy to match the same contract-lookup behavior as the rest of the API.
- Updating a property list now retroactively syncs active media buys for advertisers linked to that list, so sales agents receive the refreshed include/exclude properties without needing to recreate the campaign. The update response includes an optional
cascadeSummarysummarizing how many active media buys were notified. - Fixed the
get_media_buy_statusoperation on the v2 buyer MCP tool. It previously returned “Endpoint not found” through the MCP dispatcher despite being documented in the skill; the underlying REST endpoint was unaffected.
2.78.0 — April 23, 2026 at 12:16 AM UTC
- Campaigns now have a
campaignType(DECISIONED or ROUTED) and the budget total includes Scope3 fees. campaignTypeis required when creating a campaign and immutable after creation.DECISIONEDcampaigns means Scope3 is applying real-time decisioning, optimization, or consolidated invoicing and payment processing operations.ROUTEDcampaigns means the buyer is directly connecting to the seller; they transact and settle directly and do not use Scope3’s real-time decisioning or optimization.- Response includes
mediaBudget(allocatable to media buys) and afeesarray with the Scope3 fee breakdown. - Updating
budgetis rejected if the new media budget drops below the sum of existing media buy allocations, or if by reducing the budget the fee would no longer be payable. - ROUTED campaigns only accept media buys whose sales agents require operator authentication; discovery results are filtered to match when a ROUTED campaign ID is supplied.
- Existing campaigns are grandfathered with
campaignType=DECISIONED, an 8% fee rate or custom negotiated price, withmediaBudgetset equal to the existingbudgetso previous spend capacity is preserved. - Updated the “creatives still required” banner on campaign creative assets to group requirements by creative agent and show per-product “one of [formats]” options, matching how products actually require coverage (at least one creative per product, not per distinct format).
- Corrected the v2 buyer skill and
update_campaignschema descriptions for media buystart_time/end_time. Clarifies that a media buy cannot start before the campaign’sflightDates.startDate, and that pacing periods do not strictly govern media buy dates — media buy dates MAY correspond to a pacing period’sstart/endwhen applicable, but are always allowed to be any dates within the campaign flight, with or without pacing periods.
2.77.0 — April 22, 2026 at 8:49 PM UTC
- Added measurement engine endpoints for managing hypotheses, test plans, measurement sources, measurement records, allocations, human feedback, learning cycles, belief state, testability analysis, measurement freshness, and learning records. Includes filtering by flight ID on hypotheses, date range and geo filters on measurement records, and paginated learning records.
- Fixed AAO compliance gating to handle the current registry contract, where
/compliancereturnsstatus: "unknown"for both unregistered agents and registered-but-untested agents. Registered agents without a graded compliance status now pass through storefront source creation instead of being incorrectly rejected. Added handling for upstream 429 responses on property-list bulk resolution so clients see a retryable 503 instead of a 500. - Fixed capability refresh failing for operator-auth sales agents (e.g. Snap) by always authenticating with the agent-level credential instead of resolving through the per-customer credential chain.
- Prevent agents from conflating campaign and media-buy end dates when a campaign has pacing periods. The v2 buyer skill now documents
pacingPeriodsand states that a media buy’send_timecomes from its pacing period’send, not the campaign flight end date. Strengthened theend_timedescription in the v2 update-campaign schema to reinforce the same rule. - Fixed format details endpoint returning an OAuth token resolution error by restricting the seat lookup for an agent to seats whose credential belongs to the calling customer, preventing a seat from another customer (e.g. a master account) from being selected.
- Fixed a bug in the product discovery MCP view where multiple pricing chips appeared selected on products with duplicate pricing option IDs. The selection state now tracks the option by position rather than ID, so products with identical-shape options (same pricing model) render and select correctly.
- Fixed property list endpoints (
POST/GET/PUT /advertisers/:advertiserId/property-lists[/:listId]) to wrap the response in{ propertyList: ... }as documented in the OpenAPI spec. Previously the endpoints returned the bare property list object. - Inventory source creation now requires the partner agent to pass AAO compliance testing. Agents that are not registered or not passing will be rejected with a validation error; temporary AAO outages return a service-unavailable error so the request can be retried.
- Added
optimization_goalsto media buys. Optimization goals (event-based CPA/ROAS targets or metric-based CPC/completion-rate targets) can now be set on a media buy and are applied to every package at execution time. Exposed via the v2update_campaign→mediaBuysentries. Media buy responses now includeoptimization_goals. - Property lists now accept up to 100,000 domains per create, update, and check request (previously capped at 10,000 for create/update and 1,000 for check). Large requests are chunked server-side against the AAO registry and local database, so clients no longer need to split their own batches. Create and update responses now include a
resolutionSummaryobject —totalRequested,resolvedCount,registeredCount,unresolvedCount,resolutionRate— so buyers can see at a glance how many of their submitted domains will actually target. The check endpoint response adds areportIdsarray containing every registry report generated (one per chunk); the existingreportIdfield remains and equalsreportIds[0]for back-compat. - Property list checks now retry once and surface a
503 Service Unavailablewhen the AAO registry returns transient errors (429 or 5xx), instead of failing with a500on the first blip. Clients that retry on 503 will see fewer spurious failures during registry flakes. - Property list checks now retry once when the AAO registry rate-limits a chunk (HTTP 429) instead of failing the whole request, making large bulk checks resilient to brief registry throttling. System service tokens now also pass SuperAdmin-gated checks so operators can drive admin-only flows (e.g. AAO compliance bypass) end-to-end.
2.76.0 — April 21, 2026 at 10:24 PM UTC
- Fixed storefront go-live button hanging when activating a storefront. Activation no longer runs a synchronous agent compliance probe (up to 60s per agent) and is gated only on setup readiness checks.
- Renamed the
VIDEO_VASTURL asset type toVASTon theurl_typefield for creative URL assets. The UI label and backend enum value now both readVAST. Existing stored rows are migrated to the new value. - Reading a storefront now re-evaluates operator-domain verification against the customer’s (or parent’s) registered domain, so storefronts that were saved before auto-verification was available no longer stay stuck as unverified.
- Storefronts operated by a child customer now auto-verify against the parent organization’s registered domain when the child’s own domain is absent or different, so partner-adapter storefronts no longer require manual verification.
2.75.2 — April 21, 2026 at 7:32 PM UTC
- Fixed a bug where the
descriptionfield on advertisers was silently dropped on create and update, and was never returned from get or list endpoints. - Fixed an issue where newly invited users could not see any seats after accepting their invitation. All users now have implicit access to all active seats within their customer, with permissions derived from their customer-level role.
- Show the Stripe Connect billing dashboard (Account / Balances / Payments / Payouts) for all parent and standalone customers on the Billing settings tab, regardless of customer role. Configure the Stripe publishable key so the embedded Connect components actually load, and surface a clear error if the key is missing instead of rendering empty section containers. Also return users to the Billing settings tab after completing Stripe Express onboarding instead of the legacy admin billing page.
- MCP
api_callnow rejects POST/PUT/PATCH/DELETE requests withCUSTOMER_SCOPE_REQUIREDwhen the session’s user has access to more than one customer and has not calledcustomer_switchfirst. This prevents mutating requests from silently landing on the wrong customer. GET requests are unaffected. Agents must callcustomer_switchwith the intended customerId before any mutating request in multi-customer sessions. Applies to both/mcp/v2/buyerand/mcp/v2/storefront. - Require
bidPricewhen adding auction-priced products to a discovery session, and reject unknownpricingOptionIds at add time. Catches these errors early instead of failing later at campaign execution.
2.75.0 — April 21, 2026 at 4:01 PM UTC
- Added an Activity page for buyers that shows a timeline of actions taken on your campaigns, media buys, and related resources (creations, edits, archives, executions, pauses). Filter the feed by time period, advertiser, and campaign. The
GET /api/v2/buyer/campaignsendpoint now also supports anincludeArchived=truequery parameter for retrieving archived campaigns. - Add pacing periods to campaigns. Campaigns can define time-based spend periods with weights or hard budgets. On execution, products are automatically split into per-period ADCP packages with proportional budgets and period-specific flight dates.
- Fixed a 500 error when deleting creative manifests by removing a reference to a non-existent
archived_atcolumn on thecreativestable. - Fixed creatives not propagating to media buys when an existing creative manifest is updated, and added cascade cleanup when a creative manifest is deleted. Non-DRAFT media buys now correctly create a new pending-approval version and notify the sales agent via ADCP when creatives are removed, so the change follows the normal approval flow instead of silently mutating the active version. An empty creative list is now propagated to the sales agent as a clear-all instruction rather than being skipped.
- Creative upload UI now shows the list of format IDs still required based on the products selected for the campaign. The
GET /campaigns/:campaignId/creatives/templatesresponse now returnscampaign_format_idspopulated from the campaign’s products (sourced from media buys and the discovery session) instead of an empty array. - The
update_campaignandlist campaignsresponses now include the creatives assigned to each media buy and package, so callers can confirm which creatives are linked without issuing a follow-up query. Updating a media buy’s creatives now also populates each package’screative_assignments, filtered by the formats accepted by that package’s product.
2.74.0 — April 20, 2026 at 10:38 PM UTC
- Added
allocatedBudgetandunallocatedBudgetcomputed fields to theCampaignresource returned byGET /api/v2/campaignsandGET /api/v2/campaigns/:id. These expose how much of the campaign budget is currently allocated to active media buys (including performance spend from archived media buys) and how much remains available for new media buys, without requiring clients to sum media buy budgets themselves. - Added a new
GET /api/v2/buyer/campaigns/:campaignId/media-buy-statusendpoint that polls sales agents for the live status of all media buys within a campaign. Also available via theapi_callMCP tool as operationget_media_buy_status. A background sync now periodically reconciles media buy statuses to catch transitions that may have been missed by webhooks. - Fixed customer switching for non-admin users in the MCP integrations. The
customer_switchtool is now available in the v2-buyer and v2-storefront MCP integrations, so any user can switch into a customer they have an active membership on (previously only SuperAdmin users could switch via the admin tool). - Fixed MCP sessions being dropped after 4 hours of active use. Sessions now stay alive as long as there is ongoing activity, matching the intended idle-timeout behavior.
- Fixed
GET /api/v2/buyer/reporting/metrics?view=timeseries&download=trueso the generated CSV now matches the summary export columns plus aDatecolumn, with one row per hierarchy leaf (advertiser → campaign → media buy → package) × day. Previously the export silently returned the summary (hierarchy) CSV with no date breakdown, regardless of theviewparameter.
2.73.0 — April 20, 2026 at 4:14 PM UTC
- Added per-package breakdown to the reporting metrics response. Each media buy now exposes its packages with per-package metrics, and every package includes both
productIdand the human-readableproductName. - Added a
metadatafield to optimization suggestions, allowing arbitrary contextual data to be stored and returned alongside suggestion details.
2.72.0 — April 17, 2026 at 9:04 PM UTC
- Enforce campaign flight date guardrails on
PATCH /api/v2/buyer/campaigns/:id. Updates now reject flight date changes that would conflict with non-DRAFT media buys (start before earliest active media buy, end before a media buy’s start or end). Cascade failures to DRAFT media buys now fail the update instead of being silently logged. - Tracking pixel URLs now always include
{MEDIA_BUY_ID}and{PACKAGE_ID}as DSP-resolved macro placeholders, alongside existing{AXEM}and{TMPX}macros. These values are resolved by the publisher at impression time, allowing creatives and their trackers to be reused across multiple media buys and packages. - Agents now auto-activate when authentication credentials are configured, removing the need for a separate activation step before going live. Added auth credential editing to the storefront seller onboarding flow.
- Exposed four v2 storefront onboarding endpoints through the MCP
api_calldispatcher so AI agents can run the full onboarding flow:POST /storefront/resolve-brand,GET /storefront/discover-agents,POST /storefront/notifications/provision, andGET /storefront/notifications/status.PUT /storefrontvia MCP now also auto-verifiesoperatorDomainwhen it matches the caller’s customer domain, matching the REST behavior.
2.70.0 — April 17, 2026 at 5:05 PM UTC
- Audience sync notification emails now name the specific audiences that were synced and summarise the outcome for each, so recipients can tell at a glance which audience the email is about.
- Campaign execution now returns an error when the linked discovery session is not found, instead of silently succeeding with no changes.
- Fixed media buy creation to default start_time to today when not provided or when the date is in the past. Also auto-corrects stale start_time at execution time to prevent errors from draft media buys created before their execution date.
- Made media buy start_time optional — defaults to campaign start date (if future) or today.
2.69.0 — April 16, 2026 at 9:04 PM UTC
- Allow customers to configure an organization-wide notification email address and manage email notification type preferences from the org settings page.
- Redesigned the buyer reporting table with a “Show percentages” toggle, improved visual hierarchy for advertiser/campaign/media buy rows, and aligned empty states with the design system.
- Fixed an issue where creatives added to a campaign after media buy execution were not assigned to packages on the sales agent side.
- Increased per-audience member limits for the audience sync endpoint from 10,000 to 100,000 for both add and remove operations.
2.68.0 — April 16, 2026 at 3:09 PM UTC
- Fixed re-executing an active campaign with new products for the same sales agent now correctly creates additional media buys instead of silently skipping them.
- Fix customer switching for SELLER accounts by moving role-agnostic routes (accounts, service tokens, notification preferences, contracts, Slack configuration, ToS) from buyer-only router to a shared router accessible by all customer types.
2.67.0 — April 16, 2026 at 1:04 AM UTC
- Fixed an issue where the OAuth authorization popup window would not reliably close after completing authorization. The OAuth completion page now notifies the originating window when authorization is complete, allowing connected sessions to refresh automatically without a manual page reload.
2.66.0 — April 15, 2026 at 8:08 PM UTC
- The Buyer API has been migrated from Sales Agents to Storefronts. The new
GET /api/v2/buyer/storefrontsandGET /api/v2/buyer/storefronts/:storefrontIdendpoints replace the previous sales agents endpoints, returning storefronts with their associated inventory sources and credential/connection status. - Credentials for inventory sources are now registered via
POST /api/v2/buyer/storefronts/:storefrontId/sources/:sourceId/credentials, replacing the previous per-agent credential registration endpoint. - Registered credentials can now be listed via
GET /api/v2/buyer/storefronts/credentials. - API error responses now follow a consistent envelope format:
{ "data": null, "error": { "code": "...", "message": "...", "field": "...", "details": {} } }. Thefieldproperty identifies which specific input caused the error when applicable. - MCP tool errors now return structured error objects with
code,message,field, andsuggestionfields in addition to a human-readable text message, making it easier to handle errors programmatically. - Two new error codes are now documented:
INVALID_STATE(400, operation not allowed in current resource state) andINTERNAL_ERROR(500, contact support). - Fixed an issue where the
agentIdfield was incorrectly included in buyer storefront API responses. - Fixed an issue where buyer storefront queries used an incorrect column, which could cause incorrect results.
- Fixed a bug where users with an invalid customer ID in the URL were not properly redirected to their correct customer context.
- Fixed back navigation, password validation, and rate limiting behavior in the sign-up flow.
- Fixed an issue where parent customer accounts were incorrectly blocked by the buyer/seller role gate.
- Added
productIdto package-level reporting metrics.
2.65.0 — April 15, 2026 at 1:50 PM UTC
- Added new Slack webhook integration endpoints under
/api/v2/buyer/slack-configuration, allowing buyer admins to connect a Slack channel to receive platform notifications. GET /api/v2/buyer/slack-configurationretrieves the current Slack configuration; the webhook URL is masked in the response for security.PUT /api/v2/buyer/slack-configurationcreates or updates the Slack configuration, accepting a webhook URL, enabled state, and a list of notification event types to subscribe to.DELETE /api/v2/buyer/slack-configurationremoves the Slack configuration and stops all Slack notifications.POST /api/v2/buyer/slack-configuration/testsends a test message to the configured Slack channel to verify connectivity.- All Slack configuration endpoints require admin-level access; requests from non-admin users will receive a
403response. - Platform notifications are now automatically delivered to a customer’s configured Slack channel when the relevant event type is enabled.
- Fixed an issue where seller and buyer access permissions were not correctly applied in certain authentication scenarios.
2.64.0 — April 14, 2026 at 10:53 PM UTC
- Added refinement support to the
POST /api/v2/buyer/discovery/discover-productsendpoint: you can now pass arefinearray with adiscoveryIdto iteratively refine discovery results (e.g., “more video options”, omit a product, or get more like a specific product). The response includes arefinementAppliedfield describing how each instruction was handled. - Notification preferences have changed from opt-out to opt-in. The
GETandPUT/api/v2/buyer/notification-preferencesendpoints now use anoptInsfield instead ofoptOuts. Only explicitly opted-in notification types will be delivered. - Fixed a bug where the OAuth callback for storefront partner integrations would show a generic error instead of the actual error message returned by the OAuth provider.
- Fixed an issue where the OpenAPI YAML spec was not resolved correctly in production, which could cause spec-serving endpoints to fail.
- Fixed an issue where trace IDs were being surfaced in user-facing error messages; errors now contain only relevant context.
- Improved error logging for campaign creation failures to surface more actionable debug information.
2.63.1 — April 14, 2026 at 5:01 PM UTC
- The user impersonation list now returns all available users instead of being capped at 50, making it easier to find and select users in larger organizations.
- Format group names in the creative format dropdown now display consistently using the format’s source URL, improving clarity when working with multiple format sources.
2.63.0 — April 14, 2026 at 4:19 PM UTC
- When creating a creative, you can now provide a VAST tag URL directly as a primary asset by selecting the new “URL” tab and choosing the “Video VAST” type.
- Creative creation now supports a “Webhook” tab, allowing you to configure a webhook endpoint (with method, timeout, response type, and optional HMAC or API key security) as the primary creative asset source.
- The
VIDEO_VASTvalue is now supported for theurl_typefield on URL assets when creating creatives via the API. - Fixed an issue where media buy execution could fail incorrectly when the response contained an empty errors array rather than actual errors.
2.62.0 — April 14, 2026 at 3:20 PM UTC
- When a user signs up under an existing customer organization, the relevant customer admins are now notified automatically.
- Products can now be removed from completed discovery sessions, not just active ones.
- Fixed an issue where email notification suppression was not applied consistently across all token types.
- Fixed an issue with creative sync where assignment data was not being formatted correctly, which could cause sync requests to fail or behave unexpectedly.
2.61.0 — April 14, 2026 at 1:47 PM UTC
- The
ARCHIVEDstorefront status has been removed. Storefronts that were previously archived have been migrated toDISABLEDstatus. Valid statuses are nowPENDING,ACTIVE, andDISABLED. - Notification emails for user-initiated actions (such as optimization suggestions) are now sent only to the user who triggered the action, rather than to all users on the account.
- Campaign health events now trigger notifications when a campaign becomes active or transitions away from active status, replacing generic create/update/delete notification events.
- Users who are members of a child account can now see their parent organization and sibling accounts in the customer context list, providing complete hierarchy visibility.
- Tracking pixels now include the
tmpx={TMPX}macro in addition to the existingaxem={AXEM}macro on both impression and click tracker URLs.
2.60.0 — April 13, 2026 at 6:49 PM UTC
- The Storefront API now exposes a full set of signals management endpoints: create, list, get, update, delete, and discover signals (
POST/GET/PUT/DELETE /api/v2/storefront/signalsandPOST /api/v2/storefront/signals/discover). - The storefront
enabledboolean field has been replaced with astatusfield supporting four lifecycle states:PENDING,ACTIVE,DISABLED, andARCHIVED. Clients should update any code that reads or writesenabledto usestatusinstead. - Status transitions are now validated — for example, an
ARCHIVEDstorefront cannot be transitioned to any other state. - The
customerIdfield on the delete user endpoint is now optional; requests without it will succeed rather than returning a validation error. - The
ask_about_capabilitytool now returns complete documentation sections without truncation, ensuring responses include the full context needed to answer capability questions.
2.59.0 — April 13, 2026 at 4:31 PM UTC
- The
api_calltool now supports a namedoperationparameter (e.g.,"operation": "list_advertisers") as an alternative to specifyingmethodandendpointdirectly, reducing the chance of incorrect HTTP methods or malformed paths. - When an
api_callfails due to a malformed endpoint (missing path prefix, trailing slash, etc.), the API will now automatically attempt to correct and retry the request rather than returning an error immediately. - OAuth is now supported when creating or editing inventory sources in the UI.
- Child customer users can now see their parent organization and sibling accounts in the customer selector, enabling easier navigation across accounts in a hierarchy.
- Fixed an issue where email notifications were not being delivered due to missing configuration in the API deployment.
2.58.0 — April 12, 2026 at 9:46 AM UTC
- During signup, the company name field is now pre-filled using a brand registry lookup based on your email domain, replacing the previous email domain parsing heuristic. When a match is found, a confirmation message (“We found your company in the brand registry.”) is shown in the form.
- The
POST /auth/check-email-availabilityendpoint now returns an optionalsuggestedCompanyNamefield in the response when a company name can be resolved from the email domain for new customers. - Rate limiting has been applied to
POST /auth/check-email-availability, consistent with other signup endpoints. - Authentication status checks are now cached client-side for up to 2 minutes, reducing redundant network requests during navigation while maintaining session security.
2.57.2 — April 11, 2026 at 4:39 PM UTC
- OAuth and SSO users signing up will now automatically skip the personal details step, as their name and email are pre-filled from the identity provider.
- Fixed an issue where child accounts could fail to resolve their active contract correctly; child accounts will now properly fall back to the parent contract when needed.
2.57.1 — April 10, 2026 at 11:04 PM UTC
- The
accept_tostool is now available in the v2-buyer and v2-storefront MCP contexts, allowing organizations to accept the Terms of Service before making API calls. - Advertiser API responses now correctly return the
idfield across all advertiser endpoints (list, create, get, update, restore). - Validation error messages for tool inputs now consistently read “Validation error for tool” for clearer error reporting.
- Media buy status filtering now includes
pending_creativesandpending_startstatuses in addition to the existingactive,paused, andcompletedstates.
2.57.0 — April 10, 2026 at 10:21 PM UTC
- MCP tool calls now return clear, descriptive error messages immediately when required fields are missing or field values are invalid, rather than failing later with a less informative error.
- Advertiser API responses now consistently return the advertiser identifier as
idacross all endpoints (list, create, get, update, restore).
2.56.0 — April 10, 2026 at 7:58 PM UTC
- Administrators on a parent organization can now switch into and access child customer accounts without requiring explicit per-account permissions.
- The account list now includes child customers accessible through parent organization hierarchy, so all manageable accounts appear in the customer selector.
- A maintenance banner is now displayed in the application when scheduled or active maintenance windows are configured, showing relevant timing and status information.
- Fixed an issue where switching customer context could result in incorrect access permissions or an inconsistent impersonation state.
- Fixed an issue where child customers now correctly inherit their parent’s contract and Terms of Service when they have no contract of their own.
- Fixed an issue where returning from an impersonated customer session now correctly restores the previous customer context and page location.
- Error messages shown in notifications now display the human-readable message instead of an internal error code when both are available.
2.55.0 — April 10, 2026 at 4:50 PM UTC
- Added notification preference opt-out controls: users can now manage which notification types they receive per channel via
GET /api/v2/buyer/notification-preferencesandPUT /api/v2/buyer/notification-preferences. - In-app notifications now respect per-user opt-out preferences, automatically filtering out notification types the user has opted out of.
- Email notifications now respect per-user opt-out preferences, skipping delivery for users who have opted out of a given notification type.
- Signup flow now accepts only Advertiser and Seller as account types; previously accepted types such as “Agency” and “Other” are no longer valid.
- Invitation requirement for joining an existing organization is now enforced by default for all users, without requiring a feature flag to be enabled.
- The audience sync member removal schema has been aligned with the latest spec; the
externalId,hashedEmail,hashedPhone, anduidsfields are now consistently structured. - Fixed a security issue where an OAuth re-registration could allow one customer’s credentials to be overwritten by another customer using the same account identifier.
- Fixed an issue where switching to a customer account via the API could return users scoped to the wrong customer.
- Fixed authentication callback handling to correctly display a fallback for non-standard auth flows and handle missing customer state gracefully.
- Fixed cross-links on the authentication pages to use correct navigation behavior, preventing unintended full page reloads.
- Fixed Terms of Service and Privacy Policy links on the signup page to render as standard anchor links.
- Fixed the
customer_switchMCP tool to return a clear validation error when a non-numeric or invalid customer ID is provided, rather than an internal database error.
2.54.0 — April 8, 2026 at 9:11 PM UTC
- Users now receive email notifications when new notifications are created, keeping teams informed of important updates without needing to log in.
- A new suggestion apply flow has been added with webhook status tracking, allowing optimization suggestions to be applied and their progress monitored end-to-end.
- Discovery session activity is now logged for analytics, enabling better insights into marketplace search and product interactions over time.
- The UI now preserves the intended destination path through account resolution, so users are correctly redirected to their original target after authentication.
- Packages are now associated with a single product via a direct relationship, improving consistency and reliability of package-product data.
2.53.0 — April 8, 2026 at 2:14 PM UTC
- Added a new endpoint
POST /api/v2/buyer/advertisers/:advertiserId/measurement-data/syncfor syncing advertiser performance measurement data to the ingestion pipeline. - Unversioned API paths
/api/buyerand/api/storefrontnow permanently redirect (308) to their versioned equivalents/api/v2/buyerand/api/v2/storefront. - The
sourcefield on measurement data objects now accepts only the valuesadvertiser,mmp, ormeasurement_partnerinstead of any free-form string. - A new optional
source_metric_namefield is available on measurement data objects for mapping raw partner metric names. - Trace context (
traceparent) and MCP session ID headers are now propagated to all downstream service calls, improving end-to-end request traceability. - Fixed a bug where customer-level API users were incorrectly blocked from updating or deleting campaigns that belong to a specific seat within their organization.
- Fixed a data corruption issue where brand profile URLs were being double-serialized, which could cause campaign execution to fail or send malformed data.
- Fixed a bug where the
brand_manifestURL field was not validated, allowing invalid values to be stored and forwarded. - Improved error messages when a tactic cannot be created because no brand is linked to the campaign, replacing a technical internal message with a clearer user-facing explanation.
- When creating an advertiser, the brand is now automatically saved without requiring a separate “Register & Create” action.
2.52.0 — April 7, 2026 at 4:18 PM UTC
- Added new optimization suggestion endpoints to the Buyer API, allowing you to list, view, approve, and reject AI-generated optimization suggestions for your media buys via the
api_calltool. - Expired OAuth tokens are now automatically refreshed when resolving agent accounts, reducing authentication failures for OAuth-connected integrations.
- API responses now include an
x-trace-idheader, making it easier to correlate requests with support when troubleshooting issues. - Fixed a bug where the campaign optimizer job used an incorrect argument format, which could cause optimization runs to fail silently.
- MCP sessions are now reliably consistent across server instances, eliminating cases where customer switches or seat selections made on one server were not reflected when requests routed to a different server.
2.51.0 — April 6, 2026 at 5:38 PM UTC
- Added a new testing endpoint
POST /api/v2/testing/deleteSsoConnectionthat allows deletion of all SSO connections for a given WorkOS organization ID, returning 204 whether connections existed or not (idempotent). RequiresSUPER_ADMINauthentication. - Seat-scoped API tokens now automatically infer the advertiser ID, allowing use of
/advertisers/me/in endpoint paths as a shorthand that resolves to your token’s advertiser. Explicit advertiser IDs in requests are validated against the token scope and will return a clear error on mismatch. - Advertiser account linking now returns a validation error immediately if any requested account is not found or has a sandbox/production mismatch, rather than silently skipping the invalid accounts.
- Fixed a bug where the
deleteUsercleanup endpoint would return a502error if the backend deletion step failed; the operation now completes successfully and reports the partial result. - Non-OAuth inventory source agents are now created in
PENDINGstatus instead of being auto-activated on inventory source creation. - Fixed the Terms of Service modal so the ToS link is now clickable and opens correctly.
- Fixed an issue where
isCustomerSwitchedwas not correctly detected for member-level customer switches, ensuring contract and ToS enforcement behaves correctly when switching between customers. - The measurement config API list endpoint now uses
limitinstead oftakeas the pagination parameter, and response data is accessed atdata.data.items.
2.50.1 — April 3, 2026 at 6:50 PM UTC
- Fixed an issue where the
authConfiguredfield on storefront agent responses could incorrectly reflect a non-existent configuration source, ensuring it now accurately indicates whether authentication is set up.
2.50.0 — April 3, 2026 at 5:58 PM UTC
- Inventory sources can now be edited after creation, including updating the endpoint URL, protocol, authentication type, and credentials.
- A new hosted sales agent setup flow is available when creating inventory sources, simplifying agent onboarding.
- Agents associated with non-OAuth inventory sources are now automatically activated upon source creation, removing the need for a manual activation step.
- A new
GET /billing/accountsendpoint is available for parent customers to view billing status across all managed child accounts. - Billing configuration is now scoped to the customer account rather than the storefront, enabling more consistent billing management across storefronts.
- Parent customers can now accept the Terms of Service directly without needing to switch accounts first.
- The Terms of Service acceptance flow now automatically provisions the required contract, removing a manual step that previously blocked new customers.
- The ToS enforcement error code has been unified: all cases where ToS acceptance is required now return
TOS_ACCEPTANCE_REQUIREDinstead of the previousCONTRACT_REQUIREDcode. - Fixed an issue where customer session context (including account type) was not correctly persisted when switching between parent and child accounts.
- Fixed a bug where parent-account access restrictions were incorrectly applied after switching away from a child account.
- Fixed a bug where a missing
bid_pricefield in campaign execution returned an unformatted error; it now returns a clear validation error. - Fixed an issue where products added via product IDs were missing the
bid_pricefield. - Fixed an issue where the
generation_promptasset status and creative brief were not resolving or clearing correctly. - Fixed a bug where tactic creation failed when no agent was associated with the campaign.
- Fixed an issue where the SSO configuration feature flag was not evaluated for super admins and sellers.
- Fixed distributed tracing context propagation so tool call spans are correctly linked to their originating HTTP request.
2.49.0 — April 2, 2026 at 4:45 PM UTC
- The buyer campaigns list endpoint now supports an
includeMediaBuysquery parameter (true/false); when enabled, each campaign in the response will include its associated media buys with products, packages, and delivery data. - The Creative Assets page filters (Advertiser, Campaign, Creative) have moved into the page header, and the Campaign dropdown no longer requires selecting an advertiser first — you can now search campaigns independently.
- Selecting a campaign in Creative Assets will automatically resolve and set the matching advertiser, improving navigation flow.
- The billing readiness check on the Storefront page is now clickable for admin users, navigating directly to the billing settings page.
- Org settings now support deep-linking to a specific tab via a
?tab=query parameter (e.g.?tab=billing), and tab changes update the URL accordingly. - Fixed an issue where media buys were missing from the buyer campaigns list response.
- Fixed an issue where accounts with a
restrictedbilling onboarding status were not shown the onboarding card to complete their Stripe setup. - Fixed a loading state issue on the billing page where content would not show a skeleton placeholder immediately on load.
- The onboarding card for billing now shows a different message for accounts that have a partially connected Stripe account, prompting them to finish setup.
2.48.0 — April 2, 2026 at 2:13 PM UTC
- Storefront readiness status now surfaces partial states and failure details, giving you clearer visibility into why a storefront check did not fully pass.
- Creative assignments are now reliably tracked per product based on format compatibility, ensuring the correct creatives are associated with each product in a media buy.
- Super admins now correctly bypass the alpha opt-in feature flag, giving them full API access without needing explicit flag enrollment.
- Compliance track results now include an optional
failureReasonfield in the API response, explaining why a track failed or only partially passed.
2.47.0 — April 1, 2026 at 8:10 PM UTC
- When creating a storefront, the
platformIdis now automatically generated from the storefront name (e.g. “CVS Media” becomescvs-media), so you no longer need to provide it manually. - Campaign creatives are now automatically synchronized to media buys when a campaign is updated, removing the need to manage creative assignments manually.
- Product discovery now uses your storefront’s configured inventory sources first, with a fallback to the broader agent catalog, so buyers see a more curated and relevant set of products.
- Storefront compliance checks now load asynchronously, reducing wait times when accessing storefront readiness information.
- A new endpoint
GET /api/v2/buyer/creative-dashboard-url?advertiserId={advertiserId}&campaignId={campaignId}returns a fully-resolved URL for managing creative assets, replacing the previous two-step lookup flow. - Fixed an issue where the contract page incorrectly displayed “No active contract” even when an active contract existed.
- Fixed the discover products selection bar and recommended plan flow to behave correctly.
- Fixed an issue where switching customers did not redirect to the homepage; role-based route guards are now enforced on navigation.
- The advertiser status filter has been moved to the page header dropdown for easier access.
2.46.0 — April 1, 2026 at 1:09 AM UTC
- Non-admin users can now list accessible customers and switch between customer contexts via the MCP
customer_listandcustomer_switchtools, without requiring administrator privileges. - Media buys can now be canceled or archived directly through the campaign update endpoint (
PUT /api/v2/buyer/campaigns/{id}) using the newactionfield ("cancel"or"delete") in themediaBuysarray. - The
/toolsendpoint now enforces Terms of Service acceptance, returning aTOS_ACCEPTANCE_REQUIREDorCONTRACT_REQUIREDerror if the organization has not completed onboarding requirements. - Localhost URLs are now permitted for storefront agent registration when running in a development environment, enabling local agent testing.
- Fixed an issue where account API keys were not displaying correctly and new key creation was failing.
- Fixed a bug where the storefront MCP endpoint was not mounting correctly following a recent rename.
- Fixed an issue where switching organizations from the org settings page did not navigate to the home page as expected.
- Fixed a bug where the admin portal could be incorrectly redirected to a customer-scoped URL.
- Fixed an issue where media buy cache was not invalidated after product budget updates, causing stale data to be returned.
- Fixed a bug where Terms of Service enforcement could be bypassed when switching accounts.
- Fixed format previews not displaying for certain creative types.
- Fixed upstream error details not being forwarded correctly in event logging responses.
- The
confirmStandaloneConversionfield has been removed from the child account creation request body; standalone conversion now happens automatically. - The Storefronts section has been renamed to “Storefront” in the UI and now includes an edit dialog.
2.45.0 — March 31, 2026 at 3:46 PM UTC
- When a new seller account is created, a default storefront is now automatically provisioned for that account.
- Existing seller accounts with a single active sales agent have been retroactively provisioned with a default storefront.
- When a sales agent is registered, a storefront and inventory source are now automatically created for the seller if one does not already exist.
- Product discovery responses now include empty result groups for sales agents that were successfully queried but returned no matching inventory, making it clear the agent was reached but had no products to offer.
- When a sales agent returns zero products during discovery, the response now includes a message indicating no matching inventory was found and suggests adjusting the brief, budget, or filters.
- Fixed an issue where empty results from a sales agent during product discovery were indistinguishable from a null or failed response.
- Failed sales agent queries are no longer surfaced to end users in discovery summaries; only successful agent results are shown.
2.44.0 — March 31, 2026 at 2:19 PM UTC
- OAuth redirect URIs can now be managed dynamically, enabling faster onboarding of new integration partners without requiring a service deployment.
- Access to MCP and API features is now gated behind an alpha opt-in flag, allowing gradual rollout to eligible users.
- The buyer assistant AI has been updated with additional guardrails to reduce inaccurate or fabricated responses.
- Fixed an issue where an empty dropdown in the Creatives section was not labeled clearly and could not be clicked.
- Fixed an issue where the Creatives card was incorrectly visible to seller users on the home page.
2.43.1 — March 30, 2026 at 10:19 PM UTC
- The Event Sources API has been streamlined: individual create, get, update, and delete endpoints have been removed in favour of the sync (
POST /api/v2/buyer/advertisers/:advertiserId/event-sources/sync) and list (GET /api/v2/buyer/advertisers/:advertiserId/event-sources) endpoints only. - Fixed an error on the reporting page that caused it to fail to load metrics data correctly.
2.43.0 — March 30, 2026 at 9:15 PM UTC
- The Partner API has been renamed to the Storefront API. All endpoints previously under
/api/v2/partner/are now available at/api/v2/storefront/, and requests to the old path will be automatically redirected. - The MCP endpoint for the Storefront API has moved from
/mcp/v2/partnerto/mcp/v2/storefront(and/mcp/partnerto/mcp/storefront). - A new
GET /api/v2/buyer/advertisers/{advertiserId}/events/summaryendpoint is available, returning hourly-aggregated event counts (impressions, clicks, conversions, measurements, and MMP events) for an advertiser. Supports optional filtering by event type and custom date ranges. - The events summary endpoint defaults to the last completed UTC hour when no date range is specified, and event data may take up to 1 hour to appear after being reported.
- Two new audience notification event types (
audience.syncedandaudience.sync_failed) are now supported and will be delivered via the notifications system. - All authenticated pages now include the customer ID in their URLs (e.g.,
/208/reporting), making links shareable across users and customer contexts.
2.42.0 — March 30, 2026 at 3:32 PM UTC
- The default UTM parameters applied to advertiser landing page URLs have been updated to better align with GA4 standards:
utm_mediumis now included with the valueagentic, and the creative parameter now uses the standardutm_contentkey instead ofutm_creative. - Fixed an issue where the Advertisers management table appeared empty even when data was successfully returned by the API.
2.41.0 — March 30, 2026 at 3:50 AM UTC
- The Creative Manifest API (v2) is now available, enabling campaign-scoped management of creative assets including HTML processing, format previews, ADCP template detection, and tracking pixel support. Manifests are created and uploaded via the dashboard UI; list, get, update metadata, and delete operations are available via the API.
- Audience sync now delivers a push notification webhook to the buyer upon completion. Provide a
pushNotificationConfig(withurl,authentication, andtoken) in the sync request body to receive the callback. - Storefronts now enforce a readiness gate before going live: setting
enabled: truereturns a400error if required readiness checks are not yet passing. Settingenabled: falseis always allowed without restriction. - Inventory source registration now makes
sourceIdoptional. When omitted, asourceIdis automatically generated from thenamefield (e.g."Auto Generated Source"becomes"auto-generated-source"). - The Conversion Events API (
/advertisers/{advertiserId}/conversion-events) has been removed. Conversion tracking is now handled via event sources; useGET /advertisers/{advertiserId}/events/summarywithtype: "conversion"to view available events for optimization. - Fixed a bug where property list responses contained incorrect data and missing entries. Properties are now sourced from an updated registry for improved accuracy.
- Fixed an issue where per-agent discovery errors were silently swallowed; they are now surfaced in debug output for easier troubleshooting.
- Fixed an issue where the Create Storefront modal opened automatically on page load.
2.40.0 — March 27, 2026 at 12:26 AM UTC
- The
POST /api/v2/buyer/accounts/create-childendpoint now requires acustomerRolefield (BUYERorSELLER) when creating a child account. - Creating a storefront no longer requires a
platformId— if omitted, one is automatically generated from the storefront name. - A new storefront billing page is available, providing Stripe Connect integration for sellers to manage payments, payouts, and balances.
- A new storefront management page is available, showing readiness checks and configuration status for your storefront.
- Discovery card product listings now include biddable pricing indicators and updated fonts and styling.
- The
advertiser_idfield has been removed from the measurement data request body; it is now taken from the URL path parameter and injected automatically. - Pricing option data now includes a
priceGuidanceobject with floor, p25, p50, p75, and p90 price percentile fields when available. - Fixed an issue where media buy requests were not compatible with older publisher versions; the
buyer_reffield is now sent in the expected format for all publisher versions. - Fixed an issue where the customer dropdown was disabled and not properly visible during superadmin impersonation sessions.
- Fixed an issue where the billing page did not prompt users to set up a storefront when none existed.
- The OAuth redirect URI for
bayes.fly.devis now supported.
2.39.0 — March 26, 2026 at 1:19 PM UTC
- Added a new
POST /api/v2/buyer/advertisers/:advertiserId/log-eventendpoint for ingesting conversion and marketing events (purchases, leads, page views, etc.) with support for user matching, custom data, and test event codes. - Added a new
POST /api/v2/buyer/accounts/create-childendpoint allowing admin users to create child accounts under their organization hierarchy, including support for converting standalone accounts. - The
GET /api/v2/buyer/campaignsendpoint now accepts amediaBuyStatusfilter parameter (single value or array) to narrow campaign results by the status of their associated media buys. - The
resolve-accountresponse now includesendpointUrlandauthenticationTypefields. - Users with pending invitations are now automatically routed to the correct customer organization during signup, and the email availability check response now surfaces
pendingInvitationswhen applicable. - Added a
POST /api/v2/buyer/campaigns/:id/reactivateendpoint to reactivate a paused or stopped campaign and cascade the update to its associated media buys. - The property list resolve endpoint has moved from
GET /api/v2/buyer/property-lists/:listId/resolvetoGET /lists/:listIdto align with the expected URL convention used by sales agents. - Audience webhook payloads now use
camelCasefield names consistently. - Fixed an issue where users signing up for an existing domain with a pending invitation could be incorrectly blocked from completing registration.
- Reduced the per-agent discovery timeout from 90 seconds to 30 seconds, resulting in faster error responses when an agent is unreachable.
- The
MediaBuyStatusenum now includesCANCELEDandINPUT_REQUIREDas valid values across relevant API responses and filters.
2.38.0 — March 25, 2026 at 11:36 AM UTC
- Advertisers now support configurable UTM parameters (
utmConfig) at creation and update, allowing you to define custom tracking parameters appended to landing page URLs during clickthrough. Defaults (utm_source,utm_medium,utm_campaign,utm_content,utm_media_buy,utm_package) are applied automatically if no config is provided. - Campaigns now support a
utmConfigfield to set campaign-level UTM parameter overrides, which take precedence over advertiser-level defaults for matching parameter keys. UsedeleteMissing: truefor replace mode, or omit it for additive updates. - Storefront readiness checks now include live agent compliance results, giving you richer diagnostics on agent connectivity and compliance status.
- Discovery product browsing now caches enrichment results (descriptions and relevance summaries) across requests, so repeated browses within the same session return consistent, faster results.
- Fixed an issue where media buy validation errors (such as invalid dates, missing fields, or budget problems) were incorrectly treated as server errors instead of client errors, resulting in cleaner, more actionable error messages.
- Fixed signal tools failing when no seat was selected.
- Fixed an issue where the tracking endpoint used an incorrect authentication key, which could cause measurement sync requests to fail.
2.37.1 — March 24, 2026 at 5:48 PM UTC
- The Storefront API endpoints have been simplified: all storefront and billing routes now use
/storefront(singular) instead of/storefronts/:platformId, since each customer has exactly one storefront. TheplatformIdpath parameter is no longer required for any storefront, billing, or inventory source operations. - The
GET /storefrontendpoint now serves as the single way to retrieve your storefront, replacing both the previousGET /storefrontsandGET /storefronts/:platformIdendpoints. - Billing endpoints (
/storefront/billing,/storefront/billing/connect,/storefront/billing/status, etc.) no longer includeplatformIdin their responses. - Fixed an issue where users who had already been migrated to the new authentication system would receive an unhelpful error during login; they now correctly receive an “invalid credentials” response instead of being sent through a redundant migration flow.
- Improved the error message shown when account setup fails during login migration — the message now suggests resetting your password and no longer references internal migration processes.
- System tokens now have full administrative access when using the
customer_switchtool, resolving an issue where those operations were incorrectly restricted.
2.37.0 — March 24, 2026 at 12:28 PM UTC
- Added a new
POST /api/v2/buyer/syndicate-audienceendpoint that triggers an audience syndication backfill. On success, it returns a202 Acceptedresponse with anoperationId(UUID) that can be used to track the operation. - Fixed the request body format sent to the audience sync endpoint to use camelCase field names, aligning with standard API conventions.
2.36.0 — March 24, 2026 at 8:14 AM UTC
- Added a new suggestion data structure to support optimization recommendations linked to campaigns and media buys.
- Fixed an issue where product selection in the media planning interface could break due to a field naming mismatch, causing pricing options and biddable products to not display or behave correctly.
- Clarified API documentation to distinguish between using the
demoflag (to return synthetic demo data) versus filtering reporting results by an advertiser or campaign whose name contains “demo”. - Fixed incorrect endpoint references in the v2 partner API documentation to match the actual available endpoints.
2.35.1 — March 24, 2026 at 1:06 AM UTC
- Reporting CSV exports are now available via the REST API using the
?download=truequery parameter on the reporting metrics endpoint; the response includes adownloadUrl,fileName, and an expiration timestamp valid for 7 days. - Fixed a bug where the
offset(andlimit) pagination parameters were being ignored when listing advertisers through the API; pagination now correctly respects these values. - Fixed MCP session errors that could cause requests to fail when a client reconnected or sent requests before completing the initialization handshake.
- Fixed MCP App UI rendering issues related to how widget display domains are resolved for different AI client types.
2.35.0 — March 23, 2026 at 3:59 PM UTC
- Storefront billing is now available via Stripe Connect. Partners can provision a connected account, complete onboarding, and view account status, balance transactions, and payouts through new endpoints under
/api/v2/partner/storefronts/{platformId}/billing. - Storefronts now accept an optional
publisherDomainfield (e.g."cvs.com") on create and update, used for Stripe Connect business profile setup. - Notifications now include a
statusfield (success,error,warning, orinfo) and can be filtered by status when listing. - Service tokens can no longer be created using another service token — token creation now requires a user context. Requests authenticated with a service token will receive a
400error if they attempt to mint new tokens. - Fixed an issue where seat invitations were not visible immediately after login. Invitation processing now completes before the auth response is returned.
- Fixed an issue where seat auto-assignment was not triggered when inviting a new customer member via the v1 invite flow.
- Fixed an OAuth session loop and stuck callback page that could occur during MCP authentication.
- Fixed an issue where MCP session IDs provided in an invalid format were silently accepted, which could cause sessions to fail to persist correctly. Invalid session IDs are now rejected early with a warning.
- Fixed a race condition in SSE connections where heartbeat writes could trigger a headers-already-sent error.
- Fixed MCP request IDs not being consistently propagated across the full session lifecycle, improving log correlation.
- The advertiser list endpoint now returns more results per page, matching what the UI displays.
- ChatGPT plugin OAuth now correctly supports dynamic redirect URIs, resolving authentication failures for ChatGPT-initiated OAuth flows.
2.34.1 — March 21, 2026 at 12:52 AM UTC
- Improved reliability of real-time streaming (SSE) connections by reducing the frequency of keepalive signals, preventing unexpected disconnections that some clients were experiencing during MCP sessions.
2.34.0 — March 20, 2026 at 11:12 PM UTC
- The List Advertisers endpoint (
GET /api/v2/buyer/advertisers) now returns a paginated response withitems,total,hasMore, andnextOffsetfields instead of a flat array with separatemeta.paginationwrapper. - Pagination parameters for the List Advertisers endpoint have changed from
take/skiptolimit/offset, with a maximum page size of 10. - The user management API now supports multi-customer views, returning each user’s memberships across all accessible child customers instead of a single permission level per user.
- Inviting a user to a specific child customer is now supported via the optional
targetCustomerIdfield on the invite endpoint. - Updating a team member’s role now accepts an optional
customerIdfield, allowing parent account admins to update roles on child customer accounts. - The measurement data sync endpoint (
POST /api/v2/buyer/advertisers/{id}/measurement-data/sync) has updated field names:start_date/end_dateare nowstart_time/end_time, andevent_id/event_valueare nowmetric_id/metric_value. - The measurement data sync endpoint now requires
metric_id(from a fixed set of supported metrics),unit(currency, count, ratio, or percentage), and at least one entity identifier (advertiser_id,campaign_id,media_buy_id,package_id, orcreative_id). Currency code is required whenunitis"currency". - Fixed an issue where campaigns in terminal states could be incorrectly re-executed; campaign status is now preserved correctly on failure.
- Fixed incorrect data returned by the measurement configuration API.
- The
POST /api/v2/buyer/accounts/create-childendpoint has been removed.
2.33.0 — March 20, 2026 at 9:06 PM UTC
- The List Advertisers endpoint (
GET /api/v2/buyer/advertisers) now returns a paginated response withitems,total,hasMore, andnextOffsetfields instead of a flat array with separate pagination metadata. - Pagination parameters for List Advertisers have changed from
take/skiptolimit/offset, with a maximum page size of 10. - The Measurement Data Sync endpoint now uses updated field names:
start_time/end_time(replacingstart_date/end_date),metric_id/metric_value(replacingevent_id/event_value), and requires aunitfield (currency,count,ratio,percentage). Whenunitiscurrency, a 3-letter ISO 4217currencycode is required. - Measurement Data Sync now accepts additional optional fields:
source,source_platform,external_row_id, andadvertiser_id. At least one ofadvertiser_id,campaign_id,media_buy_id,package_id, orcreative_idmust be provided per measurement object. - The
POST /api/v2/buyer/accounts/create-childendpoint has been removed. - Fixed an issue where campaign execution could be triggered when a campaign was already in a terminal state; campaign status is now correctly preserved on failure.
- Fixed an issue where completed media buys had an incorrect
valid_tovalue set, which could affect versioning and data accuracy. - Fixed MCP session authentication so that session state is reliably consistent across server instances, improving stability for multi-turn agentic workflows.
- The User Management tool now supports multi-customer access, allowing parent account admins to view and manage users across their child accounts in a single call.
- Member invitation now accepts a
targetCustomerIdparameter, allowing parent admins to invite users directly to a specific child customer. - Updating a member’s role now accepts an optional
customerIdparameter, allowing parent admins to update roles on child customer memberships directly.
2.32.0 — March 20, 2026 at 3:31 PM UTC
- Added a new
POST /api/v2/buyer/accounts/create-childendpoint that creates a child account under the authenticated user’s organization. Requires ADMIN role; automatically promotes standalone accounts to parent accounts and grants the requesting user admin access on the new child. - The customer switcher in the application now includes a “New Account” option for eligible admin users, allowing child account creation directly from the navigation menu.
- The API keys page has been updated with an improved layout, clearer section titles and descriptions, and tabs for switching between personal and organization keys.
- Dialog titles for API key actions have been updated to use consistent casing (e.g. “Edit API key”, “Delete API key”, “API key created successfully”).
- The “Delete API key” confirmation dialog now displays a cleaner confirmation message and uses a more appropriate button style.
- The API key secret dialog now shows a “Copied” confirmation tooltip when the token is copied to clipboard, and displays a clearer security warning message.
- The API keys list now displays up to 50 keys per page, up from 20.
- Fixed a layout issue on the API keys page where the list could overflow the screen; it now sizes to fit its content correctly.
2.31.0 — March 20, 2026 at 11:56 AM UTC
- The
GET /api/v2/buyer/campaigns/{campaignId}response now includesdiscoveryId,products, andproductCountfields for campaigns in DRAFT status, reflecting the products selected during the discovery workflow. These fields are not present on campaigns that have been executed. - API requests to v2 REST routes are now blocked with a
403error if your organization has not accepted the Terms of Service or does not have an active contract. Affected responses will include an error code ofTOS_ACCEPTANCE_REQUIREDorCONTRACT_REQUIREDrespectively. Account and contract management endpoints remain accessible regardless. - Fixed an issue where pricing type detection could behave incorrectly in certain v2/v3 pricing scenarios, which may have caused errors when creating or executing campaigns with some pricing configurations.
2.30.0 — March 20, 2026 at 8:42 AM UTC
- Added a new
POST /campaigns/{campaignId}/auto-select-productsendpoint that automatically selects products and allocates budget for performance campaigns using AI-driven scoring, returning selected products, budget context, and a rationale explaining the selection strategy. - API fields across campaigns, discovery, syndication, and catalog endpoints have been standardized to camelCase (e.g.,
bid_price→bidPrice,is_fixed→isFixed,resource_type→resourceType,adcp_agent_ids→adcpAgentIds,publisher_domain→publisherDomain). Update any requests and response parsing that reference the old snake_case field names. - Error responses from API tools now include a
recoveryfield (correctable,transient, orterminal) to help clients determine whether to retry, prompt the user to fix input, or stop. HTTP status codes are also more precise (e.g., 404 for not found, 409 for conflicts, 429 for rate limiting). - Validation error messages throughout the v2 API are now more descriptive and human-readable, making it easier to identify and correct invalid request payloads.
- Fixed a bug where duplicate products could appear in media buy queries.
- Fixed an issue where campaign update requests could incorrectly send conflicting identifier fields simultaneously, which caused update failures.
- Fixed enforcement of operator authentication requirements during agent authorization flows.
2.29.0 — March 19, 2026 at 7:38 PM UTC
- Added a new measurement data endpoint (
POST /advertisers/{advertiserId}/measurement-data/sync) for syncing advertiser performance data as time-series events, supporting upsert semantics with up to 1,000 measurements per request. - Added property list management endpoints (
/advertisers/{advertiserId}/property-lists) for curating include/exclude lists of publisher domains that automatically apply to all campaigns under an advertiser. - Added a domain validation endpoint (
POST /property-lists/check) that checks domains against the AAO Community Registry, identifying blocked domains, normalizing URLs, and flagging unknowns. - Added storefront management endpoints (
/partner/storefronts) enabling partners to create and configure storefronts with inventory sources and an agent lifecycle, replacing the previous partner/agent registration flow. - Added SCD Type 2 versioning for media buys — updating an active media buy now creates a
PENDING_APPROVALversion; the original remains active until the publisher approves the change. - Added a
debugparameter to the product discovery endpoints (POST /discovery/discover-productsandGET /discovery/{id}/discover-products) that returns detailed per-agent request/response logs when set totrue. - Added support for multiple credential sets per sales agent — customers can now register more than one set of credentials for the same agent, with a
credentialIdparameter on the account discovery endpoint to specify which credential to use. - Added multi-account support with endpoints to list accounts (
GET /buyer/accounts), get the current account (GET /buyer/accounts/current), and switch between accounts (POST /buyer/accounts/switch). - The sales agent list endpoint now returns a maximum of 10 results per page and includes a
nextOffsetfield in the response for easier pagination. - Fixed an issue where child accounts incorrectly required users to accept terms of service when the parent account had already accepted.
- Fixed media buy budget calculations in v1 to correctly sum all products and round spend values.
- Fixed a sync failure that occurred after media buy versioning where associated packages could not be found.
- Removed partner CRUD endpoints (
GET/POST/PUT/DELETE /partner/partners) from the v2 API; partner management is now handled through the storefront onboarding flow.
2.28.0 — March 18, 2026 at 8:11 PM UTC
- Campaigns now support an optional
catalogIdfield on both create (POST) and update (PUT) requests, allowing you to attach a catalog to a campaign. Passnullto detach an existing catalog. - The signal
keyTypeenum has been updated:liverampis renamed torampid, and three new values are added —uid2,euid, andpairid. - Parent customer accounts are now restricted from accessing most REST API endpoints directly. Affected requests will receive a
403 PARENT_ACCOUNT_RESTRICTEDerror. Switch to a child account to regain access. - When connecting an MCP client, users with an existing valid session are no longer shown a redundant login page — they are redirected directly to the callback, preventing duplicate browser tabs from opening.
- Media buys are now automatically transitioned to
COMPLETEDstatus once their end time has passed, keeping campaign and media buy statuses consistent without manual intervention. - Fixed an issue where switching customer accounts in an MCP session did not correctly update permission checks for the new account’s type.
- Fixed a bug where the MCP connector flow could display multiple OAuth pages during authentication.
- Resolved an issue where signals were being polled for media buys that had already passed their end time.
2.27.0 — March 13, 2026 at 9:49 PM UTC
- Added support for partner seats when creating organization-level API keys, allowing users to select both advertiser and partner seats with appropriate type disambiguation
- Enhanced audience sync processing to integrate with real-time syndication services, improving audience delivery performance
- Fixed dependency issues with Google Cloud services to ensure reliable BigQuery and Secret Manager operations
2.26.0 — March 13, 2026 at 6:06 PM UTC
- Added multi-currency support in product pricing displays, now showing proper currency symbols (€, £, ¥) based on product currency instead of defaulting to USD
- Added SSO configuration page for admin users to self-service setup single sign-on with their identity providers
- Fixed discovery endpoint performance issues that could cause timeouts during product searches
- Fixed data accuracy issues in V2 reporting by removing duplicate entries that could inflate metrics
- Improved load balancer timeout handling by increasing from 2 minutes to 4 minutes for better reliability
- Enhanced discovery session lookups by removing redundant filters that could slow down searches
2.25.0 — March 12, 2026 at 6:04 PM UTC
- Added advertiser name field to query responses for better identification and filtering
- Fixed media buy creation process to ensure proper validation order and prevent errors
- Improved authentication to support additional Google Cloud Platform credential types
- Fixed API response format to remove unnecessary internal fields and ensure consistent parameter forwarding
- Updated service token creation to allow organization-level tokens without requiring individual user assignment
- Improved credential management system with enhanced security and updated terminology
- Increased API timeout limits to reduce connection errors and improve reliability
- Enhanced deployment stability with longer grace periods for service updates
2.24.0 — March 12, 2026 at 5:20 PM UTC
- Added advertiser name to ADCP queries for improved query context and results
- Fixed service token creation for organization-level tokens to work without requiring a specific user ID
- Updated API response terminology from “credential registration” to “account linking” for better clarity
- Removed deprecated accountResolution field from API responses to streamline data structure
- Fixed query parameter forwarding for MCP queries to ensure proper request handling
- Increased API timeout limits to prevent request interruptions and improve reliability
- Updated API response format to v2 specification for consistency across endpoints
2.23.0 — March 11, 2026 at 8:16 PM UTC
- Added campaign audience targeting functionality to campaigns API - allows targeting and suppressing specific audiences when creating or updating campaigns
- Added timeframe selection controls to reporting metrics - users can now select custom date ranges and preset timeframes (7 days, 14 days, 30 days, all time) when viewing campaign performance data
- Added new suggestion history tracking table to store campaign suggestion status and transitions
- Fixed signal creation tool to make agent ID and access parameters optional for more flexible signal registration
- Fixed issue where certain table formatting was incorrectly triggering interactive UI detection
- Fixed Docker builds by properly scoping gitignore patterns for output directories
- Improved authentication model to enforce stricter security checks across customer boundaries
2.22.1 — March 11, 2026 at 1:43 AM UTC
- Temporarily disabled webhook signature verification to resolve compatibility issues with upstream client libraries
- Fixed linkedAccounts field to return an empty array instead of undefined when includeAccounts=true is specified but no accounts exist
- Improved CSV export reliability by using a dedicated storage bucket for report downloads
- Fixed reporting data lookups to use the correct media buy identifiers for more accurate BigQuery results
- Removed creative sets endpoints from the API specification
2.22.0 — March 10, 2026 at 11:48 PM UTC
- Added push notification configuration support to the audience sync API endpoint to enable real-time updates when sync operations complete.
- Fixed advertiser list responses to properly return the
advertiserIdfield instead of incorrect field mapping. - Enhanced observability functions to handle edge cases more gracefully and prevent potential API errors.
2.21.0 — March 10, 2026 at 7:02 PM UTC
- Added signal groups for audiences, allowing you to organize and manage multiple signals together for better audience targeting
- Added optimization apply mode setting that controls whether AI model optimizations to media buys are applied automatically or require manual approval - can be set at advertiser level (default for all campaigns) or overridden per campaign
- Fixed text formatting issues in sales agent and advertiser list responses to ensure all account status, credential requirements, and linked account information is properly displayed
- Improved production deployment reliability by fixing Docker build issues that could occur during retry scenarios
2.20.0 — March 10, 2026 at 4:56 PM UTC
- Added
sandboxfield to media buy API responses to indicate when a media buy belongs to a sandbox advertiser - Moved audience management endpoints from separate “Audiences” tag to “Advertisers” tag in API documentation for better organization
- Fixed button text readability issues in dark mode across the UI
- Added enriched brand preview functionality when creating or editing advertisers with unregistered domains
- Increased API timeout from 30 seconds to 3 minutes for acceptance tests to handle longer-running operations
- Improved production deployment reliability by fixing retry scenario handling
2.19.0 — March 10, 2026 at 3:37 AM UTC
- Added comprehensive product detail view showing detailed manifest information including formats, reporting capabilities, optimization goals, setup requirements, and targeting approach
- Added publisher domain filter to product discovery allowing filtering of products by specific publisher domains
- Added audience syndication endpoint to distribute audiences to sales agents with status tracking
- Implemented audience syndication status query endpoint with filtering by resource type, status, agent, and other parameters
- Added product detail endpoint for retrieving full product specifications and manifest data
- Enhanced product descriptions with formatted display showing bold labels for structured information
- Fixed cross-sandbox linking prevention to ensure data isolation between different sandbox environments
- Improved product discovery service integration for more reliable product recommendations
- Enhanced UI formatting for better readability of product information and descriptions
2.18.0 — March 9, 2026 at 8:48 PM UTC
- Added
pricingModelfilter to product discovery endpoints to filter inventory by pricing type (cpm, vcpm, cpc, cpcv, cpv, cpp, flat_rate) - Added
sandboxparameter to advertiser creation for testing campaigns without real spend - all operations for sandbox advertisers use test accounts - Added
sandboxquery parameter to advertiser listing to filter by sandbox/production advertisers - Enhanced product discovery UI to support multiple pricing options per product with interactive price selection
- Fixed OAuth credential storage to prevent cross-customer account linking security issue
- Fixed malformed JSON responses from AI services that could cause discovery failures
- Improved streaming connection reliability for real-time updates with automatic resumption on disconnect
- Fixed budget field conversion issues that could cause campaign creation errors
2.17.1 — March 6, 2026 at 9:47 PM UTC
- Renamed
bundleIdtodiscoveryIdacross all API endpoints for better terminology clarity - Updated
/api/v2/buyer/bundles/*endpoints to/api/v2/buyer/discovery/*to reflect the product discovery workflow - Campaign creation and updates now use
discoveryIdinstead ofbundleIdto reference product selections - All API responses now return
discoveryIdinstead ofbundleIdfor consistency - Updated product selection workflow terminology from “bundle” to “discovery session” throughout the API
2.17.0 — March 6, 2026 at 8:03 PM UTC
- Added multi-provider AI service with automatic fallback and circuit breaker protection for improved reliability and faster response times
- Added new notification event types for optimization suggestions (received, approved, rejected, applied, failed)
- Fixed product discovery view to display actual pricing models (CPM, vCPM, CPC, etc.) instead of hardcoded “CPM” labels
- Fixed pricing consistency issues in product recommendations by including pricing options in product data
- Improved bundle descriptions by deprioritizing pricing information to focus on key features
- Enhanced customer domain handling by using database values instead of deriving from email addresses
2.16.0 — March 6, 2026 at 6:59 PM UTC
- Multi-provider AI service with automatic failover for improved reliability and reduced downtime when generating content
- Added new optimization suggestion notification event types for campaign optimization workflows
- Fixed pricing model display in product discovery to show actual model (vCPM, CPC, etc.) instead of always showing “CPM”
- Fixed pricing options data consistency in product listings and API responses
- Improved pricing display logic to show appropriate labels based on actual product pricing models
- Enhanced bundle descriptions by reducing emphasis on pricing information for better readability
- Fixed customer domain resolution to use database values instead of deriving from email addresses
2.15.0 — March 6, 2026 at 12:46 AM UTC
- New audience management endpoints: sync CRM audiences with hashed identifiers, list stored audiences, and track processing status
- New task status endpoint to poll async operation progress when webhooks aren’t available
- New notification system with endpoints to list, mark as read, and acknowledge notifications about campaigns, agents, and other resources
- New contract information endpoint for platform admins to view contract details
- New user invitation management for admins: approve, reject, resend, or cancel pending invitations
- Enhanced product discovery with AI-generated “why” explanations for recommended media plans
- Bundle management now supports replacing all products instead of just adding new ones
- Bundle apply-proposal endpoint to automatically add products from recommended plans with budget allocations
- Interactive product selection UI improvements with better handling of existing bundle products and confirmation flows
- Added parent-child customer hierarchy support allowing parent account users to access child accounts via header
- Sales agent status transitions now properly enforced - disabled agents cannot be updated
- Fixed campaign budget calculations to exclude archived media buys
- Fixed sales agent manifest resolution during campaign execution
- User access request flow for existing organizations when invitation system is enabled
- Enhanced MCP session management with cross-pod synchronization and better impersonation persistence
2.14.0 — March 5, 2026 at 11:15 PM UTC
- Added new audience management endpoints for syncing first-party CRM data with hashed customer identifiers for targeting
- Added notification system with endpoints to list, mark as read, and acknowledge notifications about campaigns, agents, and other resources
- Added task polling endpoints to check status of asynchronous operations like audience syncing and media buy creation
- Added contract information endpoint for admin users to view their organization’s contract details
- Added parent-child customer hierarchy support allowing parent users to access child organization data via header
- Added user invitation system with request access flow for existing organizations
- Added bundle proposal application endpoint to automatically apply recommended media plans with budget allocations
- Enhanced bundle product selection to support replace mode instead of just adding products
- Enhanced product discovery with AI-generated explanations for recommended plan allocations and budget guidance
- Enhanced signup flow to require invitations for joining existing organizations when enabled
- Fixed campaign budget calculations to properly exclude archived media buys
- Fixed media buy retrieval to work without seat filtering restrictions
- Fixed brief updates in product discovery to show current information
- Fixed cross-pod session synchronization to prevent stale data when switching between servers
2.13.0 — March 5, 2026 at 4:40 PM UTC
- Added new audience management endpoints for syncing first-party customer data with hashed identifiers
- Added new notification system with endpoints to list, mark as read, and acknowledge system notifications
- Added contract information endpoint for admin users to view agreement details and status
- Added task status endpoint for tracking asynchronous operations like audience syncing
- Added LLM-enhanced recommendation logic that provides detailed rationale for suggested media plans
- Fixed media buy retrieval to work properly without seat-based filtering
- Fixed campaign budget calculations to exclude archived media buys from active budget totals
- Fixed brief updates in product discovery to work more reliably
- Fixed audience data type handling to properly support large seat ID values
2.12.0 — March 4, 2026 at 9:41 PM UTC
- Enhanced media buy creation and updates to automatically extend campaign end dates when media buy end times exceed the campaign timeline
- Added start_time and end_time fields to media buy responses, allowing independent scheduling within campaign bounds
- Improved webhook signature validation to return 401 errors instead of 500 errors for authentication failures
- Fixed session state persistence issues that could cause seat selection and customer switching to fail silently
- Enhanced brand agent ID validation in API tools to provide clearer error messages when invalid IDs are provided
- Improved error handling for session state changes to ensure consistency between local and stored state
2.11.0 — March 4, 2026 at 7:59 PM UTC
- Added support for media buy-level start and end dates that can be set independently from campaign dates
- Media buy end dates that exceed campaign end dates will now automatically extend the campaign end date
- Enhanced webhook security with HMAC signature verification for improved request authentication
- Fixed webhook signature validation errors that were previously returning HTTP 500 instead of HTTP 401
- Fixed session state persistence issues that could cause seat and customer switches to fail silently
- Improved brand agent ID validation to require numeric values and provide clearer error messages when invalid IDs are used
2.10.0 — March 4, 2026 at 1:12 AM UTC
- Added new
POST /api/v2/buyer/advertisers/{advertiserId}/event-sources/syncendpoint for bulk syncing event sources with upsert functionality - Fixed OAuth redirect URI validation to support dynamic query parameters for Microsoft Copilot Studio integrations
- Resolved build warnings in the user interface that could affect page loading performance
2.9.0 — March 3, 2026 at 11:14 PM UTC
- Added Microsoft Copilot OAuth support with OpenID Connect discovery endpoint for seamless integration
- Fixed UI v2 flag to automatically grant app access, simplifying feature flag management
- Improved MCP session reconnection reliability by preserving session state across API deployments
- Fixed authentication credential lookup to use the correct database table for improved connection stability
2.8.0 — March 3, 2026 at 4:46 PM UTC
- Improved error reporting when media buy submissions fail - you’ll now receive more specific error messages to help diagnose issues
- Streamlined seat management by consolidating description storage, improving performance for advertiser and partner operations
- Fixed automatic installation of pre-archive hooks during workspace setup to ensure proper workflow execution
2.7.0 — March 3, 2026 at 5:52 AM UTC
- Catalog sync and listing endpoints moved to new paths:
POST /api/v2/buyer/advertisers/{advertiserId}/catalogs/syncandGET /api/v2/buyer/advertisers/{advertiserId}/catalogs(replacing previous/sync_catalogsand/list_catalogsendpoints) - Account linking now supports soft-delete functionality to preserve historical account assignments for better media buy attribution
- Improved account resolution logic ensures more reliable account identification across different sales agent configurations
- Fixed account assignment workflow to properly handle account reassignment scenarios when advertisers switch to new accounts
- Enhanced catalog sync validation to ensure advertiser ID consistency between URL path and request body
- Improved database query performance and reliability for account-related operations
2.6.0 — March 2, 2026 at 10:07 PM UTC
- Added new endpoint
POST /api/v2/advertisers/:id/restoreto restore archived advertisers (admin users only) - Added support for filtering advertisers by status with new
ALLoption to retrieve both active and archived advertisers - Fixed webhook processing to maintain backward compatibility with legacy systems that don’t include HMAC signature headers
2.5.0 — March 2, 2026 at 5:56 PM UTC
- Added new catalog management endpoints for syncing and listing product catalogs via
/api/v2/buyer/sync_catalogsand/api/v2/buyer/list_catalogs - Added comprehensive account linking workflow for advertisers with new endpoints to discover and link partner platform accounts
- Added new
/api/v2/buyer/sales-agents/accountCredentialsendpoint to list all registered sales agent credentials - Enhanced advertiser creation and updates to support linking partner accounts at creation time
- Added
includeAccountsparameter to advertiser list endpoint to embed linked partner account information - Fixed JSON response formatting for AI assistants to use proper structured output mode
- Added new
urlvalue to signal key types for expanded targeting capabilities - Enhanced platform monitoring with comprehensive metrics, dashboards, and alerting for better service visibility
2.4.0 — February 27, 2026 at 4:23 AM UTC
- Fixed an issue where default channels and country codes were being automatically injected into product discovery requests, ensuring that empty channel and country filters are now respected as intended.
2.3.1 — February 27, 2026 at 12:56 AM UTC
- Performance campaigns now support multiple optimization goals with priority ordering, allowing more sophisticated targeting strategies
- Event-based optimization goals now support multiple event sources and improved targeting options including maximize value and threshold rate targets
- Metric-based optimization goals introduced for optimizing seller-native delivery metrics like clicks, views, and engagement
- Fixed issue where production deployment notifications were not properly marked as skipped for staging-only releases
- Fixed version bumping process to correctly include all application components during production releases
- Improved campaign execution workflow to properly handle new optimization goal structure
2.3.0 — February 26, 2026 at 9:54 PM UTC
- Added new event source validation that enforces valid IAB ECAPI event types at the database level
- Added organization-level API key management with role-based permissions and advertiser scoping
- Enhanced service token API to support revealing token secrets via
includeSecretquery parameter - Improved partner and advertiser management UI with updated styling and navigation
- Fixed changelog display by replacing accordion layout with plain bullet lists for better readability
- Enhanced OAuth token refresh flow with better error tracking and logging for MCP clients
- Improved Stripe billing portal session creation with better customer ID persistence and deduplication
- Fixed product discovery to work correctly even when campaign briefs are not provided
- Enhanced service token creation and management workflows with improved validation and user experience
2.2.0 — February 26, 2026 at 2:16 PM UTC
- Added seat-scoped service tokens with full CRUD support via the V2 REST API
- Added ability to bypass Terms of Service acceptance for customers with custom contracts
- Fixed service token creation to make the name field optional with a sensible default
- Fixed brand agent listing to correctly filter by customer for SuperAdmin users
2.1.5 — February 25, 2026 at 1:18 PM UTC
- Fixed request timeout handling for AI model requests to prevent hanging operations and improve response reliability.
- Resolved an issue where certain aborted AI generation requests would unnecessarily retry, reducing API latency.
- Updated AI model version for more consistent response quality and performance.
2.1.4 — February 25, 2026 at 3:58 AM UTC
- Internal improvements and maintenance
2.1.3 — February 25, 2026 at 1:30 AM UTC
- Improved compatibility with partner integrations by retrying failed requests using an alternative brand identification format
- Improved error detection to correctly identify and handle validation failures during brand identification
2.1.2 — February 24, 2026 at 8:13 PM UTC
- Improved product discovery reliability with automatic fallback when brand identification fails
- Fixed documentation site routing to correctly serve versioned API docs
- Updated advertiser form field naming for consistency
- Updated homepage copy and messaging
2.1.1 — February 24, 2026 at 3:00 AM UTC
- Fixed documentation homepage returning 401 errors and broken routing for v2 API docs
2.1.0 — February 23, 2026 at 11:10 PM UTC
- Added reporting page with hierarchical metrics table for campaign performance visualization
- Fixed budget currency handling to use the actual currency from product pricing options instead of defaulting to USD
- Fixed creative format assignment to ensure each product only receives creatives that match its supported formats
- Added stable versioned documentation URLs with dark mode branding
- Improved metrics grid layout for better responsiveness across different screen sizes