MCP tool · Actions
create_adset
A new ad set in an existing campaign, from scratch or copying another ad set's targeting and conversion; created paused.
What it does
Create a new ad set in an existing campaign. The ad set is created as PAUSED. Use when user asks to create a new ad set or audience. In a campaign budget (CBO) leave daily_budget out: the campaign's budget and bid strategy apply, each ad set gets its own bid_amount / roas_floor. In ABO, daily_budget is required. copy_from_adset_id copies the audience, optimization, conversion event, destination and attribution of an ad set of the same account (then targeting and optimization_goal can be left out).
In Apogee this only PREPARES the action: it returns an action_id and what will change. Show it to the user and call execute_action only after their explicit OK (valid 24 hours).
Parameters
-
campaign_idstring requiredCampaign ID to create the ad set in
-
namestring requiredAd set name
-
ad_account_idstring requiredMeta ad account id (act_…), from list_ad_accounts
-
copy_from_adset_idstring optionalOptional: an ad set of the same account to copy targeting, optimization_goal, billing_event, promoted_object, destination_type and attribution_spec from (its budget, bid and schedule are not copied)
-
daily_budgetnumber optionalABO only: daily budget in cents (e.g. 2000 = 20€). Leave it out in a CBO campaign
-
targetingobject optionalTargeting spec (geo_locations, age_min, age_max, genders, interests, custom_audiences, etc.). Required unless copy_from_adset_id
-
optimization_goalstring optionalOptimization goal (e.g. OFFSITE_CONVERSIONS, LINK_CLICKS, IMPRESSIONS). Required unless copy_from_adset_id
-
promoted_objectobject optionalConversion event, e.g. { pixel_id, custom_event_type: "PURCHASE" }. Required for OFFSITE_CONVERSIONS / VALUE / LEAD_GENERATION unless copied
-
billing_eventstring optionalBilling event (default IMPRESSIONS)
-
bid_strategystring optionalABO: this ad set's bid strategy (default LOWEST_COST_WITHOUT_CAP). CBO: the campaign's (leave it out)
-
bid_amountnumber optionalCost cap / bid cap in cents (e.g. 2500 = 25€): required with COST_CAP and LOWEST_COST_WITH_BID_CAP
-
roas_floornumber optionalMinimum ROAS strategy: the ROAS floor, e.g. 2.5 (optimization becomes VALUE)
-
start_timestring optionalOptional: start time in ISO format
Example
Your assistant calls it for you when you ask in your own words. What it sends (MCP tools/call, JSON-RPC 2.0):
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_adset",
"arguments": {
"campaign_id": "120200000000000001",
"name": "Nordlicht | Spring launch",
"ad_account_id": "act_1234567890"
}
}
} The same call over HTTP with an API key, for an MCP client of your own (an assistant that signs in sends its OAuth token instead):
curl -X POST https://app.apogee.ad/mcp \
-H "Authorization: Bearer $APOGEE_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"create_adset","arguments":{"campaign_id":"120200000000000001","name":"Nordlicht | Spring launch","ad_account_id":"act_1234567890"}}}' Access and cost
| Plans | Pro and Scale. |
|---|---|
| Scope | actions: a connection or an API key without it does not see this tool (scopes). |
| Effect | Stores a plan or an action and says what it will do. Nothing changes on the ad account until it is confirmed. |
| Credits | Free up to the daily free reads (5,000 a day on Pro, 10,000 on Scale), then 1 credit per read. A call that fails costs nothing (credits). |
| Rate limit | 600 MCP requests per 15 minutes on Pro, 1,200 on Scale (rate limits). |
| Daily cap | Counts 2 units toward the 2,000 units one API key or assistant connection can use in 24 hours. |
In the REST API
The same thing for your own code, with an API key:
- Create action:
POST /actions
Related tools
Actions: Each tool only prepares: it returns an action_id and what will change. Nothing changes until execute_action, after your explicit OK, within 24 hours. Created objects are paused unless you ask otherwise.
pause_ad: Pauses ads.pause_adset: Pauses ad sets.activate_ad: Turns paused ads back on.activate_adset: Turns paused ad sets back on.update_budget: Sets new daily budgets for ad sets.scale_budget: Scales ad set budgets by a percentage (+100% at most per change).update_campaign_status: Pauses or turns on a whole campaign.update_adset_targeting: Changes an ad set's targeting.duplicate_ad: Copies an ad into other ad sets of the same ad account, keeping the same post (likes, comments, shares).duplicate_adset: Copies an ad set with its ads, each keeping its post; created paused.duplicate_campaign: Copies a campaign with its ad sets and ads; created paused.create_ad: A new ad on an existing post or creative; created paused.create_ad_from_post: A new ad on an existing Facebook or Instagram post, which keeps its likes and comments, with every Advantage+ enhancement explicit; paused by default.execute_action: Runs a prepared action (or a prepared campaign), once, after your explicit OK. Returns what was created.