ahrefs_backlinks_stats
ChatGPTLive Ahrefs backlink overview (live / all-time backlinks and referring domains) — not a full backlink export. Intents: Ahrefs backlinks, referring domains, SEO backlinks
By Omneky
Omneky helps signed-in users review brand performance, manage product catalogue data, create image and product-video assets, and launch or manage campaigns across the signed-in brand's connected advertising channels. It does not manage calendars or banking, access another advertiser's accounts, or administer application deployments or DNS.
website_url is fetched. First step of the shared loop: analyze → create (omit plan_body and Delphi authors the plan) → revise → preview checklist → host-run each listed step. Not identify_product_from_url / scrape_product_from_url`. Intents: analyze brand, marketing plan, weekly plan, brand evidence, website_url, Exa, Delphi planbrand_id`. Intents: data availability, date range, channel coverage, Meta, Google, TikTokplan_body and Delphi authors the plan from server-side account, performance, and brand research (usually after analyze_brand). Default timeframe is **7 days** (range 1–365, not 30). Optional plan_body is only for an already Delphi-authored body. This tool does not launch ads, change budgets, generate creatives, or deduct credits. Each step is {tool, arguments, depends_on, status} and tool is a public tools/list name. The host runs those steps; preview_marketing_plan_execution returns the checklist and credit quotes. This is the shared-service tool, not the CGP chat-agent /api/marketing-plans` path. Intents: create marketing plan, weekly plan, 7 day plan, plan_body, Delphi plan, timeframe_days, draft onlyjob_id to poll with get_generation_status — wait for this tool call to finish. When to use - Change copy, colors, layout, product placement, or style on an existing ad - Apply a look / font via reference_images - Not for net-new ads (use generate_image_ad) and not for aspect-ratio canvas changes alone (use resize_ad) Required inputs - images — 1+ HTTPS URLs of the source image(s) - prompt — concrete edit instruction Optional inputs - brand_id, job_id, mask, reference_images, size, model_name Returns presigned_url on success. Present the image to the user; do not describe it only as a URL. This is a paid edit (**5 credits**) settled when the edit succeeds. If the account is short on credits the tool returns credit_insufficient` and does not run the edit. Intent keywords edit ad, restyle creative, change copy on ad, retouch image, paid-media editupsert_brand_product` (that leaves a scraped draft). Intents: finalize scrape, save catalogue draft, product importjob_id quickly — it does **not** wait for the finished image. Host widget (preferred) This tool declares an MCP Apps progress/preview UI. When the host opens that widget, do **not** ask the user to "check back", and do **not** call get_generation_status in a loop — the widget polls and shows the image. Text-only hosts (no widget) Share the job_id, stop the turn, and on the user's follow-up call get_generation_status(job_id, kind="image") **once**. When the job is complete this returns the finished image **inline as an image** (plus a link) — just present it; do not describe it as a URL. Follow next_action. Do **not** poll in the same turn. When to use - Net-new product / lifestyle / campaign image ads - Redesigns or concept variants grounded in brand + product context - Not for editing an existing finished ad (use edit_image) and not for video (use generate_product_video) Required inputs (typical) - brand_id, brand_name, company_id, user_id — resolve via list_brands / get_brand_details / get_current_user - ad_concept — the full creative prompt (product, offer, visual direction, copy cues). This is the prompt field; do not invent a separate prompt arg - gpt_ad_gen_id — unique job key: <short-slug>-<uuid4>. Never reuse across variants or retries Recommended optional inputs - aspect_ratio — one of 1:1 (default / feed), 4:5, 9:16 (Stories/Reels/TikTok), 16:9 - user_assets / product imagery when the brief needs a specific product shot - headline / subheadline / cta when the user already chose copy Agent flow (public connector) 1. Ask whether the ad is for a **specific product** or the **brand in general**. If product-specific, resolve via list_brand_products / get_product_details (or ask which product) and gather product imagery. If brand-general, use get_brand_details identity/assets and skip product selection. 2. Confirm aspect ratio(s) and ad goal with the user if missing. 3. Call this tool once per distinct creative concept (for multiple placements, generate once at a primary ratio, then resize_ad for each remaining ratio in one parallel tool round). 4. If a generation widget appears, briefly confirm the job is running and let the widget finish — do not narrate a manual status loop. 5. If no widget appears, share job_id and wait for the user to ask for status. This is a paid render: it deducts **5 credits** when the job is submitted. If the account is short on credits the tool returns a credit_insufficient` result and does not start the render — relay that to the user and do not retry until they top up. Confirm intent before calling. Intent keywords image ad, static ad, paid-media creative, Meta ad creative, Facebook ad, Instagram ad, Google image ad, TikTok static, catalogue creative, product shotjob_id quickly — it does **not** wait for the finished clip (typical wall clock 3–7 minutes). Host widget (preferred) This tool declares an MCP Apps progress/preview UI. When the host opens that widget, do **not** ask the user to "check back", and do **not** call get_generation_status in a loop — the widget polls and shows the video (or an open link if in-iframe playback is blocked). Text-only hosts (no widget) Share the job_id, stop the turn, and on the user's follow-up call get_generation_status(job_id, kind="video") **once**. Deliver assets.url / assets.video_url when complete. Follow next_action. Do **not** poll in the same turn. When to use - Short product commercials / multi-beat narrative videos - After fetch_product_video_narratives when a narrative has been selected - Prefer this over single-shot product motion when the story needs multiple scenes or is longer than ~8 seconds Prerequisites 1. Product name + 1–3 product image URLs 2. A chosen narrative (from fetch_product_video_narratives) including narrative / script / segments / music_direction / hook_strategy as required by the tool schema 3. brand_id, company_id, and a fresh job_id (<slug>-<uuid4>) Orientation Derive from the brief's aspect ratio: - 9:16 → portrait - 16:9 → landscape - 1:1 → square Agent flow (public connector) 1. Confirm product vs brand-general intent; for brand-general creatives use generate_image_ad instead. Gather product + images; confirm aspect / duration / creative prompt. 2. fetch_product_video_narratives → present options → wait for selection. 3. Call this tool with the selected narrative + imagery + orientation. 4. If a generation widget appears, briefly confirm the job is running and let the widget finish — do not narrate a manual status loop. 5. If no widget appears, share job_id and wait for the user to ask for status; then get_generation_status **once** and follow next_action. This is a paid render: it deducts **30 credits** when the job is submitted. If the account is short on credits the tool returns a credit_insufficient` result and does not start the render — relay that to the user and do not retry until they top up. Intent keywords product video, multi-scene commercial, TikTok video ad, Reels video, paid-media videocampaign_id (and ad_group_ids when known). An unscoped brand-wide list may return status=timeout`. Intents: ad sets, ad groups, Meta ad set, Facebook ad set, campaign structurechannel='twitter'): ids, status, budget. Pinterest has get_pinterest_campaigns`. Intents: campaigns, Meta campaigns, Facebook campaigns, Google campaigns, TikTok, LinkedIn, Reddit, OpenAI Ads, X Ads, Twitter ads, Pinteresttwitter, never x. After the user finishes consent, list_authorized_ad_accounts then link_ad_channel_account`. Intents: connect Pinterest, connect X Ads, connect Twitter, OAuth URL, ad account link, self-connecttwitter), or OpenAI Ads account is connected and launchable. Pass channel="openai" for OpenAI Ads. When Meta or OpenAI is not connected, use the matching launch_omneky_managed_*` tool. Intents: ad account connected, Meta Business, Google Ads link, TikTok ads manager, LinkedIn Campaign Manager, Reddit ads, Pinterest ads, X Ads, Twitter ads, OpenAI Adsuser_id, email, company). The server already sets user_id and company_id` on brand-scoped calls — do not pass them. Intents: user id, signed-in user, session identity, omneky accountdate_range as two inclusive YYYY-MM-DD dates [start, end] (example ["2026-09-01", "2026-09-30"]). Pass brand_id from list_brands (call list_brands when the brand is unknown). The server sets user_id from the signed-in session. Pass filters as [] when not filtering. There is no metrics argument. Keep the requested window inside check_reporting_data_available coverage — empty days outside that coverage are missing data, not zero. selected_conversion_metric_value is the brand's configured goal and varies per channel. Totals across channels mix incompatible goals; group by channel or use a named metric (purchases, clicks, …). There is no run_sql_query` or score / lift endpoint on this surface. Intents: what's my ROAS, daily spend, how did ads perform, ROAS, CTR, CPA, CPC, CPM, spend, impressions, clicks, conversions, daily metrics, time series, paid media performance, Meta, Facebook, Google Ads, TikTok, LinkedIn, Reddit, OpenAI Adsjob_id. Pass kind image or video when you know which; auto probes both and can briefly return not_found before a video row exists. Call once per ask. Does not start a render. Returns status, assets when complete, and next_action`. Intents: job status, is my video ready, is my image ready, creative job_id, render statuslist_connector_statuses`. Intents: GSC connected, Google Search Console, Search Console connectionstatus=payment_required with a checkout_url / session_id`. Does not launch the campaign and does not start a new charge. Not a plan-upgrade Checkout session. Intents: managed launch payment, Stripe checkout, prepaid media, payment_required, session_id{tool, arguments, depends_on, status}. tool is a public tools/list name. Read-only. Not the CGP chat-agent get_marketing_plan`. Intents: get marketing plan, plan_version, plan steps, step statusrun_id (started outside this surface). Status: queued → running → succeeded / failed / cancelled / paused. Unrun steps show pending. Host-run progress lives on get_marketing_plan`. Intents: marketing plan run, run_id, poll run, plan progress, pendingconnect_openai_ads. If unconnected, launch with launch_omneky_managed_openai_ad; if connected, use launch_openai_clicks_ad / launch_openai_impressions_ad`. Intents: OpenAI Ads connected, API key last four, ChatGPT adsdate_range is two inclusive YYYY-MM-DD dates, [start, end]. Pass filters as [] when not filtering. selected_conversion_metric_value is the brand's configured goal and varies per channel. Totals across channels mix incompatible goals; group by channel or use a named metric (purchases, clicks, …). There is no run_sql_query` or score / lift endpoint on this surface. Intents: which ads should I make more of, winning ads, best creatives, ROAS, CTR, spend, creative breakdown, campaign performance, channel mix, Meta ads, Facebook ads, Google Ads, TikTok ads, LinkedIn ads, Reddit ads, paid mediaend_date (YYYY-MM-DD) and period_days (default 7). Do not send date_range. selected_conversion_metric_value is the brand's configured goal and varies per channel. Totals across channels mix incompatible goals; group by channel or use a named metric (purchases, clicks, …). There is no run_sql_query` or score / lift endpoint on this surface. Intents: trending, period-over-period, ROAS change, CTR change, paid media winners, Meta, Facebook, Google, TikTokcampaign_id. Same as get_ad_groups(channel='pinterest')`. Intents: Pinterest ad groups, Pinterest ad sets, Pinsget_ads(channel='pinterest')`. Intents: Pinterest ads, promoted Pins, Pin adsget_campaigns(channel='pinterest')`. Intents: Pinterest campaigns, Pins, paid socialget_channel_connection_status(channel='pinterest')`. Intents: Pinterest connected, Pinterest ads account, Pinsconnect_posthog`. Intents: PostHog connected, PostHog project, product analyticsbrand_id. start_date and end_date are inclusive YYYY-MM-DD; omit both for the last 30 days. A longer window is capped at 30 days. May return status=timeout`; narrow the dates and do not retry the same call in one turn. Intents: which ads should I make more of, scale winners, recommendations, creative advice, paid media insightslist_connector_statuses`. No connect or disconnect tool on this surface. Intents: Semrush connected, Semrush API, SEO connectionus`). Nexus enforces daily unit quotas (HTTP 429 = cap / units exhausted). Intents: Semrush domain overview, SEO rank, organic trafficcampaign_objective (examples: TRAFFIC, CONVERSIONS, VIDEO_VIEWS; LEADS` before a leads launch). TikTok launches need this pre-call or the API returns 400. Intents: TikTok locations, TikTok geo, TikTok targeting, location_idssc-domain:). Use a site_url from this list with gsc_query_analytics`. Skips when GSC is disconnected. Intents: GSC sites, Search Console properties, sc-domain, site_urlsite_url from gsc_list_sites. Default dimension is query`. Organic search — not paid-media Insights. Intents: Google Search Console, GSC analytics, organic search, impressions, clicks, CTR, average positionhubspot_search_companies`. Intents: HubSpot company, CRM account recordhubspot_search_contacts`. Intents: HubSpot contact, CRM recordhubspot_search_deals`. Intents: HubSpot deal, CRM deal recordis_single_product false means do not scrape; ask for one product URL. true or null may proceed to scrape_product_from_url`. Intents: import this URL, paste product URL, add product from link, turn this product URL into, product URL, PDP, scrape check, catalogue importcampaign_spec / ad_group_spec`. New launches typically start paused; paused still creates the live paid entities and they spend once enabled. Not for application deployment or DNS records. Intents: Meta awareness, Facebook reach, brand awareness, impressions, paid mediacampaign_spec / ad_group_spec. New launches typically start paused; paused still creates the live paid entities and they spend once enabled. Not for application deployment or DNS records. Set lead_gen_form_id` on ad specs for native Meta lead forms. Intents: Meta lead ads, Facebook lead form, Instagram leads, lead gen, paid mediacampaign_spec / ad_group_spec`. New launches typically start paused; paused still creates the live paid entities and they spend once enabled. Not for application deployment or DNS records. Intents: launch Meta sales ads, launch Facebook sales, Meta ads, Facebook ads, Instagram ads, sales, conversions, purchases, ROAS, catalogue sales, Advantage+, paid mediacampaign_spec / ad_group_spec`. New launches typically start paused; paused still creates the live paid entities and they spend once enabled. Not for application deployment or DNS records. Intents: Meta traffic, Facebook clicks, landing page, link clicks, paid mediacampaign_spec / ad_group_spec`. New launches typically start paused; paused still creates the live paid entities and they spend once enabled. Not for application deployment or DNS records. Intents: Meta video views, Facebook ThruPlay, Instagram Reels ads, video viewscampaign_spec.id / ad_group_spec.id. Pick objective (performance_max, demand_gen). campaign_spec.status_on_launch decides whether the new campaign goes live (ACTIVE / ENABLED) or is created paused (PAUSED / DISABLED); set it from what the user asked. The server applies no default, so when it is omitted the ad network's own default applies. Spend is the budget you pass; state it and proceed. performance_max (PMax / Shopping) needs ad_group_spec.link_url, 3+ headlines, 2+ descriptions, square_marketing_images and logo_image. demand_gen (YouTube / Discover / Gmail) needs ad_group_spec.targeting_fragments from search_targeting`. Not for drafts, creatives (generate_image_ad), reporting (get_performance_breakdown), or pausing / budget / targeting changes on live entities (set_ad_status, set_ad_budget, update_ad_targeting). Example: objective 'performance_max' with campaign_spec, ad_group_spec and ad_specs[].media_url. On a channel_not_connected error call get_connect_link; on a 400 fix the field it names and retry once. A creative URL and product URL already in the chat are enough: no catalogue (get_products) or requirements lookup is needed unless an id is missing. Intents: Google Ads, Performance Max, PMax, Demand Gen, YouTube ads Do not use for drafts, creatives, or reporting. Side effects: changes live ad accounts and can spend ad budget. Retry: not idempotent; check list_live_ads first.campaign_spec / ad_group_spec. New launches typically start paused; paused still creates the live paid entities and they spend once enabled. Not for application deployment or DNS records. Resolve countries with search_google_countries and pass adset_spec_fragment values as targeting_fragments. New campaigns need campaign_name (mapped from name) and budget_amount (mapped from daily_budget). New ad groups need ad_group_name (mapped from name; reuse accepts ad_group_id). Each ad needs business_name and logo_image_url`. Intents: Google Demand Gen, YouTube ads, Discover, Gmail ads, Google Ads, paid mediacampaign_spec / ad_group_spec. New launches typically start paused; paused still creates the live paid entities and they spend once enabled. Not for application deployment or DNS records. Creates a live paid Google Performance Max campaign that spends the campaign budget. Asset group needs at least 3 headlines and 2 descriptions. square_marketing_images and logo_image` are required and must be supplied separately — do not reuse the landscape ad image as the logo or the square image. Intents: Google Ads, Performance Max, PMax, Shopping, Google conversions, YouTube, Search, Display, paid mediacampaign_spec.id / ad_group_spec.id. Pick objective (brand_awareness, website_visits, engagement, conversions). campaign_spec.status_on_launch decides whether the new campaign goes live (ACTIVE / ENABLED) or is created paused (PAUSED / DISABLED); set it from what the user asked. The server applies no default, so when it is omitted the ad network's own default applies. Spend is the budget you pass; state it and proceed. start_date is required when creating a new campaign group. Location targeting from search_targeting must include a urn:li:adTargetingFacet:locations entry or the API returns 400. Targeting goes in ad_group_spec.targeting_criteria`. Not for drafts, creatives (generate_image_ad), reporting (get_performance_breakdown), or pausing / budget / targeting changes on live entities (set_ad_status, set_ad_budget, update_ad_targeting). Example: objective 'brand_awareness' with campaign_spec, ad_group_spec and ad_specs[].media_url. On a channel_not_connected error call get_connect_link; on a 400 fix the field it names and retry once. A creative URL and product URL already in the chat are enough: no catalogue (get_products) or requirements lookup is needed unless an id is missing. Intents: LinkedIn ads, B2B ads, sponsored content Do not use for drafts, creatives, or reporting. Side effects: changes live ad accounts and can spend ad budget. Retry: not idempotent; check list_live_ads first.campaign_spec / ad_group_spec. New launches typically start paused. start_date is required when creating a new campaign group. Location targeting from search_ad_targeting must include a urn:li:adTargetingFacet:locations entry or the API returns 400. When to use - User wants LinkedIn brand-awareness or B2B reach ads When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords LinkedIn ads, B2B awareness, LinkedIn Campaign Manager, paid mediacampaign_spec / ad_group_spec. New launches typically start paused. start_date is required when creating a new campaign group. Location targeting from search_ad_targeting must include a urn:li:adTargetingFacet:locations entry or the API returns 400. When to use - User wants LinkedIn conversion or lead-to-revenue campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords LinkedIn conversions, B2B ROAS, LinkedIn ads, paid mediacampaign_spec / ad_group_spec. New launches typically start paused. start_date is required when creating a new campaign group. Location targeting from search_ad_targeting must include a urn:li:adTargetingFacet:locations entry or the API returns 400. When to use - User wants LinkedIn engagement or thought-leadership ads When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords LinkedIn engagement, followers, social engagement, B2B adscampaign_spec / ad_group_spec. New launches typically start paused. start_date is required when creating a new campaign group. Location targeting from search_ad_targeting must include a urn:li:adTargetingFacet:locations entry or the API returns 400. When to use - User wants LinkedIn traffic / website-visit campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords LinkedIn traffic, website visits, B2B clicks, LinkedIn adscampaign_spec.id / ad_group_spec.id. Pick objective (sales, leads, traffic, awareness, video_views). campaign_spec.status_on_launch decides whether the new campaign goes live (ACTIVE / ENABLED) or is created paused (PAUSED / DISABLED); set it from what the user asked. The server applies no default, so when it is omitted the ad network's own default applies. Spend is the budget you pass; state it and proceed. Set account='omneky_managed' when the brand has no connected Meta account: it runs on Omneky's prepaid ad account and page with an Omneky-hosted landing page (objectives traffic, video_views, awareness only; do not pass a landing-page URL). If the prepaid balance is short it returns status=payment_required and creates nothing; the user adds funds on omneky.com, then retry or check get_account. sales = purchases / ROAS; leads = lead forms (set lead_gen_form_id); traffic = link clicks; awareness = reach. Targeting goes in ad_group_spec.targeting`. Not for drafts, creatives (generate_image_ad), reporting (get_performance_breakdown), or pausing / budget / targeting changes on live entities (set_ad_status, set_ad_budget, update_ad_targeting). Example: objective 'sales' with campaign_spec, ad_group_spec and ad_specs[].media_url. On a channel_not_connected error call get_connect_link; on a 400 fix the field it names and retry once. A creative URL and product URL already in the chat are enough: no catalogue (get_products) or requirements lookup is needed unless an id is missing. Intents: Meta ads, Facebook ads, Instagram ads, launch campaign, paid social Do not use for drafts, creatives, or reporting. Side effects: changes live ad accounts and can spend ad budget. Retry: not idempotent; check list_live_ads first.campaign_spec.id / ad_group_spec.id. Pick objective (clicks, impressions). campaign_spec.status_on_launch decides whether the new campaign goes live (ACTIVE / ENABLED) or is created paused (PAUSED / DISABLED); set it from what the user asked. The server applies no default, so when it is omitted the ad network's own default applies. Spend is the budget you pass; state it and proceed. Set account='omneky_managed' when the brand has no connected OpenAI Ads account: it runs on Omneky's prepaid OpenAI Ads account with an Omneky-hosted landing page; pass the brand website as ad_specs[].destination_url. If the prepaid balance is short it returns status=payment_required and creates nothing; the user adds funds on omneky.com, then retry or check get_account. Geo targeting is optional — omit campaign_spec.targeting to reach all eligible locations. To restrict geography, call search_targeting and paste a result's campaign_spec_fragment into campaign_spec.targeting. New campaigns reject a daily budget below $25. Image chat_card only. Title 3–50 characters; body ≤100; destination_url required. New ad groups need max_bid_dollars`. Not for drafts, creatives (generate_image_ad), reporting (get_performance_breakdown), or pausing / budget / targeting changes on live entities (set_ad_status, set_ad_budget, update_ad_targeting). Example: objective 'clicks' with campaign_spec, ad_group_spec and ad_specs[].media_url. On a channel_not_connected error call get_connect_link; on a 400 fix the field it names and retry once. A creative URL and product URL already in the chat are enough: no catalogue (get_products) or requirements lookup is needed unless an id is missing. Intents: OpenAI Ads, ChatGPT ads, chat_card, sponsored answers Do not use for drafts, creatives, or reporting. Side effects: changes live ad accounts and can spend ad budget. Retry: not idempotent; check list_live_ads first.campaign_spec / ad_group_spec. New launches typically start paused; paused still creates the live paid entities and they spend once enabled. Not for application deployment or DNS records. Geo targeting is optional — omit campaign_spec.targeting to reach all eligible locations. To restrict geography, call openai_location_search and paste a result's campaign_spec_fragment into campaign_spec.targeting. New campaigns reject a daily budget below $25. Image chat_card only. Title 3–50 characters; body ≤100; destination_url required. New ad groups need max_bid_dollars`. Intents: OpenAI Ads, ChatGPT ads, impressions, chat_card, paid mediacampaign_spec.id / ad_group_spec.id. Pick objective (awareness, traffic, sales, leads, video_views). campaign_spec.status_on_launch decides whether the new campaign goes live (ACTIVE / ENABLED) or is created paused (PAUSED / DISABLED); set it from what the user asked. The server applies no default, so when it is omitted the ad network's own default applies. Spend is the budget you pass; state it and proceed. Pin title max 100 characters. Targeting goes in ad_group_spec.targeting`. Not for drafts, creatives (generate_image_ad), reporting (get_performance_breakdown), or pausing / budget / targeting changes on live entities (set_ad_status, set_ad_budget, update_ad_targeting). Example: objective 'awareness' with campaign_spec, ad_group_spec and ad_specs[].media_url. On a channel_not_connected error call get_connect_link; on a 400 fix the field it names and retry once. A creative URL and product URL already in the chat are enough: no catalogue (get_products) or requirements lookup is needed unless an id is missing. Intents: Pinterest ads, promoted pins, shopping pins Do not use for drafts, creatives, or reporting. Side effects: changes live ad accounts and can spend ad budget. Retry: not idempotent; check list_live_ads first.campaign_spec / ad_group_spec. New launches typically start paused. Check get_pinterest_connection_status (same as get_channel_connection_status(channel='pinterest')) before launch. List entities with get_pinterest_campaigns / get_pinterest_ad_groups / get_pinterest_ads. When to use - User wants Pinterest awareness or reach campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords Pinterest ads, Pinterest awareness, Pins, paid socialcampaign_spec / ad_group_spec. New launches typically start paused. Check get_pinterest_connection_status (same as get_channel_connection_status(channel='pinterest')) before launch. List entities with get_pinterest_campaigns / get_pinterest_ad_groups / get_pinterest_ads. When to use - User wants Pinterest lead-generation ads When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords Pinterest ads, Pinterest leads, lead gen, paid socialcampaign_spec / ad_group_spec. New launches typically start paused. Check get_pinterest_connection_status (same as get_channel_connection_status(channel='pinterest')) before launch. List entities with get_pinterest_campaigns / get_pinterest_ad_groups / get_pinterest_ads. When to use - User wants Pinterest conversion or shopping-style sales ads When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords Pinterest ads, Pinterest sales, Pinterest conversions, ROAS, paid socialcampaign_spec / ad_group_spec. New launches typically start paused. Check get_pinterest_connection_status (same as get_channel_connection_status(channel='pinterest')) before launch. List entities with get_pinterest_campaigns / get_pinterest_ad_groups / get_pinterest_ads. When to use - User wants Pinterest traffic or consideration ads to a site When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords Pinterest ads, Pinterest traffic, Pin clicks, paid socialcampaign_spec / ad_group_spec. New launches typically start paused. Check get_pinterest_connection_status (same as get_channel_connection_status(channel='pinterest')) before launch. List entities with get_pinterest_campaigns / get_pinterest_ad_groups / get_pinterest_ads. When to use - User wants Pinterest video-view or video-completion campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords Pinterest ads, Pinterest video, video views, paid socialcampaign_spec.id / ad_group_spec.id. Pick objective (awareness, traffic, conversions, leads, video_views). campaign_spec.status_on_launch decides whether the new campaign goes live (ACTIVE / ENABLED) or is created paused (PAUSED / DISABLED); set it from what the user asked. The server applies no default, so when it is omitted the ad network's own default applies. Spend is the budget you pass; state it and proceed. Reddit bid_value is microcurrency (dollars × 1,000,000); $5/day is 5000000. Communities, interests and geolocations go in ad_group_spec.targeting`. Not for drafts, creatives (generate_image_ad), reporting (get_performance_breakdown), or pausing / budget / targeting changes on live entities (set_ad_status, set_ad_budget, update_ad_targeting). Example: objective 'awareness' with campaign_spec, ad_group_spec and ad_specs[].media_url. On a channel_not_connected error call get_connect_link; on a 400 fix the field it names and retry once. A creative URL and product URL already in the chat are enough: no catalogue (get_products) or requirements lookup is needed unless an id is missing. Intents: Reddit ads, subreddit targeting, community ads Do not use for drafts, creatives, or reporting. Side effects: changes live ad accounts and can spend ad budget. Retry: not idempotent; check list_live_ads first.campaign_spec / ad_group_spec. New launches typically start paused. Reddit bid_value is microcurrency (dollars × 1,000,000); $5/day is 5000000. When to use - User wants Reddit awareness or community-reach ads When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords Reddit ads, Reddit awareness, community ads, paid mediacampaign_spec / ad_group_spec. New launches typically start paused. Reddit bid_value is microcurrency (dollars × 1,000,000); $5/day is 5000000. When to use - User wants Reddit conversion campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords Reddit conversions, Reddit ads, ROAS, paid mediacampaign_spec / ad_group_spec. New launches typically start paused. Reddit bid_value is microcurrency (dollars × 1,000,000); $5/day is 5000000. When to use - User wants Reddit lead-gen ads When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords Reddit leads, Reddit lead gen, Reddit adscampaign_spec / ad_group_spec. New launches typically start paused. Reddit bid_value is microcurrency (dollars × 1,000,000); $5/day is 5000000. When to use - User wants Reddit traffic ads to a landing page When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords Reddit traffic, Reddit clicks, Reddit adscampaign_spec / ad_group_spec. New launches typically start paused. Reddit bid_value is microcurrency (dollars × 1,000,000); $5/day is 5000000. When to use - User wants Reddit video-view campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords Reddit video views, Reddit video adscampaign_spec.id / ad_group_spec.id. Pick objective (traffic, conversions, leads, video_views). campaign_spec.status_on_launch decides whether the new campaign goes live (ACTIVE / ENABLED) or is created paused (PAUSED / DISABLED); set it from what the user asked. The server applies no default, so when it is omitted the ad network's own default applies. Spend is the budget you pass; state it and proceed. ad_group_spec.location_ids is required: get them from search_targeting first or TikTok returns 400. ad_group_spec.name maps to adgroup_name`. Not for drafts, creatives (generate_image_ad), reporting (get_performance_breakdown), or pausing / budget / targeting changes on live entities (set_ad_status, set_ad_budget, update_ad_targeting). Example: objective 'traffic' with campaign_spec, ad_group_spec and ad_specs[].media_url. On a channel_not_connected error call get_connect_link; on a 400 fix the field it names and retry once. A creative URL and product URL already in the chat are enough: no catalogue (get_products) or requirements lookup is needed unless an id is missing. Intents: TikTok ads, launch TikTok campaign, short video ads Do not use for drafts, creatives, or reporting. Side effects: changes live ad accounts and can spend ad budget. Retry: not idempotent; check list_live_ads first.campaign_spec / ad_group_spec. New launches typically start paused. get_tiktok_location_ids is required before launch or the API returns 400. New launches typically start PAUSED/disabled. When to use - User wants TikTok conversion or shopping-style paid ads When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords TikTok conversions, TikTok ROAS, TikTok Shop ads, paid mediacampaign_spec / ad_group_spec. New launches typically start paused. get_tiktok_location_ids is required before launch or the API returns 400. New launches typically start PAUSED/disabled. When to use - User wants TikTok lead-generation ads When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords TikTok leads, TikTok instant form, TikTok adscampaign_spec / ad_group_spec. New launches typically start paused. get_tiktok_location_ids is required before launch or the API returns 400. New launches typically start PAUSED/disabled. When to use - User wants TikTok traffic ads (location ids via get_tiktok_location_ids first) When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords TikTok ads, TikTok traffic, TikTok clicks, paid socialcampaign_spec / ad_group_spec. New launches typically start paused. get_tiktok_location_ids is required before launch or the API returns 400. New launches typically start PAUSED/disabled. When to use - User wants TikTok video-view campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords TikTok video views, TikTok In-Feed, TikTok adscampaign_spec / ad_group_spec. New launches typically start paused. Wire name is twitter, never x. Check get_channel_connection_status(channel='twitter') (or get_channel_connect_url / link_ad_channel_account) first. Inspect existing entities with get_campaigns / get_ad_groups / get_ads using channel='twitter'. When to use - User wants X Ads or Twitter reach / awareness campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords X Ads, Twitter ads, X reach, Twitter awareness, paid socialcampaign_spec / ad_group_spec. New launches typically start paused. Wire name is twitter, never x. Check get_channel_connection_status(channel='twitter') (or get_channel_connect_url / link_ad_channel_account) first. Inspect existing entities with get_campaigns / get_ad_groups / get_ads using channel='twitter'. When to use - User wants X Ads or Twitter engagement campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords X Ads, Twitter ads, engagements, likes, retweets, paid socialcampaign_spec / ad_group_spec. New launches typically start paused. Wire name is twitter, never x. Check get_channel_connection_status(channel='twitter') (or get_channel_connect_url / link_ad_channel_account) first. Inspect existing entities with get_campaigns / get_ad_groups / get_ads using channel='twitter'. When to use - User wants X Ads or Twitter follower-growth campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords X Ads, Twitter ads, followers, profile follows, paid socialcampaign_spec / ad_group_spec. New launches typically start paused. Wire name is twitter, never x. Check get_channel_connection_status(channel='twitter') (or get_channel_connect_url / link_ad_channel_account) first. Inspect existing entities with get_campaigns / get_ad_groups / get_ads using channel='twitter'. When to use - User wants X Ads or Twitter website-clicks campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords X Ads, Twitter ads, website clicks, Twitter traffic, paid socialcampaign_spec / ad_group_spec. New launches typically start paused. Wire name is twitter, never x. Check get_channel_connection_status(channel='twitter') (or get_channel_connect_url / link_ad_channel_account) first. Inspect existing entities with get_campaigns / get_ad_groups / get_ads using channel='twitter'. When to use - User wants X Ads or Twitter video-view campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords X Ads, Twitter ads, video views, Twitter video, paid socialcampaign_spec.id / ad_group_spec.id. Pick objective (awareness, traffic, engagements, followers, video_views). campaign_spec.status_on_launch decides whether the new campaign goes live (ACTIVE / ENABLED) or is created paused (PAUSED / DISABLED); set it from what the user asked. The server applies no default, so when it is omitted the ad network's own default applies. Spend is the budget you pass; state it and proceed. Check list_connections(channel='twitter') first. Targeting goes in ad_group_spec.targeting`. Not for drafts, creatives (generate_image_ad), reporting (get_performance_breakdown), or pausing / budget / targeting changes on live entities (set_ad_status, set_ad_budget, update_ad_targeting). Example: objective 'awareness' with campaign_spec, ad_group_spec and ad_specs[].media_url. On a channel_not_connected error call get_connect_link; on a 400 fix the field it names and retry once. A creative URL and product URL already in the chat are enough: no catalogue (get_products) or requirements lookup is needed unless an id is missing. Intents: X ads, Twitter ads, promoted posts, followers campaign Do not use for drafts, creatives, or reporting. Side effects: changes live ad accounts and can spend ad budget. Retry: not idempotent; check list_live_ads first.twitter, never x. OpenAI Ads uses connect_openai_ads`, not this tool. Intents: link ad account, connect Pinterest, connect X Ads, validate and linklink_ad_channel_account. Wire name for X Ads is twitter, never x`. Intents: authorized ad accounts, Pinterest accounts, Twitter ads accounts, X Adslink_ad_channel_account`. Intents: Facebook Pages, Meta Page, page id, link Facebookbrand_id` is numeric. Intents: list my products, show products, what products do I have, product catalogue, SKUs, product list, catalog, merchandisebrand_id` is not already chosen. Returns id, name, and company. Stick to the chosen brand afterwards. Intents: brands, advertiser accounts, brand_id, omneky brandstwitter) plus HubSpot, Ahrefs, GSC, OpenAI Ads, PostHog, Google Drive, and other OTB connectors. Never returns tokens. Semrush is not in this fanout — call get_semrush_connection_status` directly. Intents: connector status, Pinterest connected, X Ads, HubSpot, Ahrefs, Semrush, GSC, PostHog, Google Drive, OpenAI Adscampaign_spec_fragment to paste into campaign_spec.targeting on launch_openai_clicks_ad / launch_openai_impressions_ad`. Targeting is optional — omit it to reach all eligible locations. Intents: OpenAI Ads locations, OpenAI geo, ChatGPT ads targeting, campaign_spec_fragmentquote_creative_credits / cgp. No side effects: no generation, launch, deduct, or persisted preview token. Each checklist row is {tool, arguments, depends_on, status} and tool is a public tools/list` name. The host runs those tools. Steps with no public tool are omitted. Intents: preview marketing plan, credit quote, checklist, quote_creative_credits, no spend, read onlybrand_id, channel, and targeting_fragments`. Not live delivery or ROAS. Intents: reach, audience size, estimate, paid media targetinglaunch_* can attach it as an ad. Required: name, brand_id (string), preview_storage_key (S3 object key — not the HTTPS ad URL). When to use - A creative was generated in chat and the user wants to launch it When not to use - Not the launch itself (call the matching launch_*` after this) Intent keywords register creative, persist ad, attach creative to campaignneeds_user_decision remediation). Returns a clarification_needed` payload — present each question in plain chat (or host elicitation if available); do not paste the raw JSON into the transcript. Not a ChatGPT Apps iframe widget. Intents: clarification, user decision, launch remediation, catalogue confirmation, choose optiongenerate_image_ad) or a copy/layout edit (edit_image). For explicit pixel targets use resize_image. Synchronous — returns resized_ad_url (often 30–180s). Do not call get_generation_status. Required - ad_url — caller-supplied finished-ad HTTPS URL (usually presigned_url; Central sends it upstream — not workspace-only) - aspect_ratio — 1:1, 4:5, 9:16, 16:9 Example: {"ad_url": "https://cdn.example/ad.png", "aspect_ratio": "9:16"} Generate once at a primary ratio, then one resize_ad per remaining ratio in a single parallel round. Credits may apply. Check get_account_credit_balance`. Do not describe the resize as free. Intent keywords resize ad, aspect ratio, 9:16, 4:5, Stories, Reels, TikTok placement, feed adresize_ad: 9:16, 4:5, 1:1) or a new branded ad. Synchronous — returns presigned_url / resized_image_url. Do not call get_generation_status. Required - image_url — caller-supplied HTTPS URL (not workspace-only) - block_width and block_height — pixels Example: {"image_url": "https://cdn.example/ad.png", "block_width": 1080, "block_height": 1920} Optional outpainting — when true, fill so both dimensions match exactly. Credits may apply. Check get_account_credit_balance`. Do not describe the resize as free. Intent keywords resize image, pixel dimensions, outpaint, block sizeinstruction or Delphi-authored plan_body starts a Delphi revision (pending) — poll get_marketing_plan until applied. plan_version increments by 1 on apply, not at start. Does not generate, launch, or deduct. Pass step_updates or completed_step_ids` to mark host-run steps done. Status-only mark-done does not start a revision. Intents: revise marketing plan, update plan, plan_version, instruction, pending revision, step_updates, completed_step_idsfinalize_scraped_product. May return status=pending; a later call with the same brand_id and url` reuses the in-flight Central draft. Intents: scrape product, import URL, catalogue ingest, PDP importtypes=['locations']`); also useful for other channels. Intents: targeting, locations, interests, LinkedIn targeting, geotargeting_fragments`). Intents: Google Demand Gen, Google Ads countries, targeting_fragments, YouTube, Discoverincludes or excludes` only. Intents: search campaigns, find ad name, dimension values, campaign idset_ad_entity_status for channel='pinterest'`. Intents: pause Pinterest, resume Pinterest, Pinterest ads statusproduct_id this creates; with product_id` it overwrites existing name/description (always sent) and any optional fields you pass. Pass current name/description when leaving them unchanged. Intents: update product, upsert catalogue, edit SKUClick any prompt to copy it.