This alpha V3 MCP contract is available only to enrolled Buyer Accounts. It
adds discovery, connection setup, campaign- and advertiser-scoped session
reads, durable session saves, and explicit generation or refinement for
registered Creative Engines. The Creative Engines Page is available for
enrolled Buyer Accounts. Provider qualification and the end-to-end buyer
journey remain separate work.
partial_success is not false.
A customer-key image engine keeps one direction unless the request supplies its
own variant_axis; an explicit axis keeps its supplied number of directions.
Refining a named parent is also one direction. Audio, video and every other
non-preview branch stay one direction by default. The response returns one leaf
per direction, and each preview leaf uses one daily-cap unit. An image draft
with no engine uses the Scope3-funded OpenAI image engine when eligible. A
voice draft with no engine uses Scope3-funded ElevenLabs only when ElevenLabs
is available in this preview and the buyer has no customer ElevenLabs or
AudioStack connection. Video drafts must explicitly select Veo. A customer-key
voice connection is never replaced with Scope3 funding, and a failed or missing
customer key never switches a request to the preview credential.
For an image draft, set request.variant_count to an integer from 1 through 8
when you want a specific number of directions without writing each one. The
service creates distinct composition directions, adding lighting and mood
variation after the first three. An explicit request.variant_axis.values
always takes precedence. Customer-key engines honour variant_count too. For
the Scope3-funded preview, the service checks that the daily account and global
caps currently have room for the whole set before any provider request is sent;
if not, it returns a cap error and creates no partial set. That check does not
reserve capacity: each direction is reserved individually immediately before
its provider request. Concurrent preview use can therefore leave an admitted
batch with fewer generated directions than requested, but a provider request
is never sent without its own reserved cap unit. variant_count cannot be
combined with partial_success: false: that atomic single-image mode remains
one generation.
When an enrolled account uses the Scope3-funded image preview, omit engine
unless the buyer explicitly asks for a named engine. Put the buyer’s exact
visual request in request.creative_brief.prompt. If the buyer asks for a
specific number of variants, put that number in request.variant_count.
For the first 24 hours after a variant_count release, the Creative Engines
on-call owner reviews preview usage and provider-dispatch records every four
hours. The check passes when every provider dispatch has its own daily-cap
unit, and a refused precheck has no provider dispatch. An admitted batch may
contain fewer provider dispatches than planned during concurrent use. After six
clean checks the manual review
ends. A mismatch or unexplained cap error pauses the Scope3 preview binding
while the owner investigates and rolls back the release if needed.
Open Creative Engines in Murph
In Murph, select Creative Engines in the Discover section of the Buyer navigation. The entry is shown only when Creative Engines is enabled for the active Buyer Account. It opens the same Page and does not grant access by itself. You can also ask Murph to find a registered provider and open its connection setup on the Page; you start the secure connection there.Discover an engine
Callsearch with kind: "creative_engine". Use query to match an engine or
provider name, filter.ids for up to 50 exact engine IDs, and limit plus the
returned cursor to page results. IDs are positive integer strings.
capabilities
declaration lists modalities, transformer IDs, supported format IDs and
build/preview support when the registered adapter supplies them. get with
the same kind and an engine id returns one record.
Declarations describe support; they are not a live provider health check or
proof of access to every model. Grant status describes your connection state.
pricing: null means this read has not obtained a quote, not that generation
is free. The current supportedFormatIds are adapter format identifiers, not
canonical AdCP format declarations or executable capability IDs.
Discovery currently covers registered Creative Engines visible to the active
buyer. Arbitrary external MCP endpoints cannot be added through this preview.
Authorize and manage a connection
Useopen_creative_engines_page to open the Creative Engines Page in an MCP
Apps host. The Page has Connected and Available views. It separates declared
capability from observed connection state and account access, and shows when no
provider price has been quoted. It supports secure connection repair, account
selection, advertiser mapping, and disconnect. It does not expose provider
credentials, accept an arbitrary MCP URL, quote a price, or start generation.
Pass connectionAction: "connect" with a registered engineId to focus that
engine’s secure setup control. This opens no authorization handoff by itself:
the buyer starts setup from the Page.
Call save_connection with exactly one change. To begin authorization:
get({"kind":"connection","id":"77"}). It includes safe
credential status, selected account, advertiser mappings and a bounded account list. Use
connectionAccountsOffset with the returned accountsPage.nextOffset for
another account page. Provider metadata and secrets are omitted.
Use the existing save_connection fields with connectionId to reconnect
(authorization), refresh accounts (refreshAccounts: true), select a provider
account (selectedAccountId), map an advertiser (advertiserMapping), or disconnect (state: "removed"). A connection
cannot change its target. Disconnect retries remain available for owned grants
after catalog delisting or preview enrollment is removed.
Creative connections do not accept seller selection, advertiser activation,
media billing, buying policy or Enhanced Reporting.
Signup-restricted credentials cannot use the creative preview.
AudioStack and ElevenLabs require an advertiser mapping before generation. This
selects the provider organization or workspace that pays for the request. Use
advertiserMapping: {state: "mapped", advertiserId: "42", accountId: "88"}
with the connection ID. Read accountMappings to find the link ID for unmapping;
use connectionMappingsOffset with accountMappingsPage.nextOffset for another
mapping page. Replacing the provider key requires remapping the advertiser.
For an ElevenLabs voice draft, include the exact spoken words in straight or
curly quotation marks in request.creative_brief.prompt, or provide a
creative_manifest.assets.script text asset. A tone or duration instruction by
itself is not voice copy. When preparing a draft, write a short script in
quotes from confirmed buyer intent, or ask the buyer for the words to speak
before you call generate_variants.
Generation and funding
This alpha provides discovery, setup, session reads and Creative Session operations.save_creative_session saves a brief, selected output, approval,
finalisation or promotion of an exact approved output into a reusable Creative
Asset revision, but never starts generation. generate_variants
explicitly prepares and executes one saved session revision. These are
generation operations and require Creative Engines. Keep the chosen engine,
provider account and advertiser explicit when moving from setup into a session.
A connection alone does not authorize spending. The Scope3-funded preview is
the limited exception described above; its platform-managed engines are paid by
Scope3 rather than the customer’s provider account.
The operations do not provide a request estimate or turn an unknown catalog
price into a quote. For accounts and clients with the existing V2 generation
tools, use the generative creative workflow.
Use the generation workflow’s applicable funding and price information before
requesting paid work. The current catalog’s pricing: null cannot be used as a
quote. Customer-key eligibility and provider account requirements still apply;
see provider setup. A failed
customer-key request does not authorize switching to a platform-funded request.
During iteration, preserve the brief, reference assets, target format and
parent variant. Retain returned session and task IDs so an interrupted request
can resume without submitting another build. Review the exact output that will
be finalized, then read back the saved creative. Content acceptance remains
separate from seller review and campaign launch.
Existing seller integrations
search({"kind":"connection"}) continues to list seller grants by default.
Seller grants gain target: {kind: "seller", id: "..."} and retain sellerId.
Existing save_connection calls using sellerId continue to work; new callers
can use a seller target instead. Supplying conflicting fields fails validation.
You can continue making creative directly with a provider and
bring that creative into Apostra.
This alpha does not change that workflow or start a generation job without an
explicit generate_variants call.
Read a creative session
A creative session holds work in progress: the brief, plan, variants, evaluation, selection and any finalized creative. Reading it does not start generation. List sessions within exactly one campaign or advertiser Library:filter.advertiserId instead:
filter.status to choose drafting, refining, evaluating or finalized.
The limit is at most 100. Each result identifies its scope with either a
campaignId or an advertiserId, alongside its session ID, title, status and
revision. When nextCursor is present, pass it as cursor with the same
campaign-or-advertiser scope and status filter. Each page reflects current
state; the list does not promise a fixed snapshot or a total count. Text
queries and other filters are not supported for sessions.
Open a session by ID alone. Apostra resolves its saved owner and checks your
current access again:
sourceId for a
campaign or advertiserId for a Library session. The object includes its
persisted revision, plan, variants and evaluation.
truncated: true and omitted identify the
bounded fields; use the existing V2 workflow for the complete durable record.
When the session has a saved engine connection, engine contains its
engineId and connectionId. Credential material is not included.
Hosted image, audio and video plans can identify their format with
format_kind (image, audio_hosted or video_hosted) and params, without
an agent URL. Image dimensions use params.width and params.height;
an exact audio duration uses params.duration_ms_exact. The declared modality
must match the selected engine. A canonical declaration cannot also specify a
legacy target format. Explicit legacy format requests retain their existing
compatibility path.
Use the canonical fields directly in a draft request. For an image draft:
agent_url in this declaration. It is a legacy-format field.
For common image requests, aspect_ratio is also accepted either beside
format_kind or inside params; it is saved as canonical dimensions. For
example, "9:16" becomes { "width": 1080, "height": 1920 }. Use explicit
dimensions for a ratio that is not supported. A draft save rejects an
unmappable ratio before it can be generated.
When preparing image placement renders, the session uses each placement’s
resolved dimensions. A placement without dimensions returns a warning instead
of generating at the original image size. These renders still need the
applicable seller compatibility checks before delivery.
Session reads do not support include. Both reads require current access to
the campaign and advertiser, and expired sessions are unavailable.
save_creative_session saves a campaign brief and locked references, selects
or approves one exact output, finalises that approved output, or promotes that
approved output into a reusable Creative Asset revision. Saving does not start
generation. generate_variants is the separate explicit action for
one saved revision. Reuse its actionKey only for an identical retry; name the
parent output and feedback when refining. Both operations require the Creative
Engines account capability and a saved engine connection. Generation can
remain submitted or uncertain while its original task or receipt is recovered;
it never silently submits a replacement request.
Both operation responses include the current session, revision, and, when
present, sessionGeneration. A save_draft response also includes
nextGenerateVariants: a copy-ready generate_variants call with the saved
revision and session generation plus a fresh action key. Use that key for the
first request and reuse it only if that same request needs a retry.
Generation returns its actionId and each leaf’s status, task ID, and variant
IDs. For every completed variant, completedVariants includes an asset URL,
MIME type, preview and, when the completed asset reports them, its dimensions,
so an MCP client can use the image without a second lookup. poll is returned
only when a submitted leaf has a task ID. A leaf marked uncertain or
not_dispatched is terminal for that action: it is not retried automatically.
An uncertain leaf may already have incurred a provider charge. The response
states this terminal condition and, when no leaf completed or was submitted,
is an error result; create a new generation action after correcting the
request instead of polling. Approval and finalisation controls remain in the
session. Session detail is bounded in these responses. When
sessionTruncated: true is present, sessionOmitted identifies omitted
detail, while the returned action and retry controls remain exact. The durable
session history is not paginated by these operations; use the existing V2
creative-session workflow to retrieve the complete record.
If already-persisted action controls alone cannot fit in one response, the
operation returns a bounded recovery error instead of clipping those IDs. Read
the durable session before retrying the same saved action; this does not create
a replacement generation request.
Promote an approved output
Usesave_creative_session with operation: "promote_approved_output" after
the buyer has approved the exact session variant. Supply the campaign, session,
advertiser, approved variant, approval revision, output digest and an
idempotency key. The service resolves the approved inline rendition
from the durable approval, so callers do not pass an internal rendition ID.
The response contains the Creative Asset ID, immutable
revision ID, SHA-256 digest and approval receipt ID.
Repeat an uncertain request with the same key and the same input while the
named approval is still current to receive the same receipt without creating
another revision. Reusing a key with a different approved output or advertiser
fails. The service checks the buyer’s
current advertiser access before it saves the immutable evidence and rejects a
stale, replaced or unapproved output.
Promotion retains the approved bytes as an advertiser-owned Creative Asset. It
does not finalise or create a campaign Creative, export the bytes, contact a
publisher, launch a campaign or approve seller inventory. Finalising a Creative
does not promote or export it.
When a buyer promotes an approved output, the revision records where it came
from: the Engine, the provider, and whether it ran on the buyer’s own provider
account or the Scope3-funded preview. That record comes from the generation
call that produced the output, so outputs generated before provenance was
recorded can still be promoted but carry no provider record. Reuse rights follow
that provider’s terms; Interchange does not verify them. Check the provider’s
terms before using the asset outside Interchange. Its current inspection is strict JPEG/PNG
container and active-content validation. It records
container_validated for that work; no malware scan runs during promotion
today, and clean is reserved for a scanner verdict. The service does not
create immutable evidence when inspection cannot complete.
Promotion uploads the deterministic private copy before its final database
write, but it has no Creative Asset catalog entry until the current advertiser
grant is checked and locked. If that check fails, no catalog asset, revision or
approval receipt is created.
Review generated variants in an MCP App host
Whengenerate_variants returns a Creative Session with generated outputs, its
MCP App result identifies the ui://agentic-api/variant-gallery/mcp-app.html
resource. To show an existing session after search or get, call
open_variant_gallery with its sessionId; the optional campaignId or
advertiserId asserts the owner, but the operation resolves and checks the
saved owner when omitted. This is the canonical gallery operation. Compatible
hosts render the Variant gallery beside the conversation; hosts without MCP App
support retain the normal text result and asset URLs.
The checked gallery field contains the bounded session state the widget needs:
variants, previews, the selected output, the current revision and the
advertiser identity required to save an approved output.
Each completed image variant is also checked against the exact saved brief.
The gallery shows whether the rendered image passed, needs review, or missed
the brief, with a short reason. A warning does not stop draft review. Ask to
refine a flagged variant when the result identifies a missing requested object
or an unrelated dominant object. A failed brief-match check blocks finalising
that output. The check uses
only the generated image and the saved brief; a temporary evaluator failure is
shown as a warning for human review.
Selecting a variant does not start a generation. Refinement is a separate,
explicit paid action: enter feedback for a selected parent, then choose
Refine selected. The gallery calls generate_variants with that parent and
feedback and renders a cap-exhausted RATE_LIMITED error without retrying it.
Save to library is also explicit. It selects and approves the chosen output,
then calls promote_approved_output with the exact approval revision and
output digest. That creates an advertiser-owned Creative Asset revision and
returns its identity. A retry uses the same deterministic idempotency key, so
it replays the saved result instead of creating another revision.
The gallery confirms Saved to your Library. and offers the Creative Library
link without exposing the returned identifiers. It records one bounded,
best-effort completion activity; if that activity cannot be recorded, the
saved state remains visible and the gallery does not retry it.
Saving to the Library does not use the output in a campaign. Use in campaign
is a separate, explicit action that finalises the same exact approved output as
a campaign Creative. If promotion is refused because access, inspection or
rights checks fail, or the approval is stale, the gallery shows the reason and
keeps the approval available. It never auto-generates or auto-saves an
alternative.