Launch paused
Launch new Meta ads as a paused campaign, ad set and ads for review, and switch them on only on the person's explicit go-ahead.
Use this to launch ads, put a Test live or activate a launch. In Claude Code the plugin
starts it with /winandscale:launch. Background:
Paused is the draft.
Decide where
meta_list_campaigns lists campaigns and ad sets so you can reuse one or start a new
one. If the brief names a Facebook Page or pixel, meta_list_pages_and_pixels lists
what the account can use. Launches default to the workspace's Page and pixel.
meta_list_presets shows the saved launch presets, where the ads go, who sees them,
and the budget.
Name the ads
Every ad name must be id__locale__format__persona__angle__concept__variant, for
example 0042__en__static__busy-parents__zero-tax__cost-card__v1. A launch with a name
that does not parse is refused before anything is uploaded. meta_list_taxonomy has
the slugs.
Launch
meta_launch_ads takes public https creative URLs or library upload ids, and testId
or briefId when the ads belong to a Test or brief. Everything is created paused
and nothing spends. With a launch preset, only creatives is required; the campaign,
ad set and copy default to the preset's.
Show the person the strategyCautions in the result.
Review
The person checks the launch in Meta Ads Manager or on the Launches page in Win & Scale.
meta_list_launches shows its state.
Activate only on their word
meta_activate turns spend on. Call it only when the person says so in this
conversation, after you have restated what will go live and its daily budget. It needs
a key with the approval grant.
meta_pause_launch pauses a launch's ads again. meta_relink_launch changes the CTA,
destination URL, URL tags or ad text on every ad of a launch. Active ads go back through
Meta's review and lose their likes and comments, so confirm first.
Instant forms
For ads that open a Meta lead form instead of a website:
meta_list_lead_formsormeta_create_lead_form. A published form cannot be edited, so a change is a new form.- Launch with campaign objective
OUTCOME_LEADS,adSet.leadFormandcopy.leadFormId, and no link. meta_send_test_leadbefore activating. It is delivered to your lead webhook like a real lead and carries the operator's contact details.
Over REST
Send an Idempotency-Key on the launch: a retry without one can upload the creatives
twice.
curl https://winandscale.com/api/v1/launches \
-H "Authorization: Bearer $WINANDSCALE_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: launch/2026-spring-0042" \
-d '{
"campaign": { "name": "Spring prospecting", "objective": "OUTCOME_SALES", "daily_budget": 50 },
"ad_set": { "name": "US 25-54", "countries": ["US"], "age_min": 25, "age_max": 54, "conversion_event": "PURCHASE" },
"creatives": [
{ "name": "0042__en__static__busy-parents__zero-tax__cost-card__v1", "media_url": "https://cdn.example.com/0042.jpg" }
],
"copy": {
"primary_text": "Primary text a person approved.",
"headline": "Headline a person approved",
"cta": "SHOP_NOW",
"link": "https://example.com/spring",
"url_tags": "utm_source=meta"
}
}'The response has status 201. Budgets are in the account currency's major units, so
50 is 50.00. The launch id from the response goes into the activate call, which needs
a key with write scope and the approval grant:
curl -X POST https://winandscale.com/api/v1/launches/$LAUNCH_ID/activate \
-H "Authorization: Bearer $WINANDSCALE_KEY"Without the grant, the call returns 403 with required_grant: "approve". See
Authentication.
Reference: Create ads, Activate, Pause, Update launch copy.
A prompt to start with
Launch the three creatives in this brief as paused ads. Show me the strategy
cautions and the daily budget, and do not activate anything until I say so.