MCP App Store
Business
Fourthwall icon

Fourthwall

by Fourthwall, Inc.

Overview

Make custom apparel, merch, and streetwear with Fourthwall, using ChatGPT. Turn a logo or image into real products: t-shirts, hoodies, hats, mugs, stickers, plushies, or whatever swag / apparel you can dream up. Type your ideas and get live previews for different colors and design placements. Once you're happy, you can place an order. No minimums required. You can also sell your products online or run a campaign with Fourthwall: manage promotions, track orders, and see what's selling without leaving the chat. Fourthwall handles the hard parts: manufacturing, fulfillment, shipping, customer support, and sales tax. No upfront costs, no inventory, no monthly fees.

Tools

analyze-image

ChatGPT
Internal helper for the media-library widget. Run a vision analysis on an image that already has a URL (a selected media-library image) and return its description plus the analyzed URL. Not a user-facing action — the widget calls it when the user confirms a selected image. Safe to re-call: results are cached by image identity. Parameters: - imageUrl: The image to analyze — a media-library CDN URL or a GCS object URL in Omni's bucket.

analyze-image

ChatGPT
Internal helper for the media-library widget. Run a vision analysis on an image that already has a URL (a selected media-library image) and return its description plus the analyzed URL. Not a user-facing action — the widget calls it when the user confirms a selected image. Safe to re-call: results are cached by image identity. Parameters: - imageUrl: The image to analyze — a media-library CDN URL or a GCS object URL in Omni's bucket.

brand_analyze

ChatGPT
Stage 1 of brand extraction: analyze a brand sheet and stash a checkpoint. Runs the vision analyzer on the image. Does NOT extract a logo or run any image generation — that happens in brand_extract_assets. Returns a checkpoint_uri that the follow-up call uses to pull only the artworks/logo it actually needs. Parameters: - image_path: Source brand sheet (PNG/JPEG) or brand deck (PDF). For PDF input a cheap text-only selector picks the most informative pages (at most 6), rasterizes them, and sends them to the vision model in one call — useful for multi-page merch decks or brand guidelines. When pages were dropped, checkpoint_md carries a NOTE saying so. Accepts a local filesystem path, an http(s):// URL (fetched anonymously), or a gs://bucket/key URI (fetched via the gateway's Workload Identity SA). The https://storage.googleapis.com/<bucket>/<key> form (and its storage.cloud.google.com / virtual-hosted variants) is also accepted and routed through the SA. Returns a dict with: - checkpoint_uri: opaque URI (gs:// in prod, file:// in local dev) that pins this analysis run; pass back as the first argument to brand_extract_assets. - brand_name: confirm with the user before spending image-gen calls. - checkpoint_md: a markdown summary of the brand (mood, palette, typography, logo description, products, and the artwork "menu" with ids and descriptions). Use this to decide which want_artwork_ids to request next. - artwork_candidates: structured list of {id, kind, name, description} for the same menu — the id values are what brand_extract_assets accepts in want_artwork_ids. - logo_description: verbal description of the primary logo, helpful for confirming "yes this is the right brand" before extraction. Typical flow: r1 = brand_analyze(image_path="...") confirm r1["brand_name"] with the user, pick artwork ids from r1["artwork_candidates"], then: r2 = brand_extract_assets( checkpoint_uri=r1["checkpoint_uri"], want_logo=True, want_artwork_ids=["main_logo", "side_heart"], ) For long brand decks where the synchronous round-trip risks an MCP proxy timeout, use brand_analyze_start + brand_analyze_status instead — they expose the same pipeline behind a job_id poll loop.

brand_analyze

ChatGPT
Stage 1 of brand extraction: analyze a brand sheet and stash a checkpoint. Runs the vision analyzer on the image. Does NOT extract a logo or run any image generation — that happens in brand_extract_assets. Returns a checkpoint_uri that the follow-up call uses to pull only the artworks/logo it actually needs. Parameters: - image_path: Source brand sheet (PNG/JPEG) or brand deck (PDF). For PDF input a cheap text-only selector picks the most informative pages (at most 6), rasterizes them, and sends them to the vision model in one call — useful for multi-page merch decks or brand guidelines. When pages were dropped, checkpoint_md carries a NOTE saying so. Accepts a local filesystem path, an http(s):// URL (fetched anonymously), or a gs://bucket/key URI (fetched via the gateway's Workload Identity SA). The https://storage.googleapis.com/<bucket>/<key> form (and its storage.cloud.google.com / virtual-hosted variants) is also accepted and routed through the SA. Returns a dict with: - checkpoint_uri: opaque URI (gs:// in prod, file:// in local dev) that pins this analysis run; pass back as the first argument to brand_extract_assets. - brand_name: confirm with the user before spending image-gen calls. - checkpoint_md: a markdown summary of the brand (mood, palette, typography, logo description, products, and the artwork "menu" with ids and descriptions). Use this to decide which want_artwork_ids to request next. - artwork_candidates: structured list of {id, kind, name, description} for the same menu — the id values are what brand_extract_assets accepts in want_artwork_ids. - logo_description: verbal description of the primary logo, helpful for confirming "yes this is the right brand" before extraction. Typical flow: r1 = brand_analyze(image_path="...") confirm r1["brand_name"] with the user, pick artwork ids from r1["artwork_candidates"], then: r2 = brand_extract_assets( checkpoint_uri=r1["checkpoint_uri"], want_logo=True, want_artwork_ids=["main_logo", "side_heart"], ) For long brand decks where the synchronous round-trip risks an MCP proxy timeout, use brand_analyze_start + brand_analyze_status instead — they expose the same pipeline behind a job_id poll loop.

brand_analyze_start

