List briefs
Briefs on the Briefs board, newest first, with what was made from each.
Board briefs and the ones written from Next tests. status follows the work (draft → ready → in_production → live → learned); dismissed briefs only with include_dismissed. owner is anyone, me (the key's minter), agent or others; value_id (with an optional dimension) keeps briefs scoped to that Value.
Requires a key with read scope or higher.
MCP: meta_list_briefs.
bearerAuthAuthorizationBearer <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— everythingwritecan. No operation requires more thanwritetoday.
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.
status?string"draft""ready""in_production""live""learned""dismissed"owner?stringme = the human this session acts for; agent = written over MCP or the API.
"anyone""anyone""me""agent""others"dimension?string"angle""persona""awareness""offer""offer_type""pain""season""asset_type""format""hook""headline_tactic""talent""visual"value_id?stringBriefs scoped to this Value.
1 <= length <= 100include_dismissed?booleanfalselimit?integer1 <= value <= 20050Success. The body is the tool's own result — the same payload the MCP tool returns.
application/json- response
curl -X GET 'https://winandscale.com/api/v1/briefs'{}