[{"id":"create_campaign","name":"Create Campaign","description":"Create an Amazon DSP campaign with a single flight (start, end, budget), an uncapped frequency, and the given optimization goal. The campaign is created in an inactive state and only starts delivering after ad groups with creatives are added and the campaign is activated via the update_campaign action. The budget amount is in the advertiser currency major unit (e.g. 100.00 means one hundred).","schema":{"description":"Parameters for action.","properties":{"name":{"minLength":1,"title":"Name","type":"string"},"start_date_time":{"format":"date-time","title":"Start Date Time","type":"string"},"end_date_time":{"format":"date-time","title":"End Date Time","type":"string"},"budget_amount":{"anyOf":[{"exclusiveMinimum":0.0,"type":"number"},{"type":"string"}],"title":"Budget Amount"},"kpi":{"enum":["CLICK_THROUGH_RATE","COMBINED_RETURN_ON_AD_SPEND","COST_PER_ACTION","COST_PER_CLICK","COST_PER_DETAIL_PAGE_VIEW","COST_PER_FIRST_APP_OPEN","COST_PER_INSTALL","COST_PER_SIGN_UP","COST_PER_VIDEO_COMPLETION","DETAIL_PAGE_VIEW_RATE","FREQUENCY","REACH","RETURN_ON_AD_SPEND","TOTAL_RETURN_ON_AD_SPEND","VIDEO_COMPLETION_RATE"],"title":"Kpi","type":"string"},"bid_strategy":{"default":"SPEND_BUDGET_IN_FULL","enum":["SPEND_BUDGET_IN_FULL","PRIORITIZE_KPI_TARGET"],"title":"Bid Strategy","type":"string"},"target_kpi":{"anyOf":[{"exclusiveMinimum":0.0,"type":"number"},{"type":"string"},{"type":"null"}],"default":null,"title":"Target Kpi"}},"required":["name","start_date_time","end_date_time","budget_amount","kpi"],"title":"Params","type":"object"},"connector":"amazon_dsp"},{"id":"update_campaign","name":"Update Campaign","description":"Update an Amazon DSP campaign: rename it and/or change its state. Setting state=ACTIVE starts delivery (the campaign must have active ad groups with creatives), state=INACTIVE stops it. Both changes are reversible with another update_campaign call.","schema":{"description":"Parameters for action.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"},"name":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Name"},"state":{"anyOf":[{"enum":["ACTIVE","INACTIVE"],"type":"string"},{"type":"null"}],"default":null,"title":"State"}},"required":["campaign_id"],"title":"Params","type":"object"},"connector":"amazon_dsp"},{"id":"update_listing","name":"Update Listing","description":"Update editable attributes of an existing Amazon product listing (product card), identified by seller SKU. Provide only the fields to change; at least one is required. title sets the product title (item_name). description sets the product description. bullet_points replaces the ENTIRE list of bullet points (About this item) — pass every bullet you want to keep, not just new ones; it cannot be empty (clearing all bullets is not supported). price sets the standard offer price in the marketplace currency. Updates are submitted as a partial patch and processed asynchronously by Amazon: a successful response means the submission was ACCEPTED for processing, not that it is live yet. Requires the Product Listing role on the SP-API application.","schema":{"description":"Parameters for action.","properties":{"sku":{"title":"Sku","type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Description"},"bullet_points":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"title":"Bullet Points"},"price":{"anyOf":[{"exclusiveMinimum":0.0,"type":"number"},{"type":"string"},{"type":"null"}],"default":null,"title":"Price"},"language_tag":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Language Tag"}},"required":["sku"],"title":"Params","type":"object"},"connector":"amazon_sp"},{"id":"enable_campaign","name":"Enable Campaign","description":"Activate a paused Bing Ads campaign. Provide either campaign_id or campaign_name. Reversible via pause_campaign.","schema":{"description":"Identify the campaign to activate by id or name.","properties":{"campaign_id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Microsoft Advertising campaign id. Mutually exclusive with ``campaign_name``.","title":"Campaign Id"},"campaign_name":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Campaign name, resolved to id at execution time via Bing's CampaignManagementService. Mutually exclusive with ``campaign_id``. Bing enforces uniqueness per account.","title":"Campaign Name"}},"title":"Params","type":"object"},"connector":"bing"},{"id":"pause_campaign","name":"Pause Campaign","description":"Pause an active Bing Ads campaign. Provide either campaign_id or campaign_name. Reversible via enable_campaign.","schema":{"description":"Identify the campaign to pause by id or name.","properties":{"campaign_id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Microsoft Advertising campaign id. Mutually exclusive with ``campaign_name``.","title":"Campaign Id"},"campaign_name":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Campaign name, resolved to id at execution time via Bing's CampaignManagementService. Mutually exclusive with ``campaign_id``. Bing enforces uniqueness per account.","title":"Campaign Name"}},"title":"Params","type":"object"},"connector":"bing"},{"id":"set_campaign_budget","name":"Set Campaign Budget","description":"Set the daily budget of a Bing Ads campaign. Provide either campaign_id or campaign_name. The amount is in the account currency major unit (e.g. 50.00 means 50.00 USD on a USD account). Bing Ads only supports daily budgets at the campaign level. If the campaign uses a shared budget, the change is rejected unless apply_to_shared_budget is set to true, because it would affect every campaign sharing that budget.","schema":{"description":"Identify the campaign and specify the new daily budget cap.","properties":{"campaign_id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Microsoft Advertising campaign id. Mutually exclusive with ``campaign_name``.","title":"Campaign Id"},"campaign_name":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Campaign name, resolved to id at execution time via Bing's CampaignManagementService. Mutually exclusive with ``campaign_id``. Bing enforces uniqueness per account.","title":"Campaign Name"},"amount":{"description":"New daily budget cap, in the account currency major unit (e.g. 50.00 means 50.00 USD on a USD account, not cents or micros). Must be positive.","exclusiveMinimum":0.0,"title":"Amount","type":"number"},"apply_to_shared_budget":{"default":false,"description":"Required when the campaign uses a shared Budget. Without this flag the action refuses to proceed and lists every sibling campaign that would also be affected. Set to true to acknowledge the wider blast radius.","title":"Apply To Shared Budget","type":"boolean"}},"required":["amount"],"title":"Params","type":"object"},"connector":"bing"},{"id":"enable_ad_group","name":"Enable Ad Group","description":"Activate a paused Bing Ads ad group. Provide either ad_group_id or ad_group_name, plus the parent campaign as campaign_id or campaign_name. Reversible via pause_ad_group.","schema":{"description":"Identify the ad group to activate, plus its parent campaign.","properties":{"ad_group_id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Microsoft Advertising ad group id. Mutually exclusive with ``ad_group_name``.","title":"Ad Group Id"},"ad_group_name":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Ad group name, resolved within the parent campaign at execution time. Mutually exclusive with ``ad_group_id``. Ad group names are unique only within a single campaign, hence the campaign identifier is also required.","title":"Ad Group Name"},"campaign_id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Parent campaign id. Required to scope the ad group lookup / update. Mutually exclusive with ``campaign_name``.","title":"Campaign Id"},"campaign_name":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Parent campaign name, resolved to id at execution time. Mutually exclusive with ``campaign_id``.","title":"Campaign Name"}},"title":"Params","type":"object"},"connector":"bing"},{"id":"pause_ad_group","name":"Pause Ad Group","description":"Pause an active Bing Ads ad group. Provide either ad_group_id or ad_group_name, plus the parent campaign as campaign_id or campaign_name. Reversible via enable_ad_group.","schema":{"description":"Identify the ad group to pause, plus its parent campaign.","properties":{"ad_group_id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Microsoft Advertising ad group id. Mutually exclusive with ``ad_group_name``.","title":"Ad Group Id"},"ad_group_name":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Ad group name, resolved within the parent campaign at execution time. Mutually exclusive with ``ad_group_id``. Ad group names are unique only within a single campaign, hence the campaign identifier is also required.","title":"Ad Group Name"},"campaign_id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Parent campaign id. Required to scope the ad group lookup / update. Mutually exclusive with ``campaign_name``.","title":"Campaign Id"},"campaign_name":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Parent campaign name, resolved to id at execution time. Mutually exclusive with ``campaign_id``.","title":"Campaign Name"}},"title":"Params","type":"object"},"connector":"bing"},{"id":"enable_campaign","name":"Enable Campaign","description":"Activate a paused Meta Ads campaign (Facebook or Instagram). Reversible via pause_campaign.","schema":{"description":"Parameters for action.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"}},"required":["campaign_id"],"title":"Params","type":"object"},"connector":"facebook"},{"id":"pause_campaign","name":"Pause Campaign","description":"Pause an active Meta Ads campaign (Facebook or Instagram). Reversible via enable_campaign.","schema":{"description":"Parameters for action.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"}},"required":["campaign_id"],"title":"Params","type":"object"},"connector":"facebook"},{"id":"enable_adset","name":"Enable Ad Set","description":"Activate a paused Meta Ads ad set (Facebook or Instagram). Reversible via pause_adset.","schema":{"description":"Parameters for action.","properties":{"adset_id":{"title":"Adset Id","type":"string"}},"required":["adset_id"],"title":"Params","type":"object"},"connector":"facebook"},{"id":"pause_adset","name":"Pause Ad Set","description":"Pause an active Meta Ads ad set (Facebook or Instagram). Reversible via enable_adset.","schema":{"description":"Parameters for action.","properties":{"adset_id":{"title":"Adset Id","type":"string"}},"required":["adset_id"],"title":"Params","type":"object"},"connector":"facebook"},{"id":"enable_ad","name":"Enable Ad","description":"Activate a paused Meta Ads ad (Facebook or Instagram). Reversible via pause_ad.","schema":{"description":"Parameters for action.","properties":{"ad_id":{"title":"Ad Id","type":"string"}},"required":["ad_id"],"title":"Params","type":"object"},"connector":"facebook"},{"id":"pause_ad","name":"Pause Ad","description":"Pause an active Meta Ads ad (Facebook or Instagram). Reversible via enable_ad.","schema":{"description":"Parameters for action.","properties":{"ad_id":{"title":"Ad Id","type":"string"}},"required":["ad_id"],"title":"Params","type":"object"},"connector":"facebook"},{"id":"set_campaign_budget","name":"Set Campaign Budget","description":"Set the daily or lifetime budget of a Meta Ads campaign (Facebook or Instagram). The amount is in the account currency minor unit (e.g. cents: 5000 means 50.00). Only one budget type applies at a time; setting one replaces the other.","schema":{"description":"Parameters for action.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"},"budget_type":{"enum":["daily","lifetime"],"title":"Budget Type","type":"string"},"amount":{"exclusiveMinimum":0,"title":"Amount","type":"integer"}},"required":["campaign_id","budget_type","amount"],"title":"Params","type":"object"},"connector":"facebook"},{"id":"set_adset_budget","name":"Set Ad Set Budget","description":"Set the daily or lifetime budget of a Meta Ads ad set (Facebook or Instagram). The amount is in the account currency minor unit (e.g. cents: 5000 means 50.00). Only one budget type applies at a time; setting one replaces the other.","schema":{"description":"Parameters for action.","properties":{"adset_id":{"title":"Adset Id","type":"string"},"budget_type":{"enum":["daily","lifetime"],"title":"Budget Type","type":"string"},"amount":{"exclusiveMinimum":0,"title":"Amount","type":"integer"}},"required":["adset_id","budget_type","amount"],"title":"Params","type":"object"},"connector":"facebook"},{"id":"set_page_welcome_message","name":"Set Page Welcome Message","description":"Set or update the automated welcome message (greeting / ice breaker) shown when a user opens the conversation from a Meta Ads Click-to-Message ad (Messenger or Instagram, OUTCOME_ENGAGEMENT / CONVERSATIONS). The welcome message lives on the ad creative, which Meta treats as immutable, so this builds a new creative that copies the ad's existing creative and only swaps the welcome message, then re-points the ad at it. Provide ad_id plus either welcome_message (plain greeting text, the common case) or welcome_message_spec (a full page_welcome_message structure for ice breakers / quick replies), not both. The change is verified by reading the new creative back; the action fails if Meta did not persist the value.","schema":{"description":"Parameters for action.","properties":{"ad_id":{"title":"Ad Id","type":"string"},"welcome_message":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Welcome Message"},"welcome_message_spec":{"anyOf":[{"type":"object"},{"type":"null"}],"default":null,"title":"Welcome Message Spec"}},"required":["ad_id"],"title":"Params","type":"object"},"connector":"facebook"},{"id":"create_campaign","name":"Create Campaign","description":"Create a new Meta Ads campaign (Facebook or Instagram). Created paused by default so it does not spend until enabled. objective is a Meta campaign objective (e.g. OUTCOME_TRAFFIC, OUTCOME_LEADS, OUTCOME_SALES). special_ad_categories must list any regulated categories the ads fall under (e.g. HOUSING, EMPLOYMENT, CREDIT) or be empty. Setting a campaign budget enables campaign budget optimization; amounts are in the account currency minor unit (e.g. cents: 5000 means 50.00). Provide at most one of daily_budget or lifetime_budget. When no campaign budget is set, some accounts require is_adset_budget_sharing_enabled to be specified.","schema":{"description":"Parameters for action.","properties":{"name":{"title":"Name","type":"string"},"objective":{"title":"Objective","type":"string"},"special_ad_categories":{"items":{"type":"string"},"title":"Special Ad Categories","type":"array"},"daily_budget":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Daily Budget"},"lifetime_budget":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Lifetime Budget"},"bid_strategy":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Bid Strategy"},"is_adset_budget_sharing_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"title":"Is Adset Budget Sharing Enabled"},"status":{"default":"paused","enum":["active","paused"],"title":"Status","type":"string"}},"required":["name","objective"],"title":"Params","type":"object"},"connector":"facebook"},{"id":"create_adset","name":"Create Ad Set","description":"Create a new ad set in an existing Meta Ads campaign (Facebook or Instagram). Created paused by default so it does not spend until enabled. Budget amounts are in the account currency minor unit (e.g. cents: 5000 means 50.00). Provide at most one of daily_budget or lifetime_budget; omit both only when the campaign uses campaign budget optimization. lifetime_budget requires end_time. Some optimization goals require promoted_object, a Meta spec naming what is optimized (e.g. {\"pixel_id\": \"<id>\", \"custom_event_type\": \"PURCHASE\"} for conversions, or {\"page_id\": \"<id>\"} for page likes). destination_type sets where the ad sends people; for boosting an existing post (boost_post) use ON_POST with optimization_goal POST_ENGAGEMENT to keep engagement on the post (no call to action needed). A website or undefined destination instead makes Meta require a website URL and call to action in the creative.","schema":{"description":"Parameters for action.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"},"name":{"title":"Name","type":"string"},"optimization_goal":{"title":"Optimization Goal","type":"string"},"billing_event":{"title":"Billing Event","type":"string"},"targeting":{"title":"Targeting","type":"object"},"daily_budget":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Daily Budget"},"lifetime_budget":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Lifetime Budget"},"bid_amount":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Bid Amount"},"end_time":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"End Time"},"promoted_object":{"anyOf":[{"type":"object"},{"type":"null"}],"default":null,"title":"Promoted Object"},"destination_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Destination Type"},"status":{"default":"paused","enum":["active","paused"],"title":"Status","type":"string"}},"required":["campaign_id","name","optimization_goal","billing_event","targeting"],"title":"Params","type":"object"},"connector":"facebook"},{"id":"create_ad","name":"Create Ad","description":"Create a new ad in an existing Meta Ads ad set (Facebook or Instagram). Created paused by default so it does not spend until enabled. The simplest way is to provide page_id and link plus optional text (message, headline, description), image_url and call_to_action_type; these build a single-image link ad creative automatically. For a Click-to-Message ad, set messaging_destination (MESSENGER or INSTAGRAM_DIRECT) instead of link; the message opens a conversation with the page. For advanced cases, pass a full Meta creative spec via creative instead (e.g. {\"creative_id\": \"<id>\"} to reuse an existing creative, or {\"object_story_spec\": {...}}). Provide either the individual creative fields or creative, not both.","schema":{"description":"Parameters for action.","properties":{"adset_id":{"title":"Adset Id","type":"string"},"name":{"title":"Name","type":"string"},"page_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Page Id"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Link"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Message"},"headline":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Headline"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Description"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Image Url"},"call_to_action_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"enum":["ADD_TO_CART","APPLY_NOW","AUDIO_CALL","BOOK_NOW","BOOK_TRAVEL","BUY","BUY_NOW","BUY_TICKETS","CALL","CALL_ME","CALL_NOW","CONFIRM","CONTACT","CONTACT_US","DONATE","DONATE_NOW","DOWNLOAD","EVENT_RSVP","FIND_A_GROUP","FIND_YOUR_GROUPS","FOLLOW_NEWS_STORYLINE","FOLLOW_PAGE","FOLLOW_USER","GET_DIRECTIONS","GET_OFFER","GET_OFFER_VIEW","GET_PROMOTIONS","GET_QUOTE","GET_SHOWTIMES","GET_STARTED","INQUIRE_NOW","INSTALL_APP","INSTALL_MOBILE_APP","LEARN_MORE","LIKE_PAGE","LISTEN_MUSIC","LISTEN_NOW","MESSAGE_PAGE","MOBILE_DOWNLOAD","NO_BUTTON","OPEN_INSTANT_APP","OPEN_LINK","ORDER_NOW","PAY_TO_ACCESS","PLAY_GAME","PLAY_GAME_ON_FACEBOOK","PURCHASE_GIFT_CARDS","RAISE_MONEY","RECORD_NOW","REFER_FRIENDS","REQUEST_TIME","SAY_THANKS","SEE_MORE","SELL_NOW","SEND_A_GIFT","SEND_GIFT_MONEY","SEND_UPDATES","SHARE","SHOP_NOW","SIGN_UP","SOTTO_SUBSCRIBE","START_ORDER","SUBSCRIBE","SWIPE_UP_PRODUCT","SWIPE_UP_SHOP","UPDATE_APP","USE_APP","USE_MOBILE_APP","VIDEO_ANNOTATION","VIDEO_CALL","VISIT_PAGES_FEED","WATCH_MORE","WATCH_VIDEO","WHATSAPP_MESSAGE","WOODHENGE_SUPPORT"],"title":"Call To Action Type"},"messaging_destination":{"anyOf":[{"enum":["MESSENGER","INSTAGRAM_DIRECT"],"type":"string"},{"type":"null"}],"default":null,"title":"Messaging Destination"},"creative":{"anyOf":[{"type":"object"},{"type":"null"}],"default":null,"title":"Creative"},"status":{"default":"paused","enum":["active","paused"],"title":"Status","type":"string"}},"required":["adset_id","name"],"title":"Params","type":"object"},"connector":"facebook"},{"id":"boost_post","name":"Boost Post","description":"Boost (promote) an existing organic Facebook or Instagram post by creating a paid ad for it in an existing Meta Ads ad set. Provide the full post id (in '{page_id}_{post_id}' form, as it appears in the connector data) and the ad set to place the ad in. The ad reuses the published post as its creative via object_story_id, so no new copy or media is created. The target ad set MUST belong to an engagement campaign (objective OUTCOME_ENGAGEMENT) and name the post's page in its promoted_object; build it with create_campaign and create_adset first if needed. Two ad set shapes work: an ON_POST destination with optimization_goal POST_ENGAGEMENT (engagement on the post itself, no call-to-action needed), or a FACEBOOK_PAGE destination with optimization_goal PROFILE_AND_PAGE_ENGAGEMENT, which additionally requires a call-to-action button on the ad — pass call_to_action_type (e.g. VISIT_PROFILE) for that case, otherwise Meta rejects the ad with a 'call-to-action required' error. The page promoted by the ad set and the post's page must match, and the access token must have ads permission on that page. Created paused by default so it does not spend until enabled; use enable_ad to activate it.","schema":{"description":"Parameters for action.","properties":{"adset_id":{"title":"Adset Id","type":"string"},"post_id":{"title":"Post Id","type":"string"},"name":{"title":"Name","type":"string"},"call_to_action_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Call To Action Type"},"status":{"default":"paused","enum":["active","paused"],"title":"Status","type":"string"}},"required":["adset_id","post_id","name"],"title":"Params","type":"object"},"connector":"facebook"},{"id":"update_campaign","name":"Update Campaign","description":"Update editable attributes of a Meta Ads campaign (Facebook or Instagram). Provide only the fields to change; at least one is required. spend_cap is a lifetime spend limit in the account currency minor unit (e.g. cents: 5000 means 50.00). special_ad_categories lists the regulated categories the ads fall under (e.g. HOUSING, EMPLOYMENT, CREDIT) or is empty. Use pause_campaign/enable_campaign to change status and set_campaign_budget to change the budget. objective is fixed at creation and cannot be updated.","schema":{"description":"Parameters for action.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Name"},"bid_strategy":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Bid Strategy"},"special_ad_categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"title":"Special Ad Categories"},"spend_cap":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Spend Cap"}},"required":["campaign_id"],"title":"Params","type":"object"},"connector":"facebook"},{"id":"update_adset","name":"Update Ad Set","description":"Update editable attributes of a Meta Ads ad set (Facebook or Instagram). Provide only the fields to change; at least one is required. bid_amount is in the account currency minor unit (e.g. cents: 500 means 5.00). Switching bid_strategy to a capped strategy (LOWEST_COST_WITH_BID_CAP or COST_CAP) requires bid_amount in the same call. end_time is an ISO 8601 timestamp less than one year ahead (e.g. 2027-01-01T00:00:00-0800). Use pause_adset/enable_adset to change status and set_adset_budget to change the budget.","schema":{"description":"Parameters for action.","properties":{"adset_id":{"title":"Adset Id","type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Name"},"targeting":{"anyOf":[{"type":"object"},{"type":"null"}],"default":null,"title":"Targeting"},"optimization_goal":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Optimization Goal"},"bid_amount":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Bid Amount"},"bid_strategy":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Bid Strategy"},"destination_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Destination Type"},"end_time":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"End Time"}},"required":["adset_id"],"title":"Params","type":"object"},"connector":"facebook"},{"id":"update_ad","name":"Update Ad","description":"Update editable attributes of a Meta Ads ad (Facebook or Instagram). Provide only the fields to change; at least one is required. creative swaps the ad to a different creative and is a Meta creative reference (e.g. {\"creative_id\": \"<id>\"}). conversion_domain is the registrable domain the ad drives conversions to (e.g. example.com), used for conversion attribution. display_sequence orders the ad within a sequenced campaign. Use pause_ad/enable_ad to change status.","schema":{"description":"Parameters for action.","properties":{"ad_id":{"title":"Ad Id","type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Name"},"creative":{"anyOf":[{"type":"object"},{"type":"null"}],"default":null,"title":"Creative"},"conversion_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Conversion Domain"},"display_sequence":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Display Sequence"}},"required":["ad_id"],"title":"Params","type":"object"},"connector":"facebook"},{"id":"update_ad_creative","name":"Update Ad Creative","description":"Edit the creative of an existing Meta Ads ad (Facebook or Instagram): ad copy (message), headline, description, destination link, image, call-to-action button, URL tracking tags and Advantage+ enhancement settings. Meta treats ad creatives as immutable, so this copies the ad's current creative (keeping its name, url_tags and degrees_of_freedom_spec), applies the changes, creates the result as a new creative and re-points the ad at it; the ad keeps its id, but the returned creative id is new. Provide ad_id plus at least one field to change. Editable content fields depend on the creative's media type: link ads support all of them; video ads support message, headline, description, image_url (thumbnail), link and call_to_action_type (the link lives on the button, so adding a link to a video ad without a button also requires call_to_action_type); photo ads only message (the caption) and image_url; text ads only message. For carousel ads (link ads with cards), message edits the text above the cards; headline, description, link, image_url and call_to_action_type live on the cards, so also pass card_index (0-based) to edit one specific card. url_tags (e.g. 'utm_source=x&utm_medium=y') and degrees_of_freedom_spec (a raw Meta spec) can be edited on any creative, including ads that promote an existing organic post (e.g. boosted posts) — but content fields on those ads cannot be edited; edit the post itself instead. Dynamic/catalog creatives cannot be edited at all. Omitted fields keep their current values; to clear url_tags pass an empty string, and to reset degrees_of_freedom_spec to Meta's default enhancement behavior pass an empty object. To swap the ad to a different existing creative, use update_ad instead.","schema":{"description":"Parameters for action.","properties":{"ad_id":{"title":"Ad Id","type":"string"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Message"},"headline":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Headline"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Description"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Link"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Image Url"},"call_to_action_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"enum":["ADD_TO_CART","APPLY_NOW","AUDIO_CALL","BOOK_NOW","BOOK_TRAVEL","BUY","BUY_NOW","BUY_TICKETS","CALL","CALL_ME","CALL_NOW","CONFIRM","CONTACT","CONTACT_US","DONATE","DONATE_NOW","DOWNLOAD","EVENT_RSVP","FIND_A_GROUP","FIND_YOUR_GROUPS","FOLLOW_NEWS_STORYLINE","FOLLOW_PAGE","FOLLOW_USER","GET_DIRECTIONS","GET_OFFER","GET_OFFER_VIEW","GET_PROMOTIONS","GET_QUOTE","GET_SHOWTIMES","GET_STARTED","INQUIRE_NOW","INSTALL_APP","INSTALL_MOBILE_APP","LEARN_MORE","LIKE_PAGE","LISTEN_MUSIC","LISTEN_NOW","MESSAGE_PAGE","MOBILE_DOWNLOAD","NO_BUTTON","OPEN_INSTANT_APP","OPEN_LINK","ORDER_NOW","PAY_TO_ACCESS","PLAY_GAME","PLAY_GAME_ON_FACEBOOK","PURCHASE_GIFT_CARDS","RAISE_MONEY","RECORD_NOW","REFER_FRIENDS","REQUEST_TIME","SAY_THANKS","SEE_MORE","SELL_NOW","SEND_A_GIFT","SEND_GIFT_MONEY","SEND_UPDATES","SHARE","SHOP_NOW","SIGN_UP","SOTTO_SUBSCRIBE","START_ORDER","SUBSCRIBE","SWIPE_UP_PRODUCT","SWIPE_UP_SHOP","UPDATE_APP","USE_APP","USE_MOBILE_APP","VIDEO_ANNOTATION","VIDEO_CALL","VISIT_PAGES_FEED","WATCH_MORE","WATCH_VIDEO","WHATSAPP_MESSAGE","WOODHENGE_SUPPORT"],"title":"Call To Action Type"},"url_tags":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Url Tags"},"degrees_of_freedom_spec":{"anyOf":[{"type":"object"},{"type":"null"}],"default":null,"title":"Degrees Of Freedom Spec"},"card_index":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Card Index"}},"required":["ad_id"],"title":"Params","type":"object"},"connector":"facebook"},{"id":"attach_user_list_to_ad_group","name":"Attach User List to Ad Group","description":"Attach a Customer Match user list to a Google Ads ad group so the ad group can target or exclude users in that list. Pass exclude=false (default) to add the list as a positive audience criterion, or exclude=true to add it as a negative criterion (never show ads to users in the list — commonly used to suppress existing customers). This action is idempotent: attaching a list that is already attached with the same exclude value is a no-op and returns the existing criterion. Attaching with a different exclude value than the current attachment returns an error — detach first, then re-attach. targeting_mode controls whether the list narrows delivery for the ad group ('targeting') or is only used for reporting and bidding ('observation'). Passing 'targeting' or 'observation' updates the ad group's AUDIENCE target_restriction; other target_restrictions (e.g. DEMOGRAPHIC) are preserved. Passing 'unchanged' (default) leaves targeting_setting untouched; note the setting is ad-group-wide, so changing it affects ALL audience criteria on the ad group, not just the list being attached. Negative (exclude=true) criteria always apply regardless of targeting_setting. Scope: this action is for AD-GROUP-level audiences only; campaign-level audience criteria and Performance Max audience signals use different APIs and are not supported here.","schema":{"description":"Parameters for action.","properties":{"ad_group_id":{"description":"Numeric id of the target ad group.","title":"Ad Group Id","type":"string"},"user_list_id":{"description":"Numeric id of the Customer Match user list to attach.","title":"User List Id","type":"string"},"exclude":{"default":false,"description":"If true, attach as a negative criterion (audience exclusion) instead of a positive one.","title":"Exclude","type":"boolean"},"targeting_mode":{"default":"unchanged","description":"Set the ad group's AUDIENCE target_restriction to targeting (narrow delivery) or observation (report/bid only), or leave it unchanged.","enum":["targeting","observation","unchanged"],"title":"Targeting Mode","type":"string"}},"required":["ad_group_id","user_list_id"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"create_customer_match_list","name":"Create Customer Match List","description":"Create an empty Google Ads Customer Match user list (CRM-based, with CONTACT_INFO as the upload key type — email, phone, or mailing address) that can then be populated with upload_customer_match_list. Returns the numeric user_list_id to pass to that action. membership_life_span_days controls how long an uploaded member remains in the list before Google auto-removes it: 1-540 for a fixed lifespan, or 10000 as Google's sentinel value for 'no expiration'. The account must be enrolled in Customer Match; if it is not, creation fails with a policy error and no list is created.","schema":{"description":"Parameters for action.","properties":{"name":{"maxLength":255,"minLength":1,"title":"Name","type":"string"},"description":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}],"default":null,"title":"Description"},"membership_life_span_days":{"default":540,"title":"Membership Life Span Days","type":"integer"}},"required":["name"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"delete_customer_match_list","name":"Delete Customer Match List","description":"Permanently delete a Google Ads Customer Match user list. Detaches the list from any ad groups or campaigns currently using it as an audience or exclusion criterion and removes all uploaded members. Historical performance data for the list is retained in reports. Cannot be undone; to recover, create a new list and re-upload members. Use with care — deleting a list that is actively targeting a live campaign changes delivery immediately.","schema":{"description":"Parameters for action.","properties":{"user_list_id":{"description":"Numeric id of the user list to delete.","title":"User List Id","type":"string"}},"required":["user_list_id"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"detach_user_list_from_ad_group","name":"Detach User List from Ad Group","description":"Remove a Customer Match user list criterion (audience or exclusion) from a Google Ads ad group. Reverses attach_user_list_to_ad_group. Removes both positive (audience) and negative (exclusion) criteria — pass the same ad_group_id and user_list_id used when attaching. Removing a user list stops any targeting or reporting effect it had on future traffic; historical performance data remains in reports. If the list is not currently attached to the ad group, the action returns an error and no changes are made.","schema":{"description":"Parameters for action.","properties":{"ad_group_id":{"description":"Numeric id of the target ad group.","title":"Ad Group Id","type":"string"},"user_list_id":{"description":"Numeric id of the Customer Match user list to detach.","title":"User List Id","type":"string"}},"required":["ad_group_id","user_list_id"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"create_campaign","name":"Create Campaign","description":"Create a new Search or Display Google Ads campaign together with its daily budget in a single atomic request. The budget amount is in micros of the account currency (1,000,000 micros = 1 unit, e.g. 50_000_000 means 50.00). The campaign is created paused by default so it does not start serving immediately. It is declared as not containing EU political advertising unless contains_eu_political_advertising is set to true. The maximize_conversions bidding strategy requires conversion tracking to be enabled on the account. Add ad groups to it with the create_ad_group action.","schema":{"description":"Parameters for action.","properties":{"name":{"title":"Name","type":"string"},"budget_amount_micros":{"exclusiveMinimum":0,"title":"Budget Amount Micros","type":"integer"},"channel_type":{"default":"search","enum":["search","display"],"title":"Channel Type","type":"string"},"bidding_strategy":{"default":"manual_cpc","enum":["manual_cpc","maximize_conversions","target_spend"],"title":"Bidding Strategy","type":"string"},"status":{"default":"paused","enum":["enabled","paused"],"title":"Status","type":"string"},"budget_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Budget Name"},"contains_eu_political_advertising":{"default":false,"title":"Contains Eu Political Advertising","type":"boolean"}},"required":["name","budget_amount_micros"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"create_ad_group","name":"Create Ad Group","description":"Create a new ad group inside an existing Search or Display campaign. The ad group type is derived from the campaign's channel type. The optional cpc_bid_micros sets the default max CPC bid in micros of the account currency (1,000,000 micros = 1 unit). The ad group is created paused by default.","schema":{"description":"Parameters for action.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"},"name":{"title":"Name","type":"string"},"status":{"default":"paused","enum":["enabled","paused"],"title":"Status","type":"string"},"cpc_bid_micros":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Cpc Bid Micros"}},"required":["campaign_id","name"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"create_ad_asset","name":"Create Ad Asset","description":"Create a Google Ads ad extension asset and link it to a campaign or ad group in one atomic request. Supported asset_type values: 'sitelink' (extra links under the ad; needs link_text and final_url, with optional description_1 and description_2), 'callout' (short non-clickable highlight; needs callout_text), 'structured_snippet' (a header plus 3-10 values; needs header and values) and 'call' (a phone number; needs phone_number and country_code). Set level to 'campaign' (with campaign_id) to apply the extension across the whole campaign, or 'ad_group' (with ad_group_id) to apply it to one ad group only. Each call creates one asset; call the action again for each additional extension. New call and sitelink assets go through Google's policy review before they start showing.","schema":{"description":"Parameters for action.","properties":{"asset_type":{"description":"Extension type to create: 'sitelink', 'callout', 'structured_snippet' or 'call'.","enum":["sitelink","callout","structured_snippet","call"],"title":"Asset Type","type":"string"},"level":{"description":"Where to link the asset: 'campaign' (campaign-wide) or 'ad_group' (that ad group only).","enum":["campaign","ad_group"],"title":"Level","type":"string"},"campaign_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Numeric campaign id. Required when level is 'campaign'; must be omitted otherwise.","title":"Campaign Id"},"ad_group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Numeric ad group id. Required when level is 'ad_group'; must be omitted otherwise.","title":"Ad Group Id"},"link_text":{"anyOf":[{"maxLength":25,"type":"string"},{"type":"null"}],"default":null,"description":"Sitelink display text, at most 25 characters. Required for asset_type 'sitelink'.","title":"Link Text"},"final_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Landing page URL the sitelink points to, including the scheme (https://...). Required for asset_type 'sitelink'.","title":"Final Url"},"description_1":{"anyOf":[{"maxLength":35,"type":"string"},{"type":"null"}],"default":null,"description":"Optional first sitelink description line, at most 35 characters. Only valid for asset_type 'sitelink', and Google shows the descriptions only when both lines are set.","title":"Description 1"},"description_2":{"anyOf":[{"maxLength":35,"type":"string"},{"type":"null"}],"default":null,"description":"Optional second sitelink description line, at most 35 characters. Only valid for asset_type 'sitelink'.","title":"Description 2"},"callout_text":{"anyOf":[{"maxLength":25,"type":"string"},{"type":"null"}],"default":null,"description":"Callout text, at most 25 characters. Required for asset_type 'callout'.","title":"Callout Text"},"header":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Structured snippet header, which must be one of Google's supported headers: Amenities, Brands, Courses, Degree programs, Destinations, Featured hotels, Insurance coverage, Models, Neighborhoods, Service catalog, Shows, Styles, Types. Required for asset_type 'structured_snippet'.","title":"Header"},"values":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Structured snippet values, 3 to 10 entries of at most 25 characters each. Required for asset_type 'structured_snippet'.","title":"Values"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Phone number to call, in the national format of its country (e.g. '(650) 253-0000'). Required for asset_type 'call'.","title":"Phone Number"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Two-letter uppercase country code of the phone number (e.g. 'US'). Required for asset_type 'call'.","title":"Country Code"}},"required":["asset_type","level"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"create_responsive_search_ad","name":"Create Responsive Search Ad","description":"Create a responsive search ad inside an existing Search ad group. Provide 3-15 headlines (max 30 characters each) and 2-4 descriptions (max 90 characters each); Google mixes them into ad combinations. final_url is the landing page. The optional path1 and path2 are display-URL segments (max 15 characters each; path2 requires path1). The ad is created paused by default so it does not start serving immediately.","schema":{"description":"Parameters for action.","properties":{"ad_group_id":{"title":"Ad Group Id","type":"string"},"headlines":{"items":{"type":"string"},"maxItems":15,"minItems":3,"title":"Headlines","type":"array"},"descriptions":{"items":{"type":"string"},"maxItems":4,"minItems":2,"title":"Descriptions","type":"array"},"final_url":{"title":"Final Url","type":"string"},"path1":{"anyOf":[{"maxLength":15,"type":"string"},{"type":"null"}],"default":null,"title":"Path1"},"path2":{"anyOf":[{"maxLength":15,"type":"string"},{"type":"null"}],"default":null,"title":"Path2"},"status":{"default":"paused","enum":["enabled","paused"],"title":"Status","type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Name"}},"required":["ad_group_id","headlines","descriptions","final_url"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"enable_campaign","name":"Enable Campaign","description":"Enable a paused Google Ads campaign. Reversible via pause_campaign.","schema":{"description":"Parameters for action.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"}},"required":["campaign_id"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"get_customer_match_upload_status","name":"Get Customer Match Upload Status","description":"Check the status of a Customer Match upload request started by upload_customer_match_list. Pass the request_id that action returned. Status is one of PROCESSING, SUCCESS, PARTIAL_SUCCESS, FAILED. PROCESSING means matching is still in progress — poll again in at least 60 seconds. Do NOT poll more frequently; quota is shared with data reads. If still PROCESSING after 24 hours, treat as stuck and contact support. SUCCESS means every uploaded record was accepted; the response includes the record count and match_rate_range, a coarse bucket indicating what fraction of uploaded records were matched to signed-in Google users. A low match rate usually reflects source data quality (invalid or non-Google-account emails/phones), not upload failure. For operation_type=remove requests, SUCCESS means the matching records were removed from the list. PARTIAL_SUCCESS means some records were accepted and others were rejected; the response includes the same counts plus the error message describing which records failed. The list still receives the accepted records. FAILED means the entire request failed with no records ingested; the response includes the reason. Failed requests cannot be resumed; start a new upload after fixing the issue.","schema":{"description":"Parameters for action.","properties":{"request_id":{"description":"The request_id returned by upload_customer_match_list.","title":"Request Id","type":"string"}},"required":["request_id"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"pause_campaign","name":"Pause Campaign","description":"Pause an active Google Ads campaign. Reversible via enable_campaign.","schema":{"description":"Parameters for action.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"}},"required":["campaign_id"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"enable_ad_group","name":"Enable Ad Group","description":"Enable a paused Google Ads ad group. Reversible via pause_ad_group.","schema":{"description":"Parameters for action.","properties":{"ad_group_id":{"title":"Ad Group Id","type":"string"}},"required":["ad_group_id"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"pause_ad_group","name":"Pause Ad Group","description":"Pause an active Google Ads ad group. Reversible via enable_ad_group.","schema":{"description":"Parameters for action.","properties":{"ad_group_id":{"title":"Ad Group Id","type":"string"}},"required":["ad_group_id"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"enable_ad","name":"Enable Ad","description":"Enable a paused ad within an ad group. Identify the ad by its ad group id and ad id; the create ad actions return these joined as '<ad_group_id>~<ad_id>'. Reversible via pause_ad.","schema":{"description":"Parameters for action.","properties":{"ad_group_id":{"title":"Ad Group Id","type":"string"},"ad_id":{"title":"Ad Id","type":"string"}},"required":["ad_group_id","ad_id"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"pause_ad","name":"Pause Ad","description":"Pause an active ad within an ad group. Identify the ad by its ad group id and ad id; the create ad actions return these joined as '<ad_group_id>~<ad_id>'. Reversible via enable_ad.","schema":{"description":"Parameters for action.","properties":{"ad_group_id":{"title":"Ad Group Id","type":"string"},"ad_id":{"title":"Ad Id","type":"string"}},"required":["ad_group_id","ad_id"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"push_keywords","name":"Push Keywords","description":"Add positive keywords to a Google Ads ad group (positive keywords live on the ad group, not the campaign). Each keyword has a match type (BROAD, PHRASE or EXACT, defaulting to BROAD) and an optional max CPC bid in micros. Status ('enabled' or 'paused') defaults to 'enabled' for the whole batch and can be overridden per keyword. Keywords are pushed in one request; any that Google rejects (for example a duplicate that already exists in the ad group) are skipped and reported, and the remaining valid keywords are still added.","schema":{"$defs":{"Keyword":{"description":"A single positive keyword to push to an ad group.","properties":{"text":{"description":"Keyword text. At most 80 characters and at most 10 words.","minLength":1,"title":"Text","type":"string"},"match_type":{"default":"BROAD","description":"Keyword match type: BROAD, PHRASE or EXACT.","enum":["BROAD","PHRASE","EXACT"],"title":"Match Type","type":"string"},"status":{"anyOf":[{"enum":["enabled","paused"],"type":"string"},{"type":"null"}],"default":null,"description":"Keyword status: 'enabled' or 'paused'. Overrides the batch-level status for this keyword; when omitted the batch-level status is used.","title":"Status"},"cpc_bid_micros":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Optional max CPC bid for this keyword, in micros of the account currency (1,000,000 micros = 1 unit). Requires the parent campaign to use Manual CPC bidding.","title":"Cpc Bid Micros"}},"required":["text"],"title":"Keyword","type":"object"}},"description":"Parameters for action.","properties":{"ad_group_id":{"title":"Ad Group Id","type":"string"},"status":{"default":"enabled","description":"Default status applied to every keyword in this push: 'enabled' or 'paused'. Individual keywords may override it via their own status field.","enum":["enabled","paused"],"title":"Status","type":"string"},"keywords":{"description":"Keywords to add.","items":{"$ref":"#/$defs/Keyword"},"maxItems":500,"minItems":1,"title":"Keywords","type":"array"}},"required":["ad_group_id","keywords"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"push_negative_keywords","name":"Push Negative Keywords","description":"Add negative keywords to a Google Ads campaign or ad group. Set level to 'campaign' (with campaign_id) to block the terms across the whole campaign, or 'ad_group' (with ad_group_id) to block them only in that ad group. Each keyword has a match type (BROAD, PHRASE or EXACT, defaulting to BROAD). Keywords are pushed in one request; any that Google rejects (for example a duplicate, or a negative that already exists on the target) are skipped and reported, and the remaining valid keywords are still added. To read back the pushed negative keywords, query get_data with the campaign_criterion_keyword_text, campaign_criterion_keyword_match_type and campaign_criterion_negative fields (campaign level) or the ad_group_criterion_keyword_text, ad_group_criterion_keyword_match_type and ad_group_criterion_negative fields (ad group level).","schema":{"$defs":{"NegativeKeyword":{"description":"A single negative keyword to push.","properties":{"text":{"description":"Keyword text. At most 80 characters and at most 10 words.","minLength":1,"title":"Text","type":"string"},"match_type":{"default":"BROAD","description":"Keyword match type: BROAD, PHRASE or EXACT.","enum":["BROAD","PHRASE","EXACT"],"title":"Match Type","type":"string"}},"required":["text"],"title":"NegativeKeyword","type":"object"}},"description":"Parameters for action.","properties":{"level":{"description":"The level the criteria are attached at: 'campaign' (campaign-level) or 'ad_group' (ad-group-level).","enum":["campaign","ad_group"],"title":"Level","type":"string"},"campaign_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Numeric campaign id. Required when level is 'campaign'; must be omitted otherwise.","title":"Campaign Id"},"ad_group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Numeric ad group id. Required when level is 'ad_group'; must be omitted otherwise.","title":"Ad Group Id"},"keywords":{"description":"Negative keywords to add.","items":{"$ref":"#/$defs/NegativeKeyword"},"maxItems":500,"minItems":1,"title":"Keywords","type":"array"}},"required":["level","keywords"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"rename_campaign","name":"Rename Campaign","description":"Change the name of an existing Google Ads campaign. Only the name changes: budget, bidding, targeting, status, ad groups and ads are all left as they are, and historical reporting stays attached to the campaign because reports key on the campaign id. Campaign names must be unique within the account, so renaming to a name another campaign already uses is rejected. To rename an ad group instead, use the rename_ad_group action.","schema":{"description":"Parameters for action.","properties":{"name":{"description":"New name for the campaign. Must be unique within the account and must not contain null, line feed or carriage return characters.","minLength":1,"title":"Name","type":"string"},"campaign_id":{"title":"Campaign Id","type":"string"}},"required":["name","campaign_id"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"rename_ad_group","name":"Rename Ad Group","description":"Change the name of an existing Google Ads ad group. Only the name changes: bids, targeting, status, keywords and ads are all left as they are, and historical reporting stays attached to the ad group because reports key on the ad group id. Ad group names must be unique within their campaign, so renaming to a name another ad group in the same campaign already uses is rejected. To rename a campaign instead, use the rename_campaign action.","schema":{"description":"Parameters for action.","properties":{"name":{"description":"New name for the ad group. Must not contain null, line feed or carriage return characters, and must be shorter than 255 characters.","maxLength":254,"minLength":1,"title":"Name","type":"string"},"ad_group_id":{"title":"Ad Group Id","type":"string"}},"required":["name","ad_group_id"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"rename_customer_match_list","name":"Rename Customer Match List","description":"Change the display name of a Google Ads Customer Match user list. Does not affect membership, campaign attachments, targeting behaviour, or the list's configuration — only the name shown in the Google Ads UI and reports. Names must be unique per account; Google returns an error if another list already uses the requested name.","schema":{"description":"Parameters for action.","properties":{"user_list_id":{"description":"Numeric id of the user list to rename.","title":"User List Id","type":"string"},"name":{"description":"New display name for the user list.","maxLength":255,"minLength":1,"title":"Name","type":"string"}},"required":["user_list_id","name"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"upload_customer_match_list","name":"Upload Customer Match List","description":"Upload contact records (email, phone, or mailing address) to a Google Ads Customer Match user list for audience targeting. The user list must already exist in Google Ads; pass its numeric id as user_list_id. If you do not have one yet, call create_customer_match_list first to create an empty list and get its id. Uploads go through Google's Data Manager API (https://developers.google.com/data-manager/api/devguides/audiences/google-ads/customer-match), which requires the Google Ads account to have been authorised with the ``https://www.googleapis.com/auth/datamanager`` OAuth scope; the action returns a clear error if the scope is missing. This action is ASYNCHRONOUS: it returns immediately with a request_id once Google has accepted the request. Google then matches the records against signed-in users in the background — this typically takes a few minutes but can take up to 24 hours for large lists. The user list is NOT usable for targeting until matching completes. To check progress, call get_customer_match_upload_status with the returned request_id. Poll no more than once every 60 seconds. The job is done when status is SUCCESS, PARTIAL_SUCCESS, or FAILED; while it is PROCESSING keep polling. PII HANDLING: emails, phone numbers, and names are normalized and SHA-256 hashed by this action before being sent to Google — do NOT pre-hash them; pass raw values. operation_type=add appends records to the list; operation_type=remove removes matching records (use for compliance requests such as GDPR erasure). At most 10,000 records per call; split larger uploads into multiple calls.","schema":{"$defs":{"CustomerMatchMember":{"description":"A single contact record for a Google Ads Customer Match list.\n\nAt least one of ``email``, ``phone_number``, or a complete address\n(``first_name`` + ``last_name`` + ``country_code`` + ``postal_code``)\nmust be provided. Raw values are accepted; normalization and SHA-256\nhashing happen inside the action before upload.","properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Email"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Phone Number"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Last Name"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Country Code"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Postal Code"}},"title":"CustomerMatchMember","type":"object"}},"description":"Parameters for action.","properties":{"user_list_id":{"description":"Numeric id of an existing Customer Match user list.","title":"User List Id","type":"string"},"operation_type":{"default":"add","enum":["add","remove"],"title":"Operation Type","type":"string"},"members":{"items":{"$ref":"#/$defs/CustomerMatchMember"},"maxItems":10000,"minItems":1,"title":"Members","type":"array"},"consent_ad_user_data":{"default":"UNSPECIFIED","enum":["GRANTED","DENIED","UNSPECIFIED"],"title":"Consent Ad User Data","type":"string"},"consent_ad_personalization":{"default":"UNSPECIFIED","enum":["GRANTED","DENIED","UNSPECIFIED"],"title":"Consent Ad Personalization","type":"string"}},"required":["user_list_id","members"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"update_keywords","name":"Update Keywords","description":"Update existing positive keywords in a Google Ads ad group, identified by ad group criterion id (from the get_data 'keyword_criterion_id' field). Each update can change the keyword's status ('enabled' or 'paused') and/or its max CPC bid in micros; a keyword's text and match type cannot be changed (remove and re-add to change those). Updates are applied in one request; any that Google rejects (for example an unknown criterion id) are skipped and reported, and the remaining valid updates are still applied.","schema":{"$defs":{"KeywordUpdate":{"description":"A single keyword edit, identified by its ad group criterion id.","properties":{"criterion_id":{"description":"Numeric ad group criterion id of the keyword to edit. Obtain it from the get_data 'keyword_criterion_id' field (enable the include_inactive option to surface keywords not currently serving).","minLength":1,"title":"Criterion Id","type":"string"},"status":{"anyOf":[{"enum":["enabled","paused"],"type":"string"},{"type":"null"}],"default":null,"description":"New status for the keyword: 'enabled' or 'paused'.","title":"Status"},"cpc_bid_micros":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"New max CPC bid for the keyword, in micros of the account currency (1,000,000 micros = 1 unit). Requires the parent campaign to use Manual CPC bidding.","title":"Cpc Bid Micros"}},"required":["criterion_id"],"title":"KeywordUpdate","type":"object"}},"description":"Parameters for action.","properties":{"ad_group_id":{"title":"Ad Group Id","type":"string"},"updates":{"description":"Keyword edits to apply.","items":{"$ref":"#/$defs/KeywordUpdate"},"maxItems":500,"minItems":1,"title":"Updates","type":"array"}},"required":["ad_group_id","updates"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"remove_keywords","name":"Remove Keywords","description":"Remove positive keywords from a Google Ads ad group, identified by ad group criterion id (from the get_data 'keyword_criterion_id' field). Removals are applied in one request; any that Google rejects (for example an unknown criterion id) are skipped and reported, and the remaining valid removals still apply.","schema":{"description":"Parameters for action.","properties":{"ad_group_id":{"title":"Ad Group Id","type":"string"},"criterion_ids":{"description":"Numeric ad group criterion ids of the keywords to remove. Obtain them from the get_data 'keyword_criterion_id' field (enable the include_inactive option to surface keywords not currently serving).","items":{"type":"string"},"maxItems":500,"minItems":1,"title":"Criterion Ids","type":"array"}},"required":["ad_group_id","criterion_ids"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"remove_negative_keywords","name":"Remove Negative Keywords","description":"Remove negative keywords from a Google Ads campaign or ad group, identified by criterion id. Set level to 'campaign' (with campaign_id) or 'ad_group' (with ad_group_id) to match where the negative keywords are attached. Removals are applied in one request; any that Google rejects (for example an unknown criterion id) are skipped and reported, and the remaining valid removals still apply. Reversible via push_negative_keywords by re-adding the keyword text and match type.","schema":{"description":"Parameters for action.","properties":{"level":{"description":"The level the criteria are attached at: 'campaign' (campaign-level) or 'ad_group' (ad-group-level).","enum":["campaign","ad_group"],"title":"Level","type":"string"},"campaign_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Numeric campaign id. Required when level is 'campaign'; must be omitted otherwise.","title":"Campaign Id"},"ad_group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Numeric ad group id. Required when level is 'ad_group'; must be omitted otherwise.","title":"Ad Group Id"},"criterion_ids":{"description":"Numeric criterion ids of the negative keywords to remove. Obtain them from the get_data 'criterion_id' field queried together with the campaign_criterion_keyword_text, campaign_criterion_keyword_match_type and campaign_criterion_negative fields (campaign level) or the ad_group_criterion_keyword_text, ad_group_criterion_keyword_match_type and ad_group_criterion_negative fields (ad group level).","items":{"type":"string"},"maxItems":500,"minItems":1,"title":"Criterion Ids","type":"array"}},"required":["level","criterion_ids"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"set_campaign_budget","name":"Set Campaign Budget","description":"Set the daily or total (lifetime) budget of a Google Ads campaign. The amount is in micros of the account currency (1,000,000 micros = 1 unit, e.g. 50_000_000 means 50.00). A lifetime budget only applies to campaigns with a fixed end date. If the budget is also used by other campaigns, the change is rejected unless apply_to_shared_budget is set to true, because it would affect every campaign that shares that budget.","schema":{"description":"Parameters for action.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"},"budget_type":{"enum":["daily","lifetime"],"title":"Budget Type","type":"string"},"amount_micros":{"exclusiveMinimum":0,"title":"Amount Micros","type":"integer"},"apply_to_shared_budget":{"default":false,"title":"Apply To Shared Budget","type":"boolean"}},"required":["campaign_id","budget_type","amount_micros"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"set_campaign_bidding_strategy","name":"Set Campaign Bidding Strategy","description":"Switch a Google Ads campaign to a different standard (campaign-level) bidding strategy. Supported strategies: manual_cpc, target_cpa, target_roas, maximize_conversions, maximize_conversion_value, maximize_clicks, target_spend. maximize_clicks and target_spend are aliases for the same strategy (the former is the Google Ads UI label, the latter the API and get_data field naming). target_cpa_micros is required for target_cpa and maximize_conversions (1,000,000 micros = 1 unit of the account currency). target_roas is required for target_roas and maximize_conversion_value (expressed as a ratio, e.g. 4.0 means 400% return on ad spend). cpc_bid_ceiling_micros is required for maximize_clicks and target_spend; it is not accepted for other strategies because the API only allows a campaign-level ceiling on Target Spend (other strategies require a portfolio bidding strategy). manual_cpc takes no additional parameters.","schema":{"description":"Parameters for action.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"},"strategy":{"enum":["manual_cpc","target_cpa","target_roas","maximize_conversions","maximize_conversion_value","maximize_clicks","target_spend"],"title":"Strategy","type":"string"},"target_cpa_micros":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Target Cpa Micros"},"target_roas":{"anyOf":[{"exclusiveMinimum":0.0,"type":"number"},{"type":"null"}],"default":null,"title":"Target Roas"},"cpc_bid_ceiling_micros":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Cpc Bid Ceiling Micros"}},"required":["campaign_id","strategy"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"set_ad_schedule","name":"Set Ad Schedule","description":"Set the ad schedule (dayparting) of a Google Ads campaign: the days and times of day its ads are allowed to serve, each with an optional bid adjustment. This replaces the campaign's whole schedule — every window it should serve in must be listed in one call, because the windows not listed are removed. Times are in the campaign's account time zone. Hours are 24-hour, minutes are limited to 0, 15, 30 and 45, and each window is exclusive of its end time, so 09:00-17:00 serves up to but not including 17:00; use end_hour 24 for the end of the day. Windows for the same day must not overlap, and a day takes at most six of them. A campaign with no ad schedule serves at all times; pass an empty schedule list to clear the schedule and return it to that state. To read the current schedule, query get_data with the campaign_criterion_ad_schedule_day_of_week, campaign_criterion_ad_schedule_start_hour, campaign_criterion_ad_schedule_start_minute, campaign_criterion_ad_schedule_end_hour and campaign_criterion_ad_schedule_end_minute fields.","schema":{"$defs":{"AdScheduleWindow":{"description":"A single day-and-time window during which ads may serve.","properties":{"day_of_week":{"description":"Day the window applies to, e.g. MONDAY.","enum":["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"],"title":"Day Of Week","type":"string"},"start_hour":{"description":"Start hour in 24-hour time, 0-23.","maximum":23,"minimum":0,"title":"Start Hour","type":"integer"},"end_hour":{"description":"End hour in 24-hour time, 1-24, where 24 means the end of the day. The window is exclusive of the end time.","maximum":24,"minimum":1,"title":"End Hour","type":"integer"},"start_minute":{"default":0,"description":"Minute the window starts at: 0, 15, 30 or 45.","enum":[0,15,30,45],"title":"Start Minute","type":"integer"},"end_minute":{"default":0,"description":"Minute the window ends at: 0, 15, 30 or 45. The window is exclusive of this minute.","enum":[0,15,30,45],"title":"End Minute","type":"integer"},"bid_modifier":{"anyOf":[{"maximum":10.0,"minimum":0.1,"type":"number"},{"type":"null"}],"default":null,"description":"Optional bid adjustment applied while this window is active, between 0.1 and 10.0, where 1.0 leaves bids unchanged (e.g. 1.2 bids 20% more). Omit to leave bids unadjusted.","title":"Bid Modifier"}},"required":["day_of_week","start_hour","end_hour"],"title":"AdScheduleWindow","type":"object"}},"description":"Parameters for action.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"},"schedule":{"description":"The complete set of windows the campaign may serve in. Windows for a day must not overlap and a day takes at most six. An empty list clears the schedule so ads serve at all times.","items":{"$ref":"#/$defs/AdScheduleWindow"},"maxItems":42,"title":"Schedule","type":"array"}},"required":["campaign_id","schedule"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"set_cpc_bid_ceiling","name":"Set CPC Bid Ceiling","description":"Set the maximum CPC bid the strategy is allowed to place on a Google Ads campaign. The amount is in micros of the account currency (1,000,000 micros = 1 unit, e.g. 2_500_000 means 2.50). Only applies to campaigns using Target Spend / Maximize Clicks bidding. Other strategies (Target CPA, Target ROAS, Maximize Conversions, Maximize Conversion Value) treat ceiling as portfolio-only per the Google Ads API, so those cannot be adjusted via this action.","schema":{"description":"Parameters for action.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"},"amount_micros":{"exclusiveMinimum":0,"title":"Amount Micros","type":"integer"}},"required":["campaign_id","amount_micros"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"set_max_cpc","name":"Set Max CPC Bid","description":"Set the default Max CPC bid on a Google Ads ad group. The amount is in micros of the account currency (1,000,000 micros = 1 unit, e.g. 2_500_000 means 2.50). Manual CPC bids live on the ad group, not the campaign, so the parent campaign must use the Manual CPC bidding strategy; switch it first via set_campaign_bidding_strategy if it uses Smart Bidding.","schema":{"description":"Parameters for action.","properties":{"ad_group_id":{"title":"Ad Group Id","type":"string"},"amount_micros":{"exclusiveMinimum":0,"title":"Amount Micros","type":"integer"}},"required":["ad_group_id","amount_micros"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"set_target_cpa","name":"Set Target CPA","description":"Set the target cost per acquisition on a Google Ads campaign already using Target CPA or Maximize Conversions bidding. The amount is in micros of the account currency (1,000,000 micros = 1 unit, e.g. 25_000_000 means 25.00). To switch a campaign to Target CPA bidding, use set_campaign_bidding_strategy with strategy='target_cpa' instead.","schema":{"description":"Parameters for action.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"},"target_cpa_micros":{"exclusiveMinimum":0,"title":"Target Cpa Micros","type":"integer"}},"required":["campaign_id","target_cpa_micros"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"set_target_roas","name":"Set Target ROAS","description":"Set the target return on ad spend on a Google Ads campaign already using Target ROAS or Maximize Conversion Value bidding. The value is a ratio of conversion value to spend, not a percentage (e.g. 4.0 means 400% ROAS). To switch a campaign to Target ROAS bidding, use set_campaign_bidding_strategy with strategy='target_roas' instead.","schema":{"description":"Parameters for action.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"},"target_roas":{"exclusiveMinimum":0.0,"title":"Target Roas","type":"number"}},"required":["campaign_id","target_roas"],"title":"Params","type":"object"},"connector":"google_ads"},{"id":"create_local_post","name":"Create Local Post","description":"Publish a standard \"What's New\" post on the connected Google Business Profile location. Provide the post text, an optional publicly accessible photo URL (JPG or PNG, at least 250x250 px and 10 KB) and an optional call-to-action button. Call-to-action types: BOOK, ORDER, SHOP, LEARN_MORE, SIGN_UP (each needs cta_url) or CALL (uses the listing's phone number, no cta_url). The post can be edited afterwards via update_local_post.","schema":{"description":"Parameters for action.","properties":{"summary":{"maxLength":1500,"minLength":1,"title":"Summary","type":"string"},"photo_url":{"anyOf":[{"format":"uri","maxLength":2083,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Photo Url"},"cta_type":{"anyOf":[{"enum":["BOOK","ORDER","SHOP","LEARN_MORE","SIGN_UP","CALL"],"type":"string"},{"type":"null"}],"default":null,"title":"Cta Type"},"cta_url":{"anyOf":[{"format":"uri","maxLength":2083,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Cta Url"},"language_code":{"default":"en","title":"Language Code","type":"string"}},"required":["summary"],"title":"Params","type":"object"},"connector":"google_my_business"},{"id":"update_local_post","name":"Update Local Post","description":"Update the text, photo or call-to-action of an existing post on the connected Google Business Profile location. post_id is the trailing id from the post's resource name (the post_id field of the Local Posts table); full resource names are also accepted. Only the provided fields are changed. Call-to-action types: BOOK, ORDER, SHOP, LEARN_MORE, SIGN_UP (each needs cta_url) or CALL (uses the listing's phone number, no cta_url).","schema":{"description":"Parameters for action.","properties":{"post_id":{"minLength":1,"title":"Post Id","type":"string"},"summary":{"anyOf":[{"maxLength":1500,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Summary"},"photo_url":{"anyOf":[{"format":"uri","maxLength":2083,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Photo Url"},"cta_type":{"anyOf":[{"enum":["BOOK","ORDER","SHOP","LEARN_MORE","SIGN_UP","CALL"],"type":"string"},{"type":"null"}],"default":null,"title":"Cta Type"},"cta_url":{"anyOf":[{"format":"uri","maxLength":2083,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Cta Url"}},"required":["post_id"],"title":"Params","type":"object"},"connector":"google_my_business"},{"id":"reply_to_review","name":"Reply to Review","description":"Publish the owner's reply to a customer review on the connected Google Business Profile location, or replace the existing reply. review_id comes from the review_id field of the Reviews table; full resource names are also accepted. The reply is public; replying again replaces the existing reply.","schema":{"description":"Parameters for action.","properties":{"review_id":{"minLength":1,"title":"Review Id","type":"string"},"comment":{"maxLength":4096,"minLength":1,"title":"Comment","type":"string"}},"required":["review_id","comment"],"title":"Params","type":"object"},"connector":"google_my_business"},{"id":"upload_media","name":"Upload Photo","description":"Add a photo to the connected Google Business Profile location's gallery. Provide a publicly accessible photo URL (JPG or PNG, at least 250x250 px and 10 KB) and the gallery category it belongs to (default ADDITIONAL; COVER and PROFILE replace the current cover or profile photo).","schema":{"description":"Parameters for action.","properties":{"photo_url":{"format":"uri","maxLength":2083,"minLength":1,"title":"Photo Url","type":"string"},"category":{"default":"ADDITIONAL","enum":["ADDITIONAL","COVER","PROFILE","LOGO","EXTERIOR","INTERIOR","PRODUCT","AT_WORK","FOOD_AND_DRINK","MENU","COMMON_AREA","ROOMS","TEAMS"],"title":"Category","type":"string"}},"required":["photo_url"],"title":"Params","type":"object"},"connector":"google_my_business"},{"id":"update_location","name":"Update Location Info","description":"Update the business description, website URL and/or primary phone number of the connected Google Business Profile location. Only the provided fields are changed. Edits may be reviewed by Google before they appear on the listing.","schema":{"description":"Parameters for action.","properties":{"description":{"anyOf":[{"maxLength":750,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Description"},"website_url":{"anyOf":[{"format":"uri","maxLength":2083,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Website Url"},"primary_phone":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Primary Phone"}},"title":"Params","type":"object"},"connector":"google_my_business"},{"id":"set_regular_hours","name":"Set Regular Hours","description":"Set the weekly opening hours of the connected Google Business Profile location. Provide one period per continuous open span (a day may have several, e.g. before and after a lunch break; days with no period are shown as closed). For 24-hour opening use 00:00 to 24:00. Replaces all existing regular hours.","schema":{"$defs":{"RegularHoursPeriod":{"description":"One weekly span of open hours.","properties":{"open_day":{"enum":["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"],"title":"Open Day","type":"string"},"open_time":{"description":"Opening time in HH:MM format","title":"Open Time","type":"string"},"close_time":{"description":"Closing time in HH:MM format; 24:00 means end of day","title":"Close Time","type":"string"},"close_day":{"anyOf":[{"enum":["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"],"type":"string"},{"type":"null"}],"default":null,"description":"Only for spans crossing midnight; defaults to open_day","title":"Close Day"}},"required":["open_day","open_time","close_time"],"title":"RegularHoursPeriod","type":"object"}},"description":"Parameters for action.","properties":{"periods":{"items":{"$ref":"#/$defs/RegularHoursPeriod"},"minItems":1,"title":"Periods","type":"array"}},"required":["periods"],"title":"Params","type":"object"},"connector":"google_my_business"},{"id":"set_special_hours","name":"Set Special Hours","description":"Set exceptional opening hours of the connected Google Business Profile location for specific dates (holidays, events). Each period is a date that is either fully closed or open for the given time span. Replaces all existing special hours, so include every upcoming exceptional date in one call; regular hours are not affected.","schema":{"$defs":{"SpecialHoursPeriod":{"description":"Hours for a single exceptional date: either closed or an open span.","properties":{"date":{"format":"date","title":"Date","type":"string"},"closed":{"default":false,"title":"Closed","type":"boolean"},"open_time":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Opening time in HH:MM format","title":"Open Time"},"close_time":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Closing time in HH:MM format; 24:00 means end of day","title":"Close Time"}},"required":["date"],"title":"SpecialHoursPeriod","type":"object"}},"description":"Parameters for action.","properties":{"periods":{"items":{"$ref":"#/$defs/SpecialHoursPeriod"},"minItems":1,"title":"Periods","type":"array"}},"required":["periods"],"title":"Params","type":"object"},"connector":"google_my_business"},{"id":"set_open_status","name":"Set Open Status","description":"Mark the connected Google Business Profile location as OPEN or CLOSED_TEMPORARILY (e.g. for renovations). A temporarily closed location stays on Google with a \"Temporarily closed\" label. Reversible by calling this action with the other status.","schema":{"description":"Parameters for action.","properties":{"status":{"enum":["OPEN","CLOSED_TEMPORARILY"],"title":"Status","type":"string"}},"required":["status"],"title":"Params","type":"object"},"connector":"google_my_business"},{"id":"create_carousel_post","name":"Create Carousel Post","description":"Publish a multi-image carousel post to a connected Instagram Business or Creator account. Provide 2 to 10 publicly accessible image URLs (JPEG, at most 8 MB each, aspect ratio between 4:5 and 1.91:1) and an optional caption; images are shown in the given order. Video carousel items are not supported. For other formats use create_image_post, create_video_post or create_story.","schema":{"description":"Parameters for action.","properties":{"image_urls":{"items":{"format":"uri","maxLength":2083,"minLength":1,"type":"string"},"maxItems":10,"minItems":2,"title":"Image Urls","type":"array"},"caption":{"anyOf":[{"maxLength":2200,"type":"string"},{"type":"null"}],"default":null,"title":"Caption"}},"required":["image_urls"],"title":"Params","type":"object"},"connector":"instagram"},{"id":"create_comment","name":"Create Comment","description":"Post a comment on a media object (post, reel) of a connected Instagram Business or Creator account. media_id is an Instagram media object id, as returned by the media_id read field. The comment is public and is attributed to the account. Comments on live videos are not supported, and the media must have comments enabled.","schema":{"description":"Parameters for action.","properties":{"media_id":{"minLength":1,"title":"Media Id","type":"string"},"message":{"maxLength":2200,"minLength":1,"title":"Message","type":"string"}},"required":["media_id","message"],"title":"Params","type":"object"},"connector":"instagram"},{"id":"create_image_post","name":"Create Image Post","description":"Publish a single image post (feed photo) to a connected Instagram Business or Creator account. Provide a publicly accessible image URL and an optional caption. The image must be a JPEG, at most 8 MB, with an aspect ratio between 4:5 and 1.91:1. For other formats use create_video_post, create_story or create_carousel_post.","schema":{"description":"Parameters for action.","properties":{"image_url":{"format":"uri","maxLength":2083,"minLength":1,"title":"Image Url","type":"string"},"caption":{"anyOf":[{"maxLength":2200,"type":"string"},{"type":"null"}],"default":null,"title":"Caption"}},"required":["image_url"],"title":"Params","type":"object"},"connector":"instagram"},{"id":"create_story","name":"Create Story","description":"Publish a story to a connected Instagram Business or Creator account. Provide exactly one of image_url (JPEG, at most 8 MB) or video_url (MP4 or MOV, at most 100 MB, 3 to 60 seconds long), publicly accessible; a 9:16 aspect ratio is recommended. Stories do not support captions and disappear after 24 hours. For feed posts use create_image_post, create_video_post or create_carousel_post.","schema":{"description":"Parameters for action.","properties":{"image_url":{"anyOf":[{"format":"uri","maxLength":2083,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Image Url"},"video_url":{"anyOf":[{"format":"uri","maxLength":2083,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Video Url"}},"title":"Params","type":"object"},"connector":"instagram"},{"id":"create_video_post","name":"Create Video Post","description":"Publish a single video post to a connected Instagram Business or Creator account. Instagram publishes all single-video feed posts as Reels. Provide a publicly accessible video URL and an optional caption. The video must be an MP4 or MOV, at most 1 GB, between 3 seconds and 15 minutes long; a 9:16 aspect ratio is recommended. The cover image defaults to the first frame and can be overridden with either cover_url (a publicly accessible JPEG URL) or thumb_offset (frame position in milliseconds), but not both. share_to_feed controls whether the Reel also appears in the main feed (Instagram defaults to showing it there). For other formats use create_image_post, create_story or create_carousel_post.","schema":{"description":"Parameters for action.","properties":{"video_url":{"format":"uri","maxLength":2083,"minLength":1,"title":"Video Url","type":"string"},"caption":{"anyOf":[{"maxLength":2200,"type":"string"},{"type":"null"}],"default":null,"title":"Caption"},"cover_url":{"anyOf":[{"format":"uri","maxLength":2083,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Cover Url"},"thumb_offset":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Thumb Offset"},"share_to_feed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"title":"Share To Feed"}},"required":["video_url"],"title":"Params","type":"object"},"connector":"instagram"},{"id":"create_flow","name":"Create Flow","description":"Create a Klaviyo flow from a full definition: a trigger plus a graph of action steps (time-delay, send-email, send-sms, conditional-split) wired together by temporary_id. The trigger is either a metric event or being added to a list. entry_action_id is the temporary_id of the first step; each step links to the next by temporary_id (conditional-split uses next_if_true / next_if_false). Email steps reference an existing Klaviyo template by template_id (email content is not authored here); SMS steps carry an inline body. The flow and its messages are created in draft status so nothing sends until you activate it with update_flow_status. Note Klaviyo rate-limits flow creation to about 100 per day.","schema":{"$defs":{"ConditionalSplitStep":{"description":"Branch to a different step depending on a profile condition.","properties":{"temporary_id":{"title":"Temporary Id","type":"string"},"type":{"const":"conditional-split","enum":["conditional-split"],"title":"Type","type":"string"},"next_if_true":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Next If True"},"next_if_false":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Next If False"},"profile_filter":{"title":"Profile Filter","type":"object"}},"required":["temporary_id","type","profile_filter"],"title":"ConditionalSplitStep","type":"object"},"ListTrigger":{"description":"Start the flow when a profile is added to a list.","properties":{"type":{"const":"list","enum":["list"],"title":"Type","type":"string"},"list_id":{"title":"List Id","type":"string"}},"required":["type","list_id"],"title":"ListTrigger","type":"object"},"MetricTrigger":{"description":"Start the flow when a profile performs a metric event.","properties":{"type":{"const":"metric","enum":["metric"],"title":"Type","type":"string"},"metric_id":{"title":"Metric Id","type":"string"},"trigger_filter":{"anyOf":[{"type":"object"},{"type":"null"}],"default":null,"title":"Trigger Filter"}},"required":["type","metric_id"],"title":"MetricTrigger","type":"object"},"SendEmailStep":{"description":"Send an email built from an existing template.","properties":{"temporary_id":{"title":"Temporary Id","type":"string"},"links":{"$ref":"#/$defs/StepLinks"},"type":{"const":"send-email","enum":["send-email"],"title":"Type","type":"string"},"from_email":{"title":"From Email","type":"string"},"from_label":{"title":"From Label","type":"string"},"subject_line":{"title":"Subject Line","type":"string"},"template_id":{"title":"Template Id","type":"string"},"smart_sending_enabled":{"default":true,"title":"Smart Sending Enabled","type":"boolean"}},"required":["temporary_id","type","from_email","from_label","subject_line","template_id"],"title":"SendEmailStep","type":"object"},"SendSmsStep":{"description":"Send an SMS with an inline body.","properties":{"temporary_id":{"title":"Temporary Id","type":"string"},"links":{"$ref":"#/$defs/StepLinks"},"type":{"const":"send-sms","enum":["send-sms"],"title":"Type","type":"string"},"body":{"title":"Body","type":"string"},"smart_sending_enabled":{"default":true,"title":"Smart Sending Enabled","type":"boolean"}},"required":["temporary_id","type","body"],"title":"SendSmsStep","type":"object"},"StepLinks":{"description":"Successor link for a linear flow action step.","properties":{"next":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Next"}},"title":"StepLinks","type":"object"},"TimeDelayStep":{"description":"Wait for a fixed duration before the next step.","properties":{"temporary_id":{"title":"Temporary Id","type":"string"},"links":{"$ref":"#/$defs/StepLinks"},"type":{"const":"time-delay","enum":["time-delay"],"title":"Type","type":"string"},"unit":{"enum":["minutes","hours","days","weeks"],"title":"Unit","type":"string"},"value":{"exclusiveMinimum":0,"title":"Value","type":"integer"}},"required":["temporary_id","type","unit","value"],"title":"TimeDelayStep","type":"object"}},"description":"Parameters for creating a flow.","properties":{"name":{"title":"Name","type":"string"},"trigger":{"discriminator":{"mapping":{"list":"#/$defs/ListTrigger","metric":"#/$defs/MetricTrigger"},"propertyName":"type"},"oneOf":[{"$ref":"#/$defs/MetricTrigger"},{"$ref":"#/$defs/ListTrigger"}],"title":"Trigger"},"entry_action_id":{"title":"Entry Action Id","type":"string"},"actions":{"items":{"discriminator":{"mapping":{"conditional-split":"#/$defs/ConditionalSplitStep","send-email":"#/$defs/SendEmailStep","send-sms":"#/$defs/SendSmsStep","time-delay":"#/$defs/TimeDelayStep"},"propertyName":"type"},"oneOf":[{"$ref":"#/$defs/TimeDelayStep"},{"$ref":"#/$defs/SendEmailStep"},{"$ref":"#/$defs/SendSmsStep"},{"$ref":"#/$defs/ConditionalSplitStep"}]},"minItems":1,"title":"Actions","type":"array"},"profile_filter":{"anyOf":[{"type":"object"},{"type":"null"}],"default":null,"title":"Profile Filter"}},"required":["name","trigger","entry_action_id","actions"],"title":"Params","type":"object"},"connector":"klaviyo"},{"id":"update_flow_status","name":"Update Flow Status","description":"Set a Klaviyo flow's status. 'draft' turns it off (no one enters, nothing sends), 'manual' lets profiles enter but holds messages for manual review, and 'live' sends automatically. The status change applies to the whole flow and all of its actions. The flow id can be obtained from a Klaviyo flows query, the flow's URL in Klaviyo, or the create_flow result.","schema":{"description":"Parameters for updating a flow's status.","properties":{"flow_id":{"title":"Flow Id","type":"string"},"status":{"enum":["draft","manual","live"],"title":"Status","type":"string"}},"required":["flow_id","status"],"title":"Params","type":"object"},"connector":"klaviyo"},{"id":"enable_campaign_group","name":"Enable Campaign Group","description":"Enable a paused LinkedIn Ads campaign group. Reversible via pause_campaign_group.","schema":{"description":"Parameters for action.","properties":{"campaign_group_id":{"title":"Campaign Group Id","type":"string"}},"required":["campaign_group_id"],"title":"Params","type":"object"},"connector":"linkedin"},{"id":"pause_campaign_group","name":"Pause Campaign Group","description":"Pause an active LinkedIn Ads campaign group. Reversible via enable_campaign_group.","schema":{"description":"Parameters for action.","properties":{"campaign_group_id":{"title":"Campaign Group Id","type":"string"}},"required":["campaign_group_id"],"title":"Params","type":"object"},"connector":"linkedin"},{"id":"enable_campaign","name":"Enable Campaign","description":"Enable a paused LinkedIn Ads campaign. Reversible via pause_campaign.","schema":{"description":"Parameters for action.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"}},"required":["campaign_id"],"title":"Params","type":"object"},"connector":"linkedin"},{"id":"pause_campaign","name":"Pause Campaign","description":"Pause an active LinkedIn Ads campaign. Reversible via enable_campaign.","schema":{"description":"Parameters for action.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"}},"required":["campaign_id"],"title":"Params","type":"object"},"connector":"linkedin"},{"id":"enable_creative","name":"Enable Creative","description":"Enable a paused LinkedIn Ads creative. Reversible via pause_creative.","schema":{"description":"Parameters for action.","properties":{"creative_id":{"title":"Creative Id","type":"string"}},"required":["creative_id"],"title":"Params","type":"object"},"connector":"linkedin"},{"id":"pause_creative","name":"Pause Creative","description":"Pause an active LinkedIn Ads creative. Reversible via enable_creative.","schema":{"description":"Parameters for action.","properties":{"creative_id":{"title":"Creative Id","type":"string"}},"required":["creative_id"],"title":"Params","type":"object"},"connector":"linkedin"},{"id":"set_campaign_group_budget","name":"Set Campaign Group Budget","description":"Set the total budget of a LinkedIn Ads campaign group. The amount is in the account currency major unit (e.g. 100.00 means one hundred); the currency is resolved automatically from the account. The campaign group must have a schedule end date for a total budget to apply.","schema":{"description":"Parameters for action.","properties":{"campaign_group_id":{"title":"Campaign Group Id","type":"string"},"amount":{"anyOf":[{"exclusiveMinimum":0.0,"type":"number"},{"type":"string"}],"title":"Amount"}},"required":["campaign_group_id","amount"],"title":"Params","type":"object"},"connector":"linkedin"},{"id":"set_campaign_budget","name":"Set Campaign Budget","description":"Set the daily or total budget of a LinkedIn Ads campaign. The amount is in the account currency major unit (e.g. 100.00 means one hundred); the currency is resolved automatically from the account. A total budget requires the campaign to have a schedule end date.","schema":{"description":"Parameters for action.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"},"budget_type":{"enum":["daily","total"],"title":"Budget Type","type":"string"},"amount":{"anyOf":[{"exclusiveMinimum":0.0,"type":"number"},{"type":"string"}],"title":"Amount"}},"required":["campaign_id","budget_type","amount"],"title":"Params","type":"object"},"connector":"linkedin"},{"id":"update_object","name":"Update Object","description":"Update field values on a Salesforce record of any object type (Opportunity, Lead, Contact, Account, Case, custom objects, ...). Only the provided fields are changed. Use field API names (e.g. StageName, Amount, My_Field__c) and pass null as a value to clear a field.","schema":{"description":"Parameters for action.","properties":{"object_type":{"description":"API name of the object, e.g. Opportunity or My_Object__c","pattern":"^[A-Za-z][A-Za-z0-9_]*$","title":"Object Type","type":"string"},"record_id":{"description":"15- or 18-character ID of the record to update","pattern":"^[a-zA-Z0-9]{15}(?:[a-zA-Z0-9]{3})?$","title":"Record Id","type":"string"},"fields":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"description":"Field API names mapped to their new values, e.g. {\"StageName\": \"Closed Won\", \"Amount\": 120000}","minProperties":1,"title":"Fields","type":"object"}},"required":["object_type","record_id","fields"],"title":"Params","type":"object"},"connector":"salesforce"},{"id":"pause_ad","name":"Pause Ad","description":"Pause an active TikTok Ads ad. Reversible via enable_ad.","schema":{"description":"Parameters for pause TikTok ad action.","properties":{"ad_id":{"title":"Ad Id","type":"string"}},"required":["ad_id"],"title":"Params","type":"object"},"connector":"tiktok"},{"id":"pause_ad_group","name":"Pause Ad Group","description":"Pause an active TikTok Ads ad group. Reversible via enable_ad_group.","schema":{"description":"Parameters for pause TikTok ad group action.","properties":{"ad_group_id":{"title":"Ad Group Id","type":"string"}},"required":["ad_group_id"],"title":"Params","type":"object"},"connector":"tiktok"},{"id":"pause_campaign","name":"Pause Campaign","description":"Pause an active TikTok Ads campaign. Reversible via enable_campaign.","schema":{"description":"Parameters for pause TikTok campaign action.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"}},"required":["campaign_id"],"title":"Params","type":"object"},"connector":"tiktok"},{"id":"enable_ad","name":"Enable Ad","description":"Enable a paused TikTok Ads ad. Reversible via pause_ad.","schema":{"description":"Parameters for enable TikTok ad action.","properties":{"ad_id":{"title":"Ad Id","type":"string"}},"required":["ad_id"],"title":"Params","type":"object"},"connector":"tiktok"},{"id":"enable_ad_group","name":"Enable Ad Group","description":"Enable a paused TikTok Ads ad group. Reversible via pause_ad_group.","schema":{"description":"Parameters for enable TikTok ad group action.","properties":{"ad_group_id":{"title":"Ad Group Id","type":"string"}},"required":["ad_group_id"],"title":"Params","type":"object"},"connector":"tiktok"},{"id":"enable_campaign","name":"Enable Campaign","description":"Enable a paused TikTok Ads campaign. Reversible via pause_campaign.","schema":{"description":"Parameters for enable TikTok campaign action.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"}},"required":["campaign_id"],"title":"Params","type":"object"},"connector":"tiktok"},{"id":"set_campaign_budget","name":"Set Campaign Budget","description":"Set the budget of a TikTok Ads campaign. The amount is given in the account currency major unit (e.g. 100 means one hundred). The budget mode is fixed when the campaign is created and cannot be changed here: a campaign whose budget is unlimited (BUDGET_MODE_INFINITE) or managed at the ad group level has no campaign budget to update, and this action will report that the budget could not be changed. Use the ad group budget action for those campaigns.","schema":{"description":"Parameters for setting TikTok campaign budget.","properties":{"campaign_id":{"title":"Campaign Id","type":"string"},"amount":{"exclusiveMinimum":0,"title":"Amount","type":"integer"}},"required":["campaign_id","amount"],"title":"Params","type":"object"},"connector":"tiktok"},{"id":"set_ad_group_budget","name":"Set Ad Group Budget","description":"Set the budget of a TikTok Ads ad group. The amount is in the account currency major unit (e.g. 100.00 means one hundred). The budget type (daily or lifetime) is fixed when the ad group is created and cannot be changed here; the existing type is detected automatically and its amount is updated. Ad groups whose budget is managed at the campaign level (Campaign Budget Optimization) have no ad group budget to set.","schema":{"description":"Parameters for setting TikTok ad group budget.","properties":{"ad_group_id":{"title":"Ad Group Id","type":"string"},"amount":{"exclusiveMinimum":0,"title":"Amount","type":"integer"}},"required":["ad_group_id","amount"],"title":"Params","type":"object"},"connector":"tiktok"},{"id":"create_post","name":"Create Post","description":"Create a blog post on the connected WordPress site. Content is HTML or Gutenberg block markup and is stored as given. Defaults to a draft; pass status 'publish' to publish immediately, or status 'future' with a date to schedule. categories, tags, featured_media and author take numeric IDs, which the Categories, Tags, Media and Users tables provide. Editable afterwards via update_post.","schema":{"additionalProperties":false,"description":"Parameters for action.","properties":{"title":{"minLength":1,"title":"Title","type":"string"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Content"},"excerpt":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Excerpt"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Slug"},"status":{"default":"draft","enum":["publish","future","draft","pending","private"],"title":"Status","type":"string"},"date":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"title":"Date"},"author":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Author"},"featured_media":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Featured Media"},"comment_status":{"anyOf":[{"enum":["open","closed"],"type":"string"},{"type":"null"}],"default":null,"title":"Comment Status"},"template":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Template"},"categories":{"anyOf":[{"items":{"exclusiveMinimum":0,"type":"integer"},"type":"array"},{"type":"null"}],"default":null,"title":"Categories"},"tags":{"anyOf":[{"items":{"exclusiveMinimum":0,"type":"integer"},"type":"array"},{"type":"null"}],"default":null,"title":"Tags"},"sticky":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"title":"Sticky"}},"required":["title"],"title":"Params","type":"object"},"connector":"wordpress"},{"id":"update_post","name":"Update Post","description":"Update an existing blog post on the connected WordPress site. post_id is the numeric ID from the Posts table. Only the fields provided are changed; everything else keeps its current value. Set status 'publish' to publish a draft, or 'draft' to unpublish. categories and tags replace the current terms rather than adding to them, and content, title and excerpt are replaced wholesale: send the complete new value, as text is never appended to what is already there. Changing the title, content or excerpt keeps the previous version as a revision in the Post Revisions table, which is the only way back from an accidental overwrite.","schema":{"additionalProperties":false,"description":"Parameters for action.","properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Content"},"excerpt":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Excerpt"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Slug"},"status":{"anyOf":[{"enum":["publish","future","draft","pending","private"],"type":"string"},{"type":"null"}],"default":null,"title":"Status"},"date":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"title":"Date"},"author":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Author"},"featured_media":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Featured Media"},"comment_status":{"anyOf":[{"enum":["open","closed"],"type":"string"},{"type":"null"}],"default":null,"title":"Comment Status"},"template":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Template"},"categories":{"anyOf":[{"items":{"exclusiveMinimum":0,"type":"integer"},"type":"array"},{"type":"null"}],"default":null,"title":"Categories"},"tags":{"anyOf":[{"items":{"exclusiveMinimum":0,"type":"integer"},"type":"array"},{"type":"null"}],"default":null,"title":"Tags"},"sticky":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"title":"Sticky"},"post_id":{"exclusiveMinimum":0,"title":"Post Id","type":"integer"}},"required":["post_id"],"title":"Params","type":"object"},"connector":"wordpress"},{"id":"create_page","name":"Create Page","description":"Create a page on the connected WordPress site. Content is HTML or Gutenberg block markup and is stored as given. Defaults to a draft; pass status 'publish' to publish immediately, or status 'future' with a date to schedule. parent takes the ID of another page to nest this one under it, menu_order controls ordering among siblings, and template is a theme template file such as 'templates/full-width.php'. Editable afterwards via update_page.","schema":{"additionalProperties":false,"description":"Parameters for action.","properties":{"title":{"minLength":1,"title":"Title","type":"string"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Content"},"excerpt":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Excerpt"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Slug"},"status":{"default":"draft","enum":["publish","future","draft","pending","private"],"title":"Status","type":"string"},"date":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"title":"Date"},"author":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Author"},"featured_media":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Featured Media"},"comment_status":{"anyOf":[{"enum":["open","closed"],"type":"string"},{"type":"null"}],"default":null,"title":"Comment Status"},"template":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Template"},"parent":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Parent"},"menu_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Menu Order"}},"required":["title"],"title":"Params","type":"object"},"connector":"wordpress"},{"id":"update_page","name":"Update Page","description":"Update an existing page on the connected WordPress site. page_id is the numeric ID from the Pages table. Only the fields provided are changed; everything else keeps its current value. Set status 'publish' to publish a draft, or 'draft' to unpublish. content, title and excerpt are replaced wholesale: send the complete new value, as text is never appended to what is already there. Changing the title, content or excerpt keeps the previous version as a revision in the Page Revisions table, which is the only way back from an accidental overwrite.","schema":{"additionalProperties":false,"description":"Parameters for action.","properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Content"},"excerpt":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Excerpt"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Slug"},"status":{"anyOf":[{"enum":["publish","future","draft","pending","private"],"type":"string"},{"type":"null"}],"default":null,"title":"Status"},"date":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"default":null,"title":"Date"},"author":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Author"},"featured_media":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Featured Media"},"comment_status":{"anyOf":[{"enum":["open","closed"],"type":"string"},{"type":"null"}],"default":null,"title":"Comment Status"},"template":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Template"},"parent":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Parent"},"menu_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Menu Order"},"page_id":{"exclusiveMinimum":0,"title":"Page Id","type":"integer"}},"required":["page_id"],"title":"Params","type":"object"},"connector":"wordpress"},{"id":"create_category","name":"Create Category","description":"Create a post category on the connected WordPress site. name is required; slug is derived from the name when omitted. parent takes another category's ID to nest this one under it. The new category's ID can then be passed to create_post or update_post.","schema":{"additionalProperties":false,"description":"Parameters for action.","properties":{"name":{"minLength":1,"title":"Name","type":"string"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Slug"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Description"},"parent":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Parent"}},"required":["name"],"title":"Params","type":"object"},"connector":"wordpress"},{"id":"update_category","name":"Update Category","description":"Update an existing post category on the connected WordPress site. category_id is the numeric ID from the Categories table. Only the fields provided are changed. Renaming a category does not change its slug unless slug is passed too, so existing links keep working.","schema":{"additionalProperties":false,"description":"Parameters for action.","properties":{"category_id":{"exclusiveMinimum":0,"title":"Category Id","type":"integer"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Name"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Slug"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Description"},"parent":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Parent"}},"required":["category_id"],"title":"Params","type":"object"},"connector":"wordpress"},{"id":"create_tag","name":"Create Tag","description":"Create a post tag on the connected WordPress site. name is required; slug is derived from the name when omitted. Tags are flat, so unlike categories they cannot be nested. The new tag's ID can then be passed to create_post or update_post.","schema":{"additionalProperties":false,"description":"Parameters for action.","properties":{"name":{"minLength":1,"title":"Name","type":"string"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Slug"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Description"}},"required":["name"],"title":"Params","type":"object"},"connector":"wordpress"},{"id":"update_tag","name":"Update Tag","description":"Update an existing post tag on the connected WordPress site. tag_id is the numeric ID from the Tags table. Only the fields provided are changed. Renaming a tag does not change its slug unless slug is passed too, so existing links keep working.","schema":{"additionalProperties":false,"description":"Parameters for action.","properties":{"tag_id":{"exclusiveMinimum":0,"title":"Tag Id","type":"integer"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Name"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Slug"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Description"}},"required":["tag_id"],"title":"Params","type":"object"},"connector":"wordpress"}]