ChatGPT
Async variant of brand_analyze. Enqueues the analysis and returns immediately, or returns the inline result if the job finishes inside the ~50s budget. Parameters: - image_path: same shape as brand_analyze (local path, http(s) URL, gs:// URI, or storage.googleapis.com URL). Returns either: - {"status": "done", "result": {...}} — the analysis finished inside the inline wait window; treat result exactly like brand_analyze would have returned. - {"job_id": "ba_...", "status": "pending" | "running", "progress": {...}} — the job is still in flight. Poll brand_analyze_status(job_id) every 5–10 seconds. Typical brand-deck jobs take 120–180s; very short single-image inputs may return inline. On failure surfaces {"job_id": "ba_...", "status": "failed", "error": "..."} rather than raising, so the model can decide whether to retry.

brand_analyze_start

ChatGPT
Async variant of brand_analyze. Enqueues the analysis and returns immediately, or returns the inline result if the job finishes inside the ~50s budget. Parameters: - image_path: same shape as brand_analyze (local path, http(s) URL, gs:// URI, or storage.googleapis.com URL). Returns either: - {"status": "done", "result": {...}} — the analysis finished inside the inline wait window; treat result exactly like brand_analyze would have returned. - {"job_id": "ba_...", "status": "pending" | "running", "progress": {...}} — the job is still in flight. Poll brand_analyze_status(job_id) every 5–10 seconds. Typical brand-deck jobs take 120–180s; very short single-image inputs may return inline. On failure surfaces {"job_id": "ba_...", "status": "failed", "error": "..."} rather than raising, so the model can decide whether to retry.

brand_analyze_status

ChatGPT
Poll the status of a brand_analyze_start job. Parameters: - job_id: the id returned by brand_analyze_start. Returns: - {"job_id", "status": "pending" | "running" | "done" | "failed", ...} - progress (optional): {stage, pct} while running. - result present when status=="done" — same shape as brand_analyze. - error present when status=="failed". Returns within ~1s. Raises if job_id is unknown or has aged out of the 24h TTL.

brand_analyze_status

ChatGPT
Poll the status of a brand_analyze_start job. Parameters: - job_id: the id returned by brand_analyze_start. Returns: - {"job_id", "status": "pending" | "running" | "done" | "failed", ...} - progress (optional): {stage, pct} while running. - result present when status=="done" — same shape as brand_analyze. - error present when status=="failed". Returns within ~1s. Raises if job_id is unknown or has aged out of the 24h TTL.

brand_extract_assets

ChatGPT
Stage 2 of brand extraction: produce just the assets you actually need. Reads the checkpoint produced by brand_analyze, then runs the logo stage and/or a focused per-artwork extraction for only the requested ids. Outputs are uploaded back into the same checkpoint, so calling this again with a different want_artwork_ids set extracts more without re-running analysis. Parameters: - checkpoint_uri: the URI returned by brand_analyze. - want_logo: extract the pixel-faithful 2048x2048 transparent logo PNG. Default True — flip to False on follow-up calls when you only want additional artworks. - want_artwork_ids: list of artwork ids (from brand_analyze's artwork_candidates) to extract as transparent PNGs. Each id costs one medium-quality parallel gpt-image-2 call. Pass an empty list (or omit) to skip artwork extraction. Unknown ids raise — the message lists what's available so you can correct. At least one of want_logo=True or a non-empty want_artwork_ids must be set; otherwise the call has nothing to do and raises. Returns a dict with: - checkpoint_uri: echoed back so the model can chain another call. - brand_name - logo_compact: gs:// URI of a downsized, <512 KB transparent logo PNG. Pass it as data to storefront_update-draft-theme-logo (and to any downstream tool that wants the brand logo — there is no high-res variant; this is the canonical logo asset). None if want_logo=False or the checkpoint bucket is unset. - favicon: gs:// URI of a square <512 KB favicon PNG derived from the same logo. Pass it as data to storefront_update-draft-theme-favicon. None if want_logo=False or the checkpoint bucket is unset. - artworks: list of {id, kind, name, upload, media} for every successfully extracted id. upload is the gs:// URI; media is the media-library entry — pass media[].media_url to ecommerce tools like ecommerce_generate-product-design-previews so they can resolve the asset without a separate upload step. - failed_artworks: list of {id, kind, name, error_kind, message} for ids the model service refused. error_kind is one of moderation_blocked, rate_limited, bad_request, api_error, othermoderation_blocked means OpenAI's safety system rejected that specific artwork prompt; the caller should drop or rephrase that id and retry without it. - cost: usage summary for the artwork stage — {input_text_tokens, input_image_tokens, output_image_tokens, total_tokens, estimated_usd, calls}. Estimate uses published gpt-image rates; the OpenAI invoice is authoritative. For long extractions where the synchronous round-trip risks an MCP proxy timeout, use brand_extract_assets_start + brand_extract_assets_status — same pipeline behind a job_id poll.

brand_extract_assets

ChatGPT
Stage 2 of brand extraction: produce just the assets you actually need. Reads the checkpoint produced by brand_analyze, then runs the logo stage and/or a focused per-artwork extraction for only the requested ids. Outputs are uploaded back into the same checkpoint, so calling this again with a different want_artwork_ids set extracts more without re-running analysis. Parameters: - checkpoint_uri: the URI returned by brand_analyze. - want_logo: extract the pixel-faithful 2048x2048 transparent logo PNG. Default True — flip to False on follow-up calls when you only want additional artworks. - want_artwork_ids: list of artwork ids (from brand_analyze's artwork_candidates) to extract as transparent PNGs. Each id costs one medium-quality parallel gpt-image-2 call. Pass an empty list (or omit) to skip artwork extraction. Unknown ids raise — the message lists what's available so you can correct. At least one of want_logo=True or a non-empty want_artwork_ids must be set; otherwise the call has nothing to do and raises. Returns a dict with: - checkpoint_uri: echoed back so the model can chain another call. - brand_name - logo_compact: gs:// URI of a downsized, <512 KB transparent logo PNG. Pass it as data to storefront_update-draft-theme-logo (and to any downstream tool that wants the brand logo — there is no high-res variant; this is the canonical logo asset). None if want_logo=False or the checkpoint bucket is unset. - favicon: gs:// URI of a square <512 KB favicon PNG derived from the same logo. Pass it as data to storefront_update-draft-theme-favicon. None if want_logo=False or the checkpoint bucket is unset. - artworks: list of {id, kind, name, upload, media} for every successfully extracted id. upload is the gs:// URI; media is the media-library entry — pass media[].media_url to ecommerce tools like ecommerce_generate-product-design-previews so they can resolve the asset without a separate upload step. - failed_artworks: list of {id, kind, name, error_kind, message} for ids the model service refused. error_kind is one of moderation_blocked, rate_limited, bad_request, api_error, othermoderation_blocked means OpenAI's safety system rejected that specific artwork prompt; the caller should drop or rephrase that id and retry without it. - cost: usage summary for the artwork stage — {input_text_tokens, input_image_tokens, output_image_tokens, total_tokens, estimated_usd, calls}. Estimate uses published gpt-image rates; the OpenAI invoice is authoritative. For long extractions where the synchronous round-trip risks an MCP proxy timeout, use brand_extract_assets_start + brand_extract_assets_status — same pipeline behind a job_id poll.

brand_extract_assets_start

ChatGPT
Async variant of brand_extract_assets. Enqueues the extraction and returns immediately, or returns the inline result if the job finishes inside the ~50s budget. Parameters: same as brand_extract_assets. Returns either: - {"status": "done", "result": {...}} — the extraction finished inline; treat result exactly like brand_extract_assets would have returned. - {"job_id": "bx_...", "status": "pending" | "running", "progress": {...}} — the job is still in flight. Poll brand_extract_assets_status(job_id) every 5–10 seconds. Typical extractions take 60–180s depending on how many artwork ids you requested. On failure surfaces {"job_id": "bx_...", "status": "failed", "error": "..."}.

brand_extract_assets_start

ChatGPT
Async variant of brand_extract_assets. Enqueues the extraction and returns immediately, or returns the inline result if the job finishes inside the ~50s budget. Parameters: same as brand_extract_assets. Returns either: - {"status": "done", "result": {...}} — the extraction finished inline; treat result exactly like brand_extract_assets would have returned. - {"job_id": "bx_...", "status": "pending" | "running", "progress": {...}} — the job is still in flight. Poll brand_extract_assets_status(job_id) every 5–10 seconds. Typical extractions take 60–180s depending on how many artwork ids you requested. On failure surfaces {"job_id": "bx_...", "status": "failed", "error": "..."}.

brand_extract_assets_status

ChatGPT
Poll the status of a brand_extract_assets_start job. Parameters: - job_id: the id returned by brand_extract_assets_start. Returns: - {"job_id", "status": "pending" | "running" | "done" | "failed", ...} - progress (optional): {stage, pct} while running. - result present when status=="done" — same shape as brand_extract_assets. - error present when status=="failed". Returns within ~1s. Raises if job_id is unknown or has aged out of the 24h TTL.

brand_extract_assets_status

ChatGPT
Poll the status of a brand_extract_assets_start job. Parameters: - job_id: the id returned by brand_extract_assets_start. Returns: - {"job_id", "status": "pending" | "running" | "done" | "failed", ...} - progress (optional): {stage, pct} while running. - result present when status=="done" — same shape as brand_extract_assets. - error present when status=="failed". Returns within ~1s. Raises if job_id is unknown or has aged out of the 24h TTL.

confirm-image-upload

ChatGPT
Internal helper for the show-upload widget. Confirm that an image finished uploading and return a vision analysis of it. Not a user-facing action — the widget calls it after PUTting the file. Safe to re-call: an already-confirmed upload returns the cached analysis. Returns two URLs for the same image, used for different purposes: - url: the stable internal GCS URL — use this for any further processing (handing the image to the model, chaining into other tools). Never expires, but the browser can't fetch it. - publicUrl: a time-limited signed read URL — use this only to show the image to the user (e.g. the widget's preview). Don't pass it on for further processing; it expires after ~60 minutes. Parameters: - uploadId: The id returned by request-upload-url.

confirm-image-upload

ChatGPT
Internal helper for the show-upload widget. Confirm that an image finished uploading and return a vision analysis of it. Not a user-facing action — the widget calls it after PUTting the file. Safe to re-call: an already-confirmed upload returns the cached analysis. Returns two URLs for the same image, used for different purposes: - url: the stable internal GCS URL — use this for any further processing (handing the image to the model, chaining into other tools). Never expires, but the browser can't fetch it. - publicUrl: a time-limited signed read URL — use this only to show the image to the user (e.g. the widget's preview). Don't pass it on for further processing; it expires after ~60 minutes. Parameters: - uploadId: The id returned by request-upload-url.

ecommerce_activate-promotion

ChatGPT
Reactivate a promotion (set status to LIVE). Only works for ENDED promotions. Cannot activate ARCHIVED or ALL_USED promotions. Use when a shop owner wants to re-enable a previously deactivated discount code.

ecommerce_activate-promotion

ChatGPT
Reactivate a promotion (set status to LIVE). Only works for ENDED promotions. Cannot activate ARCHIVED or ALL_USED promotions. Use when a shop owner wants to re-enable a previously deactivated discount code.

ecommerce_add-design-region

ChatGPT
Adds a new print region to an existing customization's design state with an initial image. Use this when the user wants to place artwork on a region that the catalog product supports (availableRegions from inspect-design) but the current customization doesn't yet contain. edit-design cannot add new regions — it only mutates regions already present in the state. BEFORE calling: - inspect-design to confirm the regionId is in availableRegions and not already in the state's sizes[*].regions[*].regionId list (i.e. not already added). - The image must already be saved (use ecommerce_save-media-library-image first); pass its CDN href plus natural width/height in pixels. AFTER calling: use rerender-design-previews with customizationId to regenerate preview images. Returns the updated inspect summary plus the same availableRegions list inspect-design exposes. Errors: - DESIGN_PIPELINE_INVALID_REGIONS — regionId is not on the catalog product. Surface validRegions to the user. - DESIGN_PIPELINE_BAD_REQUEST with "already part of this design" — the region is already in the state; use edit-design instead.

ecommerce_add-design-region

ChatGPT
Adds a new print region to an existing customization's design state with an initial image. Use this when the user wants to place artwork on a region that the catalog product supports (availableRegions from inspect-design) but the current customization doesn't yet contain. edit-design cannot add new regions — it only mutates regions already present in the state. BEFORE calling: - inspect-design to confirm the regionId is in availableRegions and not already in the state's sizes[*].regions[*].regionId list (i.e. not already added). - The image must already be saved (use ecommerce_save-media-library-image first); pass its CDN href plus natural width/height in pixels. AFTER calling: use rerender-design-previews with customizationId to regenerate preview images. Returns the updated inspect summary plus the same availableRegions list inspect-design exposes. Errors: - DESIGN_PIPELINE_INVALID_REGIONS — regionId is not on the catalog product. Surface validRegions to the user. - DESIGN_PIPELINE_BAD_REQUEST with "already part of this design" — the region is already in the state; use edit-design instead.

ecommerce_add-draft-colors

ChatGPT
Adds colors to the draft's color selection. Does NOT affect the live product. Each color must appear in the product's availableColors (case-sensitive). Read availableColors from get-draft-attributes before calling. Passing an unknown color throws CUSTOMIZATION_INVALID_COLORS with the valid set — surface the valid options to the user and stop; do not retry with guessed spellings (e.g. "heather grey" vs "Heather Gray"). Use rerender-design-previews after to see updated previews. Use apply-draft-to-product when the creator confirms changes.

ecommerce_add-draft-colors

ChatGPT
Adds colors to the draft's color selection. Does NOT affect the live product. Each color must appear in the product's availableColors (case-sensitive). Read availableColors from get-draft-attributes before calling. Passing an unknown color throws CUSTOMIZATION_INVALID_COLORS with the valid set — surface the valid options to the user and stop; do not retry with guessed spellings (e.g. "heather grey" vs "Heather Gray"). Use rerender-design-previews after to see updated previews. Use apply-draft-to-product when the creator confirms changes.

ecommerce_add-draft-sizes

ChatGPT
Adds sizes to the draft's size selection. Does NOT affect the live product. Each size must appear in the product's availableSizes (case-sensitive). Read availableSizes from get-draft-attributes before calling. Passing an unknown size throws CUSTOMIZATION_INVALID_SIZES with the valid set — surface the valid options to the user and stop; do not retry with guessed sizes (e.g. requesting "3XL" when the product caps at "2XL"). Use rerender-design-previews after to see updated previews. Use apply-draft-to-product when the creator confirms changes.

ecommerce_add-draft-sizes

ChatGPT
Adds sizes to the draft's size selection. Does NOT affect the live product. Each size must appear in the product's availableSizes (case-sensitive). Read availableSizes from get-draft-attributes before calling. Passing an unknown size throws CUSTOMIZATION_INVALID_SIZES with the valid set — surface the valid options to the user and stop; do not retry with guessed sizes (e.g. requesting "3XL" when the product caps at "2XL"). Use rerender-design-previews after to see updated previews. Use apply-draft-to-product when the creator confirms changes.

ecommerce_apply-draft-to-product

ChatGPT
Syncs the current draft state to the live product. Call this ONLY when the creator explicitly confirms the changes. This atomically: 1. Reads the draft's current attributes and design state 2. Rebuilds the product's variants from the draft 3. Recalculates pricing Use rerender-design-previews after to see final product previews.

ecommerce_apply-draft-to-product

ChatGPT
Syncs the current draft state to the live product. Call this ONLY when the creator explicitly confirms the changes. This atomically: 1. Reads the draft's current attributes and design state 2. Rebuilds the product's variants from the draft 3. Recalculates pricing Use rerender-design-previews after to see final product previews.

ecommerce_bulk-update-offer-variant-prices

ChatGPT
Bulk-update prices across an offer's variants. Call get-offers-by-ids first to see current variants and prices. Pick ONE mode: - UNIFORM — omit groupBy. Set price (and optional compareAtPrice) on every active variant. - BY ATTRIBUTE — set groupBy to SIZE/COLOR/CUSTOM and pass priceUpdates as an array of {attributeValue, price, compareAtPrice?} entries. Variants whose attribute value is not in the array are left unchanged. Example priceUpdates: [{"attributeValue":"S","price":10.00},{"attributeValue":"L","price":20.00,"compareAtPrice":30.00}] Rules: - price and priceUpdates are mutually exclusive — pass exactly one. - All prices are set in USD dollars, NOT cents (9.99 = $9.99). Shops price in USD; checkout handles currency conversion automatically. - priceUpdates is a plain JSON array, NOT a stringified JSON string.

ecommerce_bulk-update-offer-variant-prices

ChatGPT
Bulk-update prices across an offer's variants. Call get-offers-by-ids first to see current variants and prices. Pick ONE mode: - UNIFORM — omit groupBy. Set price (and optional compareAtPrice) on every active variant. - BY ATTRIBUTE — set groupBy to SIZE/COLOR/CUSTOM and pass priceUpdates as an array of {attributeValue, price, compareAtPrice?} entries. Variants whose attribute value is not in the array are left unchanged. Example priceUpdates: [{"attributeValue":"S","price":10.00},{"attributeValue":"L","price":20.00,"compareAtPrice":30.00}] Rules: - price and priceUpdates are mutually exclusive — pass exactly one. - All prices are set in USD dollars, NOT cents (9.99 = $9.99). Shops price in USD; checkout handles currency conversion automatically. - priceUpdates is a plain JSON array, NOT a stringified JSON string.

ecommerce_cancel-order

ChatGPT
Cancel a full or partial order. IRREVERSIBLE. ALWAYS confirm with the user before calling. Before calling, use get-order-cancellation-by-ids to check eligibility: - For a full cancellation: fullyCancellable must be true. - For a partial cancellation: partiallyCancellable must be true; pass an itemsToCancel subset of cancellableItems (variantId + quantity). Omit itemsToCancel (or pass empty) to cancel the whole order. Payment handling — done automatically, no separate confirmation step: - If the shop's balance covers the refund, the refund is issued immediately (status = CANCELLED). - If the balance is insufficient, the shortfall is charged to the shop's card and the cancellation is queued (status = CHARGE_INITIATED). A background job finalizes the cancellation once the charge settles. If the charge fails, the cancellation is abandoned and the order stays open. The response fields fromBalance, chargeAmount, and status make this explicit. Always surface these to the user — especially chargeAmount when > 0. Permission: requires ORDER_WRITE role on the shop. Typical rejection reasons (returned as errors from the endpoint): - STATUS: order already cancelled, failed, etc. - IN_PRODUCTION_OR_DELIVERING: items in fulfillment - OLDER_THAN_ALLOWED_CANCELLATION_TIMEFRAME - CONTAINS_DIGITAL_ITEMS / GIFT_CARD_ALREADY_USED - REFUND_IN_PROGRESS: an existing refund is pending; wait or resolve first - ExpectedChargeAmountChanged: a rare race where the required charge changed between our estimate and submission; just retry.

ecommerce_cancel-order

ChatGPT
Cancel a full or partial order. IRREVERSIBLE. ALWAYS confirm with the user before calling. Before calling, use get-order-cancellation-by-ids to check eligibility: - For a full cancellation: fullyCancellable must be true. - For a partial cancellation: partiallyCancellable must be true; pass an itemsToCancel subset of cancellableItems (variantId + quantity). Omit itemsToCancel (or pass empty) to cancel the whole order. Payment handling — done automatically, no separate confirmation step: - If the shop's balance covers the refund, the refund is issued immediately (status = CANCELLED). - If the balance is insufficient, the shortfall is charged to the shop's card and the cancellation is queued (status = CHARGE_INITIATED). A background job finalizes the cancellation once the charge settles. If the charge fails, the cancellation is abandoned and the order stays open. The response fields fromBalance, chargeAmount, and status make this explicit. Always surface these to the user — especially chargeAmount when > 0. Permission: requires ORDER_WRITE role on the shop. Typical rejection reasons (returned as errors from the endpoint): - STATUS: order already cancelled, failed, etc. - IN_PRODUCTION_OR_DELIVERING: items in fulfillment - OLDER_THAN_ALLOWED_CANCELLATION_TIMEFRAME - CONTAINS_DIGITAL_ITEMS / GIFT_CARD_ALREADY_USED - REFUND_IN_PROGRESS: an existing refund is pending; wait or resolve first - ExpectedChargeAmountChanged: a rare race where the required charge changed between our estimate and submission; just retry.

ecommerce_change-order-shipping-address

ChatGPT
Update the shipping address on an order. Only allowed before items enter production or shipping. The use case verifies: - Order status permits address changes (not in production/shipped/delivered/cancelled) - All items have canUpdateAddress == true for this issuer - Third-party fulfillment systems accept the update If the address is identical to the current one, the call is a no-op and returns the order unchanged. Emits OrderAddressChangedEvent on change. Permission: requires ORDER_WRITE role on the shop. Required fields: firstName, lastName, address1, city, country. Optional fields: address2, state, zip, phone. Returns the updated order summary (same shape as get-order-details-by-ids).

ecommerce_change-order-shipping-address

ChatGPT
Update the shipping address on an order. Only allowed before items enter production or shipping. The use case verifies: - Order status permits address changes (not in production/shipped/delivered/cancelled) - All items have canUpdateAddress == true for this issuer - Third-party fulfillment systems accept the update If the address is identical to the current one, the call is a no-op and returns the order unchanged. Emits OrderAddressChangedEvent on change. Permission: requires ORDER_WRITE role on the shop. Required fields: firstName, lastName, address1, city, country. Optional fields: address2, state, zip, phone. Returns the updated order summary (same shape as get-order-details-by-ids).

ecommerce_create-bundle

ChatGPT
Create a new bundle offer — a group of existing offers sold together at a combined price. The bundle starts in HIDDEN state. Use update-bundle to change status to PUBLIC when ready.

ecommerce_create-bundle

ChatGPT
Create a new bundle offer — a group of existing offers sold together at a combined price. The bundle starts in HIDDEN state. Use update-bundle to change status to PUBLIC when ready.

ecommerce_create-collection

ChatGPT
Create a new collection for the shop. Collections group products (offers) together for display on the storefront. Required fields: - name: Collection display name (max 200 chars) - description: Collection description (HTML allowed) - available: Whether the collection is available - offerIds: List of Offer IDs to include in the collection Optional fields: - availableFrom/availableTo: Schedule when the collection becomes visible (ISO 8601 datetime) The collection is created in HIDDEN state. Use update-collection-state to make it PUBLIC. Returns the created collection with: - Identity: id (CollectionId), shopId (ShopId), name, slug, description - Visibility: available (boolean), state (PUBLIC/HIDDEN/ARCHIVED) - Time-based availability: availableFrom (nullable ISO 8601), availableTo (nullable ISO 8601) - Products: offerIds (list of OfferIds) - Sorting: sortingStrategy (MANUAL/BEST_SELLING/NEWEST/OLDEST/NAME_ASC/NAME_DESC)

ecommerce_create-collection

ChatGPT
Create a new collection for the shop. Collections group products (offers) together for display on the storefront. Required fields: - name: Collection display name (max 200 chars) - description: Collection description (HTML allowed) - available: Whether the collection is available - offerIds: List of Offer IDs to include in the collection Optional fields: - availableFrom/availableTo: Schedule when the collection becomes visible (ISO 8601 datetime) The collection is created in HIDDEN state. Use update-collection-state to make it PUBLIC. Returns the created collection with: - Identity: id (CollectionId), shopId (ShopId), name, slug, description - Visibility: available (boolean), state (PUBLIC/HIDDEN/ARCHIVED) - Time-based availability: availableFrom (nullable ISO 8601), availableTo (nullable ISO 8601) - Products: offerIds (list of OfferIds) - Sorting: sortingStrategy (MANUAL/BEST_SELLING/NEWEST/OLDEST/NAME_ASC/NAME_DESC)

ecommerce_create-combined-listing

ChatGPT
Create a combined listing — merges color variants from multiple offers (same product library) into one storefront product. Unlike bundles, combined listings share the same product library. All offers must have compatible colors (no duplicates). The listing starts in HIDDEN state. Use update-combined-listing to change status to PUBLIC when ready. Use validate-combined-listing first to check if offers are compatible.

ecommerce_create-combined-listing

ChatGPT
Create a combined listing — merges color variants from multiple offers (same product library) into one storefront product. Unlike bundles, combined listings share the same product library. All offers must have compatible colors (no duplicates). The listing starts in HIDDEN state. Use update-combined-listing to change status to PUBLIC when ready. Use validate-combined-listing first to check if offers are compatible.

ecommerce_create-gift-cards

ChatGPT
Create gift cards (store credit) with an amount, optionally with custom codes. Skip the codes parameter unless the user explicitly asks for specific codes — random 12-character friendly codes (e.g., "L3WQNU1MV4W9") will be generated automatically. Use numberOfCards to control how many cards to create with auto-generated codes (defaults to 1, max 50). When codes IS provided: single code = single card, multiple codes = bulk group (1-50). All cards share the same amount and expiration. Codes are auto-uppercased, 8-36 chars, alphanumeric. Returns created card details (single) or group ID (bulk). Use get-gift-cards to browse. All amounts are set in USD dollars (NOT cents) — gift cards are priced in the shop's USD, and checkout handles currency conversion for non-USD customers. Examples: • Auto-generated single: amount=50 • Auto-generated bulk: numberOfCards=10, amount=25 • Single with custom code: codes=["GIFT50"], amount=50 • Bulk with custom codes: codes=["VIP1","VIP2","VIP3"], amount=25, expiresAt="2026-12-31T23:59:59Z"

ecommerce_create-gift-cards

ChatGPT
Create gift cards (store credit) with an amount, optionally with custom codes. Skip the codes parameter unless the user explicitly asks for specific codes — random 12-character friendly codes (e.g., "L3WQNU1MV4W9") will be generated automatically. Use numberOfCards to control how many cards to create with auto-generated codes (defaults to 1, max 50). When codes IS provided: single code = single card, multiple codes = bulk group (1-50). All cards share the same amount and expiration. Codes are auto-uppercased, 8-36 chars, alphanumeric. Returns created card details (single) or group ID (bulk). Use get-gift-cards to browse. All amounts are set in USD dollars (NOT cents) — gift cards are priced in the shop's USD, and checkout handles currency conversion for non-USD customers. Examples: • Auto-generated single: amount=50 • Auto-generated bulk: numberOfCards=10, amount=25 • Single with custom code: codes=["GIFT50"], amount=50 • Bulk with custom codes: codes=["VIP1","VIP2","VIP3"], amount=25, expiresAt="2026-12-31T23:59:59Z"

ecommerce_create-membership-promotion

ChatGPT
Create a membership discount code (percentage off membership subscription). ⚠ NOT SUPPORTED — do NOT promise these to the user: expiration / end date / start date / scheduled activation. There is no time-based field. durationCharges is the number of BILLING CYCLES the discount applies for (not a calendar date). To stop a code, use deactivate-promotion. DELIVERY MODE — provide exactly one: • code: single promo code (e.g. "MEMBER20") — most common • codes: list of bulk codes for multi-code promotions REQUIRED: • percentage (1-100): discount percentage • subscriptionType: ALL_MEMBERS | MONTHLY_ONLY | ANNUAL_ONLY OPTIONAL: • tierIds: restrict to specific membership tier IDs (null = all tiers). • durationCharges: how many billing cycles the discount lasts (1-1000). Null = lifetime (discount applies to every cycle, never auto-stops). • newMembersOnly: only new members can use this code (default false) • limitToSingleUse: limit code to one total redemption (default false) Examples: • 20% off all members for life: code="MEMBER20", percentage=20, subscriptionType="ALL_MEMBERS" • 50% off first 3 cycles, annual only: code="ANNUAL50", percentage=50, subscriptionType="ANNUAL_ONLY", durationCharges=3 • Bulk codes for new monthly members: codes=["NEW1","NEW2"], percentage=30, subscriptionType="MONTHLY_ONLY", newMembersOnly=true

ecommerce_create-membership-promotion

ChatGPT
Create a membership discount code (percentage off membership subscription). ⚠ NOT SUPPORTED — do NOT promise these to the user: expiration / end date / start date / scheduled activation. There is no time-based field. durationCharges is the number of BILLING CYCLES the discount applies for (not a calendar date). To stop a code, use deactivate-promotion. DELIVERY MODE — provide exactly one: • code: single promo code (e.g. "MEMBER20") — most common • codes: list of bulk codes for multi-code promotions REQUIRED: • percentage (1-100): discount percentage • subscriptionType: ALL_MEMBERS | MONTHLY_ONLY | ANNUAL_ONLY OPTIONAL: • tierIds: restrict to specific membership tier IDs (null = all tiers). • durationCharges: how many billing cycles the discount lasts (1-1000). Null = lifetime (discount applies to every cycle, never auto-stops). • newMembersOnly: only new members can use this code (default false) • limitToSingleUse: limit code to one total redemption (default false) Examples: • 20% off all members for life: code="MEMBER20", percentage=20, subscriptionType="ALL_MEMBERS" • 50% off first 3 cycles, annual only: code="ANNUAL50", percentage=50, subscriptionType="ANNUAL_ONLY", durationCharges=3 • Bulk codes for new monthly members: codes=["NEW1","NEW2"], percentage=30, subscriptionType="MONTHLY_ONLY", newMembersOnly=true

ecommerce_create-offers-from-designs

ChatGPT
Creates offers from previously generated design previews — processes multiple designs concurrently. Each design is processed independently — failures for one do not affect others. IMPORTANT: You must call generate-product-design-previews first to get customizationIds. Waits up to 1 minute per design for completion, then returns results. Each result contains: - customizationId: the input customization ID - pipelineId, status, type, offerId?, images[], priceSuggestions?, error? — present on success - bulkError?: string — present on failure Use this tool to: - Create offers after the user approves the preview images Offer names default to the product name when omitted. Offer descriptions default to empty when omitted. Offers are created in HIDDEN state — use update-offer-status to publish. WORKFLOW after creation: tell the user the default price that was applied (read it from priceSuggestions in the result) and that it can be changed any time, then offer to order a physical sample (create-sample-checkout — charged at manufacturing cost only).

ecommerce_create-offers-from-designs

ChatGPT
Creates offers from previously generated design previews — processes multiple designs concurrently. Each design is processed independently — failures for one do not affect others. IMPORTANT: You must call generate-product-design-previews first to get customizationIds. Waits up to 1 minute per design for completion, then returns results. Each result contains: - customizationId: the input customization ID - pipelineId, status, type, offerId?, images[], priceSuggestions?, error? — present on success - bulkError?: string — present on failure Use this tool to: - Create offers after the user approves the preview images Offer names default to the product name when omitted. Offer descriptions default to empty when omitted. Offers are created in HIDDEN state — use update-offer-status to publish. WORKFLOW after creation: tell the user the default price that was applied (read it from priceSuggestions in the result) and that it can be changed any time, then offer to order a physical sample (create-sample-checkout — charged at manufacturing cost only).

ecommerce_create-offers-from-products

ChatGPT
One-shot: creates offers directly from product designs in a single call. Skips the preview→approve step — use this when the user pre-approved (e.g. "create offers for all of these") or already saw mockups and just wants offers made. Products are processed concurrently — no polling needed, results returned directly. Each product is processed independently — failures for one product do not affect others. For the preview-first flow (review mockups, then create offers from approved ones), use generate-product-design-previews followed by create-offers-from-designs. regionUrls MUST be URLs from the shop's media library (use get-media-library-images, or upload via request-media-upload-link → PUT file → save-media-library-image). BEFORE calling this tool, use get-catalog-product-details to check: 1. supportsBackendRendering must be true for the product 2. Only use regions from printAreas where supportsBackendRendering=true 3. If a print area has placements, pass the desired placementId for that region Each result contains: - productId: the input product ID - pipelineId, status, type, customizationId, offerId, images[], priceSuggestions?, error? — present on success - bulkError?: string — present on failure WORKFLOW after creation: tell the user the default price that was applied (read it from priceSuggestions in the result) and that it can be changed any time, then offer to order a physical sample (create-sample-checkout — charged at manufacturing cost only).

ecommerce_create-offers-from-products

ChatGPT
One-shot: creates offers directly from product designs in a single call. Skips the preview→approve step — use this when the user pre-approved (e.g. "create offers for all of these") or already saw mockups and just wants offers made. Products are processed concurrently — no polling needed, results returned directly. Each product is processed independently — failures for one product do not affect others. For the preview-first flow (review mockups, then create offers from approved ones), use generate-product-design-previews followed by create-offers-from-designs. regionUrls MUST be URLs from the shop's media library (use get-media-library-images, or upload via request-media-upload-link → PUT file → save-media-library-image). BEFORE calling this tool, use get-catalog-product-details to check: 1. supportsBackendRendering must be true for the product 2. Only use regions from printAreas where supportsBackendRendering=true 3. If a print area has placements, pass the desired placementId for that region Each result contains: - productId: the input product ID - pipelineId, status, type, customizationId, offerId, images[], priceSuggestions?, error? — present on success - bulkError?: string — present on failure WORKFLOW after creation: tell the user the default price that was applied (read it from priceSuggestions in the result) and that it can be changed any time, then offer to order a physical sample (create-sample-checkout — charged at manufacturing cost only).

ecommerce_create-sample-checkout

ChatGPT
Creates a checkout session to order product samples at cost. Use get-offers or get-offers-by-ids to find variant IDs for the items to order. Returns: - checkoutPath: Relative path to the checkout page (e.g., "/checkout/ch_abc123") Sample credits are applied automatically at checkout when available; if the balance is zero or insufficient, the buyer pays the remaining amount on the checkout page. You do NOT need to check the balance beforehand — never gate this call on get-sample-credit-balance. Examples: - Order 2 units of a variant: items="8d79c46d-9a56-4266-885b-4b02a21aacd2:2" - Order multiple variants: items="aaa-uuid:1,bbb-uuid:3"

ecommerce_create-sample-checkout

ChatGPT
Creates a checkout session to order product samples at cost. Use get-offers or get-offers-by-ids to find variant IDs for the items to order. Returns: - checkoutPath: Relative path to the checkout page (e.g., "/checkout/ch_abc123") Sample credits are applied automatically at checkout when available; if the balance is zero or insufficient, the buyer pays the remaining amount on the checkout page. You do NOT need to check the balance beforehand — never gate this call on get-sample-credit-balance. Examples: - Order 2 units of a variant: items="8d79c46d-9a56-4266-885b-4b02a21aacd2:2" - Order multiple variants: items="aaa-uuid:1,bbb-uuid:3"

ecommerce_create-shop-promotion

ChatGPT
Create a shop discount promotion. ⚠ Use ONLY the parameter names declared on this tool — do not invent or paraphrase. For an entire-order discount, OMIT productIds (there is no appliesTo parameter). ⚠ NOT SUPPORTED — do NOT promise these to the user, even if help articles imply otherwise: • Expiration / end date / start date / scheduled activation — there is no time-based field. To stop a promotion, use deactivate-promotion. To cap total usage, set maxUses. • Stacking rules, per-product discount tiers, BOGO without using FREE_PRODUCTS. All monetary amounts are set in USD dollars (NOT cents) — shops price in USD; checkout handles per-customer currency conversion automatically. RECIPES (each line shows the required fields per discountType): • 10% off all orders: { discountType: "PERCENTAGE", code: "SAVE10", percentage: 10 } • $10 off + free shipping: { discountType: "FIXED_AMOUNT", code: "TAKE10", amount: 10, freeShipping: true } • Free shipping: { discountType: "FREE_SHIPPING", code: "SHIPFREE" } • Free product: { discountType: "FREE_PRODUCTS", code: "FREEGIFT", freeVariantId: "<variant-uuid>" } • Bulk codes: replace code with codes: ["VIP1","VIP2"]. Auto-apply: replace code with autoApplyTitle: "Summer Sale". COMMON OPTIONS (all types): • productIds: restrict to specific offer IDs. OMIT for entire-order (default). • freeShipping: bundle free shipping (PERCENTAGE, FIXED_AMOUNT, FREE_PRODUCTS) • minimumOrderAmount: USD dollars (e.g. 50 = $50) • allowedCountries: ISO 3166-1 alpha-2 codes (e.g. ["US","CA"]). Omit = all. • maxUses (1-1000, omit = unlimited), onePerCustomer (default false) • shippingOption (PERCENTAGE only): EXCLUDED | FREE | FREE_LOWEST_ONLY • lowestShippingOnly (FREE_SHIPPING only); freeProductQuantity (FREE_PRODUCTS only, default 1)

ecommerce_create-shop-promotion

ChatGPT
Create a shop discount promotion. ⚠ Use ONLY the parameter names declared on this tool — do not invent or paraphrase. For an entire-order discount, OMIT productIds (there is no appliesTo parameter). ⚠ NOT SUPPORTED — do NOT promise these to the user, even if help articles imply otherwise: • Expiration / end date / start date / scheduled activation — there is no time-based field. To stop a promotion, use deactivate-promotion. To cap total usage, set maxUses. • Stacking rules, per-product discount tiers, BOGO without using FREE_PRODUCTS. All monetary amounts are set in USD dollars (NOT cents) — shops price in USD; checkout handles per-customer currency conversion automatically. RECIPES (each line shows the required fields per discountType): • 10% off all orders: { discountType: "PERCENTAGE", code: "SAVE10", percentage: 10 } • $10 off + free shipping: { discountType: "FIXED_AMOUNT", code: "TAKE10", amount: 10, freeShipping: true } • Free shipping: { discountType: "FREE_SHIPPING", code: "SHIPFREE" } • Free product: { discountType: "FREE_PRODUCTS", code: "FREEGIFT", freeVariantId: "<variant-uuid>" } • Bulk codes: replace code with codes: ["VIP1","VIP2"]. Auto-apply: replace code with autoApplyTitle: "Summer Sale". COMMON OPTIONS (all types): • productIds: restrict to specific offer IDs. OMIT for entire-order (default). • freeShipping: bundle free shipping (PERCENTAGE, FIXED_AMOUNT, FREE_PRODUCTS) • minimumOrderAmount: USD dollars (e.g. 50 = $50) • allowedCountries: ISO 3166-1 alpha-2 codes (e.g. ["US","CA"]). Omit = all. • maxUses (1-1000, omit = unlimited), onePerCustomer (default false) • shippingOption (PERCENTAGE only): EXCLUDED | FREE | FREE_LOWEST_ONLY • lowestShippingOnly (FREE_SHIPPING only); freeProductQuantity (FREE_PRODUCTS only, default 1)

ecommerce_deactivate-promotion

ChatGPT
Deactivate a promotion (set status to ENDED). Customers can no longer use this code. To reactivate later, use activate-promotion. To permanently remove, use delete-promotion.

ecommerce_deactivate-promotion

ChatGPT
Deactivate a promotion (set status to ENDED). Customers can no longer use this code. To reactivate later, use activate-promotion. To permanently remove, use delete-promotion.

ecommerce_duplicate-offer

ChatGPT
Create a copy of an existing offer (product). The duplicated offer will have a new ID and a modified slug (with a suffix). The duplicate starts in HIDDEN state so it won't be visible on the storefront until published.

ecommerce_duplicate-offer

ChatGPT
Create a copy of an existing offer (product). The duplicated offer will have a new ID and a modified slug (with a suffix). The duplicate starts in HIDDEN state so it won't be visible on the storefront until published.

ecommerce_edit-design

ChatGPT
Edits an existing customization's design state and returns the updated layout. BEFORE calling: use inspect-design to understand the current layout (imageIds, indices, region dimensions) and to read availableRegions — the legal values for target.regionId. Passing a regionId not in availableRegions returns DESIGN_PIPELINE_INVALID_REGIONS with the valid set; surface that to the user and stop — do not retry with another guessed regionId. AFTER calling: use rerender-design-previews with customizationId to regenerate preview images. Operations: - scale-absolute: set size as fraction of region (regionFraction: 0.0-1.0) - scale-relative: multiply current size (factor: e.g. 1.5 = 150%) - move-absolute: snap to named position (anchor: top-left/top-center/top-right/center-left/center/center-right/bottom-left/bottom-center/bottom-right) - move-relative: offset by fraction of region (dx: -1.0 to 1.0, dy: -1.0 to 1.0) - rotate: set rotation (degrees) - replace-image: swap image URL (href, naturalWidth, naturalHeight) - remove: delete image from region - add-image: add new image (href, width, height, optional regionFraction, anchor) - reorder: change z-order (position: numeric z-index) Target filtering: sizes (e.g. ["S","M"]), regionId (e.g. "front"), imageId (dataId from inspect), imageIndex (0-based). Omit target fields to apply to all. Returns updated inspect summary with all image positions.

ecommerce_edit-design

ChatGPT
Edits an existing customization's design state and returns the updated layout. BEFORE calling: use inspect-design to understand the current layout (imageIds, indices, region dimensions) and to read availableRegions — the legal values for target.regionId. Passing a regionId not in availableRegions returns DESIGN_PIPELINE_INVALID_REGIONS with the valid set; surface that to the user and stop — do not retry with another guessed regionId. AFTER calling: use rerender-design-previews with customizationId to regenerate preview images. Operations: - scale-absolute: set size as fraction of region (regionFraction: 0.0-1.0) - scale-relative: multiply current size (factor: e.g. 1.5 = 150%) - move-absolute: snap to named position (anchor: top-left/top-center/top-right/center-left/center/center-right/bottom-left/bottom-center/bottom-right) - move-relative: offset by fraction of region (dx: -1.0 to 1.0, dy: -1.0 to 1.0) - rotate: set rotation (degrees) - replace-image: swap image URL (href, naturalWidth, naturalHeight) - remove: delete image from region - add-image: add new image (href, width, height, optional regionFraction, anchor) - reorder: change z-order (position: numeric z-index) Target filtering: sizes (e.g. ["S","M"]), regionId (e.g. "front"), imageId (dataId from inspect), imageIndex (0-based). Omit target fields to apply to all. Returns updated inspect summary with all image positions.

ecommerce_edit-self-fulfilled-tracking

ChatGPT
Edits tracking information on existing self-fulfilled (creator-fulfilled) order fulfillments. Supports batch updates (up to 10). WHEN TO USE: A creator has shipped one or more existing self-fulfilled orders and you need to update the carrier and tracking number on the existing fulfillment. This tool cannot create new fulfillments — it only edits existing ones. INPUT FORMAT: Each entry is a pipe-delimited string with exactly 3 parts: fulfillmentId|trackingCompany|trackingNumber All 3 parts are required: - fulfillmentId: starts with "ful_" prefix (get it from "get-fulfillment-details") - trackingCompany: carrier name — one of: USPS, UPS, FedEx, DHL, Canada Post, Royal Mail, or other carrier - trackingNumber: the tracking number provided by the carrier EXAMPLES: - ["ful_abc123|USPS|9400111899223100001234"] - ["ful_abc123|USPS|9400111899223100001234", "ful_def456|FedEx|794644790138"] WHAT HAPPENS: The fulfillment transitions to PACKAGED status. A shipment tracker with a customer-visible tracking page URL is created in the background (not in this response). RETURNS: List of updated fulfillments with id, orderId, status, items, and shippingLabels. RELATED: Use "get-fulfillment-details" first to look up fulfillment IDs for an order.

ecommerce_edit-self-fulfilled-tracking

ChatGPT
Edits tracking information on existing self-fulfilled (creator-fulfilled) order fulfillments. Supports batch updates (up to 10). WHEN TO USE: A creator has shipped one or more existing self-fulfilled orders and you need to update the carrier and tracking number on the existing fulfillment. This tool cannot create new fulfillments — it only edits existing ones. INPUT FORMAT: Each entry is a pipe-delimited string with exactly 3 parts: fulfillmentId|trackingCompany|trackingNumber All 3 parts are required: - fulfillmentId: starts with "ful_" prefix (get it from "get-fulfillment-details") - trackingCompany: carrier name — one of: USPS, UPS, FedEx, DHL, Canada Post, Royal Mail, or other carrier - trackingNumber: the tracking number provided by the carrier EXAMPLES: - ["ful_abc123|USPS|9400111899223100001234"] - ["ful_abc123|USPS|9400111899223100001234", "ful_def456|FedEx|794644790138"] WHAT HAPPENS: The fulfillment transitions to PACKAGED status. A shipment tracker with a customer-visible tracking page URL is created in the background (not in this response). RETURNS: List of updated fulfillments with id, orderId, status, items, and shippingLabels. RELATED: Use "get-fulfillment-details" first to look up fulfillment IDs for an order.

ecommerce_generate-product-design-previews

ChatGPT
Creates design preview pipelines for multiple products and generates mockup images. Use this when the user wants to review mockups BEFORE offers are created — then call create-offers-from-designs on approved customizationIds. If the user has already pre-approved (e.g. "create offers for all of these"), prefer create-offers-from-products instead — it goes straight to offer creation in one call and avoids re-rendering the previews. Products are processed concurrently — no polling needed, results returned directly. Each product is processed independently — failures for one product do not affect others. regionUrls MUST be URLs from the shop's media library (use get-media-library-images, or upload via request-media-upload-link → PUT file → save-media-library-image). BEFORE calling this tool, use get-catalog-product-details to check: 1. supportsBackendRendering must be true for the product 2. Only use regions from printAreas where supportsBackendRendering=true 3. If a print area has placements, pass the desired placementId for that region IMPORTANT: Each product has its own design settings (regions, placements) because different products have different print areas (e.g., 'front_large' vs 'front'). Use get-catalog-product-details for each product to determine the correct region names and placements. Each result contains: - productId: the input product ID - pipelineId, status, type, customizationId, images[], priceSuggestions?, error? — present on success - bulkError?: string — present on failure WORKFLOW: Show images to the user — do NOT quote priceSuggestions at this stage; pricing is applied at offer creation, not on previews. If approved, call create-offers-from-designs with customizationIds. To re-render an existing customization after edit-design, use rerender-design-previews instead.

ecommerce_generate-product-design-previews

ChatGPT
Creates design preview pipelines for multiple products and generates mockup images. Use this when the user wants to review mockups BEFORE offers are created — then call create-offers-from-designs on approved customizationIds. If the user has already pre-approved (e.g. "create offers for all of these"), prefer create-offers-from-products instead — it goes straight to offer creation in one call and avoids re-rendering the previews. Products are processed concurrently — no polling needed, results returned directly. Each product is processed independently — failures for one product do not affect others. regionUrls MUST be URLs from the shop's media library (use get-media-library-images, or upload via request-media-upload-link → PUT file → save-media-library-image). BEFORE calling this tool, use get-catalog-product-details to check: 1. supportsBackendRendering must be true for the product 2. Only use regions from printAreas where supportsBackendRendering=true 3. If a print area has placements, pass the desired placementId for that region IMPORTANT: Each product has its own design settings (regions, placements) because different products have different print areas (e.g., 'front_large' vs 'front'). Use get-catalog-product-details for each product to determine the correct region names and placements. Each result contains: - productId: the input product ID - pipelineId, status, type, customizationId, images[], priceSuggestions?, error? — present on success - bulkError?: string — present on failure WORKFLOW: Show images to the user — do NOT quote priceSuggestions at this stage; pricing is applied at offer creation, not on previews. If approved, call create-offers-from-designs with customizationIds. To re-render an existing customization after edit-design, use rerender-design-previews instead.

ecommerce_get-affiliate-earnings-report

ChatGPT
Get the Affiliate Earnings analytics report for the shop within a date range: confirmed affiliate referral bonus earnings. This report shows affiliate earnings over time with the following columns per row: - date: The time period - earnings: Total confirmed affiliate referral bonus earnings for this period (USD) - payout_count: Number of individual affiliate payout events in this period IMPORTANT - Aggregation precision selection: Each row represents one time unit. Choose the finest granularity that produces at most 31 rows: - HOUR: use only for ranges up to 31 hours (up to ~1 day) - DAY: use only for ranges up to 31 days (up to ~1 month) - WEEK: use only for ranges up to 31 weeks (up to ~7 months) - MONTH: use only for ranges up to 31 months (up to ~2.5 years) - QUARTER: use only for ranges up to 31 quarters (up to ~7 years) - YEAR: use for ranges longer than 31 quarters For example: "last 2 years" → MONTH (24 rows), "last week" → DAY (7 rows), "last 6 months" → WEEK (~26 rows), "today" → HOUR (24 rows), "last 5 years" → QUARTER (20 rows). Examples: - Monthly affiliate earnings for 2024: from="2024-01-01T00:00:00Z", to="2024-12-31T23:59:59Z", aggregationPrecision="MONTH" - Weekly affiliate earnings: from="2024-10-01T00:00:00Z", to="2024-12-31T23:59:59Z", aggregationPrecision="WEEK"

ecommerce_get-affiliate-earnings-report

ChatGPT
Get the Affiliate Earnings analytics report for the shop within a date range: confirmed affiliate referral bonus earnings. This report shows affiliate earnings over time with the following columns per row: - date: The time period - earnings: Total confirmed affiliate referral bonus earnings for this period (USD) - payout_count: Number of individual affiliate payout events in this period IMPORTANT - Aggregation precision selection: Each row represents one time unit. Choose the finest granularity that produces at most 31 rows: - HOUR: use only for ranges up to 31 hours (up to ~1 day) - DAY: use only for ranges up to 31 days (up to ~1 month) - WEEK: use only for ranges up to 31 weeks (up to ~7 months) - MONTH: use only for ranges up to 31 months (up to ~2.5 years) - QUARTER: use only for ranges up to 31 quarters (up to ~7 years) - YEAR: use for ranges longer than 31 quarters For example: "last 2 years" → MONTH (24 rows), "last week" → DAY (7 rows), "last 6 months" → WEEK (~26 rows), "today" → HOUR (24 rows), "last 5 years" → QUARTER (20 rows). Examples: - Monthly affiliate earnings for 2024: from="2024-01-01T00:00:00Z", to="2024-12-31T23:59:59Z", aggregationPrecision="MONTH" - Weekly affiliate earnings: from="2024-10-01T00:00:00Z", to="2024-12-31T23:59:59Z", aggregationPrecision="WEEK"

ecommerce_get-all-integrations

ChatGPT
Retrieves all connected integrations for the shop. This is a high-level overview — for TikTok or YouTube details, use get-tiktok-configuration or get-youtube-integrations. Returns a list of integrations, each with: - app: Integration identifier (TWITCH_GIFTING, TWITCH_DISCOUNTS_FOR_SUBS, YOUTUBE_PRODUCT_SHELF, TIKTOK_SHOP, INSTAGRAM_SHOP, INSTAGRAM_CHECKOUT, TWITTER_SHOP, STREAMELEMENTS, STREAMLABS, TIKTOK_FEED, INSTAGRAM_FEED, SHIPSTATION, LAYLO, KLAVIYO, MAILCHIMP, KIT, BEEHIIV, FWDISCORD, PLEDGE, BOOKFUNNEL) - status: CONNECTED, NOT_CONNECTED, NOT_CONFIGURED, IN_PROGRESS, COMING_SOON, EXTERNAL, BROKEN - categories: list of SOCIAL_COMMERCE, ALERTS, SOCIAL_FEED, EMAIL_MARKETING, SHIPPING, OTHER - recommendations: list of sales recommendations (e.g. "SALES (priority: 1)"), empty if none - channelName: Twitch channel name (nullable, only for Twitch integrations) - missingScopes: OAuth scopes that need to be granted (nullable, only for Twitch/StreamElements) Status values: - CONNECTED: Fully set up and active - NOT_CONNECTED: Not configured at all - NOT_CONFIGURED: Partial setup (e.g., OAuth connected but configuration incomplete) - IN_PROGRESS: Setup is being processed - COMING_SOON: Feature not yet available - EXTERNAL: Configured outside Fourthwall (e.g., TikTok Feed, Instagram Feed) - BROKEN: Needs attention (e.g., missing scopes, expired auth) Use this tool to: - See all available and connected integrations for a shop - Check which sales channels are set up (TikTok Shop, YouTube Merch Shelf) - Verify email marketing tool connections (Klaviyo, Mailchimp, Kit, Beehiiv, Laylo) - Identify integrations that need attention (BROKEN status) - Get sales recommendations based on connected integrations

ecommerce_get-all-integrations

ChatGPT
Retrieves all connected integrations for the shop. This is a high-level overview — for TikTok or YouTube details, use get-tiktok-configuration or get-youtube-integrations. Returns a list of integrations, each with: - app: Integration identifier (TWITCH_GIFTING, TWITCH_DISCOUNTS_FOR_SUBS, YOUTUBE_PRODUCT_SHELF, TIKTOK_SHOP, INSTAGRAM_SHOP, INSTAGRAM_CHECKOUT, TWITTER_SHOP, STREAMELEMENTS, STREAMLABS, TIKTOK_FEED, INSTAGRAM_FEED, SHIPSTATION, LAYLO, KLAVIYO, MAILCHIMP, KIT, BEEHIIV, FWDISCORD, PLEDGE, BOOKFUNNEL) - status: CONNECTED, NOT_CONNECTED, NOT_CONFIGURED, IN_PROGRESS, COMING_SOON, EXTERNAL, BROKEN - categories: list of SOCIAL_COMMERCE, ALERTS, SOCIAL_FEED, EMAIL_MARKETING, SHIPPING, OTHER - recommendations: list of sales recommendations (e.g. "SALES (priority: 1)"), empty if none - channelName: Twitch channel name (nullable, only for Twitch integrations) - missingScopes: OAuth scopes that need to be granted (nullable, only for Twitch/StreamElements) Status values: - CONNECTED: Fully set up and active - NOT_CONNECTED: Not configured at all - NOT_CONFIGURED: Partial setup (e.g., OAuth connected but configuration incomplete) - IN_PROGRESS: Setup is being processed - COMING_SOON: Feature not yet available - EXTERNAL: Configured outside Fourthwall (e.g., TikTok Feed, Instagram Feed) - BROKEN: Needs attention (e.g., missing scopes, expired auth) Use this tool to: - See all available and connected integrations for a shop - Check which sales channels are set up (TikTok Shop, YouTube Merch Shelf) - Verify email marketing tool connections (Klaviyo, Mailchimp, Kit, Beehiiv, Laylo) - Identify integrations that need attention (BROKEN status) - Get sales recommendations based on connected integrations

ecommerce_get-available-plans

ChatGPT
Retrieves all subscription plans available for the shop. To check the shop's current plan and usage, use get-current-subscription instead. Returns a list of plans, each with: - Identity: id, name, custom (boolean — true if specially configured for this shop), pro (boolean) - Pricing: priceAmount (BigDecimal), priceCurrency (String, e.g. "USD"), recurringPeriod (MONTHLY/YEARLY, nullable — null means one-time) - Limits: - offersLimit (Int): maximum number of products (-1 = unlimited) - membersLimit (Int): maximum team members (-1 = unlimited) - domainsLimit (Int): maximum custom domains (-1 = unlimited) - productDesignerArtworkStorageLimitBytes (Long): artwork storage for product designer - digitalProductsStorageLimitBytes (Long): storage for digital product files - Features: - digitalProductsFeePercent (Double): transaction fee percentage for digital products - creditForSamplesAmount (BigDecimal): monthly credit for ordering product samples - creditForSamplesCurrency (String): currency of sample credit - upgradable (boolean): whether the plan can be upgraded to a higher tier - tag (nullable): PRO, PRO_UNLIMITED, DEFAULT, DEFAULT_LEGACY, DEFAULT_UNLIMITED, CUSTOM

ecommerce_get-available-plans

ChatGPT
Retrieves all subscription plans available for the shop. To check the shop's current plan and usage, use get-current-subscription instead. Returns a list of plans, each with: - Identity: id, name, custom (boolean — true if specially configured for this shop), pro (boolean) - Pricing: priceAmount (BigDecimal), priceCurrency (String, e.g. "USD"), recurringPeriod (MONTHLY/YEARLY, nullable — null means one-time) - Limits: - offersLimit (Int): maximum number of products (-1 = unlimited) - membersLimit (Int): maximum team members (-1 = unlimited) - domainsLimit (Int): maximum custom domains (-1 = unlimited) - productDesignerArtworkStorageLimitBytes (Long): artwork storage for product designer - digitalProductsStorageLimitBytes (Long): storage for digital product files - Features: - digitalProductsFeePercent (Double): transaction fee percentage for digital products - creditForSamplesAmount (BigDecimal): monthly credit for ordering product samples - creditForSamplesCurrency (String): currency of sample credit - upgradable (boolean): whether the plan can be upgraded to a higher tier - tag (nullable): PRO, PRO_UNLIMITED, DEFAULT, DEFAULT_LEGACY, DEFAULT_UNLIMITED, CUSTOM

ecommerce_get-average-order-value-report

ChatGPT
Get the Average Order Value analytics report for the shop within a date range: average transaction metrics over time. This report shows average order metrics over time with the following columns per row: - date: The time period - total_orders: Total number of orders - unique_customers: Number of customers who placed orders - avg_tx_value: Average amount paid by customer per order - avg_gross_revenue: Average profit value per order - avg_product_revenue: Average product sales price per order - avg_product_cost: Average declared cost of self-produced products per order - avg_shipping_revenue: Average shipping cost per order - avg_donation_revenue: Average donation value per order - avg_discount_amount: Average discount value per order - avg_taxes_amount: Average taxes amount per order - avg_fourthwall_product_costs: Average cost of manufacturing of Fourthwall products per order - avg_payment_processing_fees: Average payment processing fees per order Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond).

ecommerce_get-average-order-value-report

ChatGPT
Get the Average Order Value analytics report for the shop within a date range: average transaction metrics over time. This report shows average order metrics over time with the following columns per row: - date: The time period - total_orders: Total number of orders - unique_customers: Number of customers who placed orders - avg_tx_value: Average amount paid by customer per order - avg_gross_revenue: Average profit value per order - avg_product_revenue: Average product sales price per order - avg_product_cost: Average declared cost of self-produced products per order - avg_shipping_revenue: Average shipping cost per order - avg_donation_revenue: Average donation value per order - avg_discount_amount: Average discount value per order - avg_taxes_amount: Average taxes amount per order - avg_fourthwall_product_costs: Average cost of manufacturing of Fourthwall products per order - avg_payment_processing_fees: Average payment processing fees per order Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond).

