43 operations. Call each with POST https://app.chirply.io/api/v1/actions/<name> and a bearer token; the response is { "data": { "action", "summary", "result" } }. A read badge means the operation changes nothing; write requires the credential’s write scope.
Add to cart
commerce.add_to_cartwrite
Add a product to a shopping cart on the public storefront, starting a new cart when no token is given. The product must be active and published on the storefront, a product with options requires a variant_id, and the request is refused when tracked stock would be exceeded. Nothing is charged and no stock is held — this only builds the cart; money moves at commerce.checkout. ALWAYS keep the cart_token it returns: it is how every later call finds this cart.
Parameters
Field
Type
Required
Description
store_id
string (uuid)
optional
Which storefront to shop. Optional — an account has one store, so this defaults to it.
cart_token
string
optional
An existing cart to add to. Omit to start a new cart; the new token comes back in the result.
product_id
string (uuid)
required
Catalogue product to add, from commerce.list_products. It must have storefront status 'active'.
variant_id
string (uuid) (or null)
optional
Which size/colour/option combination to add, from commerce.list_variants. Required when the product has variants; null or omitted otherwise.
quantity
integer
optional
How many units to add. This is ADDED to whatever quantity of the same line is already in the cart. Default: 1
Over MCP the same operation is the tool commerce_add_to_cart at https://app.chirply.io/api/mcp, same bearer token, same input.
Adjust inventory
commerce.adjust_inventorywriteconfirm
Add or remove sellable product inventory and record the manual adjustment in the stock ledger. This can make an item available or sold out immediately on a live storefront. IMPORTANT SIDE EFFECT: it also switches stock tracking ON for that product permanently, even if it was selling with tracking off — so from then on the count is enforced, and a product whose inventory policy is 'deny' will REFUSE real customer orders as soon as the count reaches zero.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
product_id
string (uuid)
required
Product whose stock changes.
delta
integer
required
Signed quantity change; positive adds stock and negative removes it.
Over MCP the same operation is the tool commerce_adjust_inventory at https://app.chirply.io/api/mcp, same bearer token, same input.
Apply discount code
commerce.apply_discount_codewrite
Apply a discount code to a storefront cart, or clear the one already on it. The code is checked against the store's active discounts on the server and rejected if it isn't valid, so this is also how you test whether a code works. The saving is recalculated into the cart's totals and will really be taken off the customer's charge at checkout. Nothing is charged here.
Parameters
Field
Type
Required
Description
store_id
string (uuid)
optional
Which storefront to shop. Optional — an account has one store, so this defaults to it.
cart_token
string
required
The cart's token, as returned by commerce.add_to_cart. A shopper's browser keeps this in a cookie; a machine caller has to carry it between calls. Carts expire, after which a new one must be started.
discount_code
string (or null)
required
The code the shopper typed, matched case-insensitively against the store's active discounts. Pass null to remove the code currently on the cart.
Over MCP the same operation is the tool commerce_apply_discount_code at https://app.chirply.io/api/mcp, same bearer token, same input.
Use this domain
commerce.attach_domainwriteconfirmadmin only
Make an already-connected, unused account domain the store's public address. This immediately changes public routing when the domain is active and replaces any prior custom address on this store; it does not modify registrar ownership.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
store_id
string (uuid)
required
Native Commerce store that will use the domain.
domain_id
string (uuid)
required
Connected account domain to attach. It must not serve a funnel, directory or another store.
Over MCP the same operation is the tool commerce_attach_domain at https://app.chirply.io/api/mcp, same bearer token, same input.
Cancel store order
commerce.cancel_orderwriteconfirmadmin only
Cancel a store or funnel order. An UNPAID order's pending Stripe payment is cancelled so it can never be charged, and the stock it held is released. A PAID order is marked cancelled and, when refund is true, everything not yet refunded is refunded on the seller's OWN Stripe account — REAL MONEY back to the buyer, irreversible; with refund false the money stays with the seller. restock puts units that were not already refunded back on tracked inventory. A subscription order must have its subscription cancelled first (commerce.cancel_subscription). Fires order_cancelled (and order_refunded when it refunds), starting matching automations and notifying webhook subscribers. Cancelling an already-cancelled order does nothing.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The order to cancel — a store order from commerce.list_orders, or a funnel order.
refund
boolean
required
For a paid order: true refunds everything not yet refunded (real money), false cancels without refunding. Ignored for unpaid orders. Required, so the decision is always explicit.
restock
boolean
optional
Put units that hadn't already been refunded back on tracked inventory so they can be sold again. Default: true
reason
string
optional
Why the order was cancelled, e.g. 'Event postponed'. Recorded on the order and included in the order_cancelled event.
Over MCP the same operation is the tool commerce_cancel_order at https://app.chirply.io/api/mcp, same bearer token, same input.
Cancel subscription
commerce.cancel_subscriptionwriteconfirmadmin only
Cancel a customer's recurring subscription on the seller's OWN Stripe account. This stops REAL future charges to a real customer's card: with at_period_end (the default) they keep what they paid for until the current billing period runs out and are never charged again; with at_period_end false the subscription ends IMMEDIATELY, any member access the purchase granted is revoked right away, and no refund of the current period is issued by this action. It does not delete the customer, the order history, or any member data.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
order_id
string (uuid)
required
The recurring order whose subscription to cancel, from commerce.list_subscriptions.
at_period_end
boolean
optional
true (default) lets the customer keep access until the paid period ends, then stops billing. false cancels and revokes granted member access immediately, without refunding the current period. Default: true
Over MCP the same operation is the tool commerce_cancel_subscription at https://app.chirply.io/api/mcp, same bearer token, same input.
Checkout
commerce.checkoutwriteconfirm
Place a REAL order for the contents of a storefront cart. This is the point of no return on the buyer's path: it re-prices every line, HOLDS the tracked stock so nobody else can buy it, creates a real pending order in the seller's books, creates or updates a CRM contact for the buyer from their email, and opens a live Stripe payment for the full total on the seller's OWN Stripe account (test mode only if the store is set to test). It returns that payment's client secret — the card is charged the moment that secret is confirmed, which for a shopper is them clicking Pay. Use only with a real buyer's real details and a total they have agreed to.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
store_id
string (uuid)
optional
Which storefront to shop. Optional — an account has one store, so this defaults to it.
cart_token
string
required
The cart's token, as returned by commerce.add_to_cart. A shopper's browser keeps this in a cookie; a machine caller has to carry it between calls. Carts expire, after which a new one must be started.
buyer_email
string (email)
required
The buyer's email address. Required — the receipt goes here and it is what the CRM contact is matched or created on.
buyer_name
string
optional
The buyer's full name, as it should appear on the order.
buyer_phone
string
optional
The buyer's phone number, any format.
shipping_address
object
optional
Where physical goods are delivered. Required in practice for any cart containing a product that needs shipping.
shipping_address.line1
string
required
Street address, first line.
shipping_address.line2
string
optional
Apartment, suite, unit — the second address line.
shipping_address.city
string
required
Town or city.
shipping_address.region
string
optional
State, province or region.
shipping_address.postal_code
string
optional
Postal or ZIP code.
shipping_address.country
string
optional
Two-letter ISO country code, e.g. 'GB'. Omit for the store's default checkout country.
customer_note
string
optional
A note from the buyer for the seller, shown on the order.
accept_terms
boolean
optional
The buyer has read and accepts the store's terms. REQUIRED as true when the store requires terms (see policies.terms on commerce.get_store) — checkout is refused without it, and the acceptance, its time and the terms URL/version are recorded on the order. Only set it when the real buyer has actually agreed.
Over MCP the same operation is the tool commerce_checkout at https://app.chirply.io/api/mcp, same bearer token, same input.
Connect domain
commerce.connect_domainwriteconfirmadmin only
Connect a customer-owned hostname through the platform's Cloudflare for SaaS service and make it this store's public address. This changes public routing and may automatically create a CNAME in its connected Cloudflare account; it does not purchase a domain.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
store_id
string (uuid)
required
Native Commerce store that will be served from the hostname.
domain
string
required
Customer-owned hostname, such as shop.example.com. A pasted https:// URL is accepted and normalized.
Over MCP the same operation is the tool commerce_connect_domain at https://app.chirply.io/api/mcp, same bearer token, same input.
Create collection
commerce.create_collectionwrite
Create a storefront collection. Products can be included immediately with product_ids, or assigned or changed later with commerce.set_collection_products, without changing or duplicating the products themselves.
Parameters
Field
Type
Required
Description
name
string
required
Customer-facing collection name.
slug
string
required
Account-unique collection URL handle.
description
string
optional
Customer-facing collection description.
image_url
string (uri)
optional
Public collection cover image URL.
is_visible
boolean
optional
Whether shoppers can browse this collection. Default: true
How products are ordered in the collection. Default: "manual"
product_ids
array of (string (uuid))
optional
Products to put in the collection immediately, in display order for 'manual' sort. Every id must be one of this account's own products. Omit to create an empty collection and populate it later with commerce.set_collection_products.
Over MCP the same operation is the tool commerce_create_collection at https://app.chirply.io/api/mcp, same bearer token, same input.
Activate discount
commerce.create_discountwriteconfirm
Create a discount code and put it LIVE immediately. Every code created here starts ACTIVE, applies to EVERY product in the store, and — unless you set usage_limit — can be redeemed an UNLIMITED number of times by anyone who learns the code. It comes straight off what real customers pay at storefront checkout, so a percentage value of 10000 basis points is a 100%-off code that gives the whole catalogue away for free. There is no draft state and no approval step after this call: use commerce.pause_discount to stop one.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
code
string
required
Case-insensitive code customers enter at checkout. Stored uppercase. Anyone who learns it can use it.
name
string
required
Internal name explaining the offer. Customers never see this.
discount_type
"percentage" | "fixed_amount" | "free_shipping"
required
How the discount changes the order: a percentage off the eligible subtotal, a flat amount off, or free shipping.
value_amount
integer
required
Basis points for percentage discounts (2000 = 20%, 10000 = 100% i.e. FREE), or the smallest currency unit for fixed discounts (500 = $5.00). Ignored for free_shipping. There is no upper bound — check this number before calling.
currency
string
optional
Three-letter ISO currency code for a fixed-amount discount. Default: "usd"
minimum_amount
integer
optional
Minimum order subtotal, in the smallest currency unit, before the code is allowed. 0 (the default) means it applies to any order however small. Default: 0
usage_limit
integer
optional
Maximum redemptions across ALL customers. Omit this and the code is UNLIMITED — set it unless you truly mean that.
starts_at
string (date-time)
optional
ISO 8601 time the code becomes usable; defaults to right now.
ends_at
string (date-time)
optional
ISO 8601 time the code stops working. Omit and it never expires on its own.
Over MCP the same operation is the tool commerce_create_discount at https://app.chirply.io/api/mcp, same bearer token, same input.
Create product
commerce.create_productwrite
Create a reusable catalog product for storefronts and funnels. Active products become sellable immediately when the storefront is published.
Parameters
Field
Type
Required
Description
name
string
required
Customer-facing product name.
slug
string
required
Account-unique product URL handle.
description
string
optional
Customer-facing product description.
image_url
string (uri)
optional
Primary public product image URL.
product_type
"physical" | "digital" | "service"
optional
Whether this is a physical good, digital product or service. Default: "physical"
kind
"one_time" | "recurring"
optional
One-time purchase, or 'recurring' for a subscription that charges the buyer's card automatically on a schedule until they cancel. Default: "one_time"
recurring_interval
"day" | "week" | "month" | "year"
optional
For recurring products: the billing period unit. '$49/month' is interval 'month' with count 1. Ignored for one-time products. Default: "month"
recurring_interval_count
integer
optional
For recurring products: how many intervals between charges — 3 with interval 'month' bills every 3 months. Ignored for one-time products. Default: 1
grants_access_product_id
string (uuid)
optional
Member access product (from members.list_products) granted to the buyer automatically when their payment settles, and suspended/revoked if their subscription later fails or ends. Omit for a purchase that unlocks no member content.
currency
string
optional
Three-letter ISO currency code. Omit to use the store's currency (or the account's currency when there is no store yet).
price_amount
integer
required
Regular selling price in the currency's smallest unit, such as cents (pence). When the store's tax is on this is tax-inclusive or tax-exclusive according to the store's prices_include_tax setting.
compare_at_amount
integer
optional
Optional original/strikethrough price in the smallest currency unit.
tax_rate_id
string (or null)
optional
Which of the store's tax rates (commerce.get_tax_settings) this item is charged at. Null or omitted uses the default — the store's default rate for a product, the product's rate for a variant. Ignored while the store's tax is off.
sale_price_amount
integer (or null)
optional
A sale price in the smallest currency unit, lower than the regular price. While the sale window is open it is what shoppers pay on the storefront (shown with the regular price struck through); outside it the regular price applies automatically. One-time products only. Null removes the sale (and its dates). Funnel checkouts are not affected.
sale_starts_at
string (or null)
optional
When the sale price starts applying (inclusive). Omit/null for "now". Either an ISO 8601 instant with an offset (2026-10-31T23:59:00+01:00), or a local date-time WITHOUT an offset (2026-10-31T23:59), which is read in the store's own timezone — DST included. Null clears it.
sale_ends_at
string (or null)
optional
When the sale ends — the regular price applies from this instant on (exclusive end). Omit/null for no end. Either an ISO 8601 instant with an offset (2026-10-31T23:59:00+01:00), or a local date-time WITHOUT an offset (2026-10-31T23:59), which is read in the store's own timezone — DST included. Null clears it.
sku
string
optional
Account-unique stock-keeping unit.
vendor
string
optional
Brand or vendor shown to customers.
tags
string[]
optional
Searchable merchandising tags. Default: []
requires_shipping
boolean
optional
Whether checkout must collect a delivery address. Default: true
Over MCP the same operation is the tool commerce_create_product at https://app.chirply.io/api/mcp, same bearer token, same input.
Create store
commerce.create_storewrite
Create the account's storefront in draft. It remains private until Publish store is run. Regional settings default from the account's business profile country: a GB account's store starts in GBP with a GB checkout address, VAT-inclusive pricing and the UK rate presets loaded (an IE account: EUR, IE and the Irish presets); tax itself stays OFF until it is turned on. Any field given here overrides those defaults.
Parameters
Field
Type
Required
Description
name
string
required
Customer-facing store name.
slug
string
required
Public URL handle base using lowercase letters, numbers and hyphens. A 6-character suffix unique to this account is appended automatically — the same scheme the app's own 'Create store' button uses — so this can never collide with another account's store slug.
description
string
optional
Short customer-facing store description.
currency
string
optional
Three-letter ISO currency code. Omit to use the account's currency: its explicit business currency, else its business country's (GB → gbp, IE → eur), else the connected Stripe account's default, else usd.
accent_color
string
optional
Store signature color as a six-digit hex value. Default: "#315efb"
stripe_account_id
string (uuid)
optional
Connected Stripe account that will collect store payments.
payment_mode
"live" | "test"
optional
Whether checkout moves real money or uses Stripe test mode. Default: "live"
tax_enabled
boolean
optional
Turn tax on or off for the storefront. When on, every cart and checkout calculates tax per line from the store's rates, and paid orders get a tax receipt with a sequential invoice number. Turning it on requires at least one rate and a default rate. Changes what real customers are charged from the next page load when prices are tax-exclusive.
prices_include_tax
boolean
optional
true: product prices are entered tax-inclusive (the shelf price is what the buyer pays and the tax is the part inside it — normal for UK/EU consumer pricing). false: prices are net and tax is added on top at checkout.
tax_label
string (or null)
optional
What the tax is called on the storefront and receipts, e.g. VAT, GST or Tax. Null uses the default for the store's currency.
tax_rates
object[]
optional
FULL REPLACEMENT of the store's tax rates. Rates left out are deleted; products pointing at a deleted rate fall back to the default rate. Past orders keep the rate they were charged at.
tax_rates[].id
string
optional
The rate's id. When editing, keep an existing rate's id — products point at rates by id, so a changed id detaches them (they fall back to the default rate). Omit for a new rate and one is generated.
tax_rates[].name
string
required
The label printed on receipts and exports, e.g. 'UK Standard 20%'.
tax_rates[].rate_percent
number
optional
The percentage as typed, e.g. 20 or 13.5. Ignored — always 0 — when treatment is zero or exempt. Default: 0
tax_rates[].treatment
"standard" | "zero" | "exempt"
optional
standard: the percentage applies. zero: zero-rated, charged at 0%. exempt: exempt, no tax. Zero-rated and exempt both charge nothing but are recorded separately on receipts and exports. Default: "standard"
tax_rates[].country
string (or null)
optional
Two-letter country the rate belongs to (GB, IE…), used for grouping only.
add_preset_rates
"GB" | "IE"
optional
Append a labelled preset list: GB adds UK Standard 20%, Reduced 5%, Zero-rated 0% and Exempt; IE adds Ireland Standard 23%, Reduced 13.5%, Second reduced 9%, Zero 0% and Exempt. Rates already present (same id) are skipped. Presets are starting points; which rate a product falls under is the seller's decision.
default_tax_rate_id
string (or null)
optional
Id of the rate applied to every product (and variant) that does not name its own. Must be one of the store's rates.
timezone
string
optional
IANA timezone of the store, e.g. Europe/London. Sale start and end times typed without an offset are read in this zone, and storefront and receipt dates are shown in it.
checkout_country
string (or null)
optional
Two-letter country the checkout address form opens on, e.g. GB. Null keeps the US default.
supplier
object
optional
Supplier details printed on receipts. Only the fields sent change; send null to clear one.
supplier.legal_name
string (or null)
optional
The supplier's legal name, printed at the top of every tax receipt.
supplier.trading_name
string (or null)
optional
Trading name, when different from the legal name.
supplier.address_line1
string (or null)
optional
Supplier address, first line.
supplier.address_line2
string (or null)
optional
Supplier address, second line.
supplier.city
string (or null)
optional
Supplier town or city.
supplier.region
string (or null)
optional
Supplier county, state or region.
supplier.postal_code
string (or null)
optional
Supplier postcode.
supplier.country
string (or null)
optional
Supplier country, as it should be printed.
supplier.vat_number
string (or null)
optional
The supplier's VAT (or other tax) registration number, printed on tax receipts.
supplier.company_number
string (or null)
optional
Company registration number, printed when set.
supplier.registered_office
string (or null)
optional
Registered office address, printed when set.
invoice_prefix
string
optional
Text before every invoice number, e.g. 'INV-' gives INV-00001. Changing it affects invoices issued from now on only.
next_invoice_number
integer
optional
The number the next invoice will get. It can only be moved UP (for example to continue a sequence from a previous system); issued numbers are never reused and the sequence has no gaps after it.
email_receipts
boolean
optional
Whether the buyer is emailed a receipt (a tax receipt when the order was taxed) when payment confirms. Sent through the account's own connected email sender; nothing is sent when no sender is connected.
Over MCP the same operation is the tool commerce_create_store at https://app.chirply.io/api/mcp, same bearer token, same input.
Add variant
commerce.create_variantwrite
Add a purchasable size, color or option combination to an existing product, with optional SKU, price override and independent inventory.
Parameters
Field
Type
Required
Description
product_id
string (uuid)
required
Parent product id.
name
string
required
Human-readable option combination such as Blue / Large.
sku
string
optional
Account-unique variant SKU.
option_values
map of string → string
optional
Option labels and selected values, such as color=Blue and size=Large. Default: {}
price_amount
integer
optional
Optional price override in the smallest currency unit.
image_url
string (uri)
optional
Variant-specific public image URL.
track_inventory
boolean
optional
Whether this variant has independent stock. Default: true
inventory_quantity
integer
optional
Starting variant stock. Default: 0
inventory_policy
"deny" | "continue"
optional
Whether to stop at zero or allow backorders. Default: "deny"
position
integer
optional
Variant display position. Default: 0
tax_rate_id
string (or null)
optional
Which of the store's tax rates (commerce.get_tax_settings) this item is charged at. Null or omitted uses the default — the store's default rate for a product, the product's rate for a variant. Ignored while the store's tax is off.
sale_price_amount
integer (or null)
optional
A sale price in the smallest currency unit, lower than the regular price. While the sale window is open it is what shoppers pay on the storefront (shown with the regular price struck through); outside it the regular price applies automatically. One-time products only. Null removes the sale (and its dates). Funnel checkouts are not affected.
sale_starts_at
string (or null)
optional
When the sale price starts applying (inclusive). Omit/null for "now". Either an ISO 8601 instant with an offset (2026-10-31T23:59:00+01:00), or a local date-time WITHOUT an offset (2026-10-31T23:59), which is read in the store's own timezone — DST included. Null clears it.
sale_ends_at
string (or null)
optional
When the sale ends — the regular price applies from this instant on (exclusive end). Omit/null for no end. Either an ISO 8601 instant with an offset (2026-10-31T23:59:00+01:00), or a local date-time WITHOUT an offset (2026-10-31T23:59), which is read in the store's own timezone — DST included. Null clears it.
Over MCP the same operation is the tool commerce_create_variant at https://app.chirply.io/api/mcp, same bearer token, same input.
Delete collection
commerce.delete_collectionwriteconfirm
Permanently delete a storefront collection and its product arrangement. Products themselves and completed orders are not deleted.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool commerce_delete_collection at https://app.chirply.io/api/mcp, same bearer token, same input.
Remove from store
commerce.detach_domainwriteconfirmadmin only
Stop serving the native store from its custom hostname. The store remains available at its built-in platform address and the domain remains connected to the account for reuse; no registrar or DNS ownership is deleted.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
store_id
string (uuid)
required
Native Commerce store whose custom hostname should be removed.
Over MCP the same operation is the tool commerce_detach_domain at https://app.chirply.io/api/mcp, same bearer token, same input.
Export orders CSV
commerce.export_ordersread
Export storefront orders as a CSV file for an accountant, built from the figures persisted at checkout so it reconciles to the receipts buyers hold. level 'orders' gives one row per order: order and invoice number, invoice/paid date (in the store's timezone), buyer, currency, tax mode, net, tax and gross totals, discount, delivery, amount charged and refunds. level 'lines' gives one row per order line with the tax rate name, percentage and treatment (standard, zero-rated, exempt or not taxed) and the line's net, tax and gross — summing it by rate gives the tax-return figures. Returns the CSV text. Read-only; the export contains buyer names and emails.
Parameters
Field
Type
Required
Description
level
"orders" | "lines"
optional
'orders' for one row per order, 'lines' for one row per order line with its tax rate. Default: "orders"
from
string
optional
First calendar day to include (YYYY-MM-DD), in the store's timezone. Omit for no lower bound.
to
string
optional
Last calendar day to include (YYYY-MM-DD, inclusive), in the store's timezone. Omit for no upper bound.
include_unpaid
boolean
optional
false (default): only orders that were paid (including later refunded ones), dated by payment. true: every storefront order including pending and failed checkouts, dated by creation. Default: false
Over MCP the same operation is the tool commerce_export_orders at https://app.chirply.io/api/mcp, same bearer token, same input.
Mark fulfilled
commerce.fulfill_orderwriteconfirm
Mark a paid storefront order fulfilled and record optional carrier/tracking details. This is an outward operational claim that the seller has shipped or delivered the order.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool commerce_fulfill_order at https://app.chirply.io/api/mcp, same bearer token, same input.
Open store cart
commerce.get_cartread
Fetch one shopping cart on the public storefront by its token: every line with its product, chosen variant, quantity, unit price and whether it is still in stock, plus the server-calculated subtotal, discount, shipping, tax and total in the smallest currency unit. Prices are recalculated live from the catalogue, so this is the authority on what checkout will actually charge. Reads only — it holds no stock and charges nothing. Returns nothing if the cart has expired or was already checked out.
Parameters
Field
Type
Required
Description
store_id
string (uuid)
optional
Which storefront to shop. Optional — an account has one store, so this defaults to it.
cart_token
string
required
The cart's token, as returned by commerce.add_to_cart. A shopper's browser keeps this in a cookie; a machine caller has to carry it between calls. Carts expire, after which a new one must be started.
Over MCP the same operation is the tool commerce_get_cart at https://app.chirply.io/api/mcp, same bearer token, same input.
Open store order
commerce.get_orderread
Fetch one storefront order with payment, customer, delivery and fulfillment fields, every line (product, SKU, variant, quantity, amounts, units refunded and restocked), the refunds recorded on it (amount, reason, who, when, Stripe refund id), whether and why it was cancelled, and the buyer's acceptance of the store's terms (when, which URL and version). Reads only.
Over MCP the same operation is the tool commerce_get_order at https://app.chirply.io/api/mcp, same bearer token, same input.
Open order receipt
commerce.get_order_by_tokenread
Fetch a storefront order using the order token from its confirmation link — the receipt page a buyer is sent to after checkout. Returns the order's number, payment status (whether Stripe has confirmed it yet), fulfilment status, buyer details, totals and every line item. Use this to poll whether a checkout you started has actually been paid. Reads only. Staff who have the order's internal id should use commerce.get_order instead.
Parameters
Field
Type
Required
Description
store_id
string (uuid)
optional
Which storefront to shop. Optional — an account has one store, so this defaults to it.
order_token
string
required
The order's public token — the last path segment of the confirmation URL, e.g. the '…/order/<this>' part. Returned by commerce.checkout as order_token.
Over MCP the same operation is the tool commerce_get_store at https://app.chirply.io/api/mcp, same bearer token, same input.
Open tax settings
commerce.get_tax_settingsread
Read the storefront's tax and VAT receipt settings: whether tax is on, whether prices are entered tax-inclusive or exclusive, the store's tax rates (id, name, percentage, and standard / zero-rated / exempt treatment) and default rate, the store timezone and default checkout country, the supplier details printed on receipts (legal and trading name, address, VAT number, company number, registered office), the invoice prefix and the number the next invoice will get, whether receipts are emailed, and the UK and Ireland rate presets available to add. Use the rate ids here for tax_rate_id on products and variants. Read-only; changes nothing.
Over MCP the same operation is the tool commerce_list_products at https://app.chirply.io/api/mcp, same bearer token, same input.
List subscriptions
commerce.list_subscriptionsread
List the recurring orders (subscriptions) sold through this account's storefront and funnels: buyer, amount, billing state (active, past_due after a failed renewal, canceled) and the Stripe subscription id on the seller's own Stripe account. Read-only.
Over MCP the same operation is the tool commerce_pause_discount at https://app.chirply.io/api/mcp, same bearer token, same input.
Preview order event
commerce.preview_order_eventread
Show the exact payload an order event carries for one real order — order_paid, order_refunded or order_cancelled — as automations read it ({{order.…}} tokens) and as webhook subscribers receive it inside the signed envelope's `context`: order number, status, totals, the buyer's email and name, and every line with product, SKU, variant name and options, quantity, unit and line amounts and discount. Amounts are in the currency's smallest unit. Builds the payload only: nothing is sent, queued or changed.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The order to build the payload for — a store or funnel order.
Over MCP the same operation is the tool commerce_preview_order_event at https://app.chirply.io/api/mcp, same bearer token, same input.
Publish store
commerce.publish_storewriteconfirm
Publish the storefront to the open internet, or pause an already-public store. Publishing immediately exposes all active products and enables real checkout when payment mode is live.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
Store id.
published
boolean
optional
true publishes; false pauses the public storefront. Default: true
Over MCP the same operation is the tool commerce_publish_store at https://app.chirply.io/api/mcp, same bearer token, same input.
Refund order
commerce.refund_orderwriteconfirmadmin only
Refund all or part of a paid store or funnel order on the seller's OWN Stripe account (or their agency's Connect account, whichever took the payment). This MOVES REAL MONEY back to the buyer's card and out of the seller's Stripe balance, and cannot be undone. Choose an exact amount, or specific lines and quantities (their value is the default amount), or neither to refund everything still refundable. Refuses anything above what is left to refund on the order and on the Stripe charge. The refund is recorded on the order (amount, reason, note, who, when, Stripe refund id), the order becomes partially_refunded or refunded, refunded units can be put back on tracked stock, and the order_refunded event fires — starting matching automations and notifying webhook subscribers. Idempotent: repeating the same request (or the same idempotency_key) returns the first refund instead of refunding twice.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The order to refund — a store order from commerce.list_orders, or a funnel order.
amount
integer
optional
Exact amount to refund in the currency's smallest unit (pence/cents): 1500 = 15.00. Omit it — with no lines — to refund everything still refundable. With lines, it defaults to those units' value after discount.
lines
object[]
optional
Specific units being refunded, e.g. 2 of 5 tickets. Recorded on each line so it can't be refunded twice, and required for restocking.
lines[].item_id
string (uuid)
required
The order line to refund, from the `lines` of commerce.get_order.
lines[].quantity
integer
required
How many units of that line are being refunded. Cannot exceed the units not yet refunded.
Why: requested_by_customer, duplicate, fraudulent or other. Passed to Stripe (except other) and recorded on the order. Default: "requested_by_customer"
note
string
optional
Internal note recorded with the refund and included in the order_refunded event. Not shown to the buyer by Stripe.
restock
boolean
optional
Put the refunded units back on tracked inventory so they can be sold again. Only applies to refunded lines whose product or variant tracks stock. Default: false
idempotency_key
string
optional
Your key for this refund. Retrying with the same key never refunds twice. Without one, an identical request (same amount, lines, reason and note) is treated as a retry — pass distinct keys to issue two genuinely separate, identical partial refunds.
Over MCP the same operation is the tool commerce_refund_order at https://app.chirply.io/api/mcp, same bearer token, same input.
Save store checkout terms
commerce.set_checkout_termswrite
Turn the store's required terms checkbox on or off. When required, checkout shows a box linking to the seller's terms that the buyer must tick before paying; the server refuses any checkout without it (storefront, custom domain and commerce.checkout alike), and each order records that the terms were accepted, when, and which URL and version. Changing the URL or wording starts a new version from now on; past orders keep the version their buyer accepted. Takes effect on the live storefront immediately.
Parameters
Field
Type
Required
Description
store_id
string (uuid)
optional
The store to change. Optional — an account has one store, so this defaults to it.
required
boolean
required
true makes buyers tick the box before paying; false removes the box.
url
string (uri) (or null)
optional
Full web address of the seller's terms (https://…). Required when `required` is true.
label
string (or null)
optional
The checkbox wording, e.g. 'I agree to the ticket terms and refund policy'. Defaults to 'I agree to the terms and conditions'.
Over MCP the same operation is the tool commerce_set_checkout_terms at https://app.chirply.io/api/mcp, same bearer token, same input.
Set collection products
commerce.set_collection_productswrite
Replace exactly which products are in a storefront collection, in display order (used for 'manual' sort). This is a FULL REPLACE: any product currently in the collection but left out of product_ids is removed from it — the product itself, its orders and its other collections are untouched. Pass an empty list to empty the collection.
Parameters
Field
Type
Required
Description
collection_id
string (uuid)
required
Collection to update, from commerce.list_collections.
product_ids
array of (string (uuid))
required
The complete set of product ids that should be in this collection afterward, in display order. Every id must be one of this account's own products.
Over MCP the same operation is the tool commerce_set_collection_products at https://app.chirply.io/api/mcp, same bearer token, same input.
Set up with connected Cloudflare
commerce.setup_domain_dnswriteconfirmadmin only
Create or repair the store hostname's CNAME in its connected Cloudflare account and recheck SSL. This writes a real public DNS record but does not purchase a domain or charge money.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
store_id
string (uuid)
required
Native Commerce store whose attached domain needs automatic DNS setup.
Over MCP the same operation is the tool commerce_setup_domain_dns at https://app.chirply.io/api/mcp, same bearer token, same input.
Update cart quantity
commerce.update_cart_itemwrite
Change how many units of one line are in a storefront cart, or remove that line entirely by setting the quantity to 0. Totals are recalculated on the server. The change is refused when tracked stock would be exceeded. Nothing is charged and no stock is held.
Parameters
Field
Type
Required
Description
store_id
string (uuid)
optional
Which storefront to shop. Optional — an account has one store, so this defaults to it.
cart_token
string
required
The cart's token, as returned by commerce.add_to_cart. A shopper's browser keeps this in a cookie; a machine caller has to carry it between calls. Carts expire, after which a new one must be started.
line_id
string (uuid)
required
The cart line to change, from the `lines[].id` values in commerce.get_cart. This is the line, not the product.
quantity
integer
required
The new total quantity for this line — it REPLACES the current one rather than adding to it. 0 removes the line from the cart.
Over MCP the same operation is the tool commerce_update_cart_item at https://app.chirply.io/api/mcp, same bearer token, same input.
Save product
commerce.update_productwriteconfirm
Update a catalog product. This edits an item that may be ON SALE RIGHT NOW on a published storefront: a new price_amount, sale price/window or tax rate changes what real customers are charged from the moment it saves, and storefront_status can put the product on sale or pull it off in public immediately. Price changes affect future purchases only; completed order snapshots are never rewritten. A cart filled at an old price is re-priced at checkout and the shopper is shown the change.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
Product id.
name
string
optional
Customer-facing product name.
description
string (or null)
optional
Product description, or null to clear.
image_url
string (uri) (or null)
optional
Primary product image URL, or null to clear.
price_amount
integer
optional
New future selling price in the smallest currency unit. Existing subscribers keep the price they signed up at; only new checkouts are affected.
compare_at_amount
integer (or null)
optional
Original/strikethrough price, or null to clear.
kind
"one_time" | "recurring"
optional
Switch between a one-time purchase and a recurring subscription. Changes FUTURE checkouts only; subscriptions already running keep billing as sold.
recurring_interval
"day" | "week" | "month" | "year"
optional
For recurring products: the billing period unit for future checkouts.
recurring_interval_count
integer
optional
For recurring products: intervals between charges for future checkouts — 3 with 'month' bills every 3 months.
grants_access_product_id
string (uuid) (or null)
optional
Member access product automatically granted when a purchase of this product settles (see members.list_products), or null to detach it. Already-granted access is not revoked by changing this.
sku
string (or null)
optional
Account-unique SKU, or null to clear.
vendor
string (or null)
optional
Brand/vendor, or null to clear.
tags
string[]
optional
Replacement merchandising tag list.
requires_shipping
boolean
optional
Whether checkout collects delivery details.
track_inventory
boolean
optional
Whether successful sales decrement stock.
inventory_policy
"deny" | "continue"
optional
Whether to stop at zero or allow backorders.
low_stock_threshold
integer
optional
Low-stock warning quantity.
storefront_status
"draft" | "active" | "archived"
optional
Storefront visibility state.
tax_rate_id
string (or null)
optional
Which of the store's tax rates (commerce.get_tax_settings) this item is charged at. Null or omitted uses the default — the store's default rate for a product, the product's rate for a variant. Ignored while the store's tax is off.
sale_price_amount
integer (or null)
optional
A sale price in the smallest currency unit, lower than the regular price. While the sale window is open it is what shoppers pay on the storefront (shown with the regular price struck through); outside it the regular price applies automatically. One-time products only. Null removes the sale (and its dates). Funnel checkouts are not affected.
sale_starts_at
string (or null)
optional
When the sale price starts applying (inclusive). Omit/null for "now". Either an ISO 8601 instant with an offset (2026-10-31T23:59:00+01:00), or a local date-time WITHOUT an offset (2026-10-31T23:59), which is read in the store's own timezone — DST included. Null clears it.
sale_ends_at
string (or null)
optional
When the sale ends — the regular price applies from this instant on (exclusive end). Omit/null for no end. Either an ISO 8601 instant with an offset (2026-10-31T23:59:00+01:00), or a local date-time WITHOUT an offset (2026-10-31T23:59), which is read in the store's own timezone — DST included. Null clears it.
Over MCP the same operation is the tool commerce_update_product at https://app.chirply.io/api/mcp, same bearer token, same input.
Save storefront
commerce.update_storewriteconfirm
Update customer-facing storefront branding, merchandising copy, support details, payment routing, and the tax / VAT receipt / regional settings (the same fields commerce.update_tax_settings takes). Omitted fields are unchanged. Several fields move real money and are the reason this needs approval: changing stripe_account_id redirects where every future sale is PAID INTO; setting payment_mode to 'test' makes a live public storefront stop collecting real money entirely while still appearing to take orders; and the tax fields change what real customers are charged (tax added on top of tax-exclusive prices) and what their receipts say, from the next page load. Past orders are never re-taxed.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
Store id.
name
string
optional
Customer-facing store name.
description
string (or null)
optional
Store description, or null to clear it.
logo_url
string (uri) (or null)
optional
Public logo URL, or null to remove it.
hero_image_url
string (uri) (or null)
optional
Public storefront hero image URL, or null to remove it.
hero_title
string (or null)
optional
Primary storefront headline, or null for the default.
hero_copy
string (or null)
optional
Supporting storefront copy, or null for the default.
announcement
string (or null)
optional
Short announcement bar message, or null to hide the bar.
accent_color
string
optional
Store signature color as a six-digit hex value.
contact_email
string (email) (or null)
optional
Customer support email address.
stripe_account_id
string (uuid) (or null)
optional
Connected Stripe account that collects payments.
payment_mode
"live" | "test"
optional
Whether checkout moves real money or uses Stripe test mode.
seo_title
string (or null)
optional
Meta title used in search results and social share cards, or null to clear it.
seo_description
string (or null)
optional
Meta description used in search results and social share cards, or null to clear it.
seo_image
string (uri) (or null)
optional
Social share preview image URL, or null to clear it.
tax_enabled
boolean
optional
Turn tax on or off for the storefront. When on, every cart and checkout calculates tax per line from the store's rates, and paid orders get a tax receipt with a sequential invoice number. Turning it on requires at least one rate and a default rate. Changes what real customers are charged from the next page load when prices are tax-exclusive.
prices_include_tax
boolean
optional
true: product prices are entered tax-inclusive (the shelf price is what the buyer pays and the tax is the part inside it — normal for UK/EU consumer pricing). false: prices are net and tax is added on top at checkout.
tax_label
string (or null)
optional
What the tax is called on the storefront and receipts, e.g. VAT, GST or Tax. Null uses the default for the store's currency.
tax_rates
object[]
optional
FULL REPLACEMENT of the store's tax rates. Rates left out are deleted; products pointing at a deleted rate fall back to the default rate. Past orders keep the rate they were charged at.
tax_rates[].id
string
optional
The rate's id. When editing, keep an existing rate's id — products point at rates by id, so a changed id detaches them (they fall back to the default rate). Omit for a new rate and one is generated.
tax_rates[].name
string
required
The label printed on receipts and exports, e.g. 'UK Standard 20%'.
tax_rates[].rate_percent
number
optional
The percentage as typed, e.g. 20 or 13.5. Ignored — always 0 — when treatment is zero or exempt. Default: 0
tax_rates[].treatment
"standard" | "zero" | "exempt"
optional
standard: the percentage applies. zero: zero-rated, charged at 0%. exempt: exempt, no tax. Zero-rated and exempt both charge nothing but are recorded separately on receipts and exports. Default: "standard"
tax_rates[].country
string (or null)
optional
Two-letter country the rate belongs to (GB, IE…), used for grouping only.
add_preset_rates
"GB" | "IE"
optional
Append a labelled preset list: GB adds UK Standard 20%, Reduced 5%, Zero-rated 0% and Exempt; IE adds Ireland Standard 23%, Reduced 13.5%, Second reduced 9%, Zero 0% and Exempt. Rates already present (same id) are skipped. Presets are starting points; which rate a product falls under is the seller's decision.
default_tax_rate_id
string (or null)
optional
Id of the rate applied to every product (and variant) that does not name its own. Must be one of the store's rates.
timezone
string
optional
IANA timezone of the store, e.g. Europe/London. Sale start and end times typed without an offset are read in this zone, and storefront and receipt dates are shown in it.
checkout_country
string (or null)
optional
Two-letter country the checkout address form opens on, e.g. GB. Null keeps the US default.
supplier
object
optional
Supplier details printed on receipts. Only the fields sent change; send null to clear one.
supplier.legal_name
string (or null)
optional
The supplier's legal name, printed at the top of every tax receipt.
supplier.trading_name
string (or null)
optional
Trading name, when different from the legal name.
supplier.address_line1
string (or null)
optional
Supplier address, first line.
supplier.address_line2
string (or null)
optional
Supplier address, second line.
supplier.city
string (or null)
optional
Supplier town or city.
supplier.region
string (or null)
optional
Supplier county, state or region.
supplier.postal_code
string (or null)
optional
Supplier postcode.
supplier.country
string (or null)
optional
Supplier country, as it should be printed.
supplier.vat_number
string (or null)
optional
The supplier's VAT (or other tax) registration number, printed on tax receipts.
supplier.company_number
string (or null)
optional
Company registration number, printed when set.
supplier.registered_office
string (or null)
optional
Registered office address, printed when set.
invoice_prefix
string
optional
Text before every invoice number, e.g. 'INV-' gives INV-00001. Changing it affects invoices issued from now on only.
next_invoice_number
integer
optional
The number the next invoice will get. It can only be moved UP (for example to continue a sequence from a previous system); issued numbers are never reused and the sequence has no gaps after it.
email_receipts
boolean
optional
Whether the buyer is emailed a receipt (a tax receipt when the order was taxed) when payment confirms. Sent through the account's own connected email sender; nothing is sent when no sender is connected.
Over MCP the same operation is the tool commerce_update_store at https://app.chirply.io/api/mcp, same bearer token, same input.
Save tax settings
commerce.update_tax_settingswriteconfirm
Save the storefront's tax and VAT receipt settings — tax on/off, tax-inclusive or exclusive prices, the rate list and default rate, supplier details printed on receipts, invoice prefix and next number, receipt emails, store timezone and default checkout country. Omitted fields are unchanged. This changes what REAL customers are charged from the next page load (tax-exclusive prices get tax added at checkout) and what every new receipt says; paid orders keep the tax they were charged and their receipts never change. Presets are labelled starting points — which rate applies to which product is the seller's decision.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
tax_enabled
boolean
optional
Turn tax on or off for the storefront. When on, every cart and checkout calculates tax per line from the store's rates, and paid orders get a tax receipt with a sequential invoice number. Turning it on requires at least one rate and a default rate. Changes what real customers are charged from the next page load when prices are tax-exclusive.
prices_include_tax
boolean
optional
true: product prices are entered tax-inclusive (the shelf price is what the buyer pays and the tax is the part inside it — normal for UK/EU consumer pricing). false: prices are net and tax is added on top at checkout.
tax_label
string (or null)
optional
What the tax is called on the storefront and receipts, e.g. VAT, GST or Tax. Null uses the default for the store's currency.
tax_rates
object[]
optional
FULL REPLACEMENT of the store's tax rates. Rates left out are deleted; products pointing at a deleted rate fall back to the default rate. Past orders keep the rate they were charged at.
tax_rates[].id
string
optional
The rate's id. When editing, keep an existing rate's id — products point at rates by id, so a changed id detaches them (they fall back to the default rate). Omit for a new rate and one is generated.
tax_rates[].name
string
required
The label printed on receipts and exports, e.g. 'UK Standard 20%'.
tax_rates[].rate_percent
number
optional
The percentage as typed, e.g. 20 or 13.5. Ignored — always 0 — when treatment is zero or exempt. Default: 0
tax_rates[].treatment
"standard" | "zero" | "exempt"
optional
standard: the percentage applies. zero: zero-rated, charged at 0%. exempt: exempt, no tax. Zero-rated and exempt both charge nothing but are recorded separately on receipts and exports. Default: "standard"
tax_rates[].country
string (or null)
optional
Two-letter country the rate belongs to (GB, IE…), used for grouping only.
add_preset_rates
"GB" | "IE"
optional
Append a labelled preset list: GB adds UK Standard 20%, Reduced 5%, Zero-rated 0% and Exempt; IE adds Ireland Standard 23%, Reduced 13.5%, Second reduced 9%, Zero 0% and Exempt. Rates already present (same id) are skipped. Presets are starting points; which rate a product falls under is the seller's decision.
default_tax_rate_id
string (or null)
optional
Id of the rate applied to every product (and variant) that does not name its own. Must be one of the store's rates.
timezone
string
optional
IANA timezone of the store, e.g. Europe/London. Sale start and end times typed without an offset are read in this zone, and storefront and receipt dates are shown in it.
checkout_country
string (or null)
optional
Two-letter country the checkout address form opens on, e.g. GB. Null keeps the US default.
supplier
object
optional
Supplier details printed on receipts. Only the fields sent change; send null to clear one.
supplier.legal_name
string (or null)
optional
The supplier's legal name, printed at the top of every tax receipt.
supplier.trading_name
string (or null)
optional
Trading name, when different from the legal name.
supplier.address_line1
string (or null)
optional
Supplier address, first line.
supplier.address_line2
string (or null)
optional
Supplier address, second line.
supplier.city
string (or null)
optional
Supplier town or city.
supplier.region
string (or null)
optional
Supplier county, state or region.
supplier.postal_code
string (or null)
optional
Supplier postcode.
supplier.country
string (or null)
optional
Supplier country, as it should be printed.
supplier.vat_number
string (or null)
optional
The supplier's VAT (or other tax) registration number, printed on tax receipts.
supplier.company_number
string (or null)
optional
Company registration number, printed when set.
supplier.registered_office
string (or null)
optional
Registered office address, printed when set.
invoice_prefix
string
optional
Text before every invoice number, e.g. 'INV-' gives INV-00001. Changing it affects invoices issued from now on only.
next_invoice_number
integer
optional
The number the next invoice will get. It can only be moved UP (for example to continue a sequence from a previous system); issued numbers are never reused and the sequence has no gaps after it.
email_receipts
boolean
optional
Whether the buyer is emailed a receipt (a tax receipt when the order was taxed) when payment confirms. Sent through the account's own connected email sender; nothing is sent when no sender is connected.
Over MCP the same operation is the tool commerce_update_tax_settings at https://app.chirply.io/api/mcp, same bearer token, same input.
Save variant
commerce.update_variantwriteconfirm
Update one purchasable option (a ticket tier, a size) of a product: its name, SKU, own price, tax rate, or a scheduled sale price with start and end times. This edits an item that may be ON SALE RIGHT NOW: a new price, sale or tax rate is what real customers are charged on the storefront from the moment it saves. Past orders are never changed. Omitted fields are unchanged.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
Variant id, from commerce.list_variants.
name
string
optional
Human-readable option name such as Early Bird or Blue / Large.
sku
string (or null)
optional
Account-unique variant SKU, or null to clear.
price_amount
integer (or null)
optional
The variant's own regular price in the smallest currency unit, or null to inherit the product's price (and with it the product's sale).
is_active
boolean
optional
false hides this option from the storefront without deleting it.
tax_rate_id
string (or null)
optional
Which of the store's tax rates (commerce.get_tax_settings) this item is charged at. Null or omitted uses the default — the store's default rate for a product, the product's rate for a variant. Ignored while the store's tax is off.
sale_price_amount
integer (or null)
optional
A sale price in the smallest currency unit, lower than the regular price. While the sale window is open it is what shoppers pay on the storefront (shown with the regular price struck through); outside it the regular price applies automatically. One-time products only. Null removes the sale (and its dates). Funnel checkouts are not affected.
sale_starts_at
string (or null)
optional
When the sale price starts applying (inclusive). Omit/null for "now". Either an ISO 8601 instant with an offset (2026-10-31T23:59:00+01:00), or a local date-time WITHOUT an offset (2026-10-31T23:59), which is read in the store's own timezone — DST included. Null clears it.
sale_ends_at
string (or null)
optional
When the sale ends — the regular price applies from this instant on (exclusive end). Omit/null for no end. Either an ISO 8601 instant with an offset (2026-10-31T23:59:00+01:00), or a local date-time WITHOUT an offset (2026-10-31T23:59), which is read in the store's own timezone — DST included. Null clears it.