add_domain
ChatGPTConnect a custom domain to the account. The account's FIRST domain becomes its primary (canonical) domain; every later one becomes an alias that 301-redirects to the primary — useful for owning misspellings, alternate TLDs, or migrating from an old domain without losing SEO. Returns the DNS records the customer must create at their DNS provider; provisioning completes in the background once DNS is pointed. Pass a bare registrable domain (e.g. example.com — no scheme, no www).
add_email_contacts
ChatGPTAdd up to 100 contacts to the account's email list. Only add people who agreed to receive email from the business, and say how in consent (required, stored with each contact as their consent record). Existing contacts get the tags merged and blank names filled; their status never changes. Addresses that bounced, complained or unsubscribed before are skipped. Contacts are added as subscribed. Returns a result per address (created, updated, unchanged, skipped, duplicate or error). The plan's contact limit applies.
add_email_sending_domain
ChatGPTAdd a domain to send campaigns from and start setting it up with the email provider. Its DNS records appear within a minute: then call list_email_sending_domains and add them at the domain's DNS host. Free mail domains and domains another account claimed are refused.
add_product_option
ChatGPTAdd an option (an axis of variation such as Size or Color) and its values to a product. At most 3 options per product. Adding an option creates no variants: call generate_variants next to create the sellable combinations.
add_products_to_collection
ChatGPTAdd one or more products to a collection, appended in the order given. Products already in the collection are skipped, so re-running an import does not duplicate them.
add_rank_keywords
ChatGPTTrack more keywords in a project. Write them as people search ("roof repair portland"); matching ignores case and keywords already tracked are skipped. Keywords are checked on mobile; pass desktop true to check them on desktop too (each then counts twice against the limit). Each new keyword gets its first check now (a paid search), with results within a few minutes, then on the project's schedule. The account has a keyword limit across all projects (usage in get_rank_tracker_summary).
admin_create_announcement
ChatGPTPlatform-admin tool. Create a product announcement for the "What's new" section of every user's Updates menu (the bell). Without published_at it is a draft nobody sees; a future published_at schedules it. Users see a dot on the bell for anything published since they last opened it.
admin_delete_announcement
ChatGPTPlatform-admin tool. Delete an announcement for good. To hide it but keep it, use admin_update_announcement with an empty published_at instead.
admin_list_announcements
ChatGPTPlatform-admin tool. List announcements, newest first (up to 100). Only published ones unless include_drafts is true, which adds drafts and scheduled ones (drafts first).
admin_local_search_campaigns
ChatGPTPlatform-admin tool. Local search campaigns across every account, newest first: business, grid, keywords, schedule, paused state, and scans and spend in the period.
admin_local_search_overview
ChatGPTPlatform-admin tool. Local search (Google Maps rank tracking) across every account: DataForSEO spend against the daily cap, spend by trigger (scheduled, manual, initial, added, business_search, deleted_scan), scans by status, the accounts using it with campaigns, limits and spend, and recent failed scans. Spend is charged when a scan finishes. Pass account_id to narrow spend, accounts and failures to one account.
admin_local_search_scans
ChatGPTPlatform-admin tool. Local search scans across every account, newest first: keyword, status, trigger, points resolved, average rank, cost and any error.
admin_update_announcement
ChatGPTPlatform-admin tool. Update an announcement. Only the fields passed change. Pass an empty string to clear body, link_url or image_url; an empty published_at turns it back into a draft (unpublishes it).
attach_product_media
ChatGPTAdd an image from the media library to a product's gallery (upload it first with request_upload). Images show in position order; pass variant_id to tie one to a variant (a color swatch) so the gallery switches to it when a buyer picks that option. featured_image_id on the product is the main image and is set separately.
cancel_email_campaign
ChatGPTCancel a scheduled, sending or paused email campaign. Emails already sent stay sent; the rest never go out. A canceled campaign cannot be sent again (duplicate_email_campaign copies it into a new draft).
cancel_fulfillment
ChatGPTCancel a shipment recorded by mistake. Its items become unshipped again, the order's fulfillment status is recomputed, and the cancellation is logged on the order's timeline.
cancel_invitation
ChatGPTCancel (rescind) a pending team invitation by email. See list_pending_invitations.
cancel_social_post
ChatGPTCancel a draft, scheduled or publishing social post. Accounts it has not reached yet are canceled; accounts it already published to stay published (BrightSite cannot remove a live post from the platforms). A canceled post cannot be edited or scheduled again.
check_email_sending_domain
ChatGPTCheck a sending domain's DNS records with the email provider now (they are also checked automatically). With add_records, first add the records for you when the domain uses BrightSite DNS (managed_dns).
complete_onboarding
ChatGPTMark an account as onboarded, skipping the guided setup wizard. Call this FIRST when importing a site into a brand-new account: until an account is onboarded, opening the dashboard runs the setup wizard, which seeds the starter template over whatever is already there. An account that is already onboarded is left alone, so this is safe to call more than once.
complete_upload
ChatGPTComplete a file upload after PUTting the file to the presigned URL from request_upload. Step 2 of 2: creates the media record in the database.
create_collection
ChatGPTCreate a product collection — a merchandising group with its own storefront page at /collections/{slug}. Use it for the categories a WooCommerce or Shopify catalog already has.
create_component
ChatGPTCreate a reusable component. Embed in pages/layouts via component("slug") or component("slug", %{prop: value}). Both live and staged fields start with the same content.
create_discount
ChatGPTCreate a discount code. percentage and fixed_amount take money off the goods: the whole cart, or only the lines of product_ids and collection_ids. free_shipping zeroes the chosen shipping rate, optionally only in shipping_zone_ids, for shipping_method_ids, or for rates up to max_shipping_amount. A cart holds one code unless every code on it has combines_with_others; stacked codes apply in the order added and each is itemized on the order. usage_limit caps total uses and usage_limit_per_customer uses per shopper; a use is counted when an order is placed, not when the code is applied.
create_dns_record
ChatGPTAdd a DNS record to a custom domain's BrightSite-managed zone — an MX record to route the domain's email, a TXT record for SPF/DKIM or a site verification, a CNAME for a subdomain, and so on. Only works for domains with managed_dns: true. The name is relative to the domain: "@" or an empty name is the domain itself, "mail" becomes mail.example.com. Records at the apex, www, or an _acme-challenge name are refused, because BrightSite owns those.
create_doc_page
ChatGPTCreate a documentation page. Content is raw HTML (not HEEx — template helpers like media() are not available). Pass parent_id to nest it under another page; the URL path is derived from the parent chain plus the slug.
create_email_campaign
ChatGPTCreate an email campaign as a draft. Nothing is sent: check preflight in the result, then call schedule_email_campaign. Content comes from blocks, from_post_id ("latest" for the newest blog post), html (a code email: your own full HTML document, such as a Mailchimp export) or, with none, a starter email. Sender fields default to the account's Email settings.
create_email_segment
ChatGPTCreate a segment: a saved audience of contacts by tags and source. A campaign to it goes to its subscribed contacts.
create_error_page
ChatGPTCreate a custom error page for a given HTTP status code (404, 500, 4xx, 5xx, etc.). Each status_code is unique per org. Call publish_error_page to make it active.
create_form
ChatGPTCreate a form
create_google_review_widget
ChatGPTCreate a saved Google Reviews widget: a named display config a page places with its own helper (reviews_hero_badge() for the slug hero-badge), so one placement can look different from the Default (for example a compact badge in the hero and a masonry wall on the reviews page). It starts from the Default widget's config; pass only the fields that should differ. The slug is derived from the name when left out ("Hero badge" becomes hero-badge, or hero-badge-2 when taken). Returns the widget with its snippet to put in the page HEEx.
create_layout
ChatGPTCreate a page layout that wraps pages with shared structure (header, nav, footer). Both live and staged fields start with the same content.
create_local_search_campaign
ChatGPTCreate a local search campaign: one business, the grid of points scanned around it, its keywords and its scan schedule (weekly by default). Take place_id, cid, business_name, business_address, business_lat and business_lng from a find_local_search_business result. The area defaults to the city preset (7x7 points, 1 mile apart) centered on the business; points on water are switched off automatically. The first scan of every keyword starts right away unless run_first_scan is false: that is one paid Google Maps search per point per keyword, and results arrive within a couple of minutes (read them with get_local_search_scan). An account has a limited number of campaigns (max_campaigns in get_local_search_summary).
create_media_folder
ChatGPTCreate a media folder for organizing uploaded files
create_org_role
ChatGPTCreate a custom team role from a set of permissions. Requires a plan with custom roles.
create_page
ChatGPTCreate a CMS page. Assign a layout_id to wrap with shared header/nav/footer. Both live and staged fields start with the same content. Call publish_page to make it appear on the live site.
create_post
ChatGPTCreate a blog post. Content is raw HTML (not HEEx — template helpers like media() are not available). Both live and staged fields start with the same content.
create_product
ChatGPTCreate a catalog product. Every product gets a default variant automatically — pass price_amount (and optionally sku, inventory_quantity) to seed it, which is all a simple single-price product needs. Products start as draft; call set_product_status to activate, which requires at least one active variant with a price. For a product with real options (size, color) create it first, then add_product_option and generate_variants.
create_redirect
ChatGPTCreate a URL redirect (301 permanent or 302 temporary). Source path is relative (e.g. /old-page), target can be relative or absolute URL.
create_review
ChatGPTRecord a product review. Use it to import reviews from an existing store, or to accept one from a form. A review is created pending — call set_review_status to approve it, or it will not appear on the storefront. The verified-purchase badge is resolved from paid orders by customer_id or author_email (import_orders_csv brings old orders in). When importing a review the old store had already verified and its order is not being migrated, pass verified_purchase: true.
create_shipping_method
ChatGPTAdd a shipping method (rate) to a zone: flat_rate, free, weight_based or price_based (banded by parcel weight or by subtotal after discount, via rate_tiers). minimum_order_amount hides it below a subtotal; free_over_amount makes it free above one. Every active method the basket qualifies for in the winning zone is offered.
create_shipping_zone
ChatGPTCreate a shipping zone: countries, optionally narrowed to regions and postcodes, or a rest-of-world catch-all. Only one zone's methods are offered for an address: the most specific matching zone wins (postcode match, then region, then country, then rest of world), and equally specific zones are settled by position (lower first, see move_shipping_zone). A zone with no active method is skipped. A new zone goes to the end of the list. Add rates to it with create_shipping_method.
create_social_post
ChatGPTSave a new social post as a draft. It is not published or scheduled: check get_social_post's issues, then call schedule_social_post or publish_social_post_now. Connect accounts in the BrightSite dashboard first; list them with list_social_accounts. Pick accounts with social_account_ids, or with targets to also set per-account text or platform options. Media comes from the media library (list_media, or request_upload + complete_upload); images and video only, in order. Platform limits: Instagram and TikTok need an image or a video. Instagram allows at most 5 hashtags. X allows 280 characters. Google Business allows 1500 characters and one image. LinkedIn allows 3000 characters. Use a target body to give one platform shorter text. Target options by platform (string keys; omit a key for its default): - any platform, posts with images: aspect_ratio (original default, 1:1, 4:5 or 16:9) crops every image to that shape; with original, images Instagram cannot take (outside 4:5 to 1.91:1) are cropped to the nearest shape. - instagram: collaborators (up to 3 usernames, no @), location_id (Facebook place id), share_to_feed (Reels only, default true), user_tags (list of {username, x, y} with x and y from 0 to 1, single image only). - facebook: none. - google_business: topic_type (STANDARD default, EVENT or OFFER), cta_type (LEARN_MORE, the default when the post has a link, BOOK, ORDER, SHOP, SIGN_UP or CALL; CALL needs no link), event_title, event_start and event_end (ISO 8601, required for EVENT and OFFER), offer_coupon_code, offer_redeem_url, offer_terms. - linkedin: visibility (PUBLIC default, or CONNECTIONS; member posts only). - x: none. - tiktok: privacy_level (REQUIRED, one of the creator's privacy_level_options from get_social_account), disable_comment, disable_duet, disable_stitch (default false), brand_content_toggle (paid partnership for a third party), brand_organic_toggle (promoting the creator's own business), is_aigc, title (photo posts, max 90 characters), auto_add_music (photo posts).
create_staging_site
ChatGPTCreate a staging site by cloning the account's live site (content + media). Runs synchronously and returns the new staging site (with its preview_url). Once created, author into it by passing site: "staging" (or the returned site ID) to any content tool — create_page, update_page, update_layout, update_global_code, request_upload, etc. — then staging_diff to review and promote_staging to make it live. The live site is untouched until you promote. Plan-gated — fails if staging isn't available on the account's plan or the staging limit is reached, or if a staging site already exists. name is optional and must be unique among the account's sites; when omitted it defaults to "{live site name} (Staging)". Note: the returned preview_url requires a logged-in org member — unauthenticated requests (e.g. a headless screenshot without the session cookie) get a 404 by design, so the staging host's existence isn't revealed.
create_tax_rate
ChatGPTAdd a manual tax rate for a country, or for one state or province within it. Used when tax_mode is manual.
create_template_from_account
ChatGPTPlatform-admin tool. Create a site template from an account's live site. Build the site in that account and review it first: the whole live site (layouts, pages, components, forms, blog, docs, media, global code, site identity, redirects, storefront templates and the product catalog) is exported into the template zip. New templates start disabled so they can be reviewed before sites can pick them; enable one with update_template. Features are derived from the exported zip. The preview is the media file given as preview_file_id, else the home page screenshot in the export, if any.
delete_ai_search_campaign
ChatGPTDelete an AI visibility campaign with its questions and every check it ran. This cannot be undone. Automatic checks stop, and the account can create another campaign in its place.
delete_component
ChatGPTDelete a reusable component
delete_discount
ChatGPTDelete a discount code. Orders that used it keep their record of the discount.
delete_dns_record
ChatGPTPermanently delete a DNS record from a custom domain's BrightSite-managed zone. Get the record_id from list_dns_records. Records BrightSite manages (protected: true) are refused, since removing them would take the site offline or stop its SSL certificate renewing.
delete_doc_page
ChatGPTDelete a documentation page. Refused if the page has children — move or delete them first. Deleting never cascades, because a silent subtree delete destroys content.
delete_email_campaign
ChatGPTDelete an email campaign and its report. A sending campaign must be paused or canceled first.
delete_email_contact
ChatGPTDelete a contact and their history. An address that unsubscribed, bounced or complained stays on the suppression list, so it is never emailed again.
delete_email_segment
ChatGPTDelete a segment. Contacts are not affected. Refused while a draft, scheduled, sending or paused campaign uses it; the error names those campaigns.
delete_error_page
ChatGPTDelete an error page
delete_file
ChatGPTDelete a media file. Removes both the DB record and the underlying storage. Refuses if the file is referenced anywhere (template usages, post feature/og images, page og images, site logo/icon) — remove all references first, then retry. There is no force option; the user must clear references manually so they don't leave dangling references behind.
delete_form
ChatGPTDelete a form
delete_google_review_widget
ChatGPTDelete a saved Google Reviews widget. Pages that still place it (reviews_<slug>() or reviews(%{widget: "slug"})) keep working but render with the Default widget's config, so remove or change those calls too. The Default widget cannot be deleted.
delete_layout
ChatGPTDelete a page layout
delete_local_search_campaign
ChatGPTDelete a campaign with its keywords and every scan it ever ran. This cannot be undone. The automatic scans stop, and the account can create another campaign in its place.
delete_media_folder
ChatGPTDelete a media folder. Refuses if the folder contains any files or subfolders — empty the folder first by moving or deleting its contents, then retry. There is no force/recursive option.
delete_org
ChatGPTPlatform-admin tool. Deletes an account. Irreversible: its site goes offline and its members lose access at once, then its Stripe subscription and customer, store Stripe account, domains, content and files are deleted in the background. Only call this when the user has explicitly asked to delete this account after seeing preview_org_deletion, and pass the slug the USER typed as confirm_slug; never fill it in yourself. The platform's own accounts cannot be deleted.
delete_org_role
ChatGPTDelete a custom team role. Blocked while any member is assigned to it — reassign those members first (update_member_role).
delete_page
ChatGPTDelete a CMS page
delete_post
ChatGPTDelete a blog post
delete_redirect
ChatGPTDelete a URL redirect
delete_review
ChatGPTDelete a review permanently. To hide one without losing it, set its status to rejected instead.
delete_shipping_method
ChatGPTDelete a shipping method from its zone.
delete_shipping_zone
ChatGPTDelete a shipping zone and all its methods. Shoppers it covered can no longer check out unless another zone covers them.
delete_social_post
ChatGPTDelete a social post from BrightSite. Posts already published stay live on the platforms; this only removes the record here. A post that is publishing right now cannot be deleted; cancel it first or wait.
delete_tax_rate
ChatGPTDelete a manual tax rate.
delete_template
ChatGPTPlatform-admin tool. Permanently delete a site template. Sites created from it keep their content. The default template cannot be deleted: make another template the default first. Pass confirm: true.
deliver_held_order
ChatGPTDeliver an order whose delivery is held (get_order shows delivery_held_at): it was paid, but its gift card share could not be taken from the card, so its gift cards, downloads and no-shipping items were not delivered. Issues them and emails the gift cards. Confirm with the user first, then pass confirm: true.
detach_product_file
ChatGPTRemove a downloadable file from a digital product. The file stays in the media library, and buyers who already paid keep their links.
detach_product_media
ChatGPTRemove an image from a product's gallery. The file stays in the media library.
disable_commerce
ChatGPTPlatform-admin tool. Turn commerce off for one account. Its store screens, storefront and checkout stop working, but nothing is deleted: products, orders and settings come back if commerce is enabled again.
disable_gift_card
ChatGPTDisable a gift card (lost, refunded, abused): it stops being accepted at checkout. Its balance is kept, and enable_gift_card undoes this.
discard_staging_site
ChatGPTPermanently delete the account's staging site and its content without promoting. Frees the staging slot. The live site is unaffected.
duplicate
ChatGPTDuplicate an entity. Creates a new draft copy with a unique slug and "— Copy" appended to the title/name. Staged and live fields are synced; the copy is unpublished. Supports: page, post, component, layout, form. (Error pages, global_code, and blog design singletons are not duplicable.)
duplicate_email_campaign
ChatGPTCopy an email campaign of any status into a new draft named "Copy of ...", with the same content, sender and audience.
enable_gift_card
ChatGPTRe-enable a disabled gift card so it is accepted at checkout again.
export_orders_csv
ChatGPTEvery order as CSV, the same files the orders screen exports. shape=orders (default): one row per order with customer name, statuses, amounts in major units with a currency column, discount code, shipping method, the items and their SKUs, flattened billing_ and shipping_ address columns, and whether it was imported. shape=lines: one row per line item with the order number, date, customer, SKU, title, variant, quantity, unit price and line total. Takes the same filters as list_orders.
export_products_csv
ChatGPTEvery product as CSV, one row per variant, in the same shape import_products_csv reads. Use it to back up a catalog, to edit many products at once in a spreadsheet, or to see the exact column format before writing an import file.
find_ai_search_business
ChatGPTFind the business's Google Maps listing to set up AI visibility, so you need not know its latitude and longitude. Search by the business name and town ("Northwind Heat Pumps Gray ME") or by its street address; the search covers the US. Each listing comes with business_name, lat, lng, city, region, cid, place_id and its website domain: pass the right one's to create_ai_search_campaign (the domain in domains). Each call is a paid search and an account gets a limited number a day, so search once with a precise query.
find_google_reviews_business
ChatGPTFind the business on Google whose reviews the widget should show, the first step of connecting Google Reviews. query is the business name and town ("Joe's Pizza Austin TX"), a Google Maps link (including maps.app.goo.gl short links) or a place ID. A link or place ID resolves to that one listing for free; a name runs a paid Google Maps search, and an account gets a limited number a day, so search once with the name and town. Pass the chosen result to connect_google_reviews.
find_local_search_business
ChatGPTFind the business's Google Maps listing, the first step of setting up a campaign. Searches Google Maps for a business name near a point and returns the listings found; pass the right one's place_id, cid, name, address, lat and lng to create_local_search_campaign. With no arguments it searches for the business the account already told us about (its Site Identity and Google Business Profile connection); suggested_place_id marks the listing that connection points to. Each call is a paid search and an account gets a limited number a day, so search once with a good name and location.
generate_variants
ChatGPTCreate a variant for each combination of a product's option values (add the options first with add_product_option). Omit combinations to generate every combination; existing combinations are skipped, so re-running after adding a value only creates the new ones. The price and other fields given here apply to every new variant: set per-variant prices or SKUs afterwards with update_variant. The product's original optionless default variant is archived once the new variants exist, so buyers only see real options.
get_active_visitors
ChatGPTGet currently active visitors on the site (last 5 minutes)
get_ai_search_gaps
ChatGPTWhat to fix to be named more in AI answers, from the campaign's latest completed check. prompt_gaps: questions where an assistant named other businesses and never this one, with who it named instead. source_gaps: sites the answers cited only when they did not name the business, with a next step (often getting listed there); no page was opened, so check the listing first. site_checks: checks of the account's own site (AI crawler access, business details, the home page, city and category named, the name matching) with where in the dashboard to fix each. Site checks are returned even before the first check completes.
get_analytics
ChatGPTGet site analytics. Choose a metric: - summary: unique visitors, page views, sessions, bounce rate, avg session duration, views/visit - top_pages: most-viewed pages (uses limit) - top_referrers: top traffic sources (uses limit) - top_utm_sources: top first-touch campaign sources from utm_source (uses limit) - top_campaigns: top (source, medium, campaign) tuples from UTM params (uses limit) - visits_over_time: time series of views + unique visitors (uses interval) - device_breakdown: desktop / mobile / tablet - browser_breakdown: Chrome / Safari / Firefox / etc. - country_breakdown: visitor countries - active_visitors: currently active visitors (last 5 minutes; ignores period)
get_analytics_summary
ChatGPTGet analytics summary with key metrics: unique visitors, page views, sessions, bounce rate, avg session duration, views per visit
get_blog_listing_design
ChatGPTGet the blog listing page design (the index page that shows all posts). Returns both live and staged fields.
get_blog_post_card_design
ChatGPTGet the blog post card design (how each post appears in the listing grid). Returns both live and staged fields.
get_blog_related_posts_design
ChatGPTGet the blog related posts design (the 'Keep reading' block shown at the bottom of a post when related posts are selected). Returns both live and staged fields.
get_blog_settings
ChatGPTGet blog-wide settings: whether the blog is enabled, the listing URL, posts-per-page, comment/social/SEO toggles, layout assignments, and display options. There is only one record per site — no ID needed.
get_blog_template
ChatGPTGet the blog post template (the layout that wraps individual blog posts). Returns both live and staged fields. There is only one per site — no ID needed.
get_browser_breakdown
ChatGPTGet visitor browser breakdown
get_commerce_template
ChatGPTGet one storefront page template (HEEx, CSS, JS) with both live and staged fields. Templates place platform blocks such as {cart()} or {sign_in_form(heading: "Welcome back")} and site components such as component("account-sign-in"); shopper data (@product, @collection, @cart, @customer, @orders, @order) arrives as runtime assigns.
get_component
ChatGPTGet a reusable component by ID. Returns both live and staged content fields.
get_country_breakdown
ChatGPTGet visitor country breakdown
get_customer
ChatGPTGet one customer with lifetime figures, saved addresses and their orders (slim rows).
get_design
ChatGPTGet the site's structured design record: the colors, typefaces, shape, depth, spacing and flags every page, layout, component, blog, docs page and storefront block reads. Returns the staged record, the published one, and the record with derived colors filled in. Returns nulls for a legacy site whose theme is still a hand-written Tailwind config (see get_global_code).
get_device_breakdown
ChatGPTGet visitor device type breakdown (desktop, mobile, tablet)
get_discount
ChatGPTGet one discount code.
get_dns_instructions
ChatGPTGet the DNS records a customer must create at their DNS provider for one of the account's custom domains — the CNAME pair pointing the domain at BrightSite plus the two _acme-challenge CNAMEs that let SSL certificates issue and renew automatically. Useful when a domain is stuck in provisioning or its ssl_status is pending/failed. Not needed for domains on BrightSite-managed DNS (managed_dns: true), where records are created automatically.
get_doc_page
ChatGPTGet a documentation page by ID. Returns both live (content) and staged (content_staged) fields.
get_docs_article_design
ChatGPTGet the docs article design — the HEEx skin wrapped around every individual documentation page's body. Returns both live and staged fields.
get_docs_index_design
ChatGPTGet the docs landing page design — the page served at the docs base_url itself, listing the documentation. Returns both live and staged fields.
get_docs_search_design
ChatGPTGet the docs search results design — the page at /docs-search that lists the doc pages matching a visitor's query, rendered inside the site layout. Returns both live and staged fields.
get_docs_settings
ChatGPTGet the documentation settings: whether docs are switched on, the URL prefix they live under, how the docs index describes itself for search and social sharing, and which navigation elements are shown.
get_email_campaign
ChatGPTOne email campaign with its content (mode blocks: its blocks; mode code: its HTML document in html) and, while it is a draft or scheduled, its preflight check: errors that block sending (no subject, no mailing address in Email settings, no recipients, a free-mail From address, the monthly allowance used up, a code email with no HTML) and warnings that do not (for code emails: unknown merge tags, what the sanitizer removed, a size Gmail clips, http:// images).
get_email_campaign_report
ChatGPTAn email campaign's results: recipients, sent, delivered, bounced, complained, unsubscribed, opened and clicked, with rates from 0 to 1 over delivered emails, the most clicked links, and why people unsubscribed (the optional reason picked on the unsubscribe page; share is 0 to 1 of everyone who unsubscribed). Opens are approximate (many inboxes block images and Apple Mail loads them all); clicks are reliable.
get_email_sending_status
ChatGPTWhether the account can send email now (status ready, disabled, not_configured or paused with the reason) and its usage: contacts and emails this month against the plan, and today's sending cap. The cap is lower while no sending domain is verified.
get_email_settings
ChatGPTThe account's Email settings: default sender name, From and Reply-To addresses, the mailing address every campaign footer needs, double opt-in, and the Sent with BrightSite referral badge (shown now, and whether the plan lets the account remove it).
get_error_page
ChatGPTGet an error page by ID. Returns both live and staged content fields.
get_form
ChatGPTGet a form by ID. Returns both live and staged content fields.
get_form_delivery
ChatGPTGet one notification delivery with its attempt timeline: each attempt's request (method, URL, headers, body) and response (status, body) or error. Secrets in URLs and headers are stored masked.
get_form_submission
ChatGPTGet one form submission: its values, status, the page it came from, the spam check's verdict, and every notification it sent (emails and webhooks) with each delivery's status.
get_gift_card
ChatGPTGet one gift card with its balance history (issued, spent on orders, refunded, adjusted).
get_global_code
ChatGPTGet global CSS, JavaScript, and Tailwind theme config that applies to all pages and layouts. Returns both live and staged fields. Update with update_global_code, then publish_global_code to push live.
get_google_reviews_settings
ChatGPTGet the account's Google Reviews widget settings: the connected Google business (place_id, business_name, business_address), whether a pull is in progress (syncing), the widget's display config (layout, theme, colors, card style, min rating, reviews-per-page, require_text, max_lines, show_owner_replies, toast and marquee options), the 'Review us on Google' call-to-action, the sync and approval settings (sync_frequency, approval_mode, auto_approve_min_rating), how many new reviews wait for approval (pending_count), and the last sync. These settings are the Default widget, placed on pages via the reviews() (review wall) and review_badge() (compact rating badge) template helpers. Saved widgets (list_google_review_widgets) each have their own display config and are placed with their own helper: the widget with slug hero-badge is reviews_hero_badge(). For the rating in a design's own markup, templates read review_stats.rating_text, review_stats.count, review_stats.write_review_url and review_stats.review_url. If connected is false, connect a business first (see the returned instructions).
get_google_reviews_status
ChatGPTCheck whether a Google business is connected for the account's reviews, which one (place_id, business_name, business_address), how many reviews it has, whether a pull is in progress (syncing), the last sync, the sync and approval settings, and how many new reviews wait for approval (pending_count; they are approved in Social > Google Reviews). Use this before configuring the widget, and after connect_google_reviews or sync_google_reviews to see the result. When not connected, returns connect_instructions.
get_indexnow_settings
ChatGPTGet the account's Instant Indexing (IndexNow) state: whether automatic submission is on, the public URL of the verification key file, and whether submissions actually reach search engines right now. IndexNow notifies Bing, Yandex and other participating engines the moment a page, post or redirect changes. eligible is false — and nothing is submitted — until the account has a live custom domain, because platform preview subdomains (*.onbrightsite.com) are never indexed. The key file stays served even while automatic submission is off, so third-party tools can keep submitting on the site's behalf.
get_layout
ChatGPTGet a page layout by ID. Returns both live and staged content fields.
get_local_search_scan
ChatGPTOne local search scan: the business's rank at every grid point as compact rows (north first, west to east; '-' not in the top 20, 'x' failed, '.' not checked yet, '_' not part of the scan), the metrics and their change, the competitors that rank best over the area, and the keyword's recent scans. Pass scan_id (from get_local_search_summary or list_local_search_scans), or keyword for that keyword's latest completed scan (with campaign_id when the account has more than one campaign). Pass competitor to also get that business's own grid, and row and col to see which listings came back at one point.
get_local_search_summary
ChatGPTHow the business ranks in Google Maps searches around it, and what changed. Local search scans a grid of points around the business for each tracked keyword on a schedule (weekly, every other week or monthly), and records the business's rank at each point. Returns every campaign (or one, with campaign_id) with each keyword's latest numbers: average_rank (mean over the grid, 21 = not in the top 20, lower is better), top3_percent and found_percent (share of points in the top 3 and top 20), the change since the scan before, changes (one plain sentence per keyword) and settings (the grid and schedule). Start here; use get_local_search_scan to see one keyword's map and competitors. With no campaigns, create one with find_local_search_business and create_local_search_campaign.
get_order
ChatGPTGet one order: totals, addresses, notes, the discount codes applied with what each took off the goods and shipping, its lines (with SKU, each line's discount share, and how many units are shipped and refunded), its shipments and its refunds.
get_page
ChatGPTGet a CMS page by ID. Returns both live (heex/css/js) and staged (heex_staged/css_staged/js_staged) content. Staged fields contain unpublished edits.
get_page_speed
ChatGPTPage speed of the live site from Google PageSpeed Insights (Lighthouse lab tests). Every published page, blog post, the blog index and one sample product and collection page (at most 500 per site, home page and busiest pages first) is tested on mobile and desktop on the account's schedule (weekly by default; set in the app's Page speed settings, which can also pause it), and again about ten minutes after a page is published unless that is turned off. Without path: a summary (median score 0-100, LCP, CLS and TBT per strategy, with counts of good / needs_improvement / poor pages) and the pages worst first, each with its latest mobile and desktop result. With path: that page's latest result per strategy with the biggest opportunities in plain English (brightsite_note says where BrightSite already handles part of the fix), real-visitor field data when Google has enough traffic for it, and the score history. Google's ratings: score 90+ good, 50-89 needs improvement, under 50 poor; LCP 2.5s / 4s; CLS 0.1 / 0.25; TBT 200ms / 600ms. status "running" means tests are waiting; call again in a few minutes. Start a test with run_page_speed.
get_post
ChatGPTGet a blog post by ID. Returns both live (content/excerpt) and staged (content_staged/excerpt_staged) fields.
get_product
ChatGPTGet one catalog product with its variants, options, media, and (for a digital product) its downloadable files.
get_rank_tracker_summary
ChatGPTWhere the site ranks in Google's organic search results, and what changed. The rank tracker checks each tracked keyword on the project's schedule (daily, or weekly on one day) from the project's location (a country, state, city or ZIP code) (top 50 results, on mobile and desktop; the numbers reported are mobile). Returns every project (or one, with project_id) with visibility (the percent of possible clicks its keywords get), average_position (of the keywords that rank; lower is better), estimated monthly traffic, keywords in the top 10, each with its change over the last 7 days, counts by position range, and changes (sentences on the biggest moves). usage shows the account's keyword and project limits. Start here; use list_rank_keywords for every keyword's position. Projects are created in the dashboard under SEO > Rank tracker.
get_sales_report
ChatGPTSales for the last days (default 30) against the period before: order count, gross and net revenue, refunds and average order, best sellers by units sold (with their revenue), orders by payment status, and the work waiting (orders to ship, payment issues, low-stock variants). The same figures as the store's Reports page and dashboard; use it for revenue and best-seller questions rather than adding up list_orders. Amounts are in minor units, with a formatted copy under display. Test orders are excluded.
get_site_identity
ChatGPTGet site identity and structured data settings. Includes site title, tagline, business info (type, description, phone, email, address, coordinates), social profiles, opening hours, and price range. These fields power the site-wide Organization/LocalBusiness JSON-LD that's emitted on every page. For per-page schema (FAQPage, Article, Product, raw JSON-LD), see the structured_data key inside params_schema_staged on update_page.
get_social_account
ChatGPTGet one connected social account with live account_info from the platform. For TikTok, account_info is the creator info: creator_nickname, privacy_level_options, comment_disabled, duet_disabled, stitch_disabled and max_video_post_duration_sec. A TikTok post must set options.privacy_level to one of privacy_level_options (there is no default), must not turn on an interaction the creator has disabled, and its video must fit the max duration. Other platforms return an empty account_info. account_info is null and account_info_error says why when the platform cannot be reached or the account needs reconnecting.
get_social_post
ChatGPTGet one social post in full: body, link, media, each account's target (text override, platform options, status, live URL, last error) and, while the post is editable, its validation issues per account. Fix every issue with level error before schedule_social_post; warnings do not block.
get_staging_status
ChatGPTGet the account's staging status: whether a staging site exists, the live and staging sites, and whether the most recent promotion can be undone by restoring the previous site.
get_store
ChatGPTGet the account's store: name, country, currency, whether checkout is on, and the steps still needed before it can take orders. store is null when the account has none yet (setup_store creates it).
get_tax_settings
ChatGPTGet how the store collects tax: the mode (none or manual rates; Stripe Tax is not available with BrightSite's checkout for now, and a store left on it takes no orders), whether prices include tax, and whether tax is ready for checkout. list_tax_rates returns the manual rates.
get_template
ChatGPTPlatform-admin tool. Get one site template by ID or slug, including where its zip is stored.
get_top_pages
ChatGPTGet top pages by views
get_top_referrers
ChatGPTGet top traffic referrers/sources
get_tracking_settings
ChatGPTGet the account's analytics, tag-management, and search-console integration IDs: Google Analytics 4 (GA4), Google Tag Manager (GTM), Facebook Pixel, and Google/Bing site-verification codes. These are account-scoped (one set per account, shared across all of the account's sites and preserved across staging→live promotes) and are injected into the <head> of every published page. Tracking is suppressed on staging previews and in non-production environments, so it only fires on the live site.
get_version
ChatGPTGet a specific version's full content. Use list_versions first to see available versions.
get_visits_over_time
ChatGPTGet visits over time as a time series (views and unique visitors per interval)
import_customers_csv
ChatGPTImport a store's past customers from CSV, e.g. a Shopify customer export or a WooCommerce customer export. Columns are read loosely: Email (required), Name or First Name + Last Name, Phone, Accepts Marketing / Accepts Email Marketing, and an address under Default Address (Shopify), billing_/shipping_ (WooCommerce) or unprefixed (Address1, City, State/Province, Zip/Postcode, Country). Customers are matched by email, never duplicated: an existing customer only has a blank name or phone filled in, their marketing choice is never changed, and an address already saved is not added twice. An unusable address is a warning and the customer is imported without it. Nothing is written unless every row is valid.
import_email_contacts_csv
ChatGPTImport contacts from CSV text with a header row, the same as the dashboard's import: at most 5 MB and 50,000 rows, the plan's contact limit, and a few imports an hour. Only import people who agreed to receive email, and say how in consent (required). New contacts are added as subscribed; existing ones keep their status and get tags merged and blank names filled; addresses that unsubscribed, bounced or complained are skipped. Columns are detected from the headers unless mapping names them.
import_orders_csv
ChatGPTImport a store's past orders from CSV so customer history, spend and verified-purchase review badges carry over. Reads a WooCommerce order export (Order Number, Order Status, Order Date, SKU, Item Name, Quantity, Item Cost, Address 1&2 (Billing)... or WooCommerce's line_items column), a Shopify orders export, or our export_orders_csv shape=lines. One row per line item, grouped by order number. Imported orders keep their original number and date, are marked imported, and send no email, move no stock, charge nothing and fire no events. Lines are linked to products by SKU (then by title); customers are found or created by email. Statuses: completed = paid and fulfilled, processing = paid, on-hold/pending = pending, cancelled, refunded; no status column means paid. An order number already imported is skipped, so a file can be re-imported; a number used by an order placed in this store is an error. Needs the store set up (its currency is the default). Nothing is written unless every row is valid.
invite_team_member
ChatGPTInvite someone to join the account's team by email. Role can be a built-in role (admin, member, viewer) or a custom role's name — see list_org_roles.
list_accounts
ChatGPTList all accounts/organizations you have access to. Use the returned IDs as account_id in other tools.
list_ai_search_runs
ChatGPTA campaign's AI visibility checks, newest first, in every status (pending, running, completed, failed). Use it for the history of the numbers over time or to find a check that failed. Read one in full with get_ai_search_run.
list_collection_products
ChatGPTList the products in a collection, in their merchandised order.
list_collections
ChatGPTList the store's product collections.
list_commerce_templates
ChatGPTList the storefront templates (one per kind: styles, product, collection, cart, checkout, checkout_return, sign_in, register, forgot_password, reset_password, account, order) with their publish state. Use get_commerce_template for the HEEx/CSS. The styles kind is the store styles stylesheet: CSS only, loaded on every storefront page, styling the cart, checkout and account blocks through their bs- classes (bs-button--primary, bs-form__input, bs-cart__summary, ...) and the --bs-store-* variables at its top.
list_components
ChatGPTList all reusable components. Embed in pages/layouts via component("slug") in HEEx templates.
list_customers
ChatGPTList the store's customers (shoppers who registered or checked out), newest first, with their order count and spend.
list_discounts
ChatGPTList the store's discount codes, newest first, with how many times each has been used and their scope, limits and stacking.
list_dns_records
ChatGPTList every DNS record in a custom domain's BrightSite-managed zone (A, CNAME, MX, TXT and the rest) — the same records shown on the Domains page. Only works for domains with managed_dns: true; for domains on a customer's own DNS provider, use get_dns_instructions instead. Records flagged protected: true are managed by BrightSite (the apex/www CNAMEs and the _acme-challenge delegations) and cannot be changed.
list_doc_pages
ChatGPTList all documentation pages in sidebar order. Doc pages form a tree — use parent_id and position to understand the hierarchy.
list_domains
ChatGPTList the account's custom domains: the primary (canonical) domain and any alias domains that 301-redirect to it. Shows each domain's lifecycle status (provisioning/active/removing), SSL certificate state across its apex+www pair, whether an alias is currently redirecting, and whether BrightSite manages its DNS zone. An account with no custom domains serves from its BrightSite subdomain.
list_email_campaigns
ChatGPTEmail campaigns send marketing email to the business's subscribed contacts. Workflow: list_email_segments to pick an audience, create_email_campaign (from blocks, from_post_id "latest" for a newsletter around the newest blog post, or html for a code email), check preflight in the result, fix issues with update_email_campaign, then schedule_email_campaign. Read results with get_email_campaign_report. Lists campaigns, newest first, with counts per status.
list_email_contacts
ChatGPTList the account's email contacts, newest first, with counts per status and the plan's contact limit. Only subscribed and pending contacts count toward the limit, and campaigns go to subscribed contacts only. Filter by search (email or name), status, tag or segment_id.
list_email_segments
ChatGPTList the account's segments (saved filters over contacts by tags and source), each with how many subscribed contacts a campaign to it would reach, plus all_subscribed for a campaign to everyone. Pass a segment's id as segment_id to create_email_campaign. Change segments with create_email_segment, update_email_segment and delete_email_segment.
list_email_sending_domains
ChatGPTThe account's sending domains, each with its status and the DNS records to add at its DNS host (DKIM CNAMEs, MAIL FROM MX and SPF, and DMARC when missing). Until a domain is verified, campaigns go from a shared BrightSite address.
list_error_pages
ChatGPTList all error pages with their publish status
list_form_deliveries
ChatGPTList notification deliveries (one per email recipient or webhook action per submission), newest first. Use it to find failing webhooks or emails. Test sends are excluded unless include_tests is true.
list_form_submissions
ChatGPTList submissions for a form
list_forms
ChatGPTList all forms with their publish status
list_gift_cards
ChatGPTList the store's gift cards, newest first, with balance and status. Shows only the last four characters of each code.
list_google_review_widgets
ChatGPTList the account's saved Google Reviews widgets. A saved widget is a named display config ("Hero badge", "Homepage wall", "Reviews page") with its own layout, theme, colors and filters, and is the way to give one placement its own look. Place one with its own helper, each item's snippet: the widget with slug hero-badge is reviews_hero_badge(), and reviews_hero_badge(%{layout: "grid"}) overrides one option (inline options still win over the widget's values). reviews(%{widget: "hero-badge"}) does the same and still works. The Default widget is the account settings (get_google_reviews_settings), placed with a plain reviews(), and is not in this list.
list_layouts
ChatGPTList all page layouts. Layouts wrap pages with shared structure (header, nav, footer). Assign via a page's layout_id, or set one as default.
list_local_search_scans
ChatGPTA campaign's scans, newest first, in every status: completed, running, pending and failed, including scans of keywords since removed. Use it for the full history (get_local_search_scan lists only a keyword's six most recent), to follow a keyword over time, or to find a scan that failed. Each row has the scan's numbers; read one in full with get_local_search_scan.
list_media
ChatGPTList uploaded media files with URLs. Use returned file IDs in page/component templates: media(file_id) for responsive images, media(file_id, width: 800, aspect: "16:9") for cropped/resized, media_url(file_id) for raw URLs. Crop options: width, height, aspect ("16:9"), fit ("crop"/"contain"/"cover"), smart (focal point), align ("top"/"bottom"/"left"/"right").
list_media_folders
ChatGPTList media folders
list_orders
ChatGPTList the store's orders, newest first, as slim rows (no lines or addresses) with what each discount code took off. Call get_order for one order's lines, addresses, shipments and refunds. search matches the buyer's email or name, the order number, or a product title or SKU on the order.
list_org_roles
ChatGPTList the account's roles — the built-in roles (admin, member, viewer) and any custom roles — with their permissions ("resource:verb" strings) and member counts
list_pages
ChatGPTList all CMS pages with their publish status
list_pending_invitations
ChatGPTList team invitations that have been sent but not yet accepted
list_posts
ChatGPTList all blog posts with their publish status
list_products
ChatGPTList the store's catalog products, without their description, metafields or SEO copy. Call get_product for one product's full record with its variants, options and media.
list_rank_keywords
ChatGPTA project's tracked keywords with their Google position on mobile (null = not in the top depth, the number of results the latest check looked at: 20, 50 or 100; checks look deeper the lower a keyword ranks), whether desktop checks are on (desktop) and desktop_position (null = not found, or desktop off or not checked yet), change since the check before ("+3" up, "-2" down, "new", "entered" when it started ranking, "lost" when no longer found), the ranking URL, best position ever, tags, monthly search volume, keyword difficulty (0-100), estimated traffic, the search features the site owns (ai_overview when an AI Overview cites it, featured_snippet, local_pack and so on) and cannibalized when more than one of the site's pages rank. Sorted best position first, unranked last.
list_redirects
ChatGPTList all URL redirects for the account
list_reviews
ChatGPTList product reviews. Reviews are moderated: a new one is pending and invisible on the storefront until approved, so pass status "pending" for the moderation queue and "approved" for what shoppers actually see. Ordered newest first.
list_shipping_zones
ChatGPTList the store's shipping zones in position order, with their methods (rates). Only one zone's methods are offered for an address: the most specific matching zone wins (postcode match, then region, then country, then rest of world), and equally specific zones are settled by position (lower first, see move_shipping_zone). A zone with no active method is skipped. A shopper no zone covers cannot check out.
list_social_accounts
ChatGPTList the social media accounts connected to this BrightSite account: Instagram professional accounts, Facebook Pages, Google Business Profile locations, LinkedIn members and pages, X and TikTok. Accounts can only be connected in the BrightSite dashboard (Social > Accounts), because connecting needs the platform's sign-in in a browser; there is no MCP tool for it. Accounts with status needs_reconnect fail every post until someone reconnects them there. Workflow for posting: 1) list_social_accounts; 2) upload images or video with request_upload + complete_upload, or pick existing ones from list_media; 3) create_social_post to save a draft; 4) get_social_post and fix every issue with level error; 5) schedule_social_post, or publish_social_post_now.
list_social_posts
ChatGPTList social posts, newest scheduled time first (drafts with no time come first). Each item shows the post's status and one target per account with that account's own status, the live post's URL once published, and the last error.
list_staging_sites
ChatGPTList the account's sites by type: the live site, the staging site (if any), and archived sites (previous live sites that can be restored). Each includes a preview_url. Use this to see whether a staging site exists, to get a site ID to pass as the site param on content tools (to author into staging) or to restore_staging_site, and to get the staging preview_url for screenshot-verifying before promoting. Note: the preview_url requires a logged-in org member — unauthenticated requests (e.g. a headless screenshot without the session cookie) get a 404 by design, so the staging host's existence isn't revealed.
list_tax_rates
ChatGPTList the store's manual tax rates, used when tax_mode is manual. A rate for a region wins over the country-wide rate.
list_team_members
ChatGPTList the account's team members with their roles (built-in or custom)
list_templates
ChatGPTPlatform-admin tool. List every site template, including disabled ones, with its taxonomy, derived features, preview image and how many live sites were created from it.
list_versions
ChatGPTList version history for any entity. Returns versions ordered by newest first.
mark_order_paid
ChatGPTRecord that a pending manual order was paid outside Stripe (cash, check, bank_transfer or other). Uses up its stock and emails the buyer their receipt. Confirm with the user first, then pass confirm: true.
move_doc_page
ChatGPTMove a documentation page to a new parent and/or position in the sidebar. This rewrites the page's URL and every descendant's URL, leaving a redirect behind for each, so existing links keep working.
move_file
ChatGPTMove media file(s) into a folder and/or rename them, in place. The file ID and all its URLs are preserved, so every existing reference (post feature images, page/component media() calls, site logo/icon) keeps working — unlike re-uploading, which mints a new ID and breaks them. Pass id for one file or ids for a bulk move (both accepted; ids is the way to re-file a whole library at once). Set folder_id to a folder ID to file them there, or "root" to unfile them (move to no folder). name renames and is only valid with a single id. Omitting folder_id leaves the folder unchanged (rename-only). Moving a file that is already in the target folder is a no-op, not an error, so re-sending IDs that already moved is harmless. On a bulk move, all IDs are checked before anything moves, so an unknown ID moves nothing at all. Bulk moves are NOT atomic beyond that check: if an individual move fails partway through (e.g. a file or the target folder deleted concurrently), the files already moved stay moved. The error then reports how many landed and lists the exact ids to retry with — follow that list rather than re-sending the original one. The failing file is kept in that list when it still exists and needs another attempt, and dropped only when it is genuinely gone (re-sending an unknown ID makes the whole call move nothing). Moving never destroys a file: IDs and URLs are preserved. Deleting a folder is a different matter — it permanently deletes the files inside it, so use this tool to move any files you want to keep out of a folder before deleting it.
move_shipping_zone
ChatGPTReorder shipping zones. Order only matters between zones that match an address equally well (two country zones both listing FR, say): the earlier one wins. Pass direction to move one place, or position for a 0-based place in the list. Renumbers the list 0..n and returns it.
pause_email_campaign
ChatGPTPause a sending email campaign. Nothing more goes out until resume_email_campaign.
preview_org_deletion
ChatGPTPlatform-admin tool. Shows what deleting an account would destroy: members, sites, the Stripe subscription, the store's Stripe Connect account, custom domains and their managed DNS zones (flagging email records), and templates made from it. Changes nothing. Call it before delete_org and show the user the result.
promote_domain
ChatGPTMake an alias domain the account's primary (canonical) domain. THIS CHANGES THE SITE'S CANONICAL URL: search engines will see every page move to the new domain, sitemaps and structured data re-issue under it, and the former primary becomes an alias that 301-redirects — preserving its link equity. Only an alias whose certificate is active on the account's canonical variant (apex or www, per the site's www preference) can be promoted. Roles swap atomically; no certificates are reissued and neither hostname goes down.
promote_staging
ChatGPTPromote the account's staging site to live: the public domain will serve the staging content, the previously-live site is archived (restorable via restore_staging_site), and account-level data (domain, analytics, form submissions, team, billing) is unaffected. Runs in the BACKGROUND — it validates the staging content and takes a full backup of the live site first, which takes a while — so this returns immediately with status "promoting". Poll get_staging_status until the staging site is gone and the live site is the former staging site.
publish_blog_listing_design
ChatGPTPublish the blog listing page design — copies staged content to live fields.
publish_blog_post_card_design
ChatGPTPublish the blog post card design — copies staged content to live fields.
publish_blog_related_posts_design
ChatGPTPublish the blog related posts design — copies staged content to live fields.
publish_blog_template
ChatGPTPublish the blog post template — copies staged content to live fields.
publish_component
ChatGPTPublish a component — copies staged content to live fields.
publish_doc_page
ChatGPTPublish a documentation page — copies staged content to live fields.
publish_docs_article_design
ChatGPTPublish the docs article design — copies staged content to live fields.
publish_docs_index_design
ChatGPTPublish the docs landing page design — copies staged content to live fields.
publish_error_page
ChatGPTPublish an error page — copies staged content to live fields.
publish_form
ChatGPTPublish a form — copies staged content to live fields.
publish_global_code
ChatGPTPublish global code — copies staged CSS/JS/Tailwind config to the live fields so changes appear on the public site.
publish_layout
ChatGPTPublish a layout — copies staged content to live fields.
publish_page
ChatGPTPublish a page — copies staged content (heex_staged/css_staged/js_staged) to the live fields so changes appear on the public site.
publish_post
ChatGPTPublish a blog post — copies staged content to live fields.
publish_social_post_now
ChatGPTValidate a social post and publish it to every account on it right now. This posts publicly on the platforms and cannot be undone from BrightSite: deleting the post later does not remove it from them. If any account fails validation nothing is sent and the error lists each problem. Publishing runs in the background; call get_social_post to see each account's result and live URL. On a failed or partially published post it goes again only to the accounts that failed; accounts it already reached are skipped, and unconfirmed ones are left for retry_social_post_target.
refresh_template
ChatGPTPlatform-admin tool. Replace a site template's content with a fresh export of an account's live site, for example after fixing the site the template was built from. Review the site first: the whole live site, product catalog included, replaces the stored zip. Features are derived again and the patch version is bumped. The preview is kept unless preview_file_id is given. Sites already created from the template are not changed.
refund_order
ChatGPTRefund money to the buyer through Stripe, out of the merchant's balance. An order marked paid by cash, check, bank transfer or other (payment_method set) has no Stripe charge: its refund is only recorded, as paid back outside the store, and the merchant returns the money themselves. amount is in minor units (cents for USD, so 1500 is $15.00) and cannot exceed the order's refundable_amount (from get_order). restock returns the items to stock and needs line_quantities, or a refund of the full remaining amount. When Stripe will not refund the order's card any more (get_order failed_refund.retryable is false), pass outside_stripe: true to record a refund the merchant pays back themselves; nothing is sent to Stripe and the buyer is not emailed. Refunding units of a gift card line (or the full amount) disables the cards those units issued; a partly spent card refuses unless allow_spent_gift_cards is true, and a partial refund that leaves gift card units out must leave their value refundable. Money cannot be taken back once refunded: confirm the amount with the user first, then pass confirm: true.
remove_domain
ChatGPTRemove a custom domain from the account. The domain stops routing immediately and its Cloudflare resources are torn down in the background; the hostname stays reserved to the account until teardown is confirmed, then becomes claimable by anyone. Removing the primary is refused while alias domains still point at it — promote a replacement first (promote_domain), or remove the aliases. Removing the last primary makes the site serve from its BrightSite subdomain again.
remove_email_sending_domain
ChatGPTRemove a sending domain and release it at the email provider. Refused while a scheduled, sending or paused campaign sends from it.
remove_products_from_collection
ChatGPTTake one or more products out of a collection. The products stay in the catalog; only their membership of this collection goes. Products not in the collection are skipped.
remove_rank_keywords
ChatGPTStop tracking keywords in a project, deleting their position history. This cannot be undone.
remove_team_member
ChatGPTRemove a member from the account's team. You cannot remove yourself, and the last admin cannot be removed.
reorder_collection_products
ChatGPTSet the merchandised order of a collection's products, the order its page shows them in under the default sort. Pass product IDs first shown first; products left out keep their current order after the listed ones.
reorder_product_media
ChatGPTSet the order of a product's gallery images. Pass the product media ids (the id in get_product's media list, not the file_id) first shown first. Images left out keep their current order after the listed ones.
request_upload
ChatGPTGet a presigned URL for uploading a file from a remote source (e.g. downloading from a URL). Step 1 of 2: call this to get an upload_url and file_id, then HTTP PUT the raw file bytes to upload_url with the correct Content-Type header. After the PUT succeeds, call complete_upload with the file_id to create the media record. For local files, use upload_file instead.
resend_invitation
ChatGPTResend the invitation email for a pending team invitation. See list_pending_invitations.
resend_order_confirmation
ChatGPTEmail the buyer their order receipt again, e.g. when they lost it. Not for a canceled or unpaid order.
reset_commerce_template
ChatGPTReset a storefront page template's staged HEEx/CSS/JS to the packaged default. The live design is untouched until you publish_commerce_template.
restore_staging_site
ChatGPTRestore a previously-live (archived) site as the account's live site: the archived site becomes live and the current live site is archived (a pointer flip — fast and synchronous). Pass site_id to restore a SPECIFIC archived site (use list_staging_sites to find it); OMIT site_id to undo the most recent promotion (restore the site it archived).
restore_version
ChatGPTRestore an entity to a previous version. Writes version content to BOTH live and staged fields. Does NOT create a new version — the next publish will.
restyle_site
ChatGPTRestyle the whole site from one line describing the look you want, for example "an 18th century printed book", "a cyberpunk city in the rain" or "like Stripe". Sets the palette, typefaces, corner rounding, borders, shadows and spacing together, and every page, layout, component, blog post, docs page and storefront block follows, because they all read the same tokens. Use this rather than update_design when the user describes a FEELING; use update_design when they name specific values. Changes are staged: call publish_design to push live. Returns "on brief" and "coherent" scores. Report both, including when they are low, rather than presenting a weak result as a success. A bare brand name is a thin brief and comes back with needs_detail set, asking for three adjectives; pass those back in the brief rather than guessing.
resubscribe_email_contact
ChatGPTResubscribe an unsubscribed contact who asked to receive email again. consent (required) says how they asked and becomes their consent record. Bounced and complained contacts cannot be resubscribed. The plan's contact limit applies.
resume_email_campaign
ChatGPTResume a paused email campaign: sending continues to the recipients it has not reached. Runs the preflight check and today's sending cap first, and refuses with the issues to fix.
retry_form_delivery
ChatGPTSend a failed or cancelled notification delivery again, using the action's current settings (fix the webhook with update_form first). Pass delivery_id for one, or retry_all_failed: true to retry every failed delivery (up to 500), optionally narrowed by form_id, action_id and since. Earlier attempts are kept.
retry_social_post_target
ChatGPTPublish one account of a social post again after it failed or ended unconfirmed. Target IDs come from get_social_post. Fix the cause first (reconnect the account). Refused for a canceled post. WARNING: unconfirmed means the platform got the publish request but never answered, so the post may already be live. Check the profile before retrying an unconfirmed target, or it may post twice.
run_local_search_scan
ChatGPTRescan one keyword now, live. Each point is a paid Google Maps search, so the account gets a limited number of manual rescans a month across its campaigns (manual_rescans_left in get_local_search_summary; they start again on the 1st), and scans pause for the day when a daily spend limit is reached. Results arrive over a minute or two: call get_local_search_scan with the returned scan_id to read them (status running until done). Scheduled scans run on their own, and new keywords get their first scan when added; use this after changing the area or the business's listing.
run_page_speed
ChatGPTTest the live site's page speed now with Google PageSpeed Insights, on mobile and desktop. Without path every page is queued (once an hour per site); with path only that published page (a few dozen single-page tests an hour per site). Each test takes 10 to 30 seconds and a whole site takes several minutes, so read the results afterwards with get_page_speed. Pages are also tested on the account's schedule (weekly by default) and about ten minutes after each publish, so this is only needed right after a fix.
run_rank_check
ChatGPTCheck positions now, for every keyword in a project or one (on mobile, and on desktop for keywords with desktop on). Checks run on their own on the project's schedule, and this works while they are paused too; use it after changing the site or adding keywords. Each keyword is a paid search, so a project gets a few manual checks a day (manual_checks_left_today in get_rank_tracker_summary). Results are usually ready within a few minutes: read them with list_rank_keywords (checking is true until done).
schedule_email_campaign
ChatGPTSchedule a draft email campaign to send at scheduled_at, or right away with send_now. This emails every recipient in its audience in the business's name and cannot be recalled once sent, so confirm with the user first. The preflight check runs first; if anything blocks sending, nothing is scheduled and the error says what to fix. Recipients are counted when it starts. unschedule_email_campaign returns a scheduled campaign to draft.
schedule_social_post
ChatGPTValidate a social post and schedule it to publish at scheduled_at (or the time already saved on it). Every account is checked against its platform's rules first; if any fails, nothing is scheduled and the error lists each problem with its platform. It then goes out within a minute of the time, to every account on it. To post right away use publish_social_post_now. To stop it, unschedule_social_post (back to draft) or cancel_social_post.
search_replace
ChatGPTSurgically find-and-replace text within a specific field of any entity. Avoids re-uploading entire content bodies. Operations are applied sequentially (output of op N is input to op N+1). Changes go to staged fields only — call the appropriate publish tool to push live.
send_email_campaign_now
ChatGPTSend a draft or scheduled email campaign right away to everyone in its audience, in the business's name. Sent email cannot be recalled, so confirm with the user first. Runs the same preflight as the dashboard's review screen; if anything blocks sending, nothing is sent and the error lists each issue to fix.
send_email_test
ChatGPTSend an email campaign as a test to up to 5 addresses: the subject starts with [Test], nothing is tracked and it counts toward no limit. Addresses that unsubscribed, bounced or complained are refused. Rate limited per user.
set_gift_card_balance
ChatGPTSet a gift card's balance by hand (correct a mistake, top it up). The difference is recorded in the card's history. Changes spendable money: confirm with the user first, then pass confirm: true.
set_indexnow_enabled
ChatGPTTurn the account's automatic IndexNow submission on or off. When on (the default), publishing, updating or deleting a page, post or redirect submits the changed URL to participating search engines. Turning it off stops automatic submission but keeps the verification key file served, so third-party tools that submit on the site's behalf keep working. This does not affect whether the site is indexable — it only controls whether BrightSite pushes changes.
set_rank_keywords_desktop
ChatGPTTurn desktop checks on or off for tracked keywords. Every keyword is checked on mobile; with desktop on it is checked on desktop too and counts twice against the account's keyword limit. Turning it on starts a first desktop check now (a paid search); turning it off keeps the desktop history.
set_submission_spam
ChatGPTMark a form submission as spam or not spam. Marking spam moves it to the spam folder. Marking not spam moves it back to the inbox and sends its email and webhook notifications if they were held (once; a submission whose notifications already went sends nothing again). The spam check's own verdict is kept beside the override.
setup_store
ChatGPTCreate the account's store if it has none, so add-to-cart works on the storefront. Call it when building a shop. The name, country and currency start as suggestions from the site identity; pass them to change the suggestions. The merchant must confirm country and currency on the store settings page before connecting Stripe, and they cannot change after that, so this tool never confirms them and errors once they are confirmed. Checkout stays off until the merchant finishes setup.
staging_diff
ChatGPTSummarize what differs between the account's staging site and its live site: per-content-type counts of added/modified/removed items, plus 'drift' (live items edited after the staging copy was made, which a promote would replace).
submit_all_to_indexnow
ChatGPTAsk search engines to recrawl every published page, blog post and the blog listing for this account, in one full-site IndexNow submission. Use it once after connecting a custom domain or re-enabling instant indexing — routine content changes are submitted automatically and need no call. Returns an error when the account is not eligible (automatic submission off, or no live custom domain), because a submission would be silently discarded.
suggest_ai_search_prompts
ChatGPTSuggest questions to track in AI visibility, as customers would ask an AI assistant. Pass campaign_id for more questions for a campaign (never repeating one it already asks), or category, city and region for a new campaign. ChatGPT is only asked questions that name the city or state, so most suggestions do. Nothing is saved: add them with update_ai_search_prompts, or pass them as prompts to create_ai_search_campaign.
sync_google_reviews
ChatGPTFetch the latest reviews from the account's connected Google Business Profile now (they also refresh automatically every few hours). Returns an error with connect instructions if Google isn't connected yet.
tag_email_contacts
ChatGPTAdd tags to contacts: contact_ids, or every contact matching the filters (search, status, tag, segment_id), or all: true for every contact.
unpublish_doc_page
ChatGPTUnpublish a documentation page — reverts it to draft so it is no longer visible on the public docs site. Its published children stay reachable.
unpublish_error_page
ChatGPTUnpublish an error page — reverts it to draft status.
unpublish_page
ChatGPTUnpublish a page — reverts it to draft status so it's no longer visible on the public site.
unpublish_post
ChatGPTUnpublish a blog post — reverts it to draft status so it's no longer visible on the public site.
unschedule_email_campaign
ChatGPTMove a scheduled email campaign back to draft so it is not sent. A campaign already sending can be paused with pause_email_campaign or canceled with cancel_email_campaign.
unschedule_social_post
ChatGPTMove a scheduled social post back to draft. It keeps its content and planned time; schedule it again with schedule_social_post.
unsubscribe_email_contact
ChatGPTUnsubscribe a contact: they get no more campaigns and the address goes on the suppression list. resubscribe_email_contact undoes it only if the person asks.
untag_email_contacts
ChatGPTRemove tags from contacts: contact_ids, or every contact matching the filters (search, status, tag, segment_id), or all: true for every contact.
update_ai_search_campaign
ChatGPTChange an AI visibility campaign: the business's name, aliases, domains, category, city, region, location, cid or phone, whether Claude (API) is asked, or the check schedule (day, hour, time zone and frequency), or pause or resume automatic checks. Pass only what changes; read the current values from settings in get_ai_search_summary. A schedule change moves the next automatic check. Changes apply from the next check; questions are changed with update_ai_search_prompts.
update_ai_search_prompts
ChatGPTAdd, remove or reorder a campaign's questions (at most max_prompts). Removals happen first, so a full campaign can swap questions in one call; on an error nothing changes. Questions are matched by text (ignoring case) or ID. Past checks keep the questions they asked. order sets the display order: list questions first to last, and any left out keep their order after the listed ones. chatgpt_skips lists the questions ChatGPT will not be asked because they name neither the city nor the state. New questions are first asked at the next check, or now with run_ai_search.
update_blog_listing_design
ChatGPTUpdate the blog listing page design. Changes go to staged fields — call publish_blog_listing_design to push live.
update_blog_post_card_design
ChatGPTUpdate the blog post card design. Changes go to staged fields — call publish_blog_post_card_design to push live.
update_blog_related_posts_design
ChatGPTUpdate the blog related posts design. Changes go to staged fields — call publish_blog_related_posts_design to push live.
update_blog_settings
ChatGPTUpdate blog-wide settings. Use enabled to turn the blog on/off entirely, listing_url to configure where the blog index lives, and other fields to control display, comments, social sharing, and layout assignments. Changes apply immediately — no staging/publish flow.
update_blog_template
ChatGPTUpdate the blog post template. Changes go to staged fields — call publish_blog_template to push live.
update_builtin_content
ChatGPTUpdate a builtin component's (site navigation, footer, or cookie consent banner) content and settings — the same values the in-app Navigation/Footer/Cookie Consent editors manage. Changes apply LIVE immediately (no publish step; use a staging site to stage them). values is a JSON object string; keys merge into the current values, omitted keys are untouched, and collections replace wholesale. Read get_builtin_content first for current values and the authoritative props_schema. NAVIGATION values: items (list of {label, page (page ID) OR url, new_tab, children, promo_*}), buttons (list of {label, page/url, new_tab, style: solid|outline}), layout (links-right|links-center|links-left|stacked), show_logo (bool), dropdown_style (dropdown|mega), sticky (bool). MENU NESTING (max 3 levels): a top-level item's children are its dropdown items. Each dropdown item is either a plain link (default, or type: "link") or a SECTION — type: "section", whose label is a heading and whose own children are that section's links. A section is how you build a mega menu's labelled columns; it is not clickable, so give it no page/url. A section may also carry image (media file ID) — an optional picture rendered ABOVE its heading, for image-led menu columns; omit or leave "" for none. Sections are the LAST level: their links take no children. Omitting type means "link". A section must have at least one link. MEGA-MENU PANEL (optional, on TOP-LEVEL items only, all default "" and render nothing when empty): promo_image (media file ID), promo_label (e.g. "MOST POPULAR"), promo_link_label (e.g. "VIEW ALL SERVICES"), promo_page (page ID) / promo_url. Set dropdown_style to "mega" for the full-width panel these are designed for. FOOTER values: columns (list of {title, links: [{label, page/url, new_tab}]}), layout (columns|brand|centered|minimal), show_logo (bool), copyright (text, "" = automatic), social_style (icon|icon_text|text|hidden). Footer social ACCOUNTS come from site identity (update_site_identity social_profiles), not from here. COOKIE_CONSENT values: enabled (bool — when true the banner shows automatically on every page of the site, no layout edit needed), message (text), accept_label, show_decline (bool), decline_label, policy_label, policy_page (page ID) / policy_url, position (bottom|bottom-left|bottom-right), theme (dark|light). Opt-out model: third-party trackers (GA4/GTM/Pixel) run until a visitor declines, then stop from their next page load; BrightSite's own cookieless analytics is unaffected. Set a link with page (internal page ID — survives renames) or url (external/custom path); a non-empty url overrides page. Invalid keys or option values return a descriptive error.
update_collection
ChatGPTUpdate a collection's own fields. Status changes go through set_collection_status; membership through add_products_to_collection, remove_products_from_collection and reorder_collection_products. Changing the slug writes a 301 redirect from the old collection URL automatically.
update_commerce_template
ChatGPTUpdate a storefront page template. Changes go to staged fields, call publish_commerce_template to push live.
update_component
ChatGPTUpdate a reusable component. Content changes go to staged fields — call publish_component to push live.
update_design
ChatGPTChange the site's design. This is the ONE call that restyles everything: it regenerates the Tailwind theme block, the storefront's variables and the flags on <html>, so pages, layout chrome, components, blog, docs and the cart all follow. Fields you leave out keep their current value. Changes are staged: call publish_design to push live. Colors are hex strings. Only color_brand, color_ink and color_surface need setting: color_brand_hover, color_brand_soft, color_brand_contrast, color_ink_muted, color_surface_raised, color_canvas, color_rule, color_success, color_warning and color_danger are DERIVED from those three in OKLCH and keep following them. Set one of those only to pin it, which stops it tracking the brand. Other fields: font_display, font_sans, font_mono (family names), google_families ([{family, weights}]: the WEIGHTS to load for a family that font_display, font_sans or font_mono already names; any other family is dropped and named in the result's warnings, so to add a Google font set one of those three to its name), font_size_base (rem), font_scale, font_weight_body, font_weight_heading, font_tracking_heading (em), radius_control and radius_surface (rem), border_width (px), border_style (full | quiet | none), shadow_surface and shadow_overlay (none | soft | medium | hard | emissive), space_unit and space_section (rem), mode (light | dark), surface_finish (flat | highlight | gradient | glass), texture (none | grid | dots | paper | noise).
update_discount
ChatGPTChange a discount code. Only the fields passed change; each id list passed replaces the whole list. Pass active: false to pause it; its usage count is kept.
update_doc_page
ChatGPTUpdate a documentation page. Body edits are staged — call publish_doc_page to make them live. To move a page in the tree, use move_doc_page instead: changing the parent rewrites URLs and needs its own operation.
update_docs_article_design
ChatGPTUpdate the docs article design — the skin shared by every doc page. Changes go to staged fields; call publish_docs_article_design to push live.
update_docs_index_design
ChatGPTUpdate the docs landing page design. Changes go to staged fields — call publish_docs_index_design to push live.
update_docs_search_design
ChatGPTUpdate the docs search results design. Changes go to staged fields; call publish_docs_search_design to push live.
update_docs_settings
ChatGPTUpdate documentation settings. base_url is NOT settable here — moving the docs root rewrites every doc page's URL and emits redirects, so it is a separate operation rather than a field write.
update_email_contact
ChatGPTChange a contact's first_name, last_name or tags. tags replaces the whole list; to add or remove some, use tag_email_contacts or untag_email_contacts.
update_email_segment
ChatGPTChange a segment's name or rules. Only the fields you pass change. Campaigns using it are counted again when they send.
update_email_settings
ChatGPTChange Email settings. Only the fields you pass change. physical_address cannot be blank. With double_opt_in, people who sign up through forms confirm by email before they are subscribed. unsubscribe_page customizes the page recipients land on after clicking Unsubscribe.
update_error_page
ChatGPTUpdate an error page. Content changes go to staged fields — call publish_error_page to push live.
update_form
ChatGPTUpdate a form. Content changes go to staged fields — call publish_form to push live.
update_fulfillment
ChatGPTCorrect a shipment's carrier or tracking details. What the shipment contains cannot change: cancel it and record a new one instead.
update_global_code
ChatGPTUpdate global CSS, JavaScript, and/or Tailwind config that applies to all pages on the site. Changes go to staged fields — call publish_global_code to push live.
update_google_reviews_settings
ChatGPTUpdate the Google Reviews widget's display settings for the account. These apply to every reviews() / review_badge() placement (unless overridden per-instance in code). Only the display config is settable here — the Google account connection itself is a browser-only step (see get_google_reviews_settings). Colors are hex like #14b8a6; pass an empty string to clear a color and fall back to the theme default. Custom colors only take effect when theme is 'custom'.
update_layout
ChatGPTUpdate a page layout. Content changes go to staged fields — call publish_layout to push live.
update_local_search_campaign
ChatGPTChange a campaign's name, area or scan schedule (day, hour, time zone and frequency), or pause or resume its automatic scans. Pass only what changes; read the current values from settings in get_local_search_summary. Moving or resizing the grid (center, grid_size, spacing_miles or shape) starts the switched-off points over: the ones in excluded_points, plus the points on water while skip_water is on. Past scans keep the area they were scanned with. The new area is used from the next scan; rescan a keyword now with run_local_search_scan. Keywords are changed with update_local_search_keywords.
update_local_search_keywords
ChatGPTAdd, remove or reorder a campaign's tracked keywords (at most max_keywords per campaign, from get_local_search_summary). Removals happen first, so a full campaign can swap keywords in one call. Matching ignores case; keywords already tracked are skipped. Removing a keyword keeps its past scans. New keywords are first scanned at the next scheduled scan, or now with run_local_search_scan. order sets the display order: list keywords first to last, and any left out keep their order after the listed ones.
update_member_role
ChatGPTChange a team member's role. Role can be a built-in role (admin, member, viewer) or a custom role's name — see list_org_roles. The last admin cannot be demoted.
update_order_notes
ChatGPTSet an order's notes. internal_note is private to the merchant; customer_note is shown to the shopper on their order page. Pass an empty string to clear one. Each change is logged on the order's timeline.
update_org_role
ChatGPTUpdate a custom team role's name, description, or permissions. Built-in roles (admin, member, viewer) cannot be edited.
update_page
ChatGPTUpdate a CMS page. Content changes go to staged fields — the live site is NOT affected until you call publish_page.
update_post
ChatGPTUpdate a blog post. Content changes go to staged fields — call publish_post to push live.
update_rank_project
ChatGPTChange when a rank tracking project's automatic checks run, or pause and resume them. check_frequency daily checks every keyword once a day at scan_hour; weekly checks once a week on scan_weekday at scan_hour (fewer paid searches, a point a week in the charts). paused true stops automatic checks and keeps the schedule (run_rank_check still works); paused false resumes them from the next scheduled slot. Pass only the fields to change; the result has the project with its schedule and a message.
update_redirect
ChatGPTUpdate an existing URL redirect
update_review
ChatGPTEdit a review's rating or text. Moderation status is separate — use set_review_status.
update_shipping_method
ChatGPTChange a shipping method's name, type, rate, bands, thresholds or whether it is offered. rate_tiers replaces all bands.
update_shipping_zone
ChatGPTChange a shipping zone's name or coverage. Each list passed replaces the whole list; omitted ones are kept. Only one zone's methods are offered for an address: the most specific matching zone wins (postcode match, then region, then country, then rest of world), and equally specific zones are settled by position (lower first, see move_shipping_zone). A zone with no active method is skipped.
update_site_identity
ChatGPTUpdate site identity and structured data settings. Changes affect the site's <title>, meta tags, JSON-LD structured data, and social share previews. Business fields (type, description, phone, email, address, coordinates, social profiles, opening_hours) populate the Organization/LocalBusiness schema that's emitted in JSON-LD on every page (cross-referenced from each page's WebPage via a stable @id). For per-page structured data (FAQPage, Article, Product, raw JSON-LD), use the structured_data key inside params_schema_staged on update_page instead.
update_social_post
ChatGPTEdit a draft, scheduled, failed or partially published social post. Only the fields you pass change. The post is saved as a draft: a scheduled post is unscheduled and must be scheduled again with schedule_social_post. social_account_ids keeps each remaining account's text override and options; targets replaces them. Targets already published are never changed. Same fields, limits and target options as create_social_post.
update_tax_rate
ChatGPTChange a manual tax rate.
update_tax_settings
ChatGPTChange how the store collects tax. tax_mode: none (not collecting) or manual (uses the tax rates from create_tax_rate). Stripe Tax is not available with BrightSite's checkout for now, so stripe is refused. tax_inclusive says whether prices already include tax. origin_address saves a head office for Stripe Tax (line1, line2, city, state, postal_code; the country is always the store's) and pushes it to Stripe; checkout does not use it.
update_template
ChatGPTPlatform-admin tool. Update a site template's details: name, description, taxonomy, enabled, default, or the preview image. The slug cannot be changed. To replace the template's content from a site, use refresh_template.
update_tracking_settings
ChatGPTUpdate the account's analytics, tag-management, and search-console integration IDs. Changes apply to every published page across all of the account's sites (the scripts/meta tags are injected into the <head>) and persist across staging→live promotes. Pass an empty string to clear a field. IDs are format-validated: GA4 must look like G-XXXXXXXXXX, GTM like GTM-XXXXXXX, Facebook Pixel a 10–20 digit number. Note: GA4 and GTM can double-count pageviews if you also configure GA4 inside GTM — prefer one or the other unless you know they're deduplicated.
update_variant
ChatGPTUpdate a variant's price, SKU, stock or weight. For a simple single-price product this is how you change the price after create_product — get_product returns the default variant's id.
upload_file
ChatGPTUpload a file from a local file path. Supports images (jpg, png, webp, gif, svg, ico), videos (mp4, mov, webm), and documents (pdf, doc/docx, xls/xlsx, ppt/pptx, csv, txt, zip). Returns a file ID — use in templates with media(file_id) for responsive images, media(file_id, width: 800, aspect: "16:9") for cropped/resized, video(file_id) for video embeds, or media_url(file_id) for raw URLs.
add_domain
Claudeadd_products_to_collection
Claudecancel_invitation
Claudecomplete_onboarding
Claudecomplete_upload
Claudecreate_collection
Claudecreate_component
Claudecreate_dns_record
Claudecreate_doc_page
Claudecreate_error_page
Claudecreate_form
Claudecreate_layout
Claudecreate_media_folder
Claudecreate_org_role
Claudecreate_page
Claudecreate_post
Claudecreate_product
Claudecreate_redirect
Claudecreate_review
Claudecreate_staging_site
Claudedelete_component
Claudedelete_dns_record
Claudedelete_doc_page
Claudedelete_error_page
Claudedelete_file
Claudedelete_form
Claudedelete_layout
Claudedelete_media_folder
Claudedelete_org_role
Claudedelete_page
Claudedelete_post
Claudedelete_redirect
Claudedelete_review
Claudediscard_staging_site
Claudeduplicate
Claudeexport_products_csv
Claudeget_analytics
Claudeget_blog_listing_design
Claudeget_blog_post_card_design
Claudeget_blog_related_posts_design
Claudeget_blog_settings
Claudeget_blog_template
Claudeget_builtin_content
Claudeget_commerce_template
Claudeget_component
Claudeget_dns_instructions
Claudeget_doc_page
Claudeget_docs_article_design
Claudeget_docs_index_design
Claudeget_docs_settings
Claudeget_error_page
Claudeget_form
Claudeget_global_code
Claudeget_google_reviews_settings
Claudeget_google_reviews_status
Claudeget_indexnow_settings
Claudeget_layout
Claudeget_page
Claudeget_post
Claudeget_product
Claudeget_site_identity
Claudeget_staging_status
Claudeget_tracking_settings
Claudeget_version
Claudeimport_products_csv
Claudeinvite_team_member
Claudelist_accounts
Claudelist_collection_products
Claudelist_collections
Claudelist_commerce_templates
Claudelist_components
Claudelist_dns_records
Claudelist_doc_pages
Claudelist_domains
Claudelist_error_pages
Claudelist_form_submissions
Claudelist_forms
Claudelist_layouts
Claudelist_media
Claudelist_media_folders
Claudelist_org_roles
Claudelist_pages
Claudelist_pending_invitations
Claudelist_posts
Claudelist_products
Claudelist_redirects
Claudelist_reviews
Claudelist_staging_sites
Claudelist_team_members
Claudelist_versions
Claudemove_doc_page
Claudemove_file
Claudepromote_domain
Claudepromote_staging
Claudepublish_blog_listing_design
Claudepublish_blog_post_card_design
Claudepublish_blog_related_posts_design
Claudepublish_blog_template
Claudepublish_commerce_template
Claudepublish_component
Claudepublish_doc_page
Claudepublish_docs_article_design
Claudepublish_docs_index_design
Claudepublish_error_page
Claudepublish_form
Claudepublish_global_code
Claudepublish_layout
Claudepublish_page
Claudepublish_post
Clauderemove_domain
Clauderemove_team_member
Clauderequest_upload
Clauderesend_invitation
Claudereset_commerce_template
Clauderestore_staging_site
Clauderestore_version
Claudesearch_replace
Claudeset_collection_status
Claudeset_indexnow_enabled
Claudeset_product_status
Claudeset_review_status
Claudestaging_diff
Claudesubmit_all_to_indexnow
Claudesync_google_reviews
Claudeunpublish_doc_page
Claudeunpublish_error_page
Claudeunpublish_page
Claudeunpublish_post
Claudeupdate_blog_listing_design
Claudeupdate_blog_post_card_design
Claudeupdate_blog_related_posts_design
Claudeupdate_blog_settings
Claudeupdate_blog_template
Claudeupdate_builtin_content
Claudeupdate_commerce_template
Claudeupdate_component
Claudeupdate_dns_record
Claudeupdate_doc_page
Claudeupdate_docs_article_design
Claudeupdate_docs_index_design
Claudeupdate_docs_settings
Claudeupdate_error_page
Claudeupdate_form
Claudeupdate_global_code
Claudeupdate_google_reviews_settings
Claudeupdate_layout
Claudeupdate_member_role
Claudeupdate_org_role
Claudeupdate_page
Claudeupdate_post
Claudeupdate_product
Claudeupdate_redirect
Claudeupdate_review
Claudeupdate_site_identity
Claudeupdate_tracking_settings
Claudeupdate_variant
Claude