ecommerce_get-catalog-product-details

ChatGPT
Get comprehensive product details for one or more catalog products by slug. Fetches all products concurrently. Returns enriched data including material, weight, fabric weight, print area pricing, size guide, colors, sizes, reviews, and more. This is the go-to tool for answering detailed product FAQ questions. IMPORTANT: Only use slugs returned by get-catalog-products or search. Do NOT construct or guess slugs from product names — they will not match real catalog entries. Returns a list of products (one per slug, in the same order), each containing: - Identity: id, brand, brandModel, name, slug, fulfillmentType - Category: categoryPath (list of category names) - Pricing: priceFrom, priceTo (BigDecimal) - Production: productionMethod, otherProductionMethods (alternative methods for same product), minimumOrdersNumber - Print areas: printAreas — list of available print areas, each containing: - type: region identifier (e.g. "front", "back", "neck_label") - name: display name (e.g. "Front", "Back", "Neck Label") - required: boolean — when true this area MUST carry artwork or the product cannot be manufactured (the manufacturer rejects the sync). Always design every required area, even when the product name highlights a different (optional) one — e.g. a "Custom Background" sticker sheet has a required "Stickers" area plus an optional "Background". - salePrice: formatted price string (e.g. "$8.50") - supportsBackendRendering: boolean — whether this specific region can be used with generate-product-design-previews (regions like neck labels or embroidery regions will be false) - placements: list of placements within the region, each an object with id and name (e.g. [{"id": "leftChest", "name": "Left chest"}, {"id": "centerChest", "name": "Center chest"}]). Empty list when no placements. Pass the desired placement id to generate-product-design-previews. - Backend rendering: supportsBackendRendering (boolean) — whether this product supports design preview generation via generate-product-design-previews. When true, check each print area's supportsBackendRendering to determine which regions can be designed. - Colors: list of available color names - Sizes: list of available sizes - Size guide: sizeGuide — formatted string like "Chest: S=34-36, M=38-40 (inches)" - Fabric: fabricWeightGsm (GSM), material (primary), distinctMaterials (all unique materials across variants, e.g. heather vs solid differ) - Weight: weightRange — formatted string like "5.00-6.20 oz" - Origin: countryOfProduction - Description: description, moreDetails, sizeAndFitNotes - Returns: guaranteeAndReturns — guarantee and returns policy text - Legal: legalWarningSubstance — legal/safety warnings (e.g. Prop 65) - Reviews: reviewSummary — formatted string like "4.63/5 (119 reviews) - Creators love the softness..." - Stock issues: colorsWithStockIssues — only colors that have problems, each with the discontinuedSizes and outOfStockSizes for that color. Colors absent from this list are fully available across every size in sizes. - Shipping: shipsFrom — regions where the product is fulfilled from (e.g. ["US", "EU", "CA"]) - Badges: badges (e.g. ["OUR_PICK", "BESTSELLER"]) - favourite: boolean

ecommerce_get-catalog-product-details

ChatGPT
Get comprehensive product details for one or more catalog products by slug. Fetches all products concurrently. Returns enriched data including material, weight, fabric weight, print area pricing, size guide, colors, sizes, reviews, and more. This is the go-to tool for answering detailed product FAQ questions. IMPORTANT: Only use slugs returned by get-catalog-products or search. Do NOT construct or guess slugs from product names — they will not match real catalog entries. Returns a list of products (one per slug, in the same order), each containing: - Identity: id, brand, brandModel, name, slug, fulfillmentType - Category: categoryPath (list of category names) - Pricing: priceFrom, priceTo (BigDecimal) - Production: productionMethod, otherProductionMethods (alternative methods for same product), minimumOrdersNumber - Print areas: printAreas — list of available print areas, each containing: - type: region identifier (e.g. "front", "back", "neck_label") - name: display name (e.g. "Front", "Back", "Neck Label") - required: boolean — when true this area MUST carry artwork or the product cannot be manufactured (the manufacturer rejects the sync). Always design every required area, even when the product name highlights a different (optional) one — e.g. a "Custom Background" sticker sheet has a required "Stickers" area plus an optional "Background". - salePrice: formatted price string (e.g. "$8.50") - supportsBackendRendering: boolean — whether this specific region can be used with generate-product-design-previews (regions like neck labels or embroidery regions will be false) - placements: list of placements within the region, each an object with id and name (e.g. [{"id": "leftChest", "name": "Left chest"}, {"id": "centerChest", "name": "Center chest"}]). Empty list when no placements. Pass the desired placement id to generate-product-design-previews. - Backend rendering: supportsBackendRendering (boolean) — whether this product supports design preview generation via generate-product-design-previews. When true, check each print area's supportsBackendRendering to determine which regions can be designed. - Colors: list of available color names - Sizes: list of available sizes - Size guide: sizeGuide — formatted string like "Chest: S=34-36, M=38-40 (inches)" - Fabric: fabricWeightGsm (GSM), material (primary), distinctMaterials (all unique materials across variants, e.g. heather vs solid differ) - Weight: weightRange — formatted string like "5.00-6.20 oz" - Origin: countryOfProduction - Description: description, moreDetails, sizeAndFitNotes - Returns: guaranteeAndReturns — guarantee and returns policy text - Legal: legalWarningSubstance — legal/safety warnings (e.g. Prop 65) - Reviews: reviewSummary — formatted string like "4.63/5 (119 reviews) - Creators love the softness..." - Stock issues: colorsWithStockIssues — only colors that have problems, each with the discontinuedSizes and outOfStockSizes for that color. Colors absent from this list are fully available across every size in sizes. - Shipping: shipsFrom — regions where the product is fulfilled from (e.g. ["US", "EU", "CA"]) - Badges: badges (e.g. ["OUR_PICK", "BESTSELLER"]) - favourite: boolean

ecommerce_get-catalog-products

ChatGPT
Browse source products from the product catalog with filtering and pagination. These are products available for customization — NOT the shop's own offers. To view products already added to the shop, use get-offers instead. Returns: - Pagination: pageNumber, pageSize, totalElements, totalPages - Per product: - Identity: id, brand, brandModel, name, slug - Category: categoryPath (list of category names) - Pricing: priceFrom (BigDecimal), priceTo (BigDecimal) - Production: productionMethod, minimumOrdersNumber (nullable Int) - Reviews: reviewsSummary with count and rating (nullable) - Metadata: customizationType (REQUESTABLE/INSTANT/DESIGNER_V3_READY/PRINTFUL_DESIGNER_READY), favourite (boolean), badges (OUR_PICK/BESTSELLER/NEW/SIGNATURE) - Print details (only when includePrintDetails=true): printDetails — { supportsBackendRendering (boolean), printAreas: [{ type, name, required, salePrice, supportsBackendRendering, placements: [{ id, name }] }] }. required=true means the area MUST carry artwork or the product cannot be manufactured. IMPORTANT: To find a specific catalog product by name, brand, or keyword, you MUST use the search tool. NEVER paginate through results to find a specific entity.

ecommerce_get-catalog-products

ChatGPT
Browse source products from the product catalog with filtering and pagination. These are products available for customization — NOT the shop's own offers. To view products already added to the shop, use get-offers instead. Returns: - Pagination: pageNumber, pageSize, totalElements, totalPages - Per product: - Identity: id, brand, brandModel, name, slug - Category: categoryPath (list of category names) - Pricing: priceFrom (BigDecimal), priceTo (BigDecimal) - Production: productionMethod, minimumOrdersNumber (nullable Int) - Reviews: reviewsSummary with count and rating (nullable) - Metadata: customizationType (REQUESTABLE/INSTANT/DESIGNER_V3_READY/PRINTFUL_DESIGNER_READY), favourite (boolean), badges (OUR_PICK/BESTSELLER/NEW/SIGNATURE) - Print details (only when includePrintDetails=true): printDetails — { supportsBackendRendering (boolean), printAreas: [{ type, name, required, salePrice, supportsBackendRendering, placements: [{ id, name }] }] }. required=true means the area MUST carry artwork or the product cannot be manufactured. IMPORTANT: To find a specific catalog product by name, brand, or keyword, you MUST use the search tool. NEVER paginate through results to find a specific entity.

ecommerce_get-catalog-products-by-slugs

ChatGPT
Get details of one or more catalog products by their slugs. Fetches all products concurrently. This returns catalog source products — NOT shop offers. Use get-offers-by-ids for shop product details. IMPORTANT: Only use slugs returned by get-catalog-products or search. Do NOT construct or guess slugs from product names — they will not match real catalog entries. Returns a list of products, each containing: - Identity: id, brand, brandModel, name, slug - Category: categoryPath (list of category names from breadcrumbs) - Pricing: priceFrom (BigDecimal), priceTo (BigDecimal) - Production: productionMethod (SUBLIMATION/DTG/EMBROIDERY/SCREEN_PRINTING/PRINTED/STICKER/DTFX/UV/ALL_OVER_PRINT/KNITTING/DRINKWARE/GARMENT_PRINTED/ACRYLIC_CUTOUT/DIE_CUT_MAGNET/HOLO_STICKER/OTHER), minimumOrdersNumber (nullable Int) - Metadata: customizationType (REQUESTABLE/INSTANT/DESIGNER_V3_READY/PRINTFUL_DESIGNER_READY), favourite (boolean), badges (OUR_PICK/BESTSELLER/NEW/SIGNATURE) - Note: reviewsSummary is not available for single product lookups

ecommerce_get-catalog-products-by-slugs

ChatGPT
Get details of one or more catalog products by their slugs. Fetches all products concurrently. This returns catalog source products — NOT shop offers. Use get-offers-by-ids for shop product details. IMPORTANT: Only use slugs returned by get-catalog-products or search. Do NOT construct or guess slugs from product names — they will not match real catalog entries. Returns a list of products, each containing: - Identity: id, brand, brandModel, name, slug - Category: categoryPath (list of category names from breadcrumbs) - Pricing: priceFrom (BigDecimal), priceTo (BigDecimal) - Production: productionMethod (SUBLIMATION/DTG/EMBROIDERY/SCREEN_PRINTING/PRINTED/STICKER/DTFX/UV/ALL_OVER_PRINT/KNITTING/DRINKWARE/GARMENT_PRINTED/ACRYLIC_CUTOUT/DIE_CUT_MAGNET/HOLO_STICKER/OTHER), minimumOrdersNumber (nullable Int) - Metadata: customizationType (REQUESTABLE/INSTANT/DESIGNER_V3_READY/PRINTFUL_DESIGNER_READY), favourite (boolean), badges (OUR_PICK/BESTSELLER/NEW/SIGNATURE) - Note: reviewsSummary is not available for single product lookups

ecommerce_get-collections

ChatGPT
Retrieves all non-archived collections for the shop. NOTE: The system-level "All Products" collection (used internally to display all products on the Products page) is excluded from results. Only user-created collections are returned. Returns a list of collections, each with: - Identity: id (CollectionId), shopId (ShopId), name, slug, description - Visibility: available (boolean), state (PUBLIC/HIDDEN/ARCHIVED) - Time-based availability: availableFrom (nullable ISO 8601), availableTo (nullable ISO 8601) - Products: offerIds (list of OfferIds — use get-offers-by-ids to look up each product) - Sorting: sortingStrategy (MANUAL/BEST_SELLING/NEWEST/OLDEST/NAME_ASC/NAME_DESC) IMPORTANT: To find a specific collection by name or keyword, you MUST use the search tool. NEVER iterate through results to find a specific entity.

ecommerce_get-collections

ChatGPT
Retrieves all non-archived collections for the shop. NOTE: The system-level "All Products" collection (used internally to display all products on the Products page) is excluded from results. Only user-created collections are returned. Returns a list of collections, each with: - Identity: id (CollectionId), shopId (ShopId), name, slug, description - Visibility: available (boolean), state (PUBLIC/HIDDEN/ARCHIVED) - Time-based availability: availableFrom (nullable ISO 8601), availableTo (nullable ISO 8601) - Products: offerIds (list of OfferIds — use get-offers-by-ids to look up each product) - Sorting: sortingStrategy (MANUAL/BEST_SELLING/NEWEST/OLDEST/NAME_ASC/NAME_DESC) IMPORTANT: To find a specific collection by name or keyword, you MUST use the search tool. NEVER iterate through results to find a specific entity.

ecommerce_get-collections-by-ids

ChatGPT
Get details of one or more collections by their IDs. Fetches all collections concurrently. Use get-collections to discover collection IDs if you don't have any. Returns a list of collections, each containing: - Identity: id (CollectionId), shopId (ShopId), name, slug, description - Visibility: available (boolean), state (PUBLIC/HIDDEN/ARCHIVED) - Time-based availability: availableFrom (nullable ISO 8601), availableTo (nullable ISO 8601) - Products: offerIds (list of OfferIds — use get-offers-by-ids to look up each product) - Sorting: sortingStrategy (MANUAL/BEST_SELLING/NEWEST/OLDEST/NAME_ASC/NAME_DESC)

ecommerce_get-collections-by-ids

ChatGPT
Get details of one or more collections by their IDs. Fetches all collections concurrently. Use get-collections to discover collection IDs if you don't have any. Returns a list of collections, each containing: - Identity: id (CollectionId), shopId (ShopId), name, slug, description - Visibility: available (boolean), state (PUBLIC/HIDDEN/ARCHIVED) - Time-based availability: availableFrom (nullable ISO 8601), availableTo (nullable ISO 8601) - Products: offerIds (list of OfferIds — use get-offers-by-ids to look up each product) - Sorting: sortingStrategy (MANUAL/BEST_SELLING/NEWEST/OLDEST/NAME_ASC/NAME_DESC)

ecommerce_get-contributions-per-type-report

ChatGPT
Get the Contributions Per Type analytics report for the shop within a date range: transaction count breakdown by contribution type. This report shows contribution counts over time with the following columns per row: - date: The time period - shop_orders: Number of shop orders - sample_orders: Number of sample orders - orders_twitch_gifts_purchases: Number of Twitch gifts purchases - orders_twitch_gifts_redeems: Number of Twitch gifts redeems - donations: Number of donations - giveaway_links: Number of giveaway links - memberships_subscriptions: Subscriptions = New subscriptions + Renewals + Upgrades - memberships_message_tips: Number of message tips - memberships_locked_messages: Number of locked messages - memberships_paid_posts: Number of paid posts - memberships_subscription_gifts: Number of subscription gifts - memberships_twitch_gifts: Number of Twitch gifts - total: Total contributions across all types Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond). Filter groups (pass comma-separated keys to include only specific metrics): - shop_metrics: shop_orders, sample_orders, orders_twitch_gifts_purchases, orders_twitch_gifts_redeems, donations, giveaway_links - memberships_metrics: memberships_subscriptions, memberships_message_tips, memberships_locked_messages, memberships_paid_posts, memberships_subscription_gifts, memberships_twitch_gifts

ecommerce_get-contributions-per-type-report

ChatGPT
Get the Contributions Per Type analytics report for the shop within a date range: transaction count breakdown by contribution type. This report shows contribution counts over time with the following columns per row: - date: The time period - shop_orders: Number of shop orders - sample_orders: Number of sample orders - orders_twitch_gifts_purchases: Number of Twitch gifts purchases - orders_twitch_gifts_redeems: Number of Twitch gifts redeems - donations: Number of donations - giveaway_links: Number of giveaway links - memberships_subscriptions: Subscriptions = New subscriptions + Renewals + Upgrades - memberships_message_tips: Number of message tips - memberships_locked_messages: Number of locked messages - memberships_paid_posts: Number of paid posts - memberships_subscription_gifts: Number of subscription gifts - memberships_twitch_gifts: Number of Twitch gifts - total: Total contributions across all types Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond). Filter groups (pass comma-separated keys to include only specific metrics): - shop_metrics: shop_orders, sample_orders, orders_twitch_gifts_purchases, orders_twitch_gifts_redeems, donations, giveaway_links - memberships_metrics: memberships_subscriptions, memberships_message_tips, memberships_locked_messages, memberships_paid_posts, memberships_subscription_gifts, memberships_twitch_gifts

