Guides

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:

  1. meta_list_lead_forms or meta_create_lead_form. A published form cannot be edited, so a change is a new form.
  2. Launch with campaign objective OUTCOME_LEADS, adSet.leadForm and copy.leadFormId, and no link.
  3. meta_send_test_lead before 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.

On this page