Launches

Update launch copy

Change the CTA, link, URL tags or ad text on every ad of a launch.

PATCH
/api/v1/launches/{launchId}/copy

Rebuilds each ad's creative (Meta creatives are immutable) and repoints the ad: ACTIVE ads go back through Meta's review, the post's likes and comments do not carry over, and learning restarts. Change link and text in one call so the ads are reviewed once. Requires the approval grant because it changes what live ads deliver.

Requires a key with write scope or higher, and the approval grant.

MCP: meta_relink_launch.

Authorization

bearerAuth
headerAuthorizationBearer <token>

An API key from Settings → API keys, sent as Authorization: Bearer rsk_….

Authorization has two independent axes.

The scope is ranked — a key satisfies any requirement at or below its own tier:

  • read — every GET.
  • write — launch ads PAUSED, sync, pull history, edit thresholds, Values, briefs, tests, swipes and research.
  • admin — everything write can. No operation requires more than write today.

There is no approve scope. It was a rung once; it is not one now, and a key requested with it is rejected.

The approval grant (can_approve) is a separate boolean, not a rung. Changing spend on Meta — activating a launch, pausing or resuming ads, retargeting an ad set, or rebuilding a launch's live creative — needs write and the grant. Keeping them on separate axes is what makes the review gate a control rather than a convention: a key that may propose is not automatically a key that may approve its own proposal.

A key reaches the one workspace — one Meta ad account — it was minted in, and stops working when the operator who minted it leaves the workspace. The same key authenticates the MCP endpoint (/api/mcp) for a headless agent, with the same scope and grant.

Path Parameters

launchId*string

A launch id, from GET /api/v1/launches or the launch's create response.

Formatuuid

Request Body

application/json
  1. body
cta?string
Value in"LEARN_MORE""SHOP_NOW""SIGN_UP""SUBSCRIBE""DOWNLOAD""GET_OFFER""GET_QUOTE""CONTACT_US""APPLY_NOW"
link?string
Formaturi
url_tags?string

Replaces the tags; empty string clears them.

primary_text?string
Length1 <= length <= 5000
headline?string
Length1 <= length <= 40
description?string

Replaces the description; empty string clears it.

Lengthlength <= 200

Response Body

Success. The body is the tool's own result — the same payload the MCP tool returns.

application/json
  1. response
Example Request
curl -X PATCH 'https://winandscale.com/api/v1/launches/497f6eca-6276-4993-bfeb-53cbbbba6f08/copy' \  -H 'Content-Type: application/json' \  -d '{}'
Example Response
{}