ecommerce_get-conversion-rates-report

ChatGPT
Get the Conversion Rates analytics report for the shop within a date range: checkout funnel conversion metrics. This report shows conversion funnel data over time with the following columns per row: - date: The time period - total_sessions: Total number of user sessions adjusted to be at least as large as the number of carts created (baseline for conversion percentages, always 100%) - cart_created_count: Number of shopping carts created by users, including carts from gift and giveaway checkouts - cart_created_percentage: Percentage of sessions that resulted in cart creation - checkout_created_count: Number of initiated checkouts - checkout_created_percentage: Percentage of sessions that resulted in checkout initiation - checkout_paid_count: Number of completed payments - checkout_paid_percentage: Percentage of sessions that resulted in completed payment Precision: HOUR for ranges <=1 day, DAY for longer.

ecommerce_get-conversion-rates-report

ChatGPT
Get the Conversion Rates analytics report for the shop within a date range: checkout funnel conversion metrics. This report shows conversion funnel data over time with the following columns per row: - date: The time period - total_sessions: Total number of user sessions adjusted to be at least as large as the number of carts created (baseline for conversion percentages, always 100%) - cart_created_count: Number of shopping carts created by users, including carts from gift and giveaway checkouts - cart_created_percentage: Percentage of sessions that resulted in cart creation - checkout_created_count: Number of initiated checkouts - checkout_created_percentage: Percentage of sessions that resulted in checkout initiation - checkout_paid_count: Number of completed payments - checkout_paid_percentage: Percentage of sessions that resulted in completed payment Precision: HOUR for ranges <=1 day, DAY for longer.

ecommerce_get-current-shop

ChatGPT
Retrieves the current shop's profile, configuration, and contact details. For user-level access permissions, use get-shop-permissions instead. Returns: - Identity: id (String, e.g. "sh_6c8684ef-..."), name, creatorName, description, logoUrl (nullable URL string) - Domains: primaryDomain (e.g. "myshop.fourthwall.com"), internalDomain (e.g. "myshop.fourthwall.com"), customDomains (list), baseUrl (full URL) - Status: status (LIVE/COMING_SOON/PASSWORD_PROTECTED/INACTIVE) - Contact info: - shopEmail, contactEmail, customerSupportEmail (nullable), transactionalEmail - location: name (nullable), address1 (nullable), address2 (nullable), city (nullable), state (nullable), zip (nullable), country (ISO code) - Settings: - currency (primary, e.g. USD), enabledCurrencies (list, e.g. [USD, EUR, GBP, CAD, AUD]) - membershipsEnabled (Boolean), membershipsUpsellingMinOrderValue (nullable BigDecimal), membershipsUpsellingMinOrderCurrency (nullable, e.g. "USD") - allowedPaymentProviders: list of Stripe, StripeDeferred, PayPal, Klarna, Afterpay, CKO - thankYouCardEnabled (Boolean), externalStoreUrl (nullable URL string) - socialLinks: map of platform key to URL/handle (only non-null entries). Possible keys: youtube, instagram, facebook, twitter, x, tiktok, snapchat, discord, twitch, spotify, reddit, kick, kofi, patreon, threads, pinterest, soundcloud, bluesky, linkedin - verificationRestrictions: list of feature names that require verification (empty list if none) - Timestamps: timezone (e.g. "America/New_York"), createdAt (ISO 8601), lastLiveAt (nullable ISO 8601)

ecommerce_get-current-shop

ChatGPT
Retrieves the current shop's profile, configuration, and contact details. For user-level access permissions, use get-shop-permissions instead. Returns: - Identity: id (String, e.g. "sh_6c8684ef-..."), name, creatorName, description, logoUrl (nullable URL string) - Domains: primaryDomain (e.g. "myshop.fourthwall.com"), internalDomain (e.g. "myshop.fourthwall.com"), customDomains (list), baseUrl (full URL) - Status: status (LIVE/COMING_SOON/PASSWORD_PROTECTED/INACTIVE) - Contact info: - shopEmail, contactEmail, customerSupportEmail (nullable), transactionalEmail - location: name (nullable), address1 (nullable), address2 (nullable), city (nullable), state (nullable), zip (nullable), country (ISO code) - Settings: - currency (primary, e.g. USD), enabledCurrencies (list, e.g. [USD, EUR, GBP, CAD, AUD]) - membershipsEnabled (Boolean), membershipsUpsellingMinOrderValue (nullable BigDecimal), membershipsUpsellingMinOrderCurrency (nullable, e.g. "USD") - allowedPaymentProviders: list of Stripe, StripeDeferred, PayPal, Klarna, Afterpay, CKO - thankYouCardEnabled (Boolean), externalStoreUrl (nullable URL string) - socialLinks: map of platform key to URL/handle (only non-null entries). Possible keys: youtube, instagram, facebook, twitter, x, tiktok, snapchat, discord, twitch, spotify, reddit, kick, kofi, patreon, threads, pinterest, soundcloud, bluesky, linkedin - verificationRestrictions: list of feature names that require verification (empty list if none) - Timestamps: timezone (e.g. "America/New_York"), createdAt (ISO 8601), lastLiveAt (nullable ISO 8601)

ecommerce_get-current-subscription

ChatGPT
Retrieves the current subscription for the shop with usage information. For full plan details (pricing, all limits, features), use get-available-plans. Returns: - Subscription: id, status, activeFrom (nullable ISO 8601), activeTo (nullable ISO 8601), scheduledCancelledAtTheEndOfPeriod (boolean) - Plan summary: plan.id, plan.name, plan.pro (boolean), plan.custom (boolean) - Usage vs limits (each with limit and usage as Long): - offers: product/offer count - members: team member count - domains: custom domain count - digitalProductsStorageBytes: digital file storage in bytes - pendingSubscription (nullable): subscriptionId, planId, planName — present when a plan change is scheduled status values: - PENDING: awaiting payment/activation - ACTIVE: subscription is active and in good standing - PAST_DUE: payment is overdue - CANCELED: subscription has been cancelled Understanding limits: - When usage >= limit, the resource is at capacity - limit = -1 means unlimited for that resource - Storage is in bytes (divide by 1073741824 for GB)

ecommerce_get-current-subscription

ChatGPT
Retrieves the current subscription for the shop with usage information. For full plan details (pricing, all limits, features), use get-available-plans. Returns: - Subscription: id, status, activeFrom (nullable ISO 8601), activeTo (nullable ISO 8601), scheduledCancelledAtTheEndOfPeriod (boolean) - Plan summary: plan.id, plan.name, plan.pro (boolean), plan.custom (boolean) - Usage vs limits (each with limit and usage as Long): - offers: product/offer count - members: team member count - domains: custom domain count - digitalProductsStorageBytes: digital file storage in bytes - pendingSubscription (nullable): subscriptionId, planId, planName — present when a plan change is scheduled status values: - PENDING: awaiting payment/activation - ACTIVE: subscription is active and in good standing - PAST_DUE: payment is overdue - CANCELED: subscription has been cancelled Understanding limits: - When usage >= limit, the resource is at capacity - limit = -1 means unlimited for that resource - Storage is in bytes (divide by 1073741824 for GB)

ecommerce_get-customers-over-time-report

ChatGPT
Get the Customers Over Time analytics report for the shop within a date range: customer acquisition and retention metrics. This report shows customer counts over time with the following columns per row: - date: The time period - customers_first_time: Number of customers making their first purchase in this period - customers_returning: Number of customers who have made purchases before this period - customers_total: Total unique customers (first-time + returning) Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond).

ecommerce_get-customers-over-time-report

ChatGPT
Get the Customers Over Time analytics report for the shop within a date range: customer acquisition and retention metrics. This report shows customer counts over time with the following columns per row: - date: The time period - customers_first_time: Number of customers making their first purchase in this period - customers_returning: Number of customers who have made purchases before this period - customers_total: Total unique customers (first-time + returning) Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond).

ecommerce_get-customization-pricing

ChatGPT
Gets pricing preview for a customization sketch without creating an offer. Returns manufacturing costs per size with cost component breakdown (blank, print regions, etc.). Use this to show the user what the offer would cost before creating it.

ecommerce_get-customization-pricing

ChatGPT
Gets pricing preview for a customization sketch without creating an offer. Returns manufacturing costs per size with cost component breakdown (blank, print regions, etc.). Use this to show the user what the offer would cost before creating it.

ecommerce_get-design-pipeline-status

ChatGPT
Retrieves the current status of a design pipeline. Returns: - pipelineId, status (PENDING, DONE, or ERROR), type - customizationId?: set when a customization exists - offerId?: present when type=OFFER and status=DONE - images[]: { url, width, height, style, color, size?, region? } - priceSuggestions?: { currency, singlePrice, perSize[]: { size, price, cost } } - error?: { step, message } Use this tool to: - Check if a design pipeline has completed - Get generated preview images or the offer ID after completion - Diagnose failures via error.step and error.message

ecommerce_get-design-pipeline-status

ChatGPT
Retrieves the current status of a design pipeline. Returns: - pipelineId, status (PENDING, DONE, or ERROR), type - customizationId?: set when a customization exists - offerId?: present when type=OFFER and status=DONE - images[]: { url, width, height, style, color, size?, region? } - priceSuggestions?: { currency, singlePrice, perSize[]: { size, price, cost } } - error?: { step, message } Use this tool to: - Check if a design pipeline has completed - Get generated preview images or the offer ID after completion - Diagnose failures via error.step and error.message

ecommerce_get-dns-entries

ChatGPT
Retrieves the DNS configuration and records for the shop's custom domain. This is a read-only check — it does NOT re-validate records against live DNS. To trigger a fresh validation, use validate-dns-entries instead. Returns null if no custom domain is configured, otherwise returns: - Domain: domainId, domain (e.g. "myshop.com") - Status: status (CONNECTED, NOT_CONNECTED, PARTIALLY_CONNECTED, SYNCING_YOUR_DOMAIN, REMOVAL_IN_PROGRESS) - Flags: areAllEntriesComplete (boolean), isSslSynced (boolean), retryAllowed (boolean) - Provider: dnsProvider (nullable String, e.g. "Cloudflare", "GoDaddy"), dnsProviderMode (MANUAL/AUTOMATIC, nullable) - Nameservers: nameservers (list of hostname strings) - Per record in records: - recordType (CNAME, TXT, MX, A) - host (nullable, e.g. "www", "@") - value (nullable, the expected DNS value) - status (VALID, INVALID, UNKNOWN) - validationError (nullable String — e.g. "RECORD_NOT_FOUND", "INCORRECT_TYPE_OR_VALUE (found: ...)", "DUPLICATED_BASE_DOMAIN (...)") - alias (identifies the record purpose, e.g. SHOP_IP_ADDRESS, SHOP_WWW_REDIRECT, SENDGRID_MAIL_CNAME, DMARC, SPF_RULE) - priority (nullable Int, for MX records) status values: - CONNECTED: All DNS records verified and SSL active - PARTIALLY_CONNECTED: Website records verified but other records (email, etc.) still pending - NOT_CONNECTED: Website DNS records not yet verified - SYNCING_YOUR_DOMAIN: Website records verified, waiting for SSL certificate provisioning - REMOVAL_IN_PROGRESS: Domain is being disconnected Use this tool to: - Check if a custom domain is set up for the shop - See the current domain connection status and SSL state - List DNS records that need to be configured at the domain registrar - Identify which specific records are failing (check record status + validationError) - Identify the DNS provider being used

ecommerce_get-dns-entries

ChatGPT
Retrieves the DNS configuration and records for the shop's custom domain. This is a read-only check — it does NOT re-validate records against live DNS. To trigger a fresh validation, use validate-dns-entries instead. Returns null if no custom domain is configured, otherwise returns: - Domain: domainId, domain (e.g. "myshop.com") - Status: status (CONNECTED, NOT_CONNECTED, PARTIALLY_CONNECTED, SYNCING_YOUR_DOMAIN, REMOVAL_IN_PROGRESS) - Flags: areAllEntriesComplete (boolean), isSslSynced (boolean), retryAllowed (boolean) - Provider: dnsProvider (nullable String, e.g. "Cloudflare", "GoDaddy"), dnsProviderMode (MANUAL/AUTOMATIC, nullable) - Nameservers: nameservers (list of hostname strings) - Per record in records: - recordType (CNAME, TXT, MX, A) - host (nullable, e.g. "www", "@") - value (nullable, the expected DNS value) - status (VALID, INVALID, UNKNOWN) - validationError (nullable String — e.g. "RECORD_NOT_FOUND", "INCORRECT_TYPE_OR_VALUE (found: ...)", "DUPLICATED_BASE_DOMAIN (...)") - alias (identifies the record purpose, e.g. SHOP_IP_ADDRESS, SHOP_WWW_REDIRECT, SENDGRID_MAIL_CNAME, DMARC, SPF_RULE) - priority (nullable Int, for MX records) status values: - CONNECTED: All DNS records verified and SSL active - PARTIALLY_CONNECTED: Website records verified but other records (email, etc.) still pending - NOT_CONNECTED: Website DNS records not yet verified - SYNCING_YOUR_DOMAIN: Website records verified, waiting for SSL certificate provisioning - REMOVAL_IN_PROGRESS: Domain is being disconnected Use this tool to: - Check if a custom domain is set up for the shop - See the current domain connection status and SSL state - List DNS records that need to be configured at the domain registrar - Identify which specific records are failing (check record status + validationError) - Identify the DNS provider being used

ecommerce_get-draft-attributes

ChatGPT
Returns the current and available colors and sizes for a draft customization. - selectedColors / selectedSizes: what the draft currently has selected. - availableColors / availableSizes: every legal value for this product blank — the only values that add-draft-colors / add-draft-sizes will accept. Call this before add-draft-colors or add-draft-sizes to learn what's legal. Color and size names are case-sensitive — pass them exactly as they appear in availableColors / availableSizes.

ecommerce_get-draft-attributes

ChatGPT
Returns the current and available colors and sizes for a draft customization. - selectedColors / selectedSizes: what the draft currently has selected. - availableColors / availableSizes: every legal value for this product blank — the only values that add-draft-colors / add-draft-sizes will accept. Call this before add-draft-colors or add-draft-sizes to learn what's legal. Color and size names are case-sensitive — pass them exactly as they appear in availableColors / availableSizes.

ecommerce_get-fulfillment-details

ChatGPT
Retrieves fulfillment details for one or more orders by their IDs. Fetches all orders concurrently. Returns a list of fulfillments associated with the orders, excluding cancelled fulfillments. An order may have multiple fulfillments when items are shipped from different fulfillment services (e.g., some items via a third-party provider and others self-fulfilled by the creator). Each fulfillment includes: - id: Unique fulfillment identifier (e.g., "ful_abc123") - shopId: The shop this fulfillment belongs to - orderId: The order being fulfilled - status: Current fulfillment status (OPEN, ACCEPTED, IN_PRODUCTION, PACKAGED, ON_HOLD) - isFulfilledByCreator: true when the creator ships it themselves (FBC / Gnarlywood / Bolt Stitch / Mogul Merch / etc.); false when Fourthwall or a third-party provider handles shipping. Only fulfillments with isFulfilledByCreator=true can have their tracking edited via "edit-self-fulfilled-tracking". - items[]: List of items being fulfilled, each with: - variantId: Product variant ID (UUID) - quantity: Number of units - shippingLabels[]: Shipping labels with tracking info, each with: - trackingCompany: Carrier name (e.g., "USPS", "FedEx") - trackingNumber: Tracking number (may be null if not yet assigned) - trackingService: Service level (e.g., "Priority Mail") - orderShipmentId: Shipment ID linking to order shipping details (may be null) - createdAt: When the fulfillment was created - updatedAt: When the fulfillment was last updated Fulfillment status meanings: - OPEN: Fulfillment created, awaiting processing (no label purchased yet) - ACCEPTED: Acknowledged by the fulfillment provider - IN_PRODUCTION: Items are being produced or prepared - PACKAGED: Items packaged with shipping label purchased, ready to ship or shipped - ON_HOLD: Fulfillment temporarily paused Related tools: - Use "get-order-details-by-ids" to get the full order context (customer info, amounts, address) - Use "get-unfulfilled-orders" to see how many orders still need fulfillment Use this tool to: - Check the fulfillment status for one or more orders - Get tracking information for shipped items - Understand what items are being fulfilled and their quantities

ecommerce_get-fulfillment-details

ChatGPT
Retrieves fulfillment details for one or more orders by their IDs. Fetches all orders concurrently. Returns a list of fulfillments associated with the orders, excluding cancelled fulfillments. An order may have multiple fulfillments when items are shipped from different fulfillment services (e.g., some items via a third-party provider and others self-fulfilled by the creator). Each fulfillment includes: - id: Unique fulfillment identifier (e.g., "ful_abc123") - shopId: The shop this fulfillment belongs to - orderId: The order being fulfilled - status: Current fulfillment status (OPEN, ACCEPTED, IN_PRODUCTION, PACKAGED, ON_HOLD) - isFulfilledByCreator: true when the creator ships it themselves (FBC / Gnarlywood / Bolt Stitch / Mogul Merch / etc.); false when Fourthwall or a third-party provider handles shipping. Only fulfillments with isFulfilledByCreator=true can have their tracking edited via "edit-self-fulfilled-tracking". - items[]: List of items being fulfilled, each with: - variantId: Product variant ID (UUID) - quantity: Number of units - shippingLabels[]: Shipping labels with tracking info, each with: - trackingCompany: Carrier name (e.g., "USPS", "FedEx") - trackingNumber: Tracking number (may be null if not yet assigned) - trackingService: Service level (e.g., "Priority Mail") - orderShipmentId: Shipment ID linking to order shipping details (may be null) - createdAt: When the fulfillment was created - updatedAt: When the fulfillment was last updated Fulfillment status meanings: - OPEN: Fulfillment created, awaiting processing (no label purchased yet) - ACCEPTED: Acknowledged by the fulfillment provider - IN_PRODUCTION: Items are being produced or prepared - PACKAGED: Items packaged with shipping label purchased, ready to ship or shipped - ON_HOLD: Fulfillment temporarily paused Related tools: - Use "get-order-details-by-ids" to get the full order context (customer info, amounts, address) - Use "get-unfulfilled-orders" to see how many orders still need fulfillment Use this tool to: - Check the fulfillment status for one or more orders - Get tracking information for shipped items - Understand what items are being fulfilled and their quantities

ecommerce_get-gift-card

ChatGPT
Get full details of a gift card by ID. Returns: code, status, balance (initial/used/remaining), currency, expiration, origin, recipient, available actions.

ecommerce_get-gift-card

ChatGPT
Get full details of a gift card by ID. Returns: code, status, balance (initial/used/remaining), currency, expiration, origin, recipient, available actions.

ecommerce_get-gift-cards

ChatGPT
List gift cards with pagination. Results are SINGLE cards or GROUPs (bulk-created). Statuses: UNUSED, PARTIALLY_USED, FULLY_USED, EXPIRED, DEACTIVATED, ARCHIVED. Origin: SINGLE_MANUAL, GROUP_MANUAL, ORDER (auto from purchase), GIFT (from giveaway).

ecommerce_get-gift-cards

ChatGPT
List gift cards with pagination. Results are SINGLE cards or GROUPs (bulk-created). Statuses: UNUSED, PARTIALLY_USED, FULLY_USED, EXPIRED, DEACTIVATED, ARCHIVED. Origin: SINGLE_MANUAL, GROUP_MANUAL, ORDER (auto from purchase), GIFT (from giveaway).

ecommerce_get-membership-active-members-report

ChatGPT
Get the Membership Active Members analytics report for the shop within a date range: active membership tracking over time. This report shows active member counts over time with the following columns per row: - date: The time period - active: Number of active members (latest snapshot) - newly_subscribed: Number of newly subscribed members - returning: Number of returning members - cancelled: Number of cancelled members - migrated_to: Members that migrated from another tier (visible when a single tier is selected) - migrated_out: Members that migrated out to a different tier (visible when a single tier is selected) - change: Net change in active members. Formula: Change = Newly subscribed + Returning + Migrated to - Migrated out - Cancelled Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond). Filter groups (pass comma-separated keys to include only specific metrics): - subscription_cycles: annual, month. All included by default. Note: Membership tiers filter is also available but resolved dynamically at runtime based on the shop's configured tiers.

ecommerce_get-membership-active-members-report

ChatGPT
Get the Membership Active Members analytics report for the shop within a date range: active membership tracking over time. This report shows active member counts over time with the following columns per row: - date: The time period - active: Number of active members (latest snapshot) - newly_subscribed: Number of newly subscribed members - returning: Number of returning members - cancelled: Number of cancelled members - migrated_to: Members that migrated from another tier (visible when a single tier is selected) - migrated_out: Members that migrated out to a different tier (visible when a single tier is selected) - change: Net change in active members. Formula: Change = Newly subscribed + Returning + Migrated to - Migrated out - Cancelled Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond). Filter groups (pass comma-separated keys to include only specific metrics): - subscription_cycles: annual, month. All included by default. Note: Membership tiers filter is also available but resolved dynamically at runtime based on the shop's configured tiers.

ecommerce_get-membership-cancelled-members-report

ChatGPT
Get the Membership Cancelled Members analytics report for the shop within a date range: membership cancellation tracking over time. This report shows cancelled member counts over time with the following columns per row: - date: The time period - cancelled_members: Number of cancelled members Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond). Filter groups (pass comma-separated keys to include only specific metrics): - subscription_cycles: annual, month. All included by default. Note: Membership tiers filter is also available but resolved dynamically at runtime based on the shop's configured tiers.

ecommerce_get-membership-cancelled-members-report

ChatGPT
Get the Membership Cancelled Members analytics report for the shop within a date range: membership cancellation tracking over time. This report shows cancelled member counts over time with the following columns per row: - date: The time period - cancelled_members: Number of cancelled members Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond). Filter groups (pass comma-separated keys to include only specific metrics): - subscription_cycles: annual, month. All included by default. Note: Membership tiers filter is also available but resolved dynamically at runtime based on the shop's configured tiers.

ecommerce_get-membership-free-accounts-report

ChatGPT
Get the Memberships Free Accounts analytics report for the shop within a date range: free account tracking over time. This report shows free account counts over time with the following columns per row: - date: The time period - free_accounts: Number of free accounts (latest snapshot) - free_sign_ups: Number of new free sign ups - upgraded_to_paid: Number of free accounts that upgraded to paid - downgraded_to_free: Number of paid accounts that downgraded to free - change: Net change in free account count. Formula: Change = Free sign ups - Upgraded to paid + Downgraded to free Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond).

ecommerce_get-membership-free-accounts-report

ChatGPT
Get the Memberships Free Accounts analytics report for the shop within a date range: free account tracking over time. This report shows free account counts over time with the following columns per row: - date: The time period - free_accounts: Number of free accounts (latest snapshot) - free_sign_ups: Number of new free sign ups - upgraded_to_paid: Number of free accounts that upgraded to paid - downgraded_to_free: Number of paid accounts that downgraded to free - change: Net change in free account count. Formula: Change = Free sign ups - Upgraded to paid + Downgraded to free Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond).

ecommerce_get-membership-free-trials-report

ChatGPT
Get the Memberships Free Trials analytics report for the shop within a date range: free trial conversion tracking over time. This report shows free trial metrics over time with the following columns per row: - date: The time period - started: Number of free trials started - completed: Number of free trials that have ended, either through cancellation or conversion to a paid tier. Formula: Completed = Cancelled + Converted to paid tier - converted_to_paid_tier: Number of free trials converted to paid membership - cancelled: Number of free trials cancelled - conversion_rate: Percentage of completed free trials that converted to paid memberships. Formula: Conversion rate = Converted to paid tier / Completed Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond).

ecommerce_get-membership-free-trials-report

ChatGPT
Get the Memberships Free Trials analytics report for the shop within a date range: free trial conversion tracking over time. This report shows free trial metrics over time with the following columns per row: - date: The time period - started: Number of free trials started - completed: Number of free trials that have ended, either through cancellation or conversion to a paid tier. Formula: Completed = Cancelled + Converted to paid tier - converted_to_paid_tier: Number of free trials converted to paid membership - cancelled: Number of free trials cancelled - conversion_rate: Percentage of completed free trials that converted to paid memberships. Formula: Conversion rate = Converted to paid tier / Completed Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond).

ecommerce_get-membership-mux-most-played-content-report

ChatGPT
Get the Memberships Mux Most Played Content analytics report for the shop within a date range: ranking of audio/video posts by play activity. Rows are a ranking of posts with the following columns per row: - post: Post title - avg_play_time_hours: Average play time per play event, in hours - total_play_time_hours: Total play time across all play events for this post, in hours - number_of_plays: Number of play events for this post Filter groups (pass comma-separated keys to include only specific post types): - post_types: audio, video. All included by default.

ecommerce_get-membership-mux-most-played-content-report

ChatGPT
Get the Memberships Mux Most Played Content analytics report for the shop within a date range: ranking of audio/video posts by play activity. Rows are a ranking of posts with the following columns per row: - post: Post title - avg_play_time_hours: Average play time per play event, in hours - total_play_time_hours: Total play time across all play events for this post, in hours - number_of_plays: Number of play events for this post Filter groups (pass comma-separated keys to include only specific post types): - post_types: audio, video. All included by default.

ecommerce_get-membership-mux-number-of-plays-report

ChatGPT
Get the Memberships Mux Number of Plays analytics report for the shop within a date range: audio/video play events over time. This report shows play event counts over time with the following columns per row: - date: The time period - number_of_plays: Number of play events in this period Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond). Filter groups (pass comma-separated keys to include only specific post types): - post_types: audio, video. All included by default.

ecommerce_get-membership-mux-number-of-plays-report

ChatGPT
Get the Memberships Mux Number of Plays analytics report for the shop within a date range: audio/video play events over time. This report shows play event counts over time with the following columns per row: - date: The time period - number_of_plays: Number of play events in this period Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond). Filter groups (pass comma-separated keys to include only specific post types): - post_types: audio, video. All included by default.

ecommerce_get-membership-mux-total-play-time-report

ChatGPT
Get the Memberships Mux Total Play Time analytics report for the shop within a date range: audio/video watch/listen time over time. This report shows total play time over time with the following columns per row: - date: The time period - play_time_hours: Total play time in this period, in hours Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond). Filter groups (pass comma-separated keys to include only specific post types): - post_types: audio, video. All included by default.

ecommerce_get-membership-mux-total-play-time-report

ChatGPT
Get the Memberships Mux Total Play Time analytics report for the shop within a date range: audio/video watch/listen time over time. This report shows total play time over time with the following columns per row: - date: The time period - play_time_hours: Total play time in this period, in hours Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond). Filter groups (pass comma-separated keys to include only specific post types): - post_types: audio, video. All included by default.

ecommerce_get-membership-new-members-report

ChatGPT
Get the Membership New Members analytics report for the shop within a date range: new member acquisition over time. This report shows new member counts over time with the following columns per row: - date: The time period - new_members: Number of new members Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond). Filter groups (pass comma-separated keys to include only specific metrics): - subscription_cycles: annual, month. All included by default. Note: Membership tiers filter is also available but resolved dynamically at runtime based on the shop's configured tiers.

ecommerce_get-membership-new-members-report

ChatGPT
Get the Membership New Members analytics report for the shop within a date range: new member acquisition over time. This report shows new member counts over time with the following columns per row: - date: The time period - new_members: Number of new members Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond). Filter groups (pass comma-separated keys to include only specific metrics): - subscription_cycles: annual, month. All included by default. Note: Membership tiers filter is also available but resolved dynamically at runtime based on the shop's configured tiers.

ecommerce_get-membership-post-statistics-report

ChatGPT
Get the Membership Post Statistics analytics report for a single audio/video/live-stream post within a date range: engagement and playback metrics over time. This report shows per-post engagement over time with the following columns per row: - date: The time period - views: Number of post views - comments: Number of comments - likes: Number of likes - play_time_hours: Total play time in this period, in hours Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond). A postId is required — this report is always scoped to a single post.

ecommerce_get-membership-post-statistics-report

ChatGPT
Get the Membership Post Statistics analytics report for a single audio/video/live-stream post within a date range: engagement and playback metrics over time. This report shows per-post engagement over time with the following columns per row: - date: The time period - views: Number of post views - comments: Number of comments - likes: Number of likes - play_time_hours: Total play time in this period, in hours Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond). A postId is required — this report is always scoped to a single post.

ecommerce_get-membership-tier-activity-report

ChatGPT
Get the Memberships Tier Activity analytics report for the shop within a date range: member migration between tiers. This report shows tier migration activity with the following columns per row: - migrated_from_to: Migration path showing source and destination tiers (e.g., "Tier A -> Tier B") - quantity: Number of members who migrated Filter groups (pass comma-separated keys to include only specific metrics): - subscription_cycles: annual, month. All included by default.

ecommerce_get-membership-tier-activity-report

ChatGPT
Get the Memberships Tier Activity analytics report for the shop within a date range: member migration between tiers. This report shows tier migration activity with the following columns per row: - migrated_from_to: Migration path showing source and destination tiers (e.g., "Tier A -> Tier B") - quantity: Number of members who migrated Filter groups (pass comma-separated keys to include only specific metrics): - subscription_cycles: annual, month. All included by default.

ecommerce_get-membership-top-tiers-by-new-members-report

ChatGPT
Get the Memberships Top Tiers by New Members analytics report for the shop within a date range: tier ranking by new member acquisition. This report shows a ranking of membership tiers with the following columns per row: - tier: Membership tier name - members: Number of new members in this tier Filter groups (pass comma-separated keys to include only specific metrics): - subscription_cycles: annual, month. All included by default.

ecommerce_get-membership-top-tiers-by-new-members-report

ChatGPT
Get the Memberships Top Tiers by New Members analytics report for the shop within a date range: tier ranking by new member acquisition. This report shows a ranking of membership tiers with the following columns per row: - tier: Membership tier name - members: Number of new members in this tier Filter groups (pass comma-separated keys to include only specific metrics): - subscription_cycles: annual, month. All included by default.

ecommerce_get-offers

ChatGPT
List the shop's own offers (products already added to the shop). These are the creator's products — NOT the product catalog. To browse source products to add, use get-catalog-products instead. Returns: - Pagination: pageNumber, pageSize, totalElements, totalPages - Per offer: - Identity: id (OfferId), customizationId (nullable CustomizationId — present for products with designs, use with inspect-design/edit-design tools), productId (ProductId), name, slug, description, offerType (STANDARD/COMBINED/MEMBERSHIP/BUNDLE/GIFT_CARD) - Status: status (PUBLIC/HIDDEN/ARCHIVED), available (boolean), fulfilledBy (CREATOR or FOURTHWALL) - Images: primaryImageUrl (nullable), imageUrls (first 5 URLs, truncated), imageUrlsCount (total count) - Variants (first 10, truncated): id (OfferVariantId), name, sku, status (AVAILABLE/UNAVAILABLE/ARCHIVED), price (BigDecimal), compareAtPrice (nullable BigDecimal), currency, quantity (nullable Int), attributes (flat string like "Color: Red (#FF0000), Size: Large"), position, createdAt, updatedAt - variantsCount: total number of variants - Variant types: type (COLOR/SIZE/CUSTOM/MANUFACTURER_PREVIEW), title, options (list of option names) - Shipping: shipmentStartDate (nullable, human-readable e.g. "Ships in 5-10 business days"), requiresShipping - Sections: additionalSectionsCount (number of custom sections) - Membership: membershipRequirement (nullable — null, "ALL_TIERS", or "SELECTED_TIERS (id1, id2)") - Customs: customsHsCode (nullable), customsCountryOfOrigin (nullable Country code) - Timestamps: createdAt, updatedAt NOTE: imageUrls (max 5) and variants (max 10) are truncated for performance. Check imageUrlsCount/variantsCount for totals. NOTE: DEMO products are always excluded from results. IMPORTANT: To find a specific offer by name, slug, or keyword, you MUST use the search tool. NEVER paginate through results to find a specific entity.

ecommerce_get-offers

ChatGPT
List the shop's own offers (products already added to the shop). These are the creator's products — NOT the product catalog. To browse source products to add, use get-catalog-products instead. Returns: - Pagination: pageNumber, pageSize, totalElements, totalPages - Per offer: - Identity: id (OfferId), customizationId (nullable CustomizationId — present for products with designs, use with inspect-design/edit-design tools), productId (ProductId), name, slug, description, offerType (STANDARD/COMBINED/MEMBERSHIP/BUNDLE/GIFT_CARD) - Status: status (PUBLIC/HIDDEN/ARCHIVED), available (boolean), fulfilledBy (CREATOR or FOURTHWALL) - Images: primaryImageUrl (nullable), imageUrls (first 5 URLs, truncated), imageUrlsCount (total count) - Variants (first 10, truncated): id (OfferVariantId), name, sku, status (AVAILABLE/UNAVAILABLE/ARCHIVED), price (BigDecimal), compareAtPrice (nullable BigDecimal), currency, quantity (nullable Int), attributes (flat string like "Color: Red (#FF0000), Size: Large"), position, createdAt, updatedAt - variantsCount: total number of variants - Variant types: type (COLOR/SIZE/CUSTOM/MANUFACTURER_PREVIEW), title, options (list of option names) - Shipping: shipmentStartDate (nullable, human-readable e.g. "Ships in 5-10 business days"), requiresShipping - Sections: additionalSectionsCount (number of custom sections) - Membership: membershipRequirement (nullable — null, "ALL_TIERS", or "SELECTED_TIERS (id1, id2)") - Customs: customsHsCode (nullable), customsCountryOfOrigin (nullable Country code) - Timestamps: createdAt, updatedAt NOTE: imageUrls (max 5) and variants (max 10) are truncated for performance. Check imageUrlsCount/variantsCount for totals. NOTE: DEMO products are always excluded from results. IMPORTANT: To find a specific offer by name, slug, or keyword, you MUST use the search tool. NEVER paginate through results to find a specific entity.

ecommerce_get-offers-by-ids

ChatGPT
Get full details of one or more shop offers (products) by their IDs. Fetches all offers concurrently. This returns the shop's own products — NOT catalog source products. Use get-catalog-products-by-slugs for source product details. Use get-offers to discover offer IDs if you don't have any. NOTE: DEMO products are always excluded from results. Returns a list of offers, each containing: - Identity: id (OfferId), productId (ProductId), name, slug, description, offerType (STANDARD/COMBINED/MEMBERSHIP/BUNDLE/GIFT_CARD) - Status: status (PUBLIC/HIDDEN/ARCHIVED), available (boolean), fulfilledBy (CREATOR or FOURTHWALL) - Images: primaryImageUrl (nullable), imageUrls (first 5 URLs, truncated), imageUrlsCount (total count) - Variants (first 10, truncated): id (OfferVariantId), name, sku, status (AVAILABLE/UNAVAILABLE/ARCHIVED), price (BigDecimal), compareAtPrice (nullable BigDecimal), currency, quantity (nullable Int), attributes (flat string like "Color: Red (#FF0000), Size: Large"), position, createdAt, updatedAt - variantsCount: total number of variants - Variant types: type (COLOR/SIZE/CUSTOM/MANUFACTURER_PREVIEW), title, options (list of option names) - Shipping: shipmentStartDate (nullable, human-readable e.g. "Ships in 5-10 business days"), requiresShipping - Sections: additionalSectionsCount (number of custom sections) - Membership: membershipRequirement (nullable — null, "ALL_TIERS", or "SELECTED_TIERS (id1, id2)") - Customs: customsHsCode (nullable), customsCountryOfOrigin (nullable Country code) - Timestamps: createdAt, updatedAt

ecommerce_get-offers-by-ids

ChatGPT
Get full details of one or more shop offers (products) by their IDs. Fetches all offers concurrently. This returns the shop's own products — NOT catalog source products. Use get-catalog-products-by-slugs for source product details. Use get-offers to discover offer IDs if you don't have any. NOTE: DEMO products are always excluded from results. Returns a list of offers, each containing: - Identity: id (OfferId), productId (ProductId), name, slug, description, offerType (STANDARD/COMBINED/MEMBERSHIP/BUNDLE/GIFT_CARD) - Status: status (PUBLIC/HIDDEN/ARCHIVED), available (boolean), fulfilledBy (CREATOR or FOURTHWALL) - Images: primaryImageUrl (nullable), imageUrls (first 5 URLs, truncated), imageUrlsCount (total count) - Variants (first 10, truncated): id (OfferVariantId), name, sku, status (AVAILABLE/UNAVAILABLE/ARCHIVED), price (BigDecimal), compareAtPrice (nullable BigDecimal), currency, quantity (nullable Int), attributes (flat string like "Color: Red (#FF0000), Size: Large"), position, createdAt, updatedAt - variantsCount: total number of variants - Variant types: type (COLOR/SIZE/CUSTOM/MANUFACTURER_PREVIEW), title, options (list of option names) - Shipping: shipmentStartDate (nullable, human-readable e.g. "Ships in 5-10 business days"), requiresShipping - Sections: additionalSectionsCount (number of custom sections) - Membership: membershipRequirement (nullable — null, "ALL_TIERS", or "SELECTED_TIERS (id1, id2)") - Customs: customsHsCode (nullable), customsCountryOfOrigin (nullable Country code) - Timestamps: createdAt, updatedAt

ecommerce_get-order-cancellation-by-ids

ChatGPT
Get cancellation information for one or more orders by their IDs. Fetches all concurrently. Use this to check if orders are eligible for cancellation before attempting to cancel. Returns a list of cancellation responses, each containing: - Eligibility: fullyCancellable (boolean), partiallyCancellable (boolean) - notCancellableReason: why cancellation is blocked (STATUS, IN_PRODUCTION_OR_DELIVERING, OLDER_THAN_ALLOWED_CANCELLATION_TIMEFRAME, CONTAINS_DIGITAL_ITEMS, GIFT_CARD_ALREADY_USED, etc.) or null if cancellable - Refund: remainingRefundAmount + remainingRefundCurrency - cancellableItems: list with variantId, groupedId (nullable; needed verbatim for partial cancel), quantity, offerName, variantName, unitPrice, currency - nonCancellableItems: list with variantId, groupedId (nullable), quantity, reason (ORDER_NOT_CANCELLABLE, IN_PRODUCTION, IN_DELIVERY, etc.), offerName, variantName, unitPrice, currency

ecommerce_get-order-cancellation-by-ids

ChatGPT
Get cancellation information for one or more orders by their IDs. Fetches all concurrently. Use this to check if orders are eligible for cancellation before attempting to cancel. Returns a list of cancellation responses, each containing: - Eligibility: fullyCancellable (boolean), partiallyCancellable (boolean) - notCancellableReason: why cancellation is blocked (STATUS, IN_PRODUCTION_OR_DELIVERING, OLDER_THAN_ALLOWED_CANCELLATION_TIMEFRAME, CONTAINS_DIGITAL_ITEMS, GIFT_CARD_ALREADY_USED, etc.) or null if cancellable - Refund: remainingRefundAmount + remainingRefundCurrency - cancellableItems: list with variantId, groupedId (nullable; needed verbatim for partial cancel), quantity, offerName, variantName, unitPrice, currency - nonCancellableItems: list with variantId, groupedId (nullable), quantity, reason (ORDER_NOT_CANCELLABLE, IN_PRODUCTION, IN_DELIVERY, etc.), offerName, variantName, unitPrice, currency

ecommerce_get-order-details-by-ids

ChatGPT
Get full details of one or more orders by their IDs. Fetches all orders concurrently. Use get-orders first to find order IDs, then use this tool to get details. Returns a list of orders, each containing: - Order identity: id (UUID), friendlyId (8-char alphanumeric, e.g. "T4YTE8HA"), status, fulfillmentStatus, type, salesChannel - Customer info: customerEmail, customerName, customerPhone, message (note left by customer) - Financial summary (amounts): merchandiseTotal, shippingTotal, taxTotal, discountTotal, orderTotal, paidByCustomer, totalRefunded, paidByCustomerFinal, currency, donation - Shipping: shippingMethod - Items: list of ordered items with offerName, variantName, variantId, quantity, unitPrice - Cancelled items: same structure as items, for any cancelled line items - Shipments: items grouped by shipment, each with status (NOT_SHIPPED/SHIPPED/DELIVERED), tracking (url, carrier, trackingCode), deliveryEstimate (human-readable string) - Promotion: title, code, type (e.g. "PERCENTAGE (10%)"), isAutoApplied - Gift cards: code, amountUsed, currency - Refund summary: hasRefunds, list of individual refunds with status, amount, issuer, reason - Replacement: type (SOURCE/REPLACEMENT), linked order IDs, reason - Profit: profit amount and currency

ecommerce_get-order-details-by-ids

ChatGPT
Get full details of one or more orders by their IDs. Fetches all orders concurrently. Use get-orders first to find order IDs, then use this tool to get details. Returns a list of orders, each containing: - Order identity: id (UUID), friendlyId (8-char alphanumeric, e.g. "T4YTE8HA"), status, fulfillmentStatus, type, salesChannel - Customer info: customerEmail, customerName, customerPhone, message (note left by customer) - Financial summary (amounts): merchandiseTotal, shippingTotal, taxTotal, discountTotal, orderTotal, paidByCustomer, totalRefunded, paidByCustomerFinal, currency, donation - Shipping: shippingMethod - Items: list of ordered items with offerName, variantName, variantId, quantity, unitPrice - Cancelled items: same structure as items, for any cancelled line items - Shipments: items grouped by shipment, each with status (NOT_SHIPPED/SHIPPED/DELIVERED), tracking (url, carrier, trackingCode), deliveryEstimate (human-readable string) - Promotion: title, code, type (e.g. "PERCENTAGE (10%)"), isAutoApplied - Gift cards: code, amountUsed, currency - Refund summary: hasRefunds, list of individual refunds with status, amount, issuer, reason - Replacement: type (SOURCE/REPLACEMENT), linked order IDs, reason - Profit: profit amount and currency

ecommerce_get-orders

ChatGPT
List orders for the shop with filtering and pagination support. Returns a summary list of orders. Each order includes: - Identity: id (UUID), friendlyId (8-char alphanumeric, e.g. "T4YTE8HA"), status, fulfillmentStatus, type, salesChannel - Customer: customerEmail, customerName, message - Financial: amounts (merchandiseTotal, shippingTotal, taxTotal, discountTotal, orderTotal, paidByCustomer, totalRefunded, paidByCustomerFinal, currency, donation) - Shipping: shippingMethod - Items: list of items with offerName, variantName, variantId, quantity, unitPrice - Cancelled items: same structure as items - Refund summary: hasRefunds, refundedViaCancel, refundedManually, individual refunds - Replacement info: type (SOURCE/REPLACEMENT), linked order IDs, reason - Timestamps: createdAt, updatedAt Note: This is a summary view. Fields like shipments, promotion, giftCards, profit, and customerPhone are only available via get-order-details-by-ids. IMPORTANT: To find a specific order by customer email, friendly ID, or keyword, you MUST use the search tool. NEVER paginate through results to find a specific entity. The 'q' parameter supports searching by: - Customer email address - Order number (friendlyId) - Customer name

ecommerce_get-orders

ChatGPT
List orders for the shop with filtering and pagination support. Returns a summary list of orders. Each order includes: - Identity: id (UUID), friendlyId (8-char alphanumeric, e.g. "T4YTE8HA"), status, fulfillmentStatus, type, salesChannel - Customer: customerEmail, customerName, message - Financial: amounts (merchandiseTotal, shippingTotal, taxTotal, discountTotal, orderTotal, paidByCustomer, totalRefunded, paidByCustomerFinal, currency, donation) - Shipping: shippingMethod - Items: list of items with offerName, variantName, variantId, quantity, unitPrice - Cancelled items: same structure as items - Refund summary: hasRefunds, refundedViaCancel, refundedManually, individual refunds - Replacement info: type (SOURCE/REPLACEMENT), linked order IDs, reason - Timestamps: createdAt, updatedAt Note: This is a summary view. Fields like shipments, promotion, giftCards, profit, and customerPhone are only available via get-order-details-by-ids. IMPORTANT: To find a specific order by customer email, friendly ID, or keyword, you MUST use the search tool. NEVER paginate through results to find a specific entity. The 'q' parameter supports searching by: - Customer email address - Order number (friendlyId) - Customer name

ecommerce_get-orders-statistics

ChatGPT
Get count of orders matching specific criteria. Returns the total number of orders matching the filters. Useful for: - Dashboard statistics - Counting orders by status - Monitoring order volume over time

ecommerce_get-orders-statistics

ChatGPT
Get count of orders matching specific criteria. Returns the total number of orders matching the filters. Useful for: - Dashboard statistics - Counting orders by status - Monitoring order volume over time

ecommerce_get-payment-method-used-report

ChatGPT
Get the Payment Method Used analytics report for the shop within a date range: order distribution by payment method. This report shows a breakdown of payment methods with the following columns per row: - payment_method: Payment method name - total: Number of orders using this payment method - percentage: Percentage of total orders using this payment method

ecommerce_get-payment-method-used-report

ChatGPT
Get the Payment Method Used analytics report for the shop within a date range: order distribution by payment method. This report shows a breakdown of payment methods with the following columns per row: - payment_method: Payment method name - total: Number of orders using this payment method - percentage: Percentage of total orders using this payment method

ecommerce_get-payout-info

ChatGPT
Retrieves the current payout account status and configuration for the shop. Returns: - Status: status (INACTIVE/IN_PROGRESS/ACTIVE) - Ownership: owner (CUSTOM/PARTNER, nullable), shopId (nullable), partnerId (nullable), partnerName (nullable) - Connection: connectedAt (ISO 8601, nullable) - Account creator: accountCreator with userId, email, fullName (nullable) — nullable when INACTIVE Status values: - INACTIVE: No payout account set up. All other fields are null. - IN_PROGRESS: Payout account exists but Stripe onboarding is incomplete. Payouts are pending. - ACTIVE: Payout account fully configured. The shop can receive payouts.

ecommerce_get-payout-info

ChatGPT
Retrieves the current payout account status and configuration for the shop. Returns: - Status: status (INACTIVE/IN_PROGRESS/ACTIVE) - Ownership: owner (CUSTOM/PARTNER, nullable), shopId (nullable), partnerId (nullable), partnerName (nullable) - Connection: connectedAt (ISO 8601, nullable) - Account creator: accountCreator with userId, email, fullName (nullable) — nullable when INACTIVE Status values: - INACTIVE: No payout account set up. All other fields are null. - IN_PROGRESS: Payout account exists but Stripe onboarding is incomplete. Payouts are pending. - ACTIVE: Payout account fully configured. The shop can receive payouts.

ecommerce_get-payout-transactions

ChatGPT
Retrieve paginated payout transaction history for the shop. Requires payout account to be active — use get-payout-info to check status first. Returns: - Pagination: pageNumber, pageSize, totalElements, totalPages - Transactions list, each with: - transferAmount (BigDecimal)/transferCurrency: Amount transferred from Fourthwall to creator's Stripe account (typically USD) - payoutAmount (BigDecimal, nullable)/payoutCurrency (nullable): Amount paid out to creator's bank/card (currency depends on account settings) - status: PENDING, IN_PROGRESS, PAID, FAILED, REVERTED - createdAt (ISO 8601) - paidToType: BANK_ACCOUNT, CARD, PARTNER, MANUAL, UNKNOWN - paidToDetails (nullable): Last 4 digits of bank/card (e.g. ****1234) or partner name; null for MANUAL/UNKNOWN Status values: - PENDING: Payout initiated, not yet processed - IN_PROGRESS: Being processed by Stripe - PAID: Successfully paid out to the creator - FAILED: Payout failed (check paidToDetails for destination info) - REVERTED: Payout was reversed

ecommerce_get-payout-transactions

ChatGPT
Retrieve paginated payout transaction history for the shop. Requires payout account to be active — use get-payout-info to check status first. Returns: - Pagination: pageNumber, pageSize, totalElements, totalPages - Transactions list, each with: - transferAmount (BigDecimal)/transferCurrency: Amount transferred from Fourthwall to creator's Stripe account (typically USD) - payoutAmount (BigDecimal, nullable)/payoutCurrency (nullable): Amount paid out to creator's bank/card (currency depends on account settings) - status: PENDING, IN_PROGRESS, PAID, FAILED, REVERTED - createdAt (ISO 8601) - paidToType: BANK_ACCOUNT, CARD, PARTNER, MANUAL, UNKNOWN - paidToDetails (nullable): Last 4 digits of bank/card (e.g. ****1234) or partner name; null for MANUAL/UNKNOWN Status values: - PENDING: Payout initiated, not yet processed - IN_PROGRESS: Being processed by Stripe - PAID: Successfully paid out to the creator - FAILED: Payout failed (check paidToDetails for destination info) - REVERTED: Payout was reversed

ecommerce_get-personalized-recommendations

ChatGPT
Get personalized catalog product recommendations for the current shop. Returns source products from the catalog — NOT shop offers. Returns a list of recommended products, each with: - Identity: id, brand, brandModel, name, slug - Category: categoryPath (list of category names) - Pricing: priceFrom (BigDecimal), priceTo (BigDecimal) - Production: productionMethod, minimumOrdersNumber (nullable) - Reviews: reviewsSummary with count and rating (nullable) - Metadata: customizationType, favourite (boolean), badges (OUR_PICK/BESTSELLER/NEW/SIGNATURE)

ecommerce_get-personalized-recommendations

ChatGPT
Get personalized catalog product recommendations for the current shop. Returns source products from the catalog — NOT shop offers. Returns a list of recommended products, each with: - Identity: id, brand, brandModel, name, slug - Category: categoryPath (list of category names) - Pricing: priceFrom (BigDecimal), priceTo (BigDecimal) - Production: productionMethod, minimumOrdersNumber (nullable) - Reviews: reviewsSummary with count and rating (nullable) - Metadata: customizationType, favourite (boolean), badges (OUR_PICK/BESTSELLER/NEW/SIGNATURE)

ecommerce_get-promotions

ChatGPT
List all promotions (shop + membership) with pagination. Two categories of promotions: - Shop (SINGLE, MULTI, AUTO_APPLYING): discount codes for orders — percentage off, fixed amount, free shipping, or free products. Have code, discount, requirements, product scope. - Membership (MEMBERSHIPS_SINGLE, MEMBERSHIPS_MULTI): percentage off subscriptions. Have subscriptionType, membershipTierIds (null=all tiers), duration, newMembersOnly. - MULTI types contain multiple individual codes sharing the same discount settings (codes[] field). Status: LIVE (active) → ENDED (deactivated) → ARCHIVED (deleted). ALL_USED = hit max redemptions. creationReason: MANUAL (dashboard) or FROM_GIFT (auto-generated from gift campaign) IMPORTANT: To find a specific promotion by code, ID, or keyword — use the global search tool (not this tool). NEVER paginate through results to locate a specific entity.

ecommerce_get-promotions

ChatGPT
List all promotions (shop + membership) with pagination. Two categories of promotions: - Shop (SINGLE, MULTI, AUTO_APPLYING): discount codes for orders — percentage off, fixed amount, free shipping, or free products. Have code, discount, requirements, product scope. - Membership (MEMBERSHIPS_SINGLE, MEMBERSHIPS_MULTI): percentage off subscriptions. Have subscriptionType, membershipTierIds (null=all tiers), duration, newMembersOnly. - MULTI types contain multiple individual codes sharing the same discount settings (codes[] field). Status: LIVE (active) → ENDED (deactivated) → ARCHIVED (deleted). ALL_USED = hit max redemptions. creationReason: MANUAL (dashboard) or FROM_GIFT (auto-generated from gift campaign) IMPORTANT: To find a specific promotion by code, ID, or keyword — use the global search tool (not this tool). NEVER paginate through results to locate a specific entity.

ecommerce_get-promotions-by-ids

ChatGPT
Fetch full details of up to 10 promotions by their IDs. Use get-promotions to discover promotion IDs first if needed. Each promotion has: type (SINGLE/MULTI/AUTO_APPLYING/MEMBERSHIPS_SINGLE/MEMBERSHIPS_MULTI), status, discount info, limits, usage count. Shop promotions have code, product scope, minimum order. Membership promotions have subscription type, tiers, duration.

ecommerce_get-promotions-by-ids

ChatGPT
Fetch full details of up to 10 promotions by their IDs. Use get-promotions to discover promotion IDs first if needed. Each promotion has: type (SINGLE/MULTI/AUTO_APPLYING/MEMBERSHIPS_SINGLE/MEMBERSHIPS_MULTI), status, discount info, limits, usage count. Shop promotions have code, product scope, minimum order. Membership promotions have subscription type, tiers, duration.

