Ads

Space MCP tools in the Ads scope (ads). Reach these with a wks_live_ key over space-mcp or space-api.

Tools in the ads scope, callable over space-mcp (tools/call) or space-api (REST) with a wks_live_* key that grants ads.

add_people_to_ad_audience

Scope: ads:write

Add people to a custom audience: the space's contacts (by id or by tag) and/or emails and phones you pass. The platform hashes them.

ParameterTypeRequiredDescription
audience_idstringyesThe ad audience (list_ad_audiences).
contact_idsstring[]
tagstringEveryone in the space's contacts with this tag.
peopleobject[]

archive_ad_lead_form

Scope: ads:write

Archive a lead form so no new ad can use it (its leads stay).

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
form_idstringyes

boost_social_post

Scope: ads:write

BOOST an existing social post into a paid ad (spends money, subject to the space's ad policy). Provide post_id or platform_post_id plus budget and optional targeting/schedule.

ParameterTypeRequiredDescription
ad_account_idstringyes
namestringyes
goalstringyes
budget_amountnumberyes
budget_typedaily | lifetime
post_idstring
platform_post_idstring
schedule_startstring
schedule_endstring
targetingobject
bid_amountnumber
bid_strategystring
optimization_goalstring
spark_auth_codestringTikTok Spark Ads auth code.

change_ad_bidding

Scope: ads:write

Bidding and timing: Google portfolio bid strategies, a campaign's bidding and ad schedule (dayparting), Meta value rule sets, Meta budget increases for high-demand periods. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • create_bid_strategy [google]: Create portfolio bid strategy — params: name*, type*, targetCpa, targetRoas
  • update_bid_strategy [google]: Update portfolio bid strategy — params: strategyId*, name, type, targetCpa, targetRoas
  • set_ad_schedule [google]: Replace a campaign's ad schedule (dayparting) — params: campaignId*, schedule*
  • create_value_rule_set [meta]: Create a value rule set — params: name*, rules*
  • replace_value_rule_set [meta]: Replace a value rule set — params: valueRuleSetId*, name*, rules*
  • delete_value_rule_set [meta]: Delete a value rule set — params: valueRuleSetId*
  • schedule_budget_increase [meta]: Schedule a budget increase (spends money — the space's ad policy applies) — params: campaignId, adSetId, budgetValue*, budgetValueType*, timeStart*, timeEnd*, recurrenceType, currency For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opcreate_bid_strategy | update_bid_strategy | set_ad_schedule | create_value_rule_set | replace_value_rule_set | delete_value_rule_set | schedule_budget_increaseyes
paramsobjectThe op's fields, by Zernio's names.

change_ad_catalog_feeds

Scope: ads:write

A catalog's product feeds (a file Meta fetches on a schedule) and their uploads. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • create_feed [meta]: Create a product feed — params: catalogId*, name*, schedule
  • fetch_feed_now [meta]: Fetch a feed file now — params: catalogId*, feedId*, url* For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opcreate_feed | fetch_feed_nowyes
paramsobjectThe op's fields, by Zernio's names.

change_ad_creative_library

Scope: ads:write

Meta's creative library: saved creatives, images and videos stored on the ad account, reusable across ads. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • create_creative [meta]: Create a standalone creative — params: headline*, body*, description, callToAction, linkUrl*, imageUrl, imageHash, carouselCards, urlTags, promotion, creativeFeatures, multiAdvertiser, aiDisclosure
  • rename_creative [meta]: Rename a creative — params: creativeId*, name*
  • delete_creative [meta]: Delete a creative — params: creativeId*
  • upload_image [meta]: Upload an ad image from base64 — params: imageBase64*, filename
  • upload_video [meta]: Upload an ad video — params: videoUrl, videoBase64, filename
  • delete_video [meta]: Delete an ad video — params: videoId* For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opcreate_creative | rename_creative | delete_creative | upload_image | upload_video | delete_videoyes
paramsobjectThe op's fields, by Zernio's names.

change_ad_forecasts

Scope: ads:write

Forecasting before spending: Meta reach & frequency predictions (and reserving them), LinkedIn bid pricing and delivery forecasts. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • cancel_reach_frequency [meta]: Cancel reach-frequency booking — params: predictionId*
  • reserve_reach_frequency [meta]: Reserve reach-frequency inventory (spends money — the space's ad policy applies) — params: predictionId* For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opcancel_reach_frequency | reserve_reach_frequencyyes
paramsobjectThe op's fields, by Zernio's names.

change_ad_identities

Scope: ads:write

Who an ad runs as and what it can promote: TikTok identities and pixels, Instagram accounts and posts to boost, partnership (creator) content and permissions, apps, businesses. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • set_partnership_permission [meta]: Set partnership permission — params: creatorUsername*, revoke For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opset_partnership_permissionyes
paramsobjectThe op's fields, by Zernio's names.

change_ad_labels_and_accounts

Scope: ads:write

Google Ads labels (tag campaigns, ad groups, ads, keywords) and the manager-account hierarchy and links. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • create_label [google]: Create a Google Ads label — params: name*, backgroundColor, description
  • update_label [google]: Update a Google Ads label — params: labelId*, name, backgroundColor, description
  • delete_label [google]: Remove a Google Ads label — params: labelId*
  • attach_label [google]: Attach a Google Ads label — params: labelId*, campaignIds, adSetIds, adIds, keywordIds
  • detach_label [google]: Detach a Google Ads label — params: labelId*, campaignIds, adSetIds, adIds, keywordIds
  • invite_client_account [google]: Invite a client account to a manager — params: managerCustomerId*, clientCustomerId*, validateOnly
  • update_manager_link [google]: Accept, decline, cancel or end a manager link — params: managerCustomerId*, clientCustomerId*, managerLinkId*, action*, validateOnly For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opcreate_label | update_label | delete_label | attach_label | detach_label | invite_client_account | update_manager_linkyes
paramsobjectThe op's fields, by Zernio's names.

change_google_ads_conversion_setup

Scope: ads:write

Google Ads conversion setup: conversion actions, account and campaign conversion goals, custom goals. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • create_action [google]: Create website conversion action — params: name*, type*, defaultValue, alwaysUseDefaultValue
  • set_action_primary [google]: Set a conversion action primary or secondary — params: actionId*, primaryForGoal*
  • set_goals [google]: Update account conversion goals — params: goals*
  • create_custom_goal [google]: Create a custom conversion goal — params: name*, conversionActionIds*
  • update_custom_goal [google]: Update a custom conversion goal — params: goalId*, name, conversionActionIds
  • delete_custom_goal [google]: Remove a custom conversion goal — params: goalId*
  • set_campaign_goals [google]: Update campaign conversion goals — params: campaignId*, goals, goalConfigLevel, customConversionGoalId For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opcreate_action | set_action_primary | set_goals | create_custom_goal | update_custom_goal | delete_custom_goal | set_campaign_goalsyes
paramsobjectThe op's fields, by Zernio's names.

change_google_ads_extensions

Scope: ads:write

Google Ads extensions (assets): sitelinks, callouts and structured snippets on the account, a campaign or an ad group. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • add_sitelinks [google]: Add account sitelinks — params: sitelinks*
  • update_sitelinks [google]: Update account sitelinks — params: updates*
  • remove_sitelink [google]: Remove account sitelink — params: assetId*
  • add_callouts [google]: Add account callouts — params: callouts*
  • update_callouts [google]: Update account callouts — params: updates*
  • remove_callout [google]: Remove account callout — params: assetId*
  • add_snippets [google]: Add account snippets — params: structuredSnippets*
  • update_snippets [google]: Update account snippets — params: updates*
  • remove_snippet [google]: Remove account snippet — params: assetId*
  • add_campaign_assets [google]: Attach campaign assets — params: campaignId*, sitelinks, callouts, structuredSnippets
  • update_campaign_assets [google]: Update campaign assets — params: campaignId*, updates*
  • remove_campaign_assets [google]: Remove campaign assets — params: campaignId*, assetResourceNames*, campaignAssetResourceNames*
  • add_ad_set_assets [google]: Attach ad-group assets — params: adSetId*, sitelinks, callouts, structuredSnippets
  • update_ad_set_assets [google]: Update ad-group assets — params: adSetId*, updates*
  • remove_ad_set_assets [google]: Remove ad-group assets — params: adSetId*, assetResourceNames*, adGroupAssetResourceNames* For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opadd_sitelinks | update_sitelinks | remove_sitelink | add_callouts | update_callouts | remove_callout | add_snippets | update_snippets | remove_snippet | add_campaign_assets | update_campaign_assets | remove_campaign_assets | add_ad_set_assets | update_ad_set_assets | remove_ad_set_assetsyes
paramsobjectThe op's fields, by Zernio's names.

change_google_ads_keywords

Scope: ads:write

Google Ads Search keywords. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • add [google]: Add Search ad-group keywords — params: adSetId*, keywords*, negative
  • set_status [google]: Pause or enable a Search keyword — params: keywordId*, status*
  • remove [google]: Remove a Search keyword — params: keywordId* For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opadd | set_status | removeyes
paramsobjectThe op's fields, by Zernio's names.

change_google_ads_negative_keywords

Scope: ads:write

Google Ads negative keywords — on a campaign and in shared lists. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • set_campaign_negatives [google]: Replace campaign-level negative keywords — params: campaignId*, platform, keywords*
  • create_list [google]: Create a negative keyword list — params: platform, name*, keywords
  • rename_list [google]: Rename a negative keyword list — params: listId*, platform, name*
  • delete_list [google]: Delete a negative keyword list — params: listId*, platform
  • set_list_keywords [google]: Replace negative list keywords — params: listId*, platform, keywords*
  • set_campaign_lists [google]: Replace campaign negative lists — params: campaignId*, platform, listIds* For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opset_campaign_negatives | create_list | rename_list | delete_list | set_list_keywords | set_campaign_listsyes
paramsobjectThe op's fields, by Zernio's names.

change_google_pmax_asset_groups

Scope: ads:write

Google Performance Max asset groups (their texts, images, final URLs and listing-group filters). Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • create_asset_group [google]: Create a Performance Max asset group — params: campaignId*, name*, finalUrls*, finalMobileUrls, path1, path2, status, assets, listingGroupFilter, validateOnly
  • update_asset_group [google]: Update a Performance Max asset group — params: campaignId*, assetGroupId*, name, status, finalUrls, finalMobileUrls, path1, path2, validateOnly
  • remove_asset_group [google]: Remove a Performance Max asset group — params: campaignId*, assetGroupId*, validateOnly
  • link_assets [google]: Link or unlink asset group assets — params: campaignId*, assetGroupId*, link, unlink, validateOnly
  • set_listing_groups [google]: Replace an asset group's listing-group tree — params: campaignId*, assetGroupId*, tree*, validateOnly For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opcreate_asset_group | update_asset_group | remove_asset_group | link_assets | set_listing_groupsyes
paramsobjectThe op's fields, by Zernio's names.

create_ad_audience

Scope: ads:write

Make an ad audience on the platform: custom (a list you fill with add_people_to_ad_audience, or website visitors via config), lookalike (config: sourceAudienceId, country, ratio 0.01–0.2)…

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
namestringyes
typestringyescustom | lookalike | website | engagement (what the platform supports).
configobjectPlatform settings for the type (source, retention, lookalike country/ratio…).

create_ad_audience_from_customers

Scope: ads:write

An audience of the people who bought from the shop run from this space (their emails, hashed by the platform), optionally with a lookalike of them.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
namestringyes
days_backnumberBuyers from the last N days (default 90).
only_paidbooleanOnly paid/completed orders (default true).
also_create_lookalikeboolean
lookalike_countrystringCountry code, default US.
lookalike_rationumber0.01 = the closest 1%.

create_ad_campaign_draft

Scope: ads:write

Write an AD RECIPE: a full ad campaign (the ad and its settings) that appears in Ads Manager → Ad recipes with a native ad preview — even when NO ad account is connected. This is the preferred way to set up a campaign for a human to review and launch (no spend until launched; a recipe can be launched many times, each launch a campaign). Provide objective, budget, schedule, targeting, and one or more creatives (each with headline/body/CTA and an image or video URL). Either ad_account_id OR platform is required.

ParameterTypeRequiredDescription
namestringyesCampaign name.
platformmetaads | googleads | tiktokads | linkedinads | pinterestads | xads | openaiadsAd platform. Required when ad_account_id is omitted.
ad_account_idstringOptional. When given it must be reachable from this space and pins the platform. Omit to design before an account is connected.
goalengagement | traffic | awareness | video_views | lead_generation | conversions | app_promotion | catalog_salesyes
objectivestringOptional platform-native objective value.
budget_amountnumberyesBudget in account currency (USD).
budget_typedaily | lifetime
schedule_startstringISO date/datetime.
schedule_endstringISO date/datetime.
audience_idstringSaved audience id (list_ad_audiences), or omit for broad.
pixel_idstringConversion goals: the platform pixel id (list_ad_pixels → platform_pixel_id).
event_namestringConversion goals: the event, e.g. Purchase, Lead.
lead_form_idstringLead goals on Meta: the Instant Form (list_ad_lead_forms).
product_set_idstringcatalog_sales: the product set the ad shows (list_ad_catalog_product_sets).
bid_strategystring
bid_amountnumber
special_ad_categoriesstring[]HOUSING, EMPLOYMENT, CREDIT… when the ad is about one.
targetingobject
inspired_byobjectThe library ad this recipe is based on (from search_ad_library / get_ad_project): the editor links to it. Their words are a starting point, never their picture.
creativesobject[]One or more ad variations (up to 6 are shown in the ad recipe editor).

create_ad_catalog

Scope: ads:write

Make a new product catalog in the ad account owner's Meta business (it stays theirs). Fill it with send_shop_to_ad_catalog.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
namestringyes

create_ad_conversion_destination

Scope: ads:write

Make a conversion destination on an ad account (e.g. a Google conversion action for purchases).

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
namestringyes
typestringyesPURCHASE, LEAD, SIGNUP… (what the platform supports).
attribution_typestring
post_click_windowstring
view_through_windowstring

create_ad_lead_form

Scope: ads:write

Make a Meta lead form. questions: [{ type: EMAIL|FULL_NAME|PHONE|CITY|… }] or custom ones ({ type: CUSTOM, key, label }). A privacy policy URL is required.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
namestringyes
questionsobject[]yes
privacy_policy_urlstringyes
privacy_policy_link_textstring
follow_up_action_urlstring
localestring
thank_you_titlestring
thank_you_bodystring
thank_you_button_textstring
thank_you_button_typestring
thank_you_website_urlstring
is_optimized_for_qualitybooleanAdds a review step so fewer, better leads come in.

create_ad_pixel

Scope: ads:write

Make a new pixel on an ad account; returns the code to put on the website.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
namestringyes

create_ad_project

Scope: ads:write

Start a research project (free). Then add searches to it with search_ad_library { project }. Asking for a name that exists opens that one.

ParameterTypeRequiredDescription
namestringyese.g. "Bikes".

create_click_to_call_ad

Scope: ads:write

Click-to-Call ads on Meta (spend money). Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • create [meta]: Create Click-to-Call ad (spends money — the space's ad policy applies) — params: creativeFeatures, tracking, name*, campaignName, adSetName, platformPostId, existingPostId, objectStoryId, pageId, whatsappPhoneNumber, headline, body, imageUrl, video, welcomeMessage, creatives, adSetId, budgetAmount, budgetType, currency, endDate, countries, cities, regions, zips, metros, countryGroups, customLocations, ageMin, ageMax, interests, audienceId, placements, advantageAudience, objective, status, campaignStatus, bidStrategy, bidAmount, roasAverageFloor, dsaBeneficiary, dsaPayor, regionalRegulatedCategories, regionalRegulationIdentities, phoneNumber*, linkUrl* For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opcreateyes
paramsobjectThe op's fields, by Zernio's names.

create_messaging_ad

Scope: ads:write

Create a click-to-message ad that opens WhatsApp, Messenger, or Instagram Direct when tapped (Meta; spends money). Attribution flows back onto the resulting conversations automatically.

ParameterTypeRequiredDescription
ad_account_idstringyes
namestringyes
headlinestringyes
bodystringyes
image_urlstringyes
budget_amountnumberyes
budget_typedaily | lifetime
destinationwhatsapp | messenger | instagram_direct
countriesstring[]
currencystring

delete_ad_audience

Scope: ads:write

Delete an ad audience here and on the platform. Campaigns targeting it lose that targeting.

ParameterTypeRequiredDescription
audience_idstringyesThe ad audience (list_ad_audiences).

delete_ad_board

Scope: ads:write

Delete a board and the ads saved in it.

ParameterTypeRequiredDescription
board_idstringyes

delete_ad_campaign

Scope: ads:write

Delete a campaign from the ad platform (stops all its spend permanently). Destructive — prefer pausing unless the campaign is truly dead.

ParameterTypeRequiredDescription
campaign_idstringyes

delete_ad_campaign_draft

Scope: ads:write

Delete an ad recipe. Campaigns already launched from it keep running; nothing on the ad platform changes.

ParameterTypeRequiredDescription
draft_idstringyesThe ad recipe (list_ad_campaign_drafts → id).

delete_ad_catalog

Scope: ads:write

Delete a product catalog and every product in it on Meta. Catalog ads and shops using it lose it — destructive.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
catalog_idstringyesThe catalog (list_ad_catalogs).

delete_ad_catalog_product_set

Scope: ads:write

Delete a product set (ads showing it stop having products to show).

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
catalog_idstringyesThe catalog (list_ad_catalogs).
product_set_idstringyes

delete_ad_comment

Scope: ads:write

Delete a comment on an ad for good — prefer hiding unless it is spam or abuse.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
ad_idstringyesThe ad (list_live_ads — its id or platform ad id).
comment_idstringyes
placementfacebook | instagramMeta only: which side of the ad.

delete_ad_conversion_destination

Scope: ads:write

Delete a conversion destination on the platform.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
destination_idstringyesThe conversion destination (list_ad_conversion_destinations).

delete_ad_project

Scope: ads:write

Delete a research project AND its searches (the ads they found go with them). Ads saved to boards stay saved.

ParameterTypeRequiredDescription
projectstringyesThe research project: its project_id or its name (list_ad_projects).

Scope: ads:write

Delete a kept search and the ads it found. In a project, ads another search also found stay. Saved ads stay saved.

ParameterTypeRequiredDescription
search_idstringyes

describe_ads_op

Scope: ads:read

The full field reference of one ads op from the get_/change_ ads tools (Google keywords, extensions, PMax, bidding, conversion setup, creative library, forecasts, identities, research, labels, feeds…): what it does, each field's type, allowed values and meaning, nested shapes.

ParameterTypeRequiredDescription
opstringyese.g. add, or google_keywords.add

duplicate_ad_campaign_draft

Scope: ads:write

Make a copy of an ad recipe (every field, never launched) — to try a variation without touching the original. Default name "<name> (copy)".

ParameterTypeRequiredDescription
draft_idstringyesThe ad recipe (list_ad_campaign_drafts → id).
namestring

duplicate_ads_entity

Scope: ads:write

Duplicate a campaign, ad set, or single ad (Meta for ad_set/ad). Copies start PAUSED by default (status_option ACTIVE|PAUSED|INHERITED_FROM_SOURCE). The winning-ad → new-audience play.

ParameterTypeRequiredDescription
levelcampaign | ad_set | adyes
campaign_idstringSource (level=campaign) or destination (level=ad_set).
ad_set_idstringSource ad set (level=ad_set) or destination (level=ad).
ad_idstringSource ad (level=ad).
ad_account_idstring
status_optionACTIVE | PAUSED | INHERITED_FROM_SOURCE
deep_copyboolean
rename_strategyDEEP_RENAME | ONLY_TOP_LEVEL_RENAME | NO_RENAME
rename_prefixstring
rename_suffixstring

estimate_ad_reach

Scope: ads:read

How many people a targeting would reach on this ad account, before spending anything.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
targetingobjectyesThe platform targeting spec (ages, geo, interests…).

follow_advertiser

Scope: ads:write

Follow the business behind an ad: once a day Wakato looks at its ads and tells whoever follows it when it starts new ones (each look costs about as much as a search).

ParameterTypeRequiredDescription
ad_idstringyes

get_ad_account_finance

Scope: ads:read

Ad account balance, amount spent, spend cap and funding source. First stop when ads unexpectedly stop delivering (declined card, cap hit).

ParameterTypeRequiredDescription
ad_account_idstringyes

get_ad_bidding

Scope: ads:read

Bidding and timing: Google portfolio bid strategies, a campaign's bidding and ad schedule (dayparting), Meta value rule sets, Meta budget increases for high-demand periods. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • bid_strategies [google]: List portfolio bid strategies — params: fromDate, toDate
  • campaign_bidding [google]: Read a campaign's current bidding — params: campaignId*, platform*
  • ad_schedule [google]: Read a campaign's ad schedule (dayparting) — params: campaignId*, platform, includePerformance, windowDays, fromDate, toDate
  • value_rule_sets [meta]: List value rule sets — params: limit, after
  • value_rule_set [meta]: Read a value rule set — params: valueRuleSetId*
  • high_demand_periods [meta]: List high-demand periods — params: campaignId, adSetId, limit, after For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opbid_strategies | campaign_bidding | ad_schedule | value_rule_sets | value_rule_set | high_demand_periodsyes
paramsobjectThe op's fields, by Zernio's names.

get_ad_campaign_analytics

Scope: ads:read

Performance summary for one of the space's campaigns (campaign_id from list_ad_campaigns): impressions, clicks, spend, conversions, funnel and engagement breakdowns.

ParameterTypeRequiredDescription
campaign_idstringyes
from_datestring
to_datestring

get_ad_campaign_draft

Scope: ads:read

One ad recipe in full: every field of its form (targeting, creatives, pixel, lead form…) and what it still needs before launching.

ParameterTypeRequiredDescription
draft_idstringyesThe ad recipe (list_ad_campaign_drafts → id).

get_ad_campaign_tree

Scope: ads:read

An ad account's campaigns → ad sets → ads as one tree, live from the platform (including ones made outside Wakato), each with its numbers for the dates given.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
statusstring
from_datestringYYYY-MM-DD
to_datestring
only_oursbooleanOnly campaigns made through Wakato.
pagenumber
limitnumber

get_ad_catalog_feeds

Scope: ads:read

A catalog's product feeds (a file Meta fetches on a schedule) and their uploads. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • feeds [meta]: List a catalog's product feeds — params: catalogId*
  • feed_uploads [meta]: List a feed's uploads — params: catalogId*, feedId* For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opfeeds | feed_uploadsyes
paramsobjectThe op's fields, by Zernio's names.

get_ad_conversion_quality

Scope: ads:read

How well the platform can match the events sent to real people (Meta's event match quality) and what would raise it.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
destination_idstringyesThe conversion destination (list_ad_conversion_destinations).

get_ad_creative_library

Scope: ads:read

Meta's creative library: saved creatives, images and videos stored on the ad account, reusable across ads. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • creatives [meta]: Creative library — params: fields, limit, after
  • creative [meta]: Creative details — params: creativeId*, fields
  • images [meta]: Ad image library — params: fields, limit, after
  • videos [meta]: Ad video library — params: fields, limit, after For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opcreatives | creative | images | videosyes
paramsobjectThe op's fields, by Zernio's names.

get_ad_forecasts

Scope: ads:read

Forecasting before spending: Meta reach & frequency predictions (and reserving them), LinkedIn bid pricing and delivery forecasts. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • reach_frequency_prediction [meta]: Create reach-frequency prediction — params: budgetAmount, reach, startDate*, endDate*, frequencyCap, targeting, placements
  • reach_frequency [meta]: Get reach-frequency prediction — params: predictionId*
  • bid_pricing [linkedin]: Suggested bid and budget bounds — params: spec*, campaignType, bidType, matchType, currency, objectiveType, optimizationTargetType, dailyBudget
  • supply_forecast [linkedin]: Forecast ad delivery — params: spec*, campaignType, timeRangeStart*, timeRangeEnd*, objectiveType, optimizationTarget, dailyBudget, totalBudget, currency, competingBid, enableAudienceNetwork, enableAudienceExpansion, connectedTelevisionOnly For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opreach_frequency_prediction | reach_frequency | bid_pricing | supply_forecastyes
paramsobjectThe op's fields, by Zernio's names.

get_ad_identities

Scope: ads:read

Who an ad runs as and what it can promote: TikTok identities and pixels, Instagram accounts and posts to boost, partnership (creator) content and permissions, apps, businesses. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • tiktok_identities [tiktok]: List TikTok ad identities
  • instagram_accounts [meta]: List Instagram ad identities
  • instagram_posts [meta]: List Instagram posts to boost — params: igUserId, limit, after
  • partnership_content [meta]: List partnership ad content — params: creatorUsername, postUrl, onlyAllowlisted
  • partnership_permissions [meta]: List partnership permissions — params: creatorUsername
  • apps [meta]: List advertisable apps
  • businesses [meta]: Businesses list — params: limit, after
  • tiktok_pixels [tiktok]: List TikTok ad pixels — params: code For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
optiktok_identities | instagram_accounts | instagram_posts | partnership_content | partnership_permissions | apps | businesses | tiktok_pixelsyes
paramsobjectThe op's fields, by Zernio's names.

get_ad_insights

Scope: ads:read

Flexible live ads insights. Meta: pass object_id (campaign/ad-set/ad platform id) plus optional level/breakdowns/action_breakdowns/date_preset or from_date+to_date. Google: pass a GAQL SELECT via query (int64 counters return as strings, money in micros). Use for deep performance questions the campaign summary can't answer.

ParameterTypeRequiredDescription
ad_account_idstringyes
object_idstringMeta object to query.
levelstringMeta: account|campaign|adset|ad.
breakdownsstringComma-separated Meta breakdowns (e.g. age,gender).
action_breakdownsstring
date_presetstringe.g. last_7d, last_30d.
from_datestring
to_datestring
time_incrementstring
querystringGoogle: raw GAQL SELECT.
limitnumber
afterstringMeta paging cursor.
page_tokenstringGoogle paging token.

get_ad_labels_and_accounts

Scope: ads:read

Google Ads labels (tag campaigns, ad groups, ads, keywords) and the manager-account hierarchy and links. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • labels [meta/google]: List ad labels — params: limit, after
  • account_hierarchy [google]: Get manager account hierarchy For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
oplabels | account_hierarchyyes
paramsobjectThe op's fields, by Zernio's names.

get_ad_lead_form

Scope: ads:read

One lead form in full: its questions, privacy link, thank-you screen.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
form_idstringyes

get_ad_pixel_stats

Scope: ads:read

What a pixel has seen: events by type over time — the first check when conversions look wrong.

ParameterTypeRequiredDescription
pixel_idstringyesThe pixel (list_ad_pixels → pixel_id).
aggregationstringevent | day | hour…
start_timestring
end_timestring

get_ad_project

Scope: ads:read

Read a research project's ads — every ad its searches found, ONCE each, with found_by (which searches found it). Free (no new search). Narrow with search_id (one search's ads), platform, active_only, min_days, new_only (marked New by the last refresh).

ParameterTypeRequiredDescription
projectstringyesThe research project: its project_id or its name (list_ad_projects).
search_idstring
platformmeta | tiktok | google | linkedin
active_onlyboolean
min_daysnumber
new_onlyboolean
limitnumberDefault 40, max 200.

get_ad_research

Scope: ads:read

Research: the public Ad Library, A/B tests and lift studies, TikTok Smart+ creative results, iOS 14 limits, EU DSA defaults, Google Local Services leads. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • ad_library [meta/linkedin]: Search the public Ad Library — params: platform, q, pageIds, advertiser, countries, adType, status, platforms, mediaType, languages, since, until, searchType, fields, limit, after
  • studies [meta]: A/B tests and lift studies — params: fields, limit, after
  • smart_plus_materials [tiktok]: Per-creative performance inside TikTok Smart+ ads — params: startDate*, endDate*, level, smartPlusAdIds, adGroupIds, page, pageSize
  • ios14_limits [meta]: Get iOS 14 campaign limits — params: applicationId*
  • dsa_defaults [meta]: Get ad account DSA defaults
  • dsa_recommendations [meta]: Get DSA recommendations
  • local_services_leads [google]: Google Local Services Ads leads — params: fromDate, toDate, leadType, leadStatus, chargedOnly, pageToken
  • local_services_conversations [google]: List lead conversations — params: leadId*, pageToken For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opad_library | studies | smart_plus_materials | ios14_limits | dsa_defaults | dsa_recommendations | local_services_leads | local_services_conversationsyes
paramsobjectThe op's fields, by Zernio's names.

Scope: ads:read

Read the ads a kept search found — free, no new provider call. Narrow with platform, active_only, min_days (ran at least that many days).

ParameterTypeRequiredDescription
search_idstringyes
platformmeta | tiktok | google | linkedin
active_onlyboolean
min_daysnumber
limitnumber

get_ad_set_details

Scope: ads:read

Live Meta ad-set read including learning_stage_info (LEARNING/SUCCESS/FAIL/WAIVING), delivery settings, budget, schedule and targeting. ALWAYS check the learning phase before recommending edits — editing a LEARNING ad set resets its progress.

ParameterTypeRequiredDescription
ad_account_idstringyes
ad_set_idstringyesPlatform ad set id.
fieldsstringOptional raw Graph fields override.

get_ads_activity

Scope: ads:read

Ad account change/audit log: budget edits, status flips, review rejections — who changed what and when.

ParameterTypeRequiredDescription
ad_account_idstringyes
sincestringISO date lower bound.
untilstring
object_idstringRestrict to one campaign/ad-set/ad.
limitnumber

get_ads_timeline

Scope: ads:read

The Analytics tab: an ad account's spend, impressions, clicks and results day by day, on any platform.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
from_datestringYYYY-MM-DD
to_datestring

get_google_ads_conversion_setup

Scope: ads:read

Google Ads conversion setup: conversion actions, account and campaign conversion goals, custom goals. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • actions [google]: List conversion actions — params: type
  • goals [google]: List account conversion goals
  • custom_goals [google]: List custom conversion goals
  • campaign_goals [google]: Get campaign conversion goals — params: campaignId* For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opactions | goals | custom_goals | campaign_goalsyes
paramsobjectThe op's fields, by Zernio's names.

get_google_ads_extensions

Scope: ads:read

Google Ads extensions (assets): sitelinks, callouts and structured snippets on the account, a campaign or an ad group. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • sitelinks [google]: List account sitelinks
  • callouts [google]: List account callouts
  • snippets [google]: List account snippets
  • campaign_assets [google]: List campaign assets — params: campaignId*
  • ad_set_assets [google]: List ad-group assets — params: adSetId* For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opsitelinks | callouts | snippets | campaign_assets | ad_set_assetsyes
paramsobjectThe op's fields, by Zernio's names.

get_google_ads_keywords

Scope: ads:read

Google Ads Search keywords. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • list [google]: List Search keywords — params: page, limit, campaignId, adSetId, status, matchType, negative, search
  • ideas [google]: Generate keyword ideas — params: seedKeywords, seedUrl, countries, languageConstantId, network, includeAdultKeywords, pageSize, pageToken
  • historical_metrics [google]: Get historical keyword metrics — params: keywords*, countries, languageConstantId, network, includeAdultKeywords, includeAverageCpc
  • search_terms [google]: Google Ads search terms report — params: fromDate, toDate, campaignId, adSetId, adGroupId, pageToken For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
oplist | ideas | historical_metrics | search_termsyes
paramsobjectThe op's fields, by Zernio's names.

get_google_ads_negative_keywords

Scope: ads:read

Google Ads negative keywords — on a campaign and in shared lists. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • campaign_negatives [google]: List campaign-level negative keywords — params: campaignId*, platform
  • lists [google]: List negative keyword lists — params: platform
  • list [google]: Get a negative keyword list — params: listId*, platform
  • campaign_lists [google]: List campaign negative lists — params: campaignId*, platform For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opcampaign_negatives | lists | list | campaign_listsyes
paramsobjectThe op's fields, by Zernio's names.

get_google_pmax_asset_groups

Scope: ads:read

Google Performance Max asset groups (their texts, images, final URLs and listing-group filters). Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • asset_groups [google]: List Performance Max asset groups — params: campaignId*
  • asset_group [google]: Get a Performance Max asset group — params: campaignId*, assetGroupId* For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opasset_groups | asset_groupyes
paramsobjectThe op's fields, by Zernio's names.

hide_ad_comment

Scope: ads:write

Hide a comment on an ad from everyone but its writer and their friends (hidden: false shows it again). Softer than deleting.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
ad_idstringyesThe ad (list_live_ads — its id or platform ad id).
comment_idstringyes
hiddenboolean
placementfacebook | instagramMeta only: which side of the ad.

launch_ad_campaign

Scope: ads:write

LAUNCH a real ad campaign (spends money, subject to the space's ad policy — if the policy requires approval the campaign is queued for a human instead of launching). Same shape as validate_ad_campaign; run that first to catch platform rejections. Supports multi-creative, targeting, lead forms, pixels, schedules, Google Performance Max / Demand Gen (campaign_type), Meta reach & frequency (buying_type RESERVED), Meta website-lead and Page-like goals. Catalog ads (Meta): goal catalog_sales + promoted_object { productSetId, pixelId, customEventType } and ONE creative whose words may carry {{product.name}} / {{product.price}}.

ParameterTypeRequiredDescription
ad_account_idstringyes
namestringyes
goalengagement | traffic | awareness | video_views | lead_generation | lead_conversion | conversions | app_promotion | catalog_sales | page_likesyesMeta also: lead_conversion (website leads — pixel + a leads event like LEAD in promoted_object) and page_likes.
budget_amountnumberyesWHOLE currency units (50 = $50).
budget_typedaily | lifetime
duration_daysnumber
schedule_startstring
schedule_endstring
targetingobject
creativeobject
creativesobject[]
promoted_objectobject
lead_gen_form_idstring
bid_strategystring
bid_amountnumber
special_ad_categoriesstring[]
currencystring
optimization_goalstring
audience_idstring
idempotency_keystringStable key so retries can't double-launch.
campaign_typesearch | display | pmax | demand_genGoogle only. pmax needs asset_group, demand_gen needs demand_gen; both start PAUSED (resume with set_ads_delivery).
asset_groupobjectGoogle Performance Max assets: finalUrl, headlines (3-15, ≤30 chars), longHeadline (≤90), descriptions (2-5, one ≤60), businessName (≤25), images { landscape[], square[], logo[] } (public URLs).
demand_genobjectGoogle Demand Gen: finalUrl, businessName, headlines (≤40), descriptions (≤90), images { logo[], landscape[] or square[] }, optional callToAction, youtubeVideoIds, carouselCards.
buying_typeAUCTION | RESERVEDMeta only. RESERVED = a reach & frequency campaign on a reserved prediction (change_ad_forecasts reserve_reach_frequency) — budget and schedule come from the reservation; one creative.
rf_prediction_idstringRESERVED only: the id the reserve step returned.

launch_ad_campaign_draft

Scope: ads:write

LAUNCH an ad recipe exactly as the Launch button does (spends money; the space's ad policy may hold it for a person to approve). It becomes a new campaign on the recipe's account, the one you pass, or the space's only account on that platform. The recipe STAYS, so it can be launched again (each launch is its own campaign). Refused with the missing pieces when it isn't ready.

ParameterTypeRequiredDescription
draft_idstringyesThe ad recipe (list_ad_campaign_drafts → id).
ad_account_idstringThe ad account (list_ad_accounts).
campaign_namestringThe launched campaign's name. Default: the recipe's name (the page suggests "<recipe> · <date>" so launches tell apart).

Scope: ads:write

Which campaigns a conversion destination counts for: pass campaign_ids to link them (unlink: true to take them off); pass none to see the current ones.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
destination_idstringyesThe conversion destination (list_ad_conversion_destinations).
campaign_idsstring[]Platform campaign ids.
unlinkboolean

list_ad_accounts

Scope: ads:read

List ad accounts connected to the space.

list_ad_audiences

Scope: ads:read

The saved ad audiences (custom, lookalike, customer lists) on the space's ad accounts, with their size and status.

ParameterTypeRequiredDescription
ad_account_idstringThe ad account (list_ad_accounts).

list_ad_boards

Scope: ads:read

The space's boards of saved ads (Inspiration → Saved), each with its ads. Use them as reference when writing ad recipes ("three ads like my Before/after board").

list_ad_campaign_drafts

Scope: ads:read

The space's AD RECIPES (Ads Manager → Ad recipes): ads with their settings, written down once and launched as many times as wanted. Each has name, platform, goal, budget, how many ad variations, how many times it was launched, and before_launch — what the Launch button would say is still missing (empty = it can launch). (The tool names still say "draft".)

ParameterTypeRequiredDescription
platformstring
limitnumber

list_ad_campaigns

Scope: ads:read

List the space's launched ad campaigns (running, paused, held for a person's approval, rejected — with rejected_reason). Each says the AD RECIPE it was launched from (recipe); pass recipe_id to list the campaigns one recipe launched. Ads not launched yet are ad recipes: list_ad_campaign_drafts.

ParameterTypeRequiredDescription
statusstring
recipe_idstringOnly the campaigns launched from this ad recipe.
limitnumber

list_ad_catalog_product_sets

Scope: ads:read

A catalog's product sets — the slices a catalog ad can show.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
catalog_idstringyesThe catalog (list_ad_catalogs).

list_ad_catalog_products

Scope: ads:read

The products in a catalog as Meta holds them (price as Meta formats it). retailer_id = a listing id finds one of the shop's.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
catalog_idstringyesThe catalog (list_ad_catalogs).
retailer_idstring
limitnumber
afterstring

list_ad_catalogs

Scope: ads:read

The product catalogs (Meta Commerce) the ad account's business holds, and shop_sync: which of them this space's shop sends its products to, when it last did, and what Meta refused.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).

list_ad_comments

Scope: ads:read

The comments people left on an ad (Meta or TikTok) — a Meta ad running on Facebook and Instagram has two threads: placement picks one (Instagram by default when it has one). Each comment says who wrote it and whether you can reply or hide it.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
ad_idstringyesThe ad (list_live_ads — its id or platform ad id).
placementfacebook | instagramMeta only: which side of the ad.
limitnumber
cursorstring

list_ad_conversion_destinations

Scope: ads:read

Where server-side conversions go on an ad account (pixels/datasets on Meta, conversion actions on Google, …).

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).

list_ad_conversion_events

Scope: ads:read

The conversion events sent to the ad platforms from this space (the Conversions tab log): which went through and which failed, and why.

ParameterTypeRequiredDescription
statussent | failed | queued
limitnumber

list_ad_lead_forms

Scope: ads:read

The Instant Forms (Meta lead forms) on an ad account — a Leads campaign needs one.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
limitnumber
cursorstring

list_ad_leads

Scope: ads:read

The leads people submitted through the account's lead ads — all of them, or one form's — newest first.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
form_idstring
sincestringISO date.
limitnumber
cursorstring

list_ad_pixel_shares

Scope: ads:read

Which ad accounts a pixel is shared with.

ParameterTypeRequiredDescription
pixel_idstringyesThe pixel (list_ad_pixels → pixel_id).

list_ad_pixels

Scope: ads:read

The pixels (tracking tags) on an ad account: install code (for a site Wakato does not serve), whether Wakato puts it on this space's pages itself, automatic matching, whether the shop's paid orders fire Purchase through it and the last sale it reported, which accounts it is shared with.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).

list_ad_projects

Scope: ads:read

The space's research projects (Ads Manager → Inspiration): one topic ("Bikes") researched with many searches ("electric bike", "kids bike", "trek.com"). Each lists its searches, how many DIFFERENT ads they found together (an ad two searches found counts once), and whether it refreshes weekly.

list_ad_searches

Scope: ads:read

The ad-library searches this space kept (Ads Manager → Inspiration): words, country, how many ads, when, whether it refreshes weekly, and project_id (the research project it belongs to; null = on its own).

list_followed_advertisers

Scope: ads:read

The advertisers this space follows: how many ads each runs now and how many are new this week.

list_live_ad_campaigns

Scope: ads:read

List campaigns straight from the ad platform (via Zernio), including ones created outside Wakato that list_ad_campaigns (local DB) can't see. include_empty=true also returns Meta campaigns with zero ads.

ParameterTypeRequiredDescription
ad_account_idstringyes
platformstring
statusstring
include_emptyboolean
pagenumber
limitnumber
from_datestring
to_datestring

list_live_ads

Scope: ads:read

List LIVE ads from the ad platform (via Zernio) with delivery status and metrics — includes ads created outside Wakato. Filter by campaign_id (local UUID or platform id), status, platform. Each ad carries creative info, reviewStatus (in_review/approved/rejected/with_issues) and metrics incl. the conversion funnel.

ParameterTypeRequiredDescription
ad_account_idstringyesFrom list_ad_accounts.
campaign_idstring
statusstring
platformstring
limitnumber
from_datestringYYYY-MM-DD metrics range start.
to_datestring

load_more_ads

Scope: ads:read

Load the NEXT page of a kept search (Inspiration → Load more). Each platform answers one page per search (Meta and LinkedIn up to ~50, TikTok 20, Google ~16 per business); a search's per_platform notes carry more on each platform that has another page. One paid lookup per platform asked (Google by words: one per business it read). Adds the new ads to the search — nothing already kept changes — and says which platforms still have more.

ParameterTypeRequiredDescription
search_idstringyesFrom search_ad_library / list_ad_searches.
platformsstring[]Only these platforms (default: every one that has more).
limitnumberHow many of the added ads to return (default 25, max 100); all are kept in the search.

Scope: ads:write

Put a kept search into a research project (free — its ads join the project, each ad once), or take it out (project: "" → a search on its own).

ParameterTypeRequiredDescription
search_idstringyes
projectstringyesProject name or id; an empty string takes it out.

open_library_ad

Scope: ads:read

Open one ad from a search in full (Inspiration): for a Meta ad also who it reached in the EU/UK (reach, age · gender · country, the places targeted, who paid) and every version of it; for a TikTok ad how it ranks in its industry for click rate and which seconds of the video pull the clicks; for a Google ad its YouTube video (a video ad), words, link and where it ran. About 1–3 cents the first time, then kept 7 days (free). LinkedIn has nothing more than the search gave.

ParameterTypeRequiredDescription
ad_idstringyesFrom search_ad_library / get_ad_search.
refreshboolean

pause_ads_delivery

Scope: ads:write

PAUSE delivery at any level — campaign (campaign_id from list_ad_campaigns), ad_set (ad_set_id + campaign_id or ad_account_id), or single ad (ad_id + ad_account_id). Pausing only ever STOPS spend, so it's always safe to do autonomously when an ad underperforms or misbehaves. To resume, use set_ads_delivery.

ParameterTypeRequiredDescription
levelcampaign | ad_set | adyes
campaign_idstring
ad_set_idstring
ad_idstring
ad_account_idstring

preview_ad

Scope: ads:read

Render Meta ad previews as embeddable HTML iframes. Pass ad_id for an existing ad, or creative_spec / existing_creative_id to preview BEFORE creating. Optional formats array of Meta ad_format values (default DESKTOP_FEED_STANDARD).

ParameterTypeRequiredDescription
ad_account_idstringyes
ad_idstring
existing_creative_idstring
creative_specobjectRaw Meta creative spec.
formatsstring[]

refresh_ad_audience_size

Scope: ads:read

Ask the platform how big an ad audience is now.

ParameterTypeRequiredDescription
audience_idstringyesThe ad audience (list_ad_audiences).

refresh_ad_campaign_metrics

Scope: ads:read

Pull a campaign's latest numbers from the ad platform now (the drawer's Refresh). Then read them with get_ad_campaign_analytics.

ParameterTypeRequiredDescription
campaign_idstringyeslist_ad_campaigns → id.

refresh_ad_project

Scope: ads:read

Look again now with every search of a project (each charged like the search, about 2 cents a platform). Says how many new ads each search found.

ParameterTypeRequiredDescription
projectstringyesThe research project: its project_id or its name (list_ad_projects).

rename_ad_board

Scope: ads:write

Rename a board of saved ads.

ParameterTypeRequiredDescription
board_idstringyes
namestringyes

rename_ad_project

Scope: ads:write

Rename a research project.

ParameterTypeRequiredDescription
projectstringyesThe research project: its project_id or its name (list_ad_projects).
namestringyes

reply_to_ad_comment

Scope: ads:write

Answer a comment on an ad, publicly under it, as the Page / Instagram / TikTok account the ad runs as.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
ad_idstringyesThe ad (list_live_ads — its id or platform ad id).
comment_idstringyes
textstringyes
placementfacebook | instagramMeta only: which side of the ad.

save_ad_catalog_product_set

Scope: ads:write

Make a product set (no product_set_id) or change one: a slice of the catalog a catalog ad shows. Name the shop's listings with listing_ids, or pass Meta's filter, e.g. { "price": { "lt": 5000 } }.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
catalog_idstringyesThe catalog (list_ad_catalogs).
product_set_idstringChange this one; omit to make a new one.
namestring
listing_idsstring[]The shop's listings to include.
filterobjectMeta's product set filter, instead of listing_ids.

save_library_ad

Scope: ads:write

Keep an ad from a search in one of the space's boards (Inspiration → Saved), with a copy of its picture so it survives the advertiser stopping it. Name a board (made if new) or pass board_id.

ParameterTypeRequiredDescription
ad_idstringyesFrom search_ad_library / get_ad_search.
board_idstring
board_namestringe.g. "Before/after hooks" — made if it doesn't exist.
notestringWhy it's worth keeping.

search_ad_library

Scope: ads:read

Research the ads OTHER businesses are running (Ads Manager → Inspiration): searches the Meta Ad Library, TikTok's top ads, Google's ads and the LinkedIn Ad Library at once. by: "words" (a service, e.g. "roof cleaning") or by: "business" (a business name or its website — Google can ONLY be searched this way). Each ad says how long it has run (Meta, Google), how many versions the advertiser tests (Meta), likes / click rate / spend level (TikTok), its button and where it sends people. Ads that run for months are usually the ones making money. Costs about 2 cents a platform from the space's budget; the same search again the same day is free (refresh:true asks again). The search is kept for the space.

ParameterTypeRequiredDescription
querystringyesWords ("roof cleaning") or a business / website ("cleanroofco.com").
bywords | businessDefault words.
countrystring2-letter country code, or ALL (default).
platformsstring[]Default: all four.
refreshbooleanAsk the platforms again even if this ran today.
limitnumberHow many ads to return (default 25, max 100); the rest stay readable with get_ad_search.
projectstringPut this search in a research project (its name or project_id; a new name makes the project). The answer says how many ads were NEW to the project — the rest were already found by its other searches and show once.
advertiser_refstringby business: a known advertiser id (Meta page id, Google AR id or a domain — list_followed_advertisers gives it). A Meta business is found by its page id, not its name.

search_ad_targeting

Scope: ads:read

Find the platform's ids for a place, an interest, a behavior or an income band before targeting it ("Irvine", "home improvement"). Put what you pick into a draft's targeting.locations / interests / behaviors.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
querystringyes
kindlocation | interest | behavior | income
location_typecountry | region | city | zip | metro
country_codestring

send_ad_conversion_event

Scope: ads:write

Send conversion events to the platform server-side (a sale, a lead that happened off the site). events: [{ event_name, event_time, event_id, value, currency, user: { email, phone } }]. Pass test_code to send them as test events.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
destination_idstringyesThe conversion destination (list_ad_conversion_destinations).
eventsobject[]yes
test_codestring

send_shop_to_ad_catalog

Scope: ads:write

Send the live products of the shop run from this space into a Meta catalog — an existing one (catalog_id) or a new one (new_catalog_name) — and keep them current: price, stock, pictures and listings taken down follow every 15 minutes. Called again for a catalog it already feeds, it sends what changed right now. Needs a Meta ad account whose login may manage catalogs.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
catalog_idstringThe catalog (list_ad_catalogs).
new_catalog_namestring

send_test_ad_lead

Scope: ads:write

Submit a test lead through a form, to check that leads arrive (and reach the space's contacts).

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
form_idstringyes
answersobject[]yese.g. [{ "name": "email", "values": ["test@example.com"] }]

set_ad_audience_companies

Scope: ads:write

LinkedIn company-list audiences. Pass op and its params (Zernio's field names, * = required); the ad account's own ids are filled in for you.

  • set_companies [linkedin]: Replace audience companies — params: audienceId*, companies* For an op's nested fields (shapes, enums), ask describe_ads_op.
ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
opset_companiesyes
paramsobjectThe op's fields, by Zernio's names.

set_ad_project_weekly

Scope: ads:write

Look again with every search of a project each week (each look costs as much as the search). New ads come marked New.

ParameterTypeRequiredDescription
projectstringyesThe research project: its project_id or its name (list_ad_projects).
weeklybooleanyes

set_ad_search_weekly

Scope: ads:write

Look again with a search on its own each week (a search in a project follows its project's switch: set_ad_project_weekly).

ParameterTypeRequiredDescription
search_idstringyes
weeklybooleanyes

set_ads_delivery

Scope: ads:write

Pause OR RESUME delivery at campaign, ad_set, or ad level. Resuming restarts spend on a previously-launched campaign. (pause_ads_delivery still exists for pause-only callers.)

ParameterTypeRequiredDescription
levelcampaign | ad_set | adyes
statusactive | pausedyes
campaign_idstring
ad_set_idstring
ad_idstring
ad_account_idstring

set_advertiser_alerts

Scope: ads:write

Switch whether the space is told (a notification) when a followed advertiser starts new ads. The daily look and the automation trigger keep running either way.

ParameterTypeRequiredDescription
follow_idstringyes
notifybooleanyes

set_tiktok_brand_identity

Scope: ads:write

The name and picture a TikTok ad account's ads appear under (ads-only accounts need one).

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
display_namestringyes
image_urlstringyes

share_ad_pixel

Scope: ads:write

Let another ad account of the same owner use a pixel (or stop it with stop: true).

ParameterTypeRequiredDescription
pixel_idstringyesThe pixel (list_ad_pixels → pixel_id).
with_ad_account_idstringyesThe ad account (list_ad_accounts).
stopboolean

show_ads

Scope: ads:read

Show ads from this space's Ads Manager as CARDS in the chat — the ad as people see it (picture or video, headline, text, button), its status (running, paused, in review, rejected) and its numbers for the period: spent, results (purchases, leads or link clicks — what the ad is for), cost each, CTR. Use it whenever someone asks to see, show, find or check particular ads or how they did ("show me my newest ads", "how is the Halloween ad doing", "which ad spent the most this week"), instead of listing numbers in text. Narrow with search (words in the ad, campaign or ad set name or text), campaign, ad_ids, status, sort and the period (days, or from_date/to_date). Up to 6 cards. Only people who may see this space's Ads Manager see the cards; others in the chat see one line. After it, write one or two sentences on what stands out — never repeat the numbers on the cards. Changes nothing.

ParameterTypeRequiredDescription
ad_account_idstringWhich ad account (list_ad_accounts). Needed only when the space has more than one.
searchstringWords in the ad, its campaign or ad set name, or its text — e.g. 'halloween', 'shorts'.
campaignstringA campaign's name (words) or platform campaign id.
ad_idsstring[]Platform ad ids, when you already know which ads.
statusrunning | paused | in_review | rejected | endedOnly ads in this state.
sortnewest | spend | resultsnewest (default), most spent, or most results in the period.
daysnumberThe last N days, today included (default 30).
from_datestringStart day YYYY-MM-DD (instead of days).
to_datestringEnd day YYYY-MM-DD (default today).
limitnumberHow many cards, 1–6 (default 3).
notestringOptional line above the cards.

stop_following_advertiser

Scope: ads:write

Stop following an advertiser (list_followed_advertisers gives follow_id).

ParameterTypeRequiredDescription
follow_idstringyes

stop_shop_ad_catalog

Scope: ads:write

Stop sending the shop's products to a catalog. remove_products: true also takes them out of it.

ParameterTypeRequiredDescription
catalog_idstringyesThe catalog (list_ad_catalogs).
remove_productsboolean

unsave_library_ad

Scope: ads:write

Take a saved ad out of its board (list_ad_boards gives saved_id).

ParameterTypeRequiredDescription
saved_idstringyes

update_ad_campaign

Scope: ads:write

Edit a live campaign as the Edit dialog does: name, goal, budget, bid strategy/amount, special ad categories (Meta + Google). target_ad_set puts a budget/bid change on its ad set instead. Unsupported fields are rejected by the platform with a 400.

ParameterTypeRequiredDescription
campaign_idstringyes
namestring
goalengagement | traffic | awareness | video_views | lead_generation | conversions | app_promotion | catalog_sales
special_ad_categoriesstring[]
target_ad_setboolean
budget_amountnumber
budget_typedaily | lifetime
bid_strategystring
bid_amountnumber
roas_average_floornumber

update_ad_campaign_draft

Scope: ads:write

Change an ad recipe — only the fields you pass change. Pass creatives to replace its ad variations. Nothing is spent, and campaigns already launched from it keep running as they were.

ParameterTypeRequiredDescription
draft_idstringyesThe ad recipe (list_ad_campaign_drafts → id).
namestring
platformmetaads | googleads | tiktokads | linkedinads | pinterestads | xads | openaiadsThe ad platform. On update: moves the recipe to another platform (only while no account pins it).
inspired_byobjectThe library ad this recipe is based on (from search_ad_library / get_ad_project): the editor links to it. Their words are a starting point, never their picture.
ad_account_idstringPin the account it launches on (same platform). Empty string clears it.
goalengagement | traffic | awareness | video_views | lead_generation | conversions | app_promotion | catalog_salescatalog_sales = Meta catalog ads (each person sees products from a product set): needs product_set_id, pixel_id and event_name.
objectivestringPlatform-native objective, optional.
budget_amountnumberWhole currency units (50 = $50).
budget_typedaily | lifetime
schedule_startstringISO date/datetime.
schedule_endstringISO date/datetime. A lifetime budget needs one.
audience_idstringA saved ad audience (list_ad_audiences), or "none" for broad.
pixel_idstringConversion goals: the platform pixel id (list_ad_pixels → platform_pixel_id).
event_namestringConversion goals: the event, e.g. Purchase, Lead.
lead_form_idstringLead goals on Meta: the Instant Form (list_ad_lead_forms).
product_set_idstringcatalog_sales: the product set the ad shows (list_ad_catalog_product_sets).
bid_strategystring
bid_amountnumber
special_ad_categoriesstring[]HOUSING, EMPLOYMENT, CREDIT… when the ad is about one.
targetingobject
creativesobject[]Replaces the draft's ad variations (up to 6).

update_ad_conversion_destination

Scope: ads:write

Change a conversion destination: name, on/off, attribution windows, its value.

ParameterTypeRequiredDescription
ad_account_idstringyesThe ad account (list_ad_accounts).
destination_idstringyesThe conversion destination (list_ad_conversion_destinations).
namestring
enabledboolean
attribution_typestring
post_click_windowstring
view_through_windowstring
value_typestring
valuenumber

update_ad_creative

Scope: ads:write

Change what a live ad says or shows — headline, body, image/video, link, button — and optionally its targeting. Changes the campaign's first ad unless ad_id names another. The platform reviews the ad again.

ParameterTypeRequiredDescription
campaign_idstringyes
ad_idstringA specific ad of the campaign (list_live_ads).
creativeobjectyes
targetingobject

update_ad_pixel

Scope: ads:write

Change a pixel: rename it, switch automatic matching, put it on every published page of this space or take it off (on_this_space_pages — Wakato adds the code itself, nothing to paste), or switch whether the shop's paid orders fire a Purchase event through it (auto_fire_purchases, optionally to a conversion destination).

ParameterTypeRequiredDescription
pixel_idstringyesThe pixel (list_ad_pixels → pixel_id).
namestring
automatic_matchingboolean
auto_fire_purchasesboolean
auto_fire_destination_idstring
on_this_space_pagesbooleantrue = Wakato puts this pixel on every published page of this space (its own pages and its site's domain); false = takes it off.

update_ad_set

Scope: ads:write

Edit a live ad set: budget, status, name, bid strategy, Meta value rules. CHECK get_ad_set_details first — editing an ad set in the LEARNING phase resets its progress. On a CBO campaign, budget edits belong on update_ad_campaign instead (409 BUDGET_LEVEL_MISMATCH).

ParameterTypeRequiredDescription
ad_account_idstringyes
ad_set_idstringyes
budget_amountnumber
budget_typedaily | lifetime
statusactive | paused
namestring
bid_strategystring
bid_amountnumber
roas_average_floornumber
value_rule_set_idstring
value_rules_appliedboolean
platformstring

validate_ad_campaign

Scope: ads:read

DRY-RUN a full campaign spec against the ad platform (Meta validateOnly) — same arguments as a real create (name, goal, budget_amount, creative(s), targeting...) but nothing is created and nothing is spent. Run this on a draft before asking a human to launch, so rejections surface as fixable errors instead of failed launches.

ParameterTypeRequiredDescription
ad_account_idstringyes
namestringyes
goalengagement | traffic | awareness | video_views | lead_generation | lead_conversion | conversions | app_promotion | catalog_sales | page_likesyes
budget_amountnumberyes
budget_typedaily | lifetime
schedule_startstring
schedule_endstring
targetingobject
creativeobject
creativesobject[]
promoted_objectobject
lead_gen_form_idstring
bid_strategystring
bid_amountnumber
special_ad_categoriesstring[]
campaign_typesearch | display | pmax | demand_genGoogle only. pmax needs asset_group, demand_gen needs demand_gen; both start PAUSED.
asset_groupobjectGoogle Performance Max assets: finalUrl, headlines (3-15, ≤30 chars), longHeadline (≤90), descriptions (2-5, one ≤60), businessName (≤25), images { landscape[], square[], logo[] }.
demand_genobjectGoogle Demand Gen: finalUrl, businessName, headlines (≤40), descriptions (≤90), images { logo[], landscape[] or square[] }.
buying_typeAUCTION | RESERVEDMeta only. RESERVED = reach & frequency on a reserved prediction.
rf_prediction_idstringRESERVED only: the id the reserve step returned.

On this page

add_people_to_ad_audiencearchive_ad_lead_formboost_social_postchange_ad_biddingchange_ad_catalog_feedschange_ad_creative_librarychange_ad_forecastschange_ad_identitieschange_ad_labels_and_accountschange_google_ads_conversion_setupchange_google_ads_extensionschange_google_ads_keywordschange_google_ads_negative_keywordschange_google_pmax_asset_groupscreate_ad_audiencecreate_ad_audience_from_customerscreate_ad_campaign_draftcreate_ad_catalogcreate_ad_conversion_destinationcreate_ad_lead_formcreate_ad_pixelcreate_ad_projectcreate_click_to_call_adcreate_messaging_addelete_ad_audiencedelete_ad_boarddelete_ad_campaigndelete_ad_campaign_draftdelete_ad_catalogdelete_ad_catalog_product_setdelete_ad_commentdelete_ad_conversion_destinationdelete_ad_projectdelete_ad_searchdescribe_ads_opduplicate_ad_campaign_draftduplicate_ads_entityestimate_ad_reachfollow_advertiserget_ad_account_financeget_ad_biddingget_ad_campaign_analyticsget_ad_campaign_draftget_ad_campaign_treeget_ad_catalog_feedsget_ad_conversion_qualityget_ad_creative_libraryget_ad_forecastsget_ad_identitiesget_ad_insightsget_ad_labels_and_accountsget_ad_lead_formget_ad_pixel_statsget_ad_projectget_ad_researchget_ad_searchget_ad_set_detailsget_ads_activityget_ads_timelineget_google_ads_conversion_setupget_google_ads_extensionsget_google_ads_keywordsget_google_ads_negative_keywordsget_google_pmax_asset_groupshide_ad_commentlaunch_ad_campaignlaunch_ad_campaign_draftlink_ad_conversion_campaignslist_ad_accountslist_ad_audienceslist_ad_boardslist_ad_campaign_draftslist_ad_campaignslist_ad_catalog_product_setslist_ad_catalog_productslist_ad_catalogslist_ad_commentslist_ad_conversion_destinationslist_ad_conversion_eventslist_ad_lead_formslist_ad_leadslist_ad_pixel_shareslist_ad_pixelslist_ad_projectslist_ad_searcheslist_followed_advertiserslist_live_ad_campaignslist_live_adsload_more_adsmove_ad_searchopen_library_adpause_ads_deliverypreview_adrefresh_ad_audience_sizerefresh_ad_campaign_metricsrefresh_ad_projectrename_ad_boardrename_ad_projectreply_to_ad_commentsave_ad_catalog_product_setsave_library_adsearch_ad_librarysearch_ad_targetingsend_ad_conversion_eventsend_shop_to_ad_catalogsend_test_ad_leadset_ad_audience_companiesset_ad_project_weeklyset_ad_search_weeklyset_ads_deliveryset_advertiser_alertsset_tiktok_brand_identityshare_ad_pixelshow_adsstop_following_advertiserstop_shop_ad_catalogunsave_library_adupdate_ad_campaignupdate_ad_campaign_draftupdate_ad_conversion_destinationupdate_ad_creativeupdate_ad_pixelupdate_ad_setvalidate_ad_campaign