ecommerce_get-sales-by-country-report

ChatGPT
Get the Sales by Country analytics report for the shop within a date range: revenue and profit breakdown by customer country with optional state-level detail. Rows are hierarchical: each top-level row is a country aggregate with totals. When a country has orders from multiple states, state-level detail rows are nested in other_rows, sorted by gross sales descending. Columns per row: - country_or_state: For top-level rows, the customer country code (null for donations). For nested rows under a country, the state label — full name for US states (e.g., "California", "New York"), raw code for non-US, or "Unknown" when the state is not available. - country: The customer country code (null for donations). For nested rows, this is the parent country code — same as the aggregate row. Always hidden in the UI, but always present in the JSON response. - contributions: Number of orders - income: Amount of money spent across transactions before any deductions - costs: Total costs with breakdown (costs.value = total, costs.elements contains: product_costs, fulfillment_fees, shipping_costs, taxes, payment_processing_fees, inventory_storage_fees, membership_fees, giveaway_costs, donation_costs, ait_costs) - profit: Net profit (Profit = Gross sales - Costs)

ecommerce_get-sales-by-country-report

ChatGPT
Get the Sales by Country analytics report for the shop within a date range: revenue and profit breakdown by customer country with optional state-level detail. Rows are hierarchical: each top-level row is a country aggregate with totals. When a country has orders from multiple states, state-level detail rows are nested in other_rows, sorted by gross sales descending. Columns per row: - country_or_state: For top-level rows, the customer country code (null for donations). For nested rows under a country, the state label — full name for US states (e.g., "California", "New York"), raw code for non-US, or "Unknown" when the state is not available. - country: The customer country code (null for donations). For nested rows, this is the parent country code — same as the aggregate row. Always hidden in the UI, but always present in the JSON response. - contributions: Number of orders - income: Amount of money spent across transactions before any deductions - costs: Total costs with breakdown (costs.value = total, costs.elements contains: product_costs, fulfillment_fees, shipping_costs, taxes, payment_processing_fees, inventory_storage_fees, membership_fees, giveaway_costs, donation_costs, ait_costs) - profit: Net profit (Profit = Gross sales - Costs)

ecommerce_get-sales-by-source-report

ChatGPT
Get the Sales by Source analytics report for the shop within a date range: revenue breakdown by traffic source or social platform. This report shows a breakdown of sales with the following columns per row: - source: Sales origin, identifying whether it came from website traffic (e.g., direct, referral, search) or from a social platform - total_sales: Total sales amount Precision: HOUR for ranges <=1 day, DAY for longer. Filter groups: - source_dimension: Group by dimension. One of: traffic_source, social_platform. Default: traffic_source.

ecommerce_get-sales-by-source-report

ChatGPT
Get the Sales by Source analytics report for the shop within a date range: revenue breakdown by traffic source or social platform. This report shows a breakdown of sales with the following columns per row: - source: Sales origin, identifying whether it came from website traffic (e.g., direct, referral, search) or from a social platform - total_sales: Total sales amount Precision: HOUR for ranges <=1 day, DAY for longer. Filter groups: - source_dimension: Group by dimension. One of: traffic_source, social_platform. Default: traffic_source.

ecommerce_get-sales-by-utm-report

ChatGPT
Get the Sales by UTM Parameters analytics report for the shop within a date range: revenue and contribution tracking by UTM campaign parameters. This report shows sales attributed to UTM parameters with the following columns per row: - date: The time period - utm_source: The source of traffic (e.g., google, facebook, newsletter) - utm_medium: The marketing medium (e.g., cpc, email, social) - utm_campaign: The campaign name or identifier - utm_content: Used to differentiate similar content or links within the same ad - utm_term: Keywords for paid search campaigns - contributions: Total number of unique transactions with these UTM parameters - total_sales: Sum of all revenue attributed to these UTM parameters Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond). Filter groups (pass comma-separated keys to include only specific metrics): - filter_group: orders, memberships, donations

ecommerce_get-sales-by-utm-report

ChatGPT
Get the Sales by UTM Parameters analytics report for the shop within a date range: revenue and contribution tracking by UTM campaign parameters. This report shows sales attributed to UTM parameters with the following columns per row: - date: The time period - utm_source: The source of traffic (e.g., google, facebook, newsletter) - utm_medium: The marketing medium (e.g., cpc, email, social) - utm_campaign: The campaign name or identifier - utm_content: Used to differentiate similar content or links within the same ad - utm_term: Keywords for paid search campaigns - contributions: Total number of unique transactions with these UTM parameters - total_sales: Sum of all revenue attributed to these UTM parameters Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond). Filter groups (pass comma-separated keys to include only specific metrics): - filter_group: orders, memberships, donations

ecommerce_get-sales-over-time-report

ChatGPT
Get the Sales Over Time analytics report for the shop within a date range: revenue and profit breakdown over time. This report shows sales trends over time with the following columns per row: - date: The time period - contributions: Total number of unique transactions - total_sales: Total revenue after cancellations, refunds, and shipping costs, but including all fees - gross_sales: Total sales before discounts, shipping, and taxes - discounts: Total discount amount applied to transactions - refunds_and_cancellations: Total amount refunded or cancelled - net_sales: Sales after shipping, taxes, and refunds/cancellations are deducted - shipping: Shipping revenue minus shipping costs paid to carriers - taxes_and_duties: Total tax collected on transactions - additional_fees: Payment processing, subscription, donation, and fulfillment fees - fourthwall_product_cost: Cost of products provided by Fourthwall - product_cost: Cost of self-produced products as declared by you - net_profit: Final profit after all costs and fees are deducted - net_profit_before_payment_fees: Profit before payment processing fees are deducted Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond). Filter groups (all default to true, pass comma-separated keys to include only specific metrics): - filter_group: orders, memberships, donations

ecommerce_get-sales-over-time-report

ChatGPT
Get the Sales Over Time analytics report for the shop within a date range: revenue and profit breakdown over time. This report shows sales trends over time with the following columns per row: - date: The time period - contributions: Total number of unique transactions - total_sales: Total revenue after cancellations, refunds, and shipping costs, but including all fees - gross_sales: Total sales before discounts, shipping, and taxes - discounts: Total discount amount applied to transactions - refunds_and_cancellations: Total amount refunded or cancelled - net_sales: Sales after shipping, taxes, and refunds/cancellations are deducted - shipping: Shipping revenue minus shipping costs paid to carriers - taxes_and_duties: Total tax collected on transactions - additional_fees: Payment processing, subscription, donation, and fulfillment fees - fourthwall_product_cost: Cost of products provided by Fourthwall - product_cost: Cost of self-produced products as declared by you - net_profit: Final profit after all costs and fees are deducted - net_profit_before_payment_fees: Profit before payment processing fees are deducted Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond). Filter groups (all default to true, pass comma-separated keys to include only specific metrics): - filter_group: orders, memberships, donations

ecommerce_get-sample-credit-balance

ChatGPT
Retrieves the current sample credit balance for the shop. Sample credits allow creators to order product samples at cost price instead of full retail. This is purely informational — do NOT use it to gate create-sample-checkout. Sample checkouts work regardless of the balance (any unfunded portion is paid by the buyer at checkout). Returns: - balance: Current sample credit balance (BigDecimal, nullable if no credits exist) - balanceWithIncentive: Balance including any bonus incentive credits (BigDecimal, nullable) - currency: Currency code for both balance fields (e.g., "USD", nullable if no balance) balanceWithIncentive >= balance when incentive credits are available. Both fields are null when the shop has never received sample credits.

ecommerce_get-sample-credit-balance

ChatGPT
Retrieves the current sample credit balance for the shop. Sample credits allow creators to order product samples at cost price instead of full retail. This is purely informational — do NOT use it to gate create-sample-checkout. Sample checkouts work regardless of the balance (any unfunded portion is paid by the buyer at checkout). Returns: - balance: Current sample credit balance (BigDecimal, nullable if no credits exist) - balanceWithIncentive: Balance including any bonus incentive credits (BigDecimal, nullable) - currency: Currency code for both balance fields (e.g., "USD", nullable if no balance) balanceWithIncentive >= balance when incentive credits are available. Both fields are null when the shop has never received sample credits.

ecommerce_get-sessions-by-source-report

ChatGPT
Get the Sessions by Source analytics report for the shop within a date range: session count breakdown by traffic source or social platform. This report shows a breakdown of sessions with the following columns per row: - source: Session origin, identifying whether it came from website traffic (e.g., direct, referral, search) or from a social platform - session_count: Total number of sessions from this source Precision: HOUR for ranges <=1 day, DAY for longer. Filter groups: - source_dimension: Group by dimension. One of: traffic_source, social_platform. Default: traffic_source.

ecommerce_get-sessions-by-source-report

ChatGPT
Get the Sessions by Source analytics report for the shop within a date range: session count breakdown by traffic source or social platform. This report shows a breakdown of sessions with the following columns per row: - source: Session origin, identifying whether it came from website traffic (e.g., direct, referral, search) or from a social platform - session_count: Total number of sessions from this source Precision: HOUR for ranges <=1 day, DAY for longer. Filter groups: - source_dimension: Group by dimension. One of: traffic_source, social_platform. Default: traffic_source.

ecommerce_get-shipping-flat-rates

ChatGPT
Retrieves the flat rate shipping pricing configuration for the shop. Flat rates allow shops to charge fixed shipping costs instead of carrier-calculated rates. Typically used for creator-fulfilled (self-shipped) products. Returns: - enabled: whether flat rate shipping is active (Boolean) - domesticShippingBasePrice: base price for domestic (same-country) shipments (BigDecimal) - domesticShippingEachAdditionalItemFee: per-additional-item fee for domestic orders (BigDecimal) - internationalShippingBasePrice: base price for international shipments (BigDecimal) - internationalShippingEachAdditionalItemFee: per-additional-item fee for international orders (BigDecimal) - currency: currency code for all prices (e.g. "USD", "EUR") Shipping cost formula: basePrice + (additionalItems × eachAdditionalItemFee).

ecommerce_get-shipping-flat-rates

ChatGPT
Retrieves the flat rate shipping pricing configuration for the shop. Flat rates allow shops to charge fixed shipping costs instead of carrier-calculated rates. Typically used for creator-fulfilled (self-shipped) products. Returns: - enabled: whether flat rate shipping is active (Boolean) - domesticShippingBasePrice: base price for domestic (same-country) shipments (BigDecimal) - domesticShippingEachAdditionalItemFee: per-additional-item fee for domestic orders (BigDecimal) - internationalShippingBasePrice: base price for international shipments (BigDecimal) - internationalShippingEachAdditionalItemFee: per-additional-item fee for international orders (BigDecimal) - currency: currency code for all prices (e.g. "USD", "EUR") Shipping cost formula: basePrice + (additionalItems × eachAdditionalItemFee).

ecommerce_get-shipping-profiles

ChatGPT
Retrieves all shipping profiles configured for the shop. Shipping profiles define which products (offers) ship to which destination countries. Each profile maps a set of offer IDs to a set of countries. Returns: - enabled: whether shipping is globally enabled for this shop (Boolean) - shippingProfiles: list of profiles, each containing: - id: shipping profile ID (nullable — null for the default profile) - offerIds: list of offer IDs (UUIDs) covered by this profile - countries: list of destination countries (ISO enum values, e.g. US, GB, DE, FR) - enabled: whether this individual profile is active (Boolean) Note: offerIds correspond to offers from the get-offers tool.

ecommerce_get-shipping-profiles

ChatGPT
Retrieves all shipping profiles configured for the shop. Shipping profiles define which products (offers) ship to which destination countries. Each profile maps a set of offer IDs to a set of countries. Returns: - enabled: whether shipping is globally enabled for this shop (Boolean) - shippingProfiles: list of profiles, each containing: - id: shipping profile ID (nullable — null for the default profile) - offerIds: list of offer IDs (UUIDs) covered by this profile - countries: list of destination countries (ISO enum values, e.g. US, GB, DE, FR) - enabled: whether this individual profile is active (Boolean) Note: offerIds correspond to offers from the get-offers tool.

ecommerce_get-shop-permissions

ChatGPT
Retrieves the current user's permissions and group membership for the current shop. For shop profile and configuration details, use get-current-shop instead. Returns: - shopId (String, e.g. "sh_6c8684ef-6219-421f-90cf-d6d61b2237c9"): The shop's unique identifier - userId (String): The user's Keycloak ID - groups: Set of group names the user belongs to (OWNER, MANAGER, DESIGNER, VIEWER) Group meanings: - OWNER: Full access to all shop features, including user management and billing - MANAGER: Near-full access, excluding owner-level operations like deactivation - DESIGNER: Theme and visual editing access only - VIEWER: Read-only access to shop data

ecommerce_get-shop-permissions

ChatGPT
Retrieves the current user's permissions and group membership for the current shop. For shop profile and configuration details, use get-current-shop instead. Returns: - shopId (String, e.g. "sh_6c8684ef-6219-421f-90cf-d6d61b2237c9"): The shop's unique identifier - userId (String): The user's Keycloak ID - groups: Set of group names the user belongs to (OWNER, MANAGER, DESIGNER, VIEWER) Group meanings: - OWNER: Full access to all shop features, including user management and billing - MANAGER: Near-full access, excluding owner-level operations like deactivation - DESIGNER: Theme and visual editing access only - VIEWER: Read-only access to shop data

ecommerce_get-subscription-limits

ChatGPT
Checks subscription usage against plan limits. Use for questions like "Why can't I add more products?" or "Am I at my plan limit?" Returns: - Plan summary: plan.id, plan.name, plan.pro (boolean), plan.custom (boolean) - Usage vs limits (each with limit and usage as Long): - offers: product/offer count - members: team member count - domains: custom domain count - digitalProductsStorageBytes: digital file storage in bytes Understanding limits: - When usage >= limit, the resource is at capacity - limit = -1 means unlimited for that resource - Storage is in bytes (divide by 1073741824 for GB)

ecommerce_get-subscription-limits

ChatGPT
Checks subscription usage against plan limits. Use for questions like "Why can't I add more products?" or "Am I at my plan limit?" Returns: - Plan summary: plan.id, plan.name, plan.pro (boolean), plan.custom (boolean) - Usage vs limits (each with limit and usage as Long): - offers: product/offer count - members: team member count - domains: custom domain count - digitalProductsStorageBytes: digital file storage in bytes Understanding limits: - When usage >= limit, the resource is at capacity - limit = -1 means unlimited for that resource - Storage is in bytes (divide by 1073741824 for GB)

ecommerce_get-tiktok-configuration

ChatGPT
Retrieves the TikTok Shop configuration for the current shop. To see which products are synced to TikTok, use get-tiktok-products. Returns: - configured (Boolean): false if TikTok Shop is not set up — all other fields will be null/empty - tiktokShopId (nullable String): TikTok Shop ID linked to this Fourthwall shop - warehouseId (nullable String): Warehouse ID for fulfillment - status (nullable): ACTIVE, DISABLED, BLOCKED, or ARCHIVED - pricePercentageIncrease (nullable BigDecimal): Price markup percentage for TikTok listings - fullyConfigured (nullable Boolean): true if warehouseId is set (required for product syncing) - authorizationExpiresAt (nullable ISO 8601): When TikTok authorization expires - synchronizationPausedUntil (nullable ISO 8601): When syncing will resume - synchronizationPausedReasons: Set of pause reasons (SELLER_NOT_ACTIVE, SHOP_NOT_ACTIVE, INCORRECT_SHIPPING_OPTION, PRODUCT_CREATION_LIMIT_REACHED, WAREHOUSE_NOT_CONFIGURED, RETURN_WAREHOUSE_NOT_CONFIGURED, SHIPPING_TEMPLATES_NOT_IN_WAREHOUSE, NO_IMAGES_FOR_OFFER) - prerequisites (nullable): Setup requirements, each a String "COMPLETED" or "NOT_COMPLETED (reason)": - pickupWarehouse, returnWarehouse, shippingTemplates, deliveryOption, status, taxInfo, productQuantityLimit Use this tool to: - Check if TikTok Shop is set up for a shop (check configured=true) - Diagnose why products aren't syncing (check prerequisites, status, synchronizationPausedReasons) - Verify authorization is still valid (check authorizationExpiresAt) - See the price markup being applied to TikTok listings (pricePercentageIncrease)

ecommerce_get-tiktok-configuration

ChatGPT
Retrieves the TikTok Shop configuration for the current shop. To see which products are synced to TikTok, use get-tiktok-products. Returns: - configured (Boolean): false if TikTok Shop is not set up — all other fields will be null/empty - tiktokShopId (nullable String): TikTok Shop ID linked to this Fourthwall shop - warehouseId (nullable String): Warehouse ID for fulfillment - status (nullable): ACTIVE, DISABLED, BLOCKED, or ARCHIVED - pricePercentageIncrease (nullable BigDecimal): Price markup percentage for TikTok listings - fullyConfigured (nullable Boolean): true if warehouseId is set (required for product syncing) - authorizationExpiresAt (nullable ISO 8601): When TikTok authorization expires - synchronizationPausedUntil (nullable ISO 8601): When syncing will resume - synchronizationPausedReasons: Set of pause reasons (SELLER_NOT_ACTIVE, SHOP_NOT_ACTIVE, INCORRECT_SHIPPING_OPTION, PRODUCT_CREATION_LIMIT_REACHED, WAREHOUSE_NOT_CONFIGURED, RETURN_WAREHOUSE_NOT_CONFIGURED, SHIPPING_TEMPLATES_NOT_IN_WAREHOUSE, NO_IMAGES_FOR_OFFER) - prerequisites (nullable): Setup requirements, each a String "COMPLETED" or "NOT_COMPLETED (reason)": - pickupWarehouse, returnWarehouse, shippingTemplates, deliveryOption, status, taxInfo, productQuantityLimit Use this tool to: - Check if TikTok Shop is set up for a shop (check configured=true) - Diagnose why products aren't syncing (check prerequisites, status, synchronizationPausedReasons) - Verify authorization is still valid (check authorizationExpiresAt) - See the price markup being applied to TikTok listings (pricePercentageIncrease)

ecommerce_get-tiktok-products

ChatGPT
Retrieves products synced to TikTok Shop, grouped by sync status. Check get-tiktok-configuration first to verify TikTok Shop is configured. Returns products in three lists: - active: Products successfully listed on TikTok Shop - pending: Products awaiting TikTok approval or processing - denied: Products rejected by TikTok with issue details Each product includes: - name (String): Product name - offerId (UUID): Fourthwall offer ID - imageUrl (nullable URI): Product image URL - issues: List of problems, each with: - detail (String): Description of the issue - documentation (nullable String): Link to help documentation - suggestions (nullable String): Actionable fix suggestion Common denial issues (in priority order): - Product rejected by TikTok (with specific reason from TikTok) - Seller/platform deactivated or freeze - Shipping takes longer than 2 days - Only products shipping from USA are eligible - Product type/category not yet eligible - Product has no images - Product weighs over 5 lbs / 2.27 kg - Product status is HIDDEN - Daily sync limit exceeded (100 products/day) Use this tool to: - See which products are live on TikTok Shop - Identify products waiting for TikTok approval - Diagnose why specific products were rejected (check issues list) - Get actionable suggestions for fixing product issues (check suggestions field)

ecommerce_get-tiktok-products

ChatGPT
Retrieves products synced to TikTok Shop, grouped by sync status. Check get-tiktok-configuration first to verify TikTok Shop is configured. Returns products in three lists: - active: Products successfully listed on TikTok Shop - pending: Products awaiting TikTok approval or processing - denied: Products rejected by TikTok with issue details Each product includes: - name (String): Product name - offerId (UUID): Fourthwall offer ID - imageUrl (nullable URI): Product image URL - issues: List of problems, each with: - detail (String): Description of the issue - documentation (nullable String): Link to help documentation - suggestions (nullable String): Actionable fix suggestion Common denial issues (in priority order): - Product rejected by TikTok (with specific reason from TikTok) - Seller/platform deactivated or freeze - Shipping takes longer than 2 days - Only products shipping from USA are eligible - Product type/category not yet eligible - Product has no images - Product weighs over 5 lbs / 2.27 kg - Product status is HIDDEN - Daily sync limit exceeded (100 products/day) Use this tool to: - See which products are live on TikTok Shop - Identify products waiting for TikTok approval - Diagnose why specific products were rejected (check issues list) - Get actionable suggestions for fixing product issues (check suggestions field)

ecommerce_get-top-products-by-units-sold-report

ChatGPT
Get the Top Products by Units Sold analytics report for the shop within a date range: best-selling products ranked by quantity. This report shows a ranking of products with the following columns per row: - product: Product name - units_sold: Number of units sold - orders: Number of unique orders containing this product - gross_sales: Revenue before deductions - discounts: Discount amount - net_sales: Revenue after deductions. Formula: Net sales = Gross sales - Discounts - product_cost: Cost of self-produced products as declared by you - costs: Total costs including product costs, fulfillment fees, shipping costs, taxes, and payment processing fees (with breakdown: product costs, fulfillment fees, shipping costs, taxes, custom duty cost, payment processing fees) - profit: Profit after all Fourthwall costs. Formula: Profit = Net sales - Costs (shows change) - gross_margin: Profitability as percentage of revenue. Formula: Gross margin = Profit / Gross sales × 100 (shows change) - net_profit: Profit after declared product costs. Formula: Net profit = Profit - Product cost (shows change) - net_margin: Net profitability as percentage of revenue. Formula: Net margin = Net profit / Gross sales × 100 (shows change) Filter groups (all default to false/unfiltered, pass comma-separated keys to include only specific items): - product_type: physical_products, digital_products - fulfillment_type: fourthwall_fulfilled, self_fulfilled - show_product_with_no_sales: products_with_no_sales Examples: - Top products for 2024: from="2024-01-01T00:00:00Z", to="2024-12-31T23:59:59Z" - Top physical products only: from="2024-01-01T00:00:00Z", to="2024-12-31T23:59:59Z", productType="physical_products" - Top products including zero sales: from="2024-01-01T00:00:00Z", to="2024-12-31T23:59:59Z", showProductWithNoSales="products_with_no_sales"

ecommerce_get-top-products-by-units-sold-report

ChatGPT
Get the Top Products by Units Sold analytics report for the shop within a date range: best-selling products ranked by quantity. This report shows a ranking of products with the following columns per row: - product: Product name - units_sold: Number of units sold - orders: Number of unique orders containing this product - gross_sales: Revenue before deductions - discounts: Discount amount - net_sales: Revenue after deductions. Formula: Net sales = Gross sales - Discounts - product_cost: Cost of self-produced products as declared by you - costs: Total costs including product costs, fulfillment fees, shipping costs, taxes, and payment processing fees (with breakdown: product costs, fulfillment fees, shipping costs, taxes, custom duty cost, payment processing fees) - profit: Profit after all Fourthwall costs. Formula: Profit = Net sales - Costs (shows change) - gross_margin: Profitability as percentage of revenue. Formula: Gross margin = Profit / Gross sales × 100 (shows change) - net_profit: Profit after declared product costs. Formula: Net profit = Profit - Product cost (shows change) - net_margin: Net profitability as percentage of revenue. Formula: Net margin = Net profit / Gross sales × 100 (shows change) Filter groups (all default to false/unfiltered, pass comma-separated keys to include only specific items): - product_type: physical_products, digital_products - fulfillment_type: fourthwall_fulfilled, self_fulfilled - show_product_with_no_sales: products_with_no_sales Examples: - Top products for 2024: from="2024-01-01T00:00:00Z", to="2024-12-31T23:59:59Z" - Top physical products only: from="2024-01-01T00:00:00Z", to="2024-12-31T23:59:59Z", productType="physical_products" - Top products including zero sales: from="2024-01-01T00:00:00Z", to="2024-12-31T23:59:59Z", showProductWithNoSales="products_with_no_sales"

ecommerce_get-total-profit-report

ChatGPT
Get the Total Profit analytics report for the shop within a date range: total amount earned from all sales. This report shows profitability over time with the following columns per row: - date: The time period - gross_sales: Amount spent across transactions before deductions - discounts: Total discount amounts applied - costs: Total costs (with breakdown: product costs, fulfillment fees, shipping costs, taxes, custom duty cost, payment processing fees, inventory storage fees, membership fees, giveaway costs, donation costs, AIT costs) - cancels: Amount refunded from cancelled transactions - refunds: Amount refunded from non-cancelled transactions - profit: Gross sales - Discounts - Costs - Refunds - Cancels Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond). Filter groups (all default to true, pass comma-separated keys to include only specific metrics): - shop_metrics: orders, donations, giveaway_links, manual_charges, twitch_gifts - membership_metrics: memberships_subscriptions, memberships_message_tips, memberships_locked_messages, memberships_paid_posts, memberships_subscription_gifts, memberships_twitch_gifts

ecommerce_get-total-profit-report

ChatGPT
Get the Total Profit analytics report for the shop within a date range: total amount earned from all sales. This report shows profitability over time with the following columns per row: - date: The time period - gross_sales: Amount spent across transactions before deductions - discounts: Total discount amounts applied - costs: Total costs (with breakdown: product costs, fulfillment fees, shipping costs, taxes, custom duty cost, payment processing fees, inventory storage fees, membership fees, giveaway costs, donation costs, AIT costs) - cancels: Amount refunded from cancelled transactions - refunds: Amount refunded from non-cancelled transactions - profit: Gross sales - Discounts - Costs - Refunds - Cancels Precision: choose finest granularity producing <=31 rows (HOUR for ~1d, DAY for ~1mo, WEEK for ~7mo, MONTH for ~2.5y, QUARTER for ~7y, YEAR beyond). Filter groups (all default to true, pass comma-separated keys to include only specific metrics): - shop_metrics: orders, donations, giveaway_links, manual_charges, twitch_gifts - membership_metrics: memberships_subscriptions, memberships_message_tips, memberships_locked_messages, memberships_paid_posts, memberships_subscription_gifts, memberships_twitch_gifts

ecommerce_get-unfulfilled-orders

ChatGPT
Retrieves the count of unfulfilled self-serve orders for the shop. Returns the number of orders that haven't been fulfilled yet and are awaiting shipment. This is useful for understanding the current fulfillment backlog. Returns: - count: Number of unfulfilled orders

ecommerce_get-unfulfilled-orders

ChatGPT
Retrieves the count of unfulfilled self-serve orders for the shop. Returns the number of orders that haven't been fulfilled yet and are awaiting shipment. This is useful for understanding the current fulfillment backlog. Returns: - count: Number of unfulfilled orders

ecommerce_get-user-connections

ChatGPT
Retrieves all shops associated with the current user's account. Returns: - shops: List of shops the user has access to, each with: - id (String): Shop ID - name (String): Shop name - baseUri (URI): Public shop URL (e.g., "https://myshop.fourthwall.com")

ecommerce_get-user-connections

ChatGPT
Retrieves all shops associated with the current user's account. Returns: - shops: List of shops the user has access to, each with: - id (String): Shop ID - name (String): Shop name - baseUri (URI): Public shop URL (e.g., "https://myshop.fourthwall.com")

ecommerce_get-visitors-report

ChatGPT
Get the Visitors analytics report for the shop within a date range: unique visitor traffic data. This report shows visitor traffic over time with the following columns per row: - date: The time period - unique_visitors: Number of unique visitors to your shop. Includes predicted values for future time periods based on historical trends. - is_prediction: Indicates whether this data is real (false) or a predicted value based on historical trends (true) Precision: HOUR for ranges <=1 day, DAY for longer.

ecommerce_get-visitors-report

ChatGPT
Get the Visitors analytics report for the shop within a date range: unique visitor traffic data. This report shows visitor traffic over time with the following columns per row: - date: The time period - unique_visitors: Number of unique visitors to your shop. Includes predicted values for future time periods based on historical trends. - is_prediction: Indicates whether this data is real (false) or a predicted value based on historical trends (true) Precision: HOUR for ranges <=1 day, DAY for longer.

ecommerce_get-youtube-integrations

ChatGPT
Retrieves YouTube Merch Shelf channel integrations for the shop. To see which products are synced to YouTube, use get-youtube-products. Returns a list of channel integrations, each with: - channelName (nullable String): YouTube channel name - oAuth2Provider (String): OAuth provider used (typically "GOOGLE") - thumbnailUri (nullable URI): Channel thumbnail image URL - settingsUri (nullable URI): Link to YouTube Studio monetization settings - status (String): ACTIVE, PENDING, DENIED, or ARCHIVED - deniedReason (nullable String): Only present when status is DENIED - info (nullable String): Only present when status is ACTIVE (e.g. "LEGACY_METHOD_DUE_TO_MISREPRESENTATION") Denied reason values: - INVALID_SCOPES_OR_CHANNEL: OAuth permissions issue - NOT_ENOUGH_SUBSCRIBERS: Channel doesn't meet subscriber threshold - CHANNEL_NOT_ELIGIBLE: Channel not eligible for merch shelf - TERMS_OF_SERVICE_NOT_SIGNED: Need to accept YouTube Shopping TOS - TERMS_OF_SERVICE_NOT_SIGNED_LEGACY: Legacy TOS issue - THIRD_PARTY_LINK_REMOVED: Store link was removed from YouTube - MISSING_SCOPES: OAuth needs additional permissions - NO_ACCESS_TO_YOUTUBE_API: API access issue - NO_CHANNEL_FOUND: No YouTube channel found for this account - UNKNOWN_ERROR: Unclassified error Use this tool to: - Check if YouTube Merch Shelf is connected (look for ACTIVE status) - See which YouTube channels are linked to the shop - Diagnose connection issues (check deniedReason field) - Get the YouTube Studio settings link for troubleshooting (settingsUri)

ecommerce_get-youtube-integrations

ChatGPT
Retrieves YouTube Merch Shelf channel integrations for the shop. To see which products are synced to YouTube, use get-youtube-products. Returns a list of channel integrations, each with: - channelName (nullable String): YouTube channel name - oAuth2Provider (String): OAuth provider used (typically "GOOGLE") - thumbnailUri (nullable URI): Channel thumbnail image URL - settingsUri (nullable URI): Link to YouTube Studio monetization settings - status (String): ACTIVE, PENDING, DENIED, or ARCHIVED - deniedReason (nullable String): Only present when status is DENIED - info (nullable String): Only present when status is ACTIVE (e.g. "LEGACY_METHOD_DUE_TO_MISREPRESENTATION") Denied reason values: - INVALID_SCOPES_OR_CHANNEL: OAuth permissions issue - NOT_ENOUGH_SUBSCRIBERS: Channel doesn't meet subscriber threshold - CHANNEL_NOT_ELIGIBLE: Channel not eligible for merch shelf - TERMS_OF_SERVICE_NOT_SIGNED: Need to accept YouTube Shopping TOS - TERMS_OF_SERVICE_NOT_SIGNED_LEGACY: Legacy TOS issue - THIRD_PARTY_LINK_REMOVED: Store link was removed from YouTube - MISSING_SCOPES: OAuth needs additional permissions - NO_ACCESS_TO_YOUTUBE_API: API access issue - NO_CHANNEL_FOUND: No YouTube channel found for this account - UNKNOWN_ERROR: Unclassified error Use this tool to: - Check if YouTube Merch Shelf is connected (look for ACTIVE status) - See which YouTube channels are linked to the shop - Diagnose connection issues (check deniedReason field) - Get the YouTube Studio settings link for troubleshooting (settingsUri)

ecommerce_get-youtube-products

ChatGPT
Retrieves products synced to YouTube Merch Shelf, grouped by sync status. Check get-youtube-integrations first to verify YouTube is connected. Returns products in three lists: - active: Products successfully listed on YouTube - pending: Products awaiting Google Merchant Center approval - denied: Products rejected with issue details Each product includes: - name (String): Product variant name - offerId (UUID): Fourthwall offer ID - offerVariantId (UUID): Specific variant ID - imageUrl (URI): Product image URL - color (nullable String): Product color - size (nullable String): Product size - disclosureDate (nullable ISO 8601): When product was submitted to Google - issues: List of problems (typically non-empty only for denied products), each with: - detail (String): Description of the issue - documentation (nullable String): Link to help documentation Use this tool to: - See which products are live on YouTube Merch Shelf - Check approval status for pending products - Diagnose why specific products were rejected by Google (check issues list) - Verify product variants are syncing correctly (each variant is a separate entry)

ecommerce_get-youtube-products

ChatGPT
Retrieves products synced to YouTube Merch Shelf, grouped by sync status. Check get-youtube-integrations first to verify YouTube is connected. Returns products in three lists: - active: Products successfully listed on YouTube - pending: Products awaiting Google Merchant Center approval - denied: Products rejected with issue details Each product includes: - name (String): Product variant name - offerId (UUID): Fourthwall offer ID - offerVariantId (UUID): Specific variant ID - imageUrl (URI): Product image URL - color (nullable String): Product color - size (nullable String): Product size - disclosureDate (nullable ISO 8601): When product was submitted to Google - issues: List of problems (typically non-empty only for denied products), each with: - detail (String): Description of the issue - documentation (nullable String): Link to help documentation Use this tool to: - See which products are live on YouTube Merch Shelf - Check approval status for pending products - Diagnose why specific products were rejected by Google (check issues list) - Verify product variants are syncing correctly (each variant is a separate entry)

ecommerce_inspect-design

ChatGPT
Inspects an existing customization's design state, returning layout details for each size/region. Returns per-size, per-region breakdown with image positions, scales, rotations, and dimensions. Each image includes: index, dataId, href, widthPx/heightPx, widthPct/heightPct (% of region), centerX/centerY (0-1 normalized), rotation (degrees), scaleX/scaleY, zIndex. Also returns availableRegions — every regionId legal as a target in edit-design for this product (e.g. ["front", "back_large"]). The sizes map only lists regions that currently contain images; availableRegions is the source of truth for legal edit targets. Use it to decide whether to add a new image to an empty region. If the user asks to place artwork on a region not in availableRegions, the underlying product blank does not support that area — do not call edit-design. Use dataId or index values when targeting images in edit-design operations.

ecommerce_inspect-design

ChatGPT
Inspects an existing customization's design state, returning layout details for each size/region. Returns per-size, per-region breakdown with image positions, scales, rotations, and dimensions. Each image includes: index, dataId, href, widthPx/heightPx, widthPct/heightPct (% of region), centerX/centerY (0-1 normalized), rotation (degrees), scaleX/scaleY, zIndex. Also returns availableRegions — every regionId legal as a target in edit-design for this product (e.g. ["front", "back_large"]). The sizes map only lists regions that currently contain images; availableRegions is the source of truth for legal edit targets. Use it to decide whether to add a new image to an empty region. If the user asks to place artwork on a region not in availableRegions, the underlying product blank does not support that area — do not call edit-design. Use dataId or index values when targeting images in edit-design operations.

ecommerce_preview-cancel-cost

ChatGPT
Preview how a full or partial order cancellation would be paid for BEFORE calling cancel-order. Read-only. Pass itemsToCancel to preview a partial cancellation (subset of cancellable items from get-order-cancellation-by-ids). Omit it to preview a full-order cancellation. Returns the split between shop balance and card charge: - fromBalance: amount drawn from the shop's balance - chargeAmount: amount that would be charged to the shop's card on file - requiresCharge: shortcut for chargeAmount > 0 - maxRefundAvailable: total refund the customer would receive Use this to tell the user ahead of time whether a card charge is required, and for how much, so they can confirm before cancel-order is called.

ecommerce_preview-cancel-cost

ChatGPT
Preview how a full or partial order cancellation would be paid for BEFORE calling cancel-order. Read-only. Pass itemsToCancel to preview a partial cancellation (subset of cancellable items from get-order-cancellation-by-ids). Omit it to preview a full-order cancellation. Returns the split between shop balance and card charge: - fromBalance: amount drawn from the shop's balance - chargeAmount: amount that would be charged to the shop's card on file - requiresCharge: shortcut for chargeAmount > 0 - maxRefundAvailable: total refund the customer would receive Use this to tell the user ahead of time whether a card charge is required, and for how much, so they can confirm before cancel-order is called.

ecommerce_preview-refund-cost

ChatGPT
Preview how a refund would be paid for BEFORE calling refund-order. Read-only. Returns the split between shop balance and card charge: - fromBalance: amount drawn from the shop's balance - chargeAmount: amount charged to the shop's card on file - requiresCharge: shortcut for chargeAmount > 0 Use this to tell the user how much (if anything) will hit their card before you call the destructive refund-order.

ecommerce_preview-refund-cost

ChatGPT
Preview how a refund would be paid for BEFORE calling refund-order. Read-only. Returns the split between shop balance and card charge: - fromBalance: amount drawn from the shop's balance - chargeAmount: amount charged to the shop's card on file - requiresCharge: shortcut for chargeAmount > 0 Use this to tell the user how much (if anything) will hit their card before you call the destructive refund-order.

ecommerce_refund-order

ChatGPT
Issue a refund on an order. IRREVERSIBLE. ALWAYS confirm with the user before calling. Refunds a specific amount to the customer via their original payment method. For itemized refunds (specific line items / shipping / tax / donation), use the web admin — this MCP tool only supports a total-amount refund. Payment handling — done automatically, no separate confirmation step: - If the shop's balance covers the refund, it is issued immediately and appears in the pending or refunded list. chargeAmount will be 0. - If the balance is insufficient, the shortfall is charged to the shop's card and the refund is queued in initialized. A background job finalizes the refund once the charge settles. If the charge fails, the refund is abandoned. - For PayPal / other providers that can't auto-refund, manualRefundProvider is set and the refund stays in initialized/pending until completed externally. Always surface chargeAmount, fromBalance, and manualRefundProvider to the user when non-zero / non-null. Validations enforced by the domain: - Order must have a refundable status (not cancelled, failed, etc.) - Amount must not exceed remainingRefundAmount - No duplicate: identical refund amount within protection window is rejected - No in-progress refund or dispute - ExpectedChargeAmountChanged: rare race where the required charge changed between our estimate and submission; just retry. Permission: requires ORDER_WRITE role.

ecommerce_refund-order

ChatGPT
Issue a refund on an order. IRREVERSIBLE. ALWAYS confirm with the user before calling. Refunds a specific amount to the customer via their original payment method. For itemized refunds (specific line items / shipping / tax / donation), use the web admin — this MCP tool only supports a total-amount refund. Payment handling — done automatically, no separate confirmation step: - If the shop's balance covers the refund, it is issued immediately and appears in the pending or refunded list. chargeAmount will be 0. - If the balance is insufficient, the shortfall is charged to the shop's card and the refund is queued in initialized. A background job finalizes the refund once the charge settles. If the charge fails, the refund is abandoned. - For PayPal / other providers that can't auto-refund, manualRefundProvider is set and the refund stays in initialized/pending until completed externally. Always surface chargeAmount, fromBalance, and manualRefundProvider to the user when non-zero / non-null. Validations enforced by the domain: - Order must have a refundable status (not cancelled, failed, etc.) - Amount must not exceed remainingRefundAmount - No duplicate: identical refund amount within protection window is rejected - No in-progress refund or dispute - ExpectedChargeAmountChanged: rare race where the required charge changed between our estimate and submission; just retry. Permission: requires ORDER_WRITE role.

ecommerce_remove-design-region

ChatGPT
Removes a print region (and every image inside it) from an existing customization's design state. Use this when the user wants to drop a region they previously added — e.g. "remove the back design", "I don't want the sleeve print after all". edit-design's remove operation only deletes individual images within a region; the slot itself stays in usedRegions. This tool removes the slot entirely so the region returns to being available-but-unused. BEFORE calling: use inspect-design to confirm the regionId is in usedRegions. The design must keep at least one region — removing the last one is rejected. AFTER calling: use rerender-design-previews with customizationId to regenerate preview images. Returns the updated inspect summary plus the catalog's full availableRegions list. Errors: - DESIGN_PIPELINE_BAD_REQUEST with "not part of this design" — the region was never added; nothing to remove. - DESIGN_PIPELINE_BAD_REQUEST with "only region in this design" — refuse to remove the last region.

ecommerce_remove-design-region

ChatGPT
Removes a print region (and every image inside it) from an existing customization's design state. Use this when the user wants to drop a region they previously added — e.g. "remove the back design", "I don't want the sleeve print after all". edit-design's remove operation only deletes individual images within a region; the slot itself stays in usedRegions. This tool removes the slot entirely so the region returns to being available-but-unused. BEFORE calling: use inspect-design to confirm the regionId is in usedRegions. The design must keep at least one region — removing the last one is rejected. AFTER calling: use rerender-design-previews with customizationId to regenerate preview images. Returns the updated inspect summary plus the catalog's full availableRegions list. Errors: - DESIGN_PIPELINE_BAD_REQUEST with "not part of this design" — the region was never added; nothing to remove. - DESIGN_PIPELINE_BAD_REQUEST with "only region in this design" — refuse to remove the last region.

ecommerce_remove-draft-colors

ChatGPT
Removes colors from the draft's color selection and deletes the offer-side preview images for those colors. Does NOT affect the live product. Use apply-draft-to-product when the creator confirms changes.

ecommerce_remove-draft-colors

ChatGPT
Removes colors from the draft's color selection and deletes the offer-side preview images for those colors. Does NOT affect the live product. Use apply-draft-to-product when the creator confirms changes.

ecommerce_remove-draft-sizes

ChatGPT
Removes sizes from the draft's size selection. Does NOT affect the live product. Use rerender-design-previews after to see updated previews. Use apply-draft-to-product when the creator confirms changes.

ecommerce_remove-draft-sizes

ChatGPT
Removes sizes from the draft's size selection. Does NOT affect the live product. Use rerender-design-previews after to see updated previews. Use apply-draft-to-product when the creator confirms changes.

ecommerce_rerender-design-previews

ChatGPT
Re-renders preview images for one or more existing customization sketches — processes concurrently. Each customization is processed independently — failures for one do not affect others. Use this after edit-design, add-draft-colors, add-draft-sizes, or apply-draft-to-product to see updated previews. Colors and sizes are read from the customization's attributes (selectedColors, selectedSizes) — update those via add-draft-colors / add-draft-sizes before calling this tool. Each result contains: - customizationId: the input customization ID - pipelineId, status, type, offerId?, images[], priceSuggestions?, error? — present on success - bulkError?: string — present on failure

ecommerce_rerender-design-previews

ChatGPT
Re-renders preview images for one or more existing customization sketches — processes concurrently. Each customization is processed independently — failures for one do not affect others. Use this after edit-design, add-draft-colors, add-draft-sizes, or apply-draft-to-product to see updated previews. Colors and sizes are read from the customization's attributes (selectedColors, selectedSizes) — update those via add-draft-colors / add-draft-sizes before calling this tool. Each result contains: - customizationId: the input customization ID - pipelineId, status, type, offerId?, images[], priceSuggestions?, error? — present on success - bulkError?: string — present on failure

ecommerce_save-media-library-image

ChatGPT
Persists an uploaded image in the shop's media library. Returns the saved image: - Identity: id (String), uri (CDN URL — use as regionUrl in generate-product-design-previews / create-offers-from-products) - Dimensions: width (Int), height (Int) - Previews: thumbnail (URL), preview (URL)

ecommerce_save-media-library-image

ChatGPT
Persists an uploaded image in the shop's media library. Returns the saved image: - Identity: id (String), uri (CDN URL — use as regionUrl in generate-product-design-previews / create-offers-from-products) - Dimensions: width (Int), height (Int) - Previews: thumbnail (URL), preview (URL)

ecommerce_update-bundle

ChatGPT
Update an existing bundle offer. Only provided fields are updated — omitted fields remain unchanged.

ecommerce_update-bundle

ChatGPT
Update an existing bundle offer. Only provided fields are updated — omitted fields remain unchanged.

ecommerce_update-collection-availability

ChatGPT
Update whether a collection is available (in stock) or unavailable. This controls the availability flag independently from the state (PUBLIC/HIDDEN/ARCHIVED). Returns the updated collection with: - Identity: id (CollectionId), shopId (ShopId), name, slug, description - Visibility: available (boolean), state (PUBLIC/HIDDEN/ARCHIVED) - Time-based availability: availableFrom (nullable ISO 8601), availableTo (nullable ISO 8601) - Products: offerIds (list of OfferIds) - Sorting: sortingStrategy (MANUAL/BEST_SELLING/NEWEST/OLDEST/NAME_ASC/NAME_DESC)

ecommerce_update-collection-availability

ChatGPT
Update whether a collection is available (in stock) or unavailable. This controls the availability flag independently from the state (PUBLIC/HIDDEN/ARCHIVED). Returns the updated collection with: - Identity: id (CollectionId), shopId (ShopId), name, slug, description - Visibility: available (boolean), state (PUBLIC/HIDDEN/ARCHIVED) - Time-based availability: availableFrom (nullable ISO 8601), availableTo (nullable ISO 8601) - Products: offerIds (list of OfferIds) - Sorting: sortingStrategy (MANUAL/BEST_SELLING/NEWEST/OLDEST/NAME_ASC/NAME_DESC)

ecommerce_update-collection-details

ChatGPT
Update a collection's name, description, availability, and/or product list. Only provided fields are updated — omitted fields remain unchanged. Use get-collections or get-collections-by-ids to review current values before updating. Updatable fields: - name: Collection display name (max 200 chars) - description: Collection description (HTML allowed) - available: Whether the collection is available (true/false) - offerIds: Complete list of Offer IDs to include in this collection (replaces existing list) Returns the updated collection with: - Identity: id (CollectionId), shopId (ShopId), name, slug, description - Visibility: available (boolean), state (PUBLIC/HIDDEN/ARCHIVED) - Time-based availability: availableFrom (nullable ISO 8601), availableTo (nullable ISO 8601) - Products: offerIds (list of OfferIds) - Sorting: sortingStrategy (MANUAL/BEST_SELLING/NEWEST/OLDEST/NAME_ASC/NAME_DESC) IMPORTANT: When updating offerIds, provide the FULL list of offers you want in the collection — this replaces the existing list entirely.

ecommerce_update-collection-details

ChatGPT
Update a collection's name, description, availability, and/or product list. Only provided fields are updated — omitted fields remain unchanged. Use get-collections or get-collections-by-ids to review current values before updating. Updatable fields: - name: Collection display name (max 200 chars) - description: Collection description (HTML allowed) - available: Whether the collection is available (true/false) - offerIds: Complete list of Offer IDs to include in this collection (replaces existing list) Returns the updated collection with: - Identity: id (CollectionId), shopId (ShopId), name, slug, description - Visibility: available (boolean), state (PUBLIC/HIDDEN/ARCHIVED) - Time-based availability: availableFrom (nullable ISO 8601), availableTo (nullable ISO 8601) - Products: offerIds (list of OfferIds) - Sorting: sortingStrategy (MANUAL/BEST_SELLING/NEWEST/OLDEST/NAME_ASC/NAME_DESC) IMPORTANT: When updating offerIds, provide the FULL list of offers you want in the collection — this replaces the existing list entirely.

ecommerce_update-collection-slug

ChatGPT
Change the URL slug for a collection. The slug appears in the storefront URL (e.g., /collections/{slug}). Use get-collections-by-ids first to see the current slug. Slug rules: - Lowercase letters, numbers, and hyphens only - No spaces or special characters - Must be unique within the shop Returns the updated collection with: - Identity: id (CollectionId), shopId (ShopId), name, slug, description - Visibility: available (boolean), state (PUBLIC/HIDDEN/ARCHIVED) - Time-based availability: availableFrom (nullable ISO 8601), availableTo (nullable ISO 8601) - Products: offerIds (list of OfferIds) - Sorting: sortingStrategy (MANUAL/BEST_SELLING/NEWEST/OLDEST/NAME_ASC/NAME_DESC)

ecommerce_update-collection-slug

ChatGPT
Change the URL slug for a collection. The slug appears in the storefront URL (e.g., /collections/{slug}). Use get-collections-by-ids first to see the current slug. Slug rules: - Lowercase letters, numbers, and hyphens only - No spaces or special characters - Must be unique within the shop Returns the updated collection with: - Identity: id (CollectionId), shopId (ShopId), name, slug, description - Visibility: available (boolean), state (PUBLIC/HIDDEN/ARCHIVED) - Time-based availability: availableFrom (nullable ISO 8601), availableTo (nullable ISO 8601) - Products: offerIds (list of OfferIds) - Sorting: sortingStrategy (MANUAL/BEST_SELLING/NEWEST/OLDEST/NAME_ASC/NAME_DESC)

ecommerce_update-collection-sorting-strategy

ChatGPT
Update how products are sorted within a collection. Sorting strategies: - MANUAL: Custom order (individual products can only be reordered from the dashboard — no MCP tool exists for this) - BEST_SELLING: Best-selling products first - NEWEST: Newest products first - OLDEST: Oldest products first - NAME_ASC: Alphabetical A-Z - NAME_DESC: Alphabetical Z-A Returns the updated collection with: - Identity: id (CollectionId), shopId (ShopId), name, slug, description - Visibility: available (boolean), state (PUBLIC/HIDDEN/ARCHIVED) - Time-based availability: availableFrom (nullable ISO 8601), availableTo (nullable ISO 8601) - Products: offerIds (list of OfferIds) - Sorting: sortingStrategy (MANUAL/BEST_SELLING/NEWEST/OLDEST/NAME_ASC/NAME_DESC)

ecommerce_update-collection-sorting-strategy

ChatGPT
Update how products are sorted within a collection. Sorting strategies: - MANUAL: Custom order (individual products can only be reordered from the dashboard — no MCP tool exists for this) - BEST_SELLING: Best-selling products first - NEWEST: Newest products first - OLDEST: Oldest products first - NAME_ASC: Alphabetical A-Z - NAME_DESC: Alphabetical Z-A Returns the updated collection with: - Identity: id (CollectionId), shopId (ShopId), name, slug, description - Visibility: available (boolean), state (PUBLIC/HIDDEN/ARCHIVED) - Time-based availability: availableFrom (nullable ISO 8601), availableTo (nullable ISO 8601) - Products: offerIds (list of OfferIds) - Sorting: sortingStrategy (MANUAL/BEST_SELLING/NEWEST/OLDEST/NAME_ASC/NAME_DESC)

ecommerce_update-collection-state

ChatGPT
Update a collection's visibility state (PUBLIC, HIDDEN, or ARCHIVED). Use get-collections-by-ids first to see the current state. States: - PUBLIC: Visible on storefront - HIDDEN: Not visible on storefront but still exists - ARCHIVED: Soft deleted — will not appear in normal queries Optionally update time-based availability (availableFrom/availableTo) to schedule when the collection becomes visible. When setting a time frame without explicitly specifying the state, the state is automatically determined: - PUBLIC if the current time is within the time frame - HIDDEN otherwise Returns the updated collection with: - Identity: id (CollectionId), shopId (ShopId), name, slug, description - Visibility: available (boolean), state (PUBLIC/HIDDEN/ARCHIVED) - Time-based availability: availableFrom (nullable ISO 8601), availableTo (nullable ISO 8601) - Products: offerIds (list of OfferIds) - Sorting: sortingStrategy (MANUAL/BEST_SELLING/NEWEST/OLDEST/NAME_ASC/NAME_DESC) WARNING: Setting state to ARCHIVED removes the collection from the storefront. Use with caution.

ecommerce_update-collection-state

ChatGPT
Update a collection's visibility state (PUBLIC, HIDDEN, or ARCHIVED). Use get-collections-by-ids first to see the current state. States: - PUBLIC: Visible on storefront - HIDDEN: Not visible on storefront but still exists - ARCHIVED: Soft deleted — will not appear in normal queries Optionally update time-based availability (availableFrom/availableTo) to schedule when the collection becomes visible. When setting a time frame without explicitly specifying the state, the state is automatically determined: - PUBLIC if the current time is within the time frame - HIDDEN otherwise Returns the updated collection with: - Identity: id (CollectionId), shopId (ShopId), name, slug, description - Visibility: available (boolean), state (PUBLIC/HIDDEN/ARCHIVED) - Time-based availability: availableFrom (nullable ISO 8601), availableTo (nullable ISO 8601) - Products: offerIds (list of OfferIds) - Sorting: sortingStrategy (MANUAL/BEST_SELLING/NEWEST/OLDEST/NAME_ASC/NAME_DESC) WARNING: Setting state to ARCHIVED removes the collection from the storefront. Use with caution.

ecommerce_update-combined-listing

ChatGPT
Update an existing combined listing. Only provided fields are updated — omitted fields remain unchanged. IMPORTANT: When updating offerIds, pass the FULL list — it replaces the entire set. All offers must share the same product library with unique colors.

ecommerce_update-combined-listing

ChatGPT
Update an existing combined listing. Only provided fields are updated — omitted fields remain unchanged. IMPORTANT: When updating offerIds, pass the FULL list — it replaces the entire set. All offers must share the same product library with unique colors.

ecommerce_update-offer

ChatGPT
Update an existing shop offer (product). Only provided fields are updated — omitted fields remain unchanged. IMPORTANT: Always fetch the current offer first with get-offers-by-ids to confirm the offer exists and review current values before updating.

ecommerce_update-offer

ChatGPT
Update an existing shop offer (product). Only provided fields are updated — omitted fields remain unchanged. IMPORTANT: Always fetch the current offer first with get-offers-by-ids to confirm the offer exists and review current values before updating.

ecommerce_update-offer-slug

ChatGPT
Change the URL slug for an offer (product). The slug appears in the storefront URL (e.g., /products/{slug}). Use get-offers-by-ids first to see the current slug. Slug rules: - Lowercase letters, numbers, and hyphens only - No spaces or special characters - Must be unique within the shop (non-archived offers)

ecommerce_update-offer-slug

ChatGPT
Change the URL slug for an offer (product). The slug appears in the storefront URL (e.g., /products/{slug}). Use get-offers-by-ids first to see the current slug. Slug rules: - Lowercase letters, numbers, and hyphens only - No spaces or special characters - Must be unique within the shop (non-archived offers)

ecommerce_update-offer-status

ChatGPT
Change an offer's visibility status and/or sold-out flag. At least one of status or available must be provided. Status options: - PUBLIC: Visible on storefront, purchasable (if available=true) - HIDDEN: Not visible on storefront but still exists, can be made public later - ARCHIVED: Soft delete — removes from storefront, no longer purchasable. Will fail if the offer is part of a bundle or combined offer. Sold-out toggle (available): - true: Mark as in stock (available for purchase) - false: Mark as sold out (not purchasable even if PUBLIC) - Not applicable when status=ARCHIVED (archived offers are always unavailable) IMPORTANT: Always fetch the current offer first with get-offers-by-ids to check current status and availability before changing.

ecommerce_update-offer-status

ChatGPT
Change an offer's visibility status and/or sold-out flag. At least one of status or available must be provided. Status options: - PUBLIC: Visible on storefront, purchasable (if available=true) - HIDDEN: Not visible on storefront but still exists, can be made public later - ARCHIVED: Soft delete — removes from storefront, no longer purchasable. Will fail if the offer is part of a bundle or combined offer. Sold-out toggle (available): - true: Mark as in stock (available for purchase) - false: Mark as sold out (not purchasable even if PUBLIC) - Not applicable when status=ARCHIVED (archived offers are always unavailable) IMPORTANT: Always fetch the current offer first with get-offers-by-ids to check current status and availability before changing.

ecommerce_update-offer-variant

ChatGPT
Update a specific offer variant's price, compare-at price, weight, or SKU. IMPORTANT: Always fetch the current offer first with get-offers-by-ids to review variant IDs and current values before updating.

ecommerce_update-offer-variant

ChatGPT
Update a specific offer variant's price, compare-at price, weight, or SKU. IMPORTANT: Always fetch the current offer first with get-offers-by-ids to review variant IDs and current values before updating.

ecommerce_update-promotion

ChatGPT
Update an existing promotion's settings. Set category to SHOP or MEMBERSHIP and provide only the fields to change — omitted fields remain unchanged. All monetary amounts are set in USD dollars (NOT cents) — shops price in USD; checkout handles per-customer currency conversion automatically. FOR SHOP (category=SHOP): • Limits: maxUses + onePerCustomer (updated as a group — provide both) • Requirements: minimumOrderAmount in USD dollars (set 0 to remove), allowedCountries (ISO codes or [] for all) • Scope: productIds (specific offers) or applyToEntireOrder=true • Cannot change discount type/amount — create a new promotion instead FOR MEMBERSHIP (category=MEMBERSHIP): • Discount: percentage (1-100) • Scope: subscriptionType + tierIds (empty list [] = all tiers, specific IDs = selected tiers) • Duration: durationCharges (0 = lifetime, 1-1000 = limited billing cycles) • Requirements: newMembersOnly • Limits: limitToSingleUse Always use get-promotions-by-ids first to check current values before updating.

ecommerce_update-promotion

ChatGPT
Update an existing promotion's settings. Set category to SHOP or MEMBERSHIP and provide only the fields to change — omitted fields remain unchanged. All monetary amounts are set in USD dollars (NOT cents) — shops price in USD; checkout handles per-customer currency conversion automatically. FOR SHOP (category=SHOP): • Limits: maxUses + onePerCustomer (updated as a group — provide both) • Requirements: minimumOrderAmount in USD dollars (set 0 to remove), allowedCountries (ISO codes or [] for all) • Scope: productIds (specific offers) or applyToEntireOrder=true • Cannot change discount type/amount — create a new promotion instead FOR MEMBERSHIP (category=MEMBERSHIP): • Discount: percentage (1-100) • Scope: subscriptionType + tierIds (empty list [] = all tiers, specific IDs = selected tiers) • Duration: durationCharges (0 = lifetime, 1-1000 = limited billing cycles) • Requirements: newMembersOnly • Limits: limitToSingleUse Always use get-promotions-by-ids first to check current values before updating.

ecommerce_update-shop-post-onboarding

ChatGPT
Updates the current shop's creator name (also used as the site name) and/or internal domain slug. Shops created via MCP (App) onboarding get a randomly generated creator name and internal domain — use this tool right after such a shop is created to set the real values the creator wants. Ask the creator for their preferred names before calling, since these are user-visible and changing the internal domain changes the shop's URL. Both parameters are optional, but at least one must be provided. Fields not provided remain unchanged. Parameters: - creatorName: New creator name (max 100 chars). The site (shop) name is set to the same value. - internalDomainSlug: New subdomain slug. Lowercase letters, numbers, and "-" only. Unless it already ends with "-shop", the "-shop" suffix is appended automatically (e.g. slug "acme" results in internal domain "acme-shop.fourthwall.com"). Fails if the slug is already taken by another shop. Returns the updated shop with the same shape as get-current-shop.

ecommerce_update-shop-post-onboarding

ChatGPT
Updates the current shop's creator name (also used as the site name) and/or internal domain slug. Shops created via MCP (App) onboarding get a randomly generated creator name and internal domain — use this tool right after such a shop is created to set the real values the creator wants. Ask the creator for their preferred names before calling, since these are user-visible and changing the internal domain changes the shop's URL. Both parameters are optional, but at least one must be provided. Fields not provided remain unchanged. Parameters: - creatorName: New creator name (max 100 chars). The site (shop) name is set to the same value. - internalDomainSlug: New subdomain slug. Lowercase letters, numbers, and "-" only. Unless it already ends with "-shop", the "-shop" suffix is appended automatically (e.g. slug "acme" results in internal domain "acme-shop.fourthwall.com"). Fails if the slug is already taken by another shop. Returns the updated shop with the same shape as get-current-shop.

ecommerce_update-shop-site-status

ChatGPT
Changes the current shop's site visibility: - LIVE: published, publicly accessible - COMING_SOON: unpublished, placeholder page shown to visitors - PASSWORD_PROTECTED: visitors must enter the provided password to view the site Use this when a creator asks to publish/unpublish their site, take it live, set it to private/coming soon, hide it from visitors, or gate access behind a password. Confirm with the creator before calling — this is a user-visible state change. For PASSWORD_PROTECTED the password parameter is required; otherwise it is ignored. Returns the updated shop with the same shape as get-current-shop.

ecommerce_update-shop-site-status

ChatGPT
Changes the current shop's site visibility: - LIVE: published, publicly accessible - COMING_SOON: unpublished, placeholder page shown to visitors - PASSWORD_PROTECTED: visitors must enter the provided password to view the site Use this when a creator asks to publish/unpublish their site, take it live, set it to private/coming soon, hide it from visitors, or gate access behind a password. Confirm with the creator before calling — this is a user-visible state change. For PASSWORD_PROTECTED the password parameter is required; otherwise it is ignored. Returns the updated shop with the same shape as get-current-shop.

ecommerce_validate-combined-listing

ChatGPT
Check if offers can be combined into a combined listing before creating one. All offers must share the same product library and have unique color variants. Returns canCombine (boolean) and per-offer eligibility with issues: - DIFFERENT_LIBRARY: offer has a different product library - DUPLICATE_COLOR: color variant conflicts with another offer - MISSING_PRODUCT: offer has no product assigned - ALREADY_SELECTED: candidate is already in the selected list

ecommerce_validate-combined-listing

ChatGPT
Check if offers can be combined into a combined listing before creating one. All offers must share the same product library and have unique color variants. Returns canCombine (boolean) and per-offer eligibility with issues: - DIFFERENT_LIBRARY: offer has a different product library - DUPLICATE_COLOR: color variant conflicts with another offer - MISSING_PRODUCT: offer has no product assigned - ALREADY_SELECTED: candidate is already in the selected list

ecommerce_validate-dns-entries

ChatGPT
Triggers a fresh DNS validation by checking all configured records against live DNS and updates their verification status. Unlike get-dns-entries (which returns cached status), this tool performs real-time DNS lookups. Returns the same structure as get-dns-entries: - Domain: domainId, domain (e.g. "myshop.com") - Status: status (CONNECTED, NOT_CONNECTED, PARTIALLY_CONNECTED, SYNCING_YOUR_DOMAIN, REMOVAL_IN_PROGRESS) - Flags: areAllEntriesComplete (boolean), isSslSynced (boolean), retryAllowed (boolean) - Provider: dnsProvider (nullable String), dnsProviderMode (MANUAL/AUTOMATIC, nullable) - Nameservers: nameservers (list of hostname strings) - Per record in records: - recordType (CNAME, TXT, MX, A) - host (nullable), value (nullable) - status (VALID, INVALID, UNKNOWN) — freshly validated - validationError (nullable String — e.g. "RECORD_NOT_FOUND", "INCORRECT_TYPE_OR_VALUE (found: ...)") - alias (record purpose, e.g. SHOP_IP_ADDRESS, SHOP_WWW_REDIRECT, DMARC) - priority (nullable Int, for MX records) Use this tool when: - User reports their domain is not working after configuring DNS records - Need to refresh validation status (e.g. status was NOT_CONNECTED, user says they fixed it) - Troubleshooting specific record failures — check validationError for details - After user makes changes at their domain registrar and wants to verify - retryAllowed from get-dns-entries is true (status is NOT_CONNECTED or PARTIALLY_CONNECTED)

ecommerce_validate-dns-entries

ChatGPT
Triggers a fresh DNS validation by checking all configured records against live DNS and updates their verification status. Unlike get-dns-entries (which returns cached status), this tool performs real-time DNS lookups. Returns the same structure as get-dns-entries: - Domain: domainId, domain (e.g. "myshop.com") - Status: status (CONNECTED, NOT_CONNECTED, PARTIALLY_CONNECTED, SYNCING_YOUR_DOMAIN, REMOVAL_IN_PROGRESS) - Flags: areAllEntriesComplete (boolean), isSslSynced (boolean), retryAllowed (boolean) - Provider: dnsProvider (nullable String), dnsProviderMode (MANUAL/AUTOMATIC, nullable) - Nameservers: nameservers (list of hostname strings) - Per record in records: - recordType (CNAME, TXT, MX, A) - host (nullable), value (nullable) - status (VALID, INVALID, UNKNOWN) — freshly validated - validationError (nullable String — e.g. "RECORD_NOT_FOUND", "INCORRECT_TYPE_OR_VALUE (found: ...)") - alias (record purpose, e.g. SHOP_IP_ADDRESS, SHOP_WWW_REDIRECT, DMARC) - priority (nullable Int, for MX records) Use this tool when: - User reports their domain is not working after configuring DNS records - Need to refresh validation status (e.g. status was NOT_CONNECTED, user says they fixed it) - Troubleshooting specific record failures — check validationError for details - After user makes changes at their domain registrar and wants to verify - retryAllowed from get-dns-entries is true (status is NOT_CONNECTED or PARTIALLY_CONNECTED)

import-chatgpt-image

ChatGPT
Import an image the user attached directly to ChatGPT into Fourthwall, then return its durable Fourthwall URL plus a vision analysis of it. Use this whenever the user says to use an attached/uploaded ChatGPT image for a Fourthwall workflow. The input must be the ChatGPT file reference supplied by the host. Do not invent file URLs or use local paths. After this tool returns, use url exactly like an uploaded image and analysis for its described contents. Parameters: - image: ChatGPT-provided file reference. ChatGPT fills this from the user's attached image because this tool declares it as a file param.

import-chatgpt-image

ChatGPT
Import an image the user attached directly to ChatGPT into Fourthwall, then return its durable Fourthwall URL plus a vision analysis of it. Use this whenever the user says to use an attached/uploaded ChatGPT image for a Fourthwall workflow. The input must be the ChatGPT file reference supplied by the host. Do not invent file URLs or use local paths. After this tool returns, use url exactly like an uploaded image and analysis for its described contents. Parameters: - image: ChatGPT-provided file reference. ChatGPT fills this from the user's attached image because this tool declares it as a file param.

load-skills

ChatGPT
Dynamically load the Fourthwall skills most relevant to a user prompt — analogous to how Claude Code loads skills based on intent. Ranks the skill catalog by semantic similarity to the prompt and returns the vetted skills that clear a relevance threshold — so a prompt that is unrelated, or whose intent belongs to a part of Fourthwall no returned skill covers, yields an empty list rather than irrelevant skills. Call this at the start of a session (and again whenever the user's intent shifts) before invoking any other Fourthwall tool, so the matching skill's instructions are in context. Parameters: - prompt: The user's intent as a short phrase, in their own words or a concise imperative (e.g. "add a product to my shop", "where is my order", "change my theme colors"). Pass only the intent itself: do NOT wrap it as "user wants to ..." and do NOT append the platform name ("Fourthwall"). The match is semantic, so that filler dilutes the signal and skews results toward unrelated skills — e.g. "user wants to design ..." drifts toward the storefront designer.

load-skills

ChatGPT
Dynamically load the Fourthwall skills most relevant to a user prompt — analogous to how Claude Code loads skills based on intent. Ranks the skill catalog by semantic similarity to the prompt and returns the vetted skills that clear a relevance threshold — so a prompt that is unrelated, or whose intent belongs to a part of Fourthwall no returned skill covers, yields an empty list rather than irrelevant skills. Call this at the start of a session (and again whenever the user's intent shifts) before invoking any other Fourthwall tool, so the matching skill's instructions are in context. Parameters: - prompt: The user's intent as a short phrase, in their own words or a concise imperative (e.g. "add a product to my shop", "where is my order", "change my theme colors"). Pass only the intent itself: do NOT wrap it as "user wants to ..." and do NOT append the platform name ("Fourthwall"). The match is semantic, so that filler dilutes the signal and skews results toward unrelated skills — e.g. "user wants to design ..." drifts toward the storefront designer.

media-library

ChatGPT
Open the media library for the user to browse, upload, and select an image. Renders a selectable image carousel plus an upload tile; a newly uploaded image joins the carousel preselected. When the user confirms an image with "Use selected image", its hosted URL arrives in their next message as a markdown link ("Selected [image](url)") — act on that URL. Parameters: - prompt: Instruction text shown in the media library UI (e.g. "Select artwork for your product"). - title: Optional heading displayed above the library.

media-library

ChatGPT
Open the media library for the user to browse, upload, and select an image. Renders a selectable image carousel plus an upload tile; a newly uploaded image joins the carousel preselected. When the user confirms an image with "Use selected image", its hosted URL arrives in their next message as a markdown link ("Selected [image](url)") — act on that URL. Parameters: - prompt: Instruction text shown in the media library UI (e.g. "Select artwork for your product"). - title: Optional heading displayed above the library.

navigate

ChatGPT
Navigate the user to a specific page in the Fourthwall admin dashboard. The url must be an exact path from omni_knowledge results (modules or help docs) - never construct or guess paths. Do not tell users you are "searching" or "looking up" the path. Parameters: - url: Exact admin dashboard path from omni_knowledge results (e.g. "/admin/dashboard/promotions/promotion-codes/create/"), optionally with query parameters for filtering (e.g. "/admin/products/all/?badges=BESTSELLER"). Or a full URL returned by an MCP tool (e.g. checkout link), or a Fourthwall help-docs URL returned by omni_knowledge. Never guess or construct paths. - description: Button label shown to the user, 2-4 words, under 40 characters (e.g. "Create Promotion", "View Orders").

navigate

ChatGPT
Navigate the user to a specific page in the Fourthwall admin dashboard. The url must be an exact path from omni_knowledge results (modules or help docs) - never construct or guess paths. Do not tell users you are "searching" or "looking up" the path. Parameters: - url: Exact admin dashboard path from omni_knowledge results (e.g. "/admin/dashboard/promotions/promotion-codes/create/"), optionally with query parameters for filtering (e.g. "/admin/products/all/?badges=BESTSELLER"). Or a full URL returned by an MCP tool (e.g. checkout link), or a Fourthwall help-docs URL returned by omni_knowledge. Never guess or construct paths. - description: Button label shown to the user, 2-4 words, under 40 characters (e.g. "Create Promotion", "View Orders").

omni_escalate

ChatGPT
Transfer the conversation to human support via Slack. Call this when the user explicitly asks to speak with a person, asks for human help, or requests escalation. Do not call proactively — offer escalation first and wait for the user to confirm. Parameters: - reason: Short description of what the user needs help with, in their own words when possible. - context: A concise summary of the conversation that led here, written by you (the assistant). Include the user's questions, relevant tool results, and what has already been tried. Returns: - A dict with action ("escalate_success" or "escalate_error") and customerEmail (the customer's email from the access token, or empty string if unavailable).

omni_escalate

ChatGPT
Transfer the conversation to human support via Slack. Call this when the user explicitly asks to speak with a person, asks for human help, or requests escalation. Do not call proactively — offer escalation first and wait for the user to confirm. Parameters: - reason: Short description of what the user needs help with, in their own words when possible. - context: A concise summary of the conversation that led here, written by you (the assistant). Include the user's questions, relevant tool results, and what has already been tried. Returns: - A dict with action ("escalate_success" or "escalate_error") and customerEmail (the customer's email from the access token, or empty string if unavailable).

omni_knowledge

ChatGPT
Search Fourthwall's knowledge base for help documentation, how-to guides, and tips. Use this to answer questions about how the Fourthwall platform works. Parameters: - query: Search term — a question or topic about Fourthwall (1-256 characters). Returns: - Matching knowledge grouped by type: admin modules (dashboard pages with their exact navigation paths), snippets (tips and Q&A), and help docs (official documentation). Pass a module's path verbatim to the navigate tool — never construct paths. When to use this tool: - The user asks how to do something on Fourthwall (e.g. "how do I create a promotion?", "how does shipping work?") - The user needs guidance on platform features, product design, store setup, or best practices - You need context about Fourthwall concepts before using other tools When NOT to use this tool: - The user wants to search their own shop data (use the "omni_search" tool or a dedicated ecommerce_* tool instead) - The user wants to perform an action like creating or updating resources Examples: - query="how to create a promotion" - query="product designer walkthrough" - query="shipping flat rates setup"

omni_knowledge

ChatGPT
Search Fourthwall's knowledge base for help documentation, how-to guides, and tips. Use this to answer questions about how the Fourthwall platform works. Parameters: - query: Search term — a question or topic about Fourthwall (1-256 characters). Returns: - Matching knowledge grouped by type: admin modules (dashboard pages with their exact navigation paths), snippets (tips and Q&A), and help docs (official documentation). Pass a module's path verbatim to the navigate tool — never construct paths. When to use this tool: - The user asks how to do something on Fourthwall (e.g. "how do I create a promotion?", "how does shipping work?") - The user needs guidance on platform features, product design, store setup, or best practices - You need context about Fourthwall concepts before using other tools When NOT to use this tool: - The user wants to search their own shop data (use the "omni_search" tool or a dedicated ecommerce_* tool instead) - The user wants to perform an action like creating or updating resources Examples: - query="how to create a promotion" - query="product designer walkthrough" - query="shipping flat rates setup"

read-skills

ChatGPT
Load named Fourthwall skills and return their full instructions. Use this to follow cross-references between skills; to discover skills by intent, use load-skills instead. MUST be called when a skill loaded via load-skills names another skill to load, use, hand off to, or that it requires — in its description or content (e.g. product-designer requires product-catalog; shop-onboarding loads storefronts-designer then product-designer). Load every referenced skill before acting on its instructions. Parameters: - names: Exact skill names, e.g. ["product-catalog", "storefronts-designer"]. Unknown or unavailable names are ignored.

read-skills

ChatGPT
Load named Fourthwall skills and return their full instructions. Use this to follow cross-references between skills; to discover skills by intent, use load-skills instead. MUST be called when a skill loaded via load-skills names another skill to load, use, hand off to, or that it requires — in its description or content (e.g. product-designer requires product-catalog; shop-onboarding loads storefronts-designer then product-designer). Load every referenced skill before acting on its instructions. Parameters: - names: Exact skill names, e.g. ["product-catalog", "storefronts-designer"]. Unknown or unavailable names are ignored.

request-upload-url

ChatGPT
Internal helper for the show-upload widget. Request a signed URL to upload an image straight to storage. Not a user-facing action — do not call it in response to a chat request. The widget PUTs the file bytes to the returned signedUrl, then calls confirm-image-upload. Parameters: - filename: Original file name including extension (e.g. "logo.png"). - contentType: The file's MIME type — JPEG, PNG, GIF, or WebP (e.g. "image/png").

request-upload-url

ChatGPT
Internal helper for the show-upload widget. Request a signed URL to upload an image straight to storage. Not a user-facing action — do not call it in response to a chat request. The widget PUTs the file bytes to the returned signedUrl, then calls confirm-image-upload. Parameters: - filename: Original file name including extension (e.g. "logo.png"). - contentType: The file's MIME type — JPEG, PNG, GIF, or WebP (e.g. "image/png").

show-card

ChatGPT
Display a single key-value detail card (payout summary, shop info, configuration). Pass entries as a list of {label, value} pairs. Use data from MCP tool results. For admin links use the separate navigate tool — this card is read-only and renders no link button. Parameters: - title: Heading shown at the top of the card. - entries: Key-value entries (e.g. [{label: "Status", value: "Active"}]). - icon: Icon for the card header.

show-card

ChatGPT
Display a single key-value detail card (payout summary, shop info, configuration). Pass entries as a list of {label, value} pairs. Use data from MCP tool results. For admin links use the separate navigate tool — this card is read-only and renders no link button. Parameters: - title: Heading shown at the top of the card. - entries: Key-value entries (e.g. [{label: "Status", value: "Active"}]). - icon: Icon for the card header.

show-entity

ChatGPT
Display shop entities (orders, offers/products, promotions, collections, memberships, supporters, catalog products, gift cards, giveaway packages) as an interactive card list in the conversation. Use this whenever the user asks to get, show, list, display, view, or find entities — rendering the cards IS the answer. Call it as your first action; do not reply with a plain-text list and do not wait to be asked to "show it in the UI." Pass source + ids — the server resolves full item data. Always use IDs from MCP tool results. Parameters: - title: Optional heading displayed above the cards. - source: Entity source: "orders", "offers", "promotions", "memberships_supporters", "membership_posts", "collections", "catalog_products", "gift_cards", "giveaway_packages", "blanks". - ids: Exact "id" field values copied from MCP tool results. Do NOT use slugs, names, or fabricated identifiers. - variant: Card style. Omit for compact cards. Other values are reserved for specific skill workflows — set it only when a skill tells you to. - buttonLabel: Button text, used only by certain skill workflows.

show-entity

ChatGPT
Display shop entities (orders, offers/products, promotions, collections, memberships, supporters, catalog products, gift cards, giveaway packages) as an interactive card list in the conversation. Use this whenever the user asks to get, show, list, display, view, or find entities — rendering the cards IS the answer. Call it as your first action; do not reply with a plain-text list and do not wait to be asked to "show it in the UI." Pass source + ids — the server resolves full item data. Always use IDs from MCP tool results. Parameters: - title: Optional heading displayed above the cards. - source: Entity source: "orders", "offers", "promotions", "memberships_supporters", "membership_posts", "collections", "catalog_products", "gift_cards", "giveaway_packages", "blanks". - ids: Exact "id" field values copied from MCP tool results. Do NOT use slugs, names, or fabricated identifiers. - variant: Card style. Omit for compact cards. Other values are reserved for specific skill workflows — set it only when a skill tells you to. - buttonLabel: Button text, used only by certain skill workflows.

show-table

ChatGPT
Display tabular data inline. Pass columns (key + label) and rows keyed by column keys. Use for analytics, reports, or any structured comparison data from MCP tool results. Parameters: - title: Optional heading displayed above the table. - columns: Column definitions as an array of {key, label} objects, e.g. [{"key":"stage","label":"Funnel Stage"},{"key":"count","label":"Count"}]. Pass the array directly — do not JSON.stringify. - rows: Row data as an array of objects keyed by the column keys, e.g. [{"stage":"Total Sessions","count":"3,539"},{"stage":"Carts Created","count":"285"}]. Pass the array directly — do not JSON.stringify.

show-table

ChatGPT
Display tabular data inline. Pass columns (key + label) and rows keyed by column keys. Use for analytics, reports, or any structured comparison data from MCP tool results. Parameters: - title: Optional heading displayed above the table. - columns: Column definitions as an array of {key, label} objects, e.g. [{"key":"stage","label":"Funnel Stage"},{"key":"count","label":"Count"}]. Pass the array directly — do not JSON.stringify. - rows: Row data as an array of objects keyed by the column keys, e.g. [{"stage":"Total Sessions","count":"3,539"},{"stage":"Carts Created","count":"285"}]. Pass the array directly — do not JSON.stringify.

show-upload

ChatGPT
Display a drag-and-drop image upload area inline. Use when the user needs to provide an image. The picked image is uploaded and analyzed, and a description of its contents arrives in the user's next message ("Uploaded an image: …") — act on that description directly. Parameters: - title: Optional heading displayed above the upload area. - prompt: Custom prompt text shown inside the drop zone. Default: "Drop image or browse".

show-upload

ChatGPT
Display a drag-and-drop image upload area inline. Use when the user needs to provide an image. The picked image is uploaded and analyzed, and a description of its contents arrives in the user's next message ("Uploaded an image: …") — act on that description directly. Parameters: - title: Optional heading displayed above the upload area. - prompt: Custom prompt text shown inside the drop zone. Default: "Drop image or browse".

Capabilities

InteractiveWrites

Example Prompts

Click any prompt to copy it.

App Stats

272

Tools

3

Prompts

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily