API reference.
Connect once, then your assistant calls these endpoints in plain language. Each maps to a tool on the Dough MCP server, scoped to your own account. You never call them by hand, the assistant does.
Connect your assistant to Dough
Two minutes to set up, then build and grow a brand from any chat, using your own login.
- 1
Open Customize → Connectors in Claude.
- 2
Go to Connected, then click Add custom connector.
- 3
Name it "Dough", paste the URL below, and Add.
https://app.dough.do/api/mcp/public - 4
Press Connect and sign in to Dough.
You'll need a Dough account. Available tokens are visible in your account settings,Subscription marks endpoints that need an active subscription, Token marks endpoints that draw from your token balance.
Product creation
Search the catalog or generate draft products, refine one, then turn it into a real product.
generate_productsTokenTurn a description (and optional inspiration image) into 3-4 draft products to choose from. Each draft is labeled "In catalog" (an existing product with no R&D, so faster and cheaper, with a delivery estimate and unit price) or "Custom" (a bespoke product requiring R&D, so a longer lead time and higher cost). This returns drafts only, it does not create a product yet. Each draft has a draft_product_id you pass to edit_product or create_product. Synchronous, ~30-60s.
promptstringrequired- Product description, e.g. "an oat milk carton for athletes".
inspiration_imagestringoptional- Optional public image URL to incorporate (the server fetches it). Not base64.
catalog_onlybooleanoptional- When true, return only in-catalog (no-R&D) drafts: faster and cheaper. If nothing in the catalog matches, no drafts are returned. Defaults to false (a mix of in-catalog and custom).
edit_productTokenRefine one draft product from a previous generate_products or edit_product result. By default re-generates 3 new drafts that read as edits of the selected one, steered by your instruction; pass mode="single" for one faithful edit instead. Synchronous, ~30-60s.
draft_product_idstringrequired- The id of a draft product returned by generate_products or edit_product.
edit_instructionstringrequired- What to change, e.g. "make the label navy blue".
modeenumoptional- "variations" (default): 3 new drafts. "single": one faithful edit of the selected draft.
create_productTokenTurn a chosen draft product into a real, sellable product. Pass the draft_product_id you picked; the product inherits its prompt, image, and sourcing: an "In catalog, no R&D" draft builds as a catalog product with its SKU locked, a "Custom" draft as a custom (R&D) product. Every product belongs to a brand: one is created automatically from the prompt (its styling, meaning colors, font and logo, lives on the brand and applies to all of its products). Kicks off branding, website, and sourcing in the background and returns a product id immediately. Poll get_product_status until ready. Sellable by default so buy links work right away. Calling it again with the same draft_product_id returns the existing product instead of building a duplicate.
draft_product_idstringrequired- The id of a draft product returned by generate_products or edit_product.
sales_modeenumoptional- How it sells: 'preorder' (default, Stripe pre-orders), 'order' (immediate ordering), or 'waitlist' (collect emails only, use only if the user explicitly asks).
get_product_statusCheck how a product from create_product is progressing. Returns a status of 'generating', 'ready', or 'failed_or_stalled', plus per-artifact flags (reference image, characteristics, website). ready=true only once both characteristics and website exist, so pricing tools work as soon as it reports ready. On 'failed_or_stalled', build the product again with create_product.
product_idstringrequired- The product id returned by create_product.
Manage products
Inspect your products, set prices, and run pre-order campaigns.
list_my_productsList all products in your account, most recent first.
No parameters.
get_productFull details of one product: brand info and the reference image as an embeddable data: URI (reference_image, use it as the <img> src inside chat canvases). If the inline image cannot be produced, the response instead falls back to a plain reference_image_url.
product_idstringrequired- The product id.
archive_productArchive a product you created by mistake or no longer want. Hides it from list_my_products and takes its storefront, buy links, and embed widget offline (any live ad campaign is stopped). A soft action, not a permanent delete: the product and its orders are retained.
product_idstringrequired- The product id to archive.
set_product_priceSet a product's selling price per unit, and optionally absorb shipping so customers see FREE SHIPPING on the storefront. Rejects a price below the minimum viability threshold (production cost per order plus platform fee); the error returns min_viable_price to re-price against. When the product offers sibling variant SKUs, the base price must also clear the offered-set viability floor (the costliest enabled variant), so a below-floor price is rejected with that floor as min_viable_price. Check get_price_breakdown first.
product_idstringrequired- The product id.
pricenumberrequired- New selling price in dollars.
free_shippingbooleanoptional- When true, you absorb shipping cost and customers see FREE SHIPPING at checkout. Defaults to false.
free_shipping_min_subtotalnumberoptional- Minimum order subtotal in dollars to unlock free shipping (e.g. 50 for free over $50). Requires free_shipping: true. Omit or 0 for unconditional free shipping.
get_price_breakdownGet the per-order economics at the current selling price: minimum cost per order (and its range), operation fees, absorbed shipping (when free shipping is on), and the resulting potential profit. The same breakdown shown in the pricing UI.
product_idstringrequired- The product id.
R&D production
R&D (custom) products only: fund the run with a pre-order launch goal, then manufacture and deliver. Some steps (quotes, questions, sample feedback) are handled over email.
get_launch_goalGet a product's current crowdfunding-style launch goal: target quantity, deadline, and any discount.
product_idstringrequired- The product id.
set_launch_goalSet or update a launch goal: the pre-orders to hit by a deadline, with an optional discount. Replaces any active goal.
product_idstringrequired- The product id.
target_quantitynumberrequired- Target number of orders to reach.
end_datestringrequired- Deadline as an ISO date (YYYY-MM-DD).
discount_percentnumberoptional- Optional promotional discount, 0-100 (default 0).
show_on_storefrontbooleanoptional- Show (true) or hide (false) the launch-goal progress bar on the storefront and embed widget. Omit to leave the current "Pre-order Progress" setting unchanged.
get_manufacturing_statusWhere a custom (R&D) product sits in the manufacturing flow: the current step and the status of each step (get quote, samples, feedback, finance production, deliver), plus the cost/quote and timeline estimates shown on the Make page, how many pre-orders unlock or fund each step, and any supplier question waiting on you. When a step needs payment (buying samples, funding production), the response points to the right paid tool or the Make page.
product_idstringrequired- The product id.
advance_manufacturing_stepMove the current step forward when no payment is due: confirm the quote (once enough pre-orders or waitlist signups are collected, or on a Pro plan, which covers one product in development at a time), submit sample feedback (pass it as message), skip the optional samples step, or confirm the production order once pre-orders have funded it (break-even reached). Refuses anything the Make page would not allow: an out-of-order or already-started step, an unfunded step, or a step that needs payment (use order_sample to buy samples).
product_idstringrequired- The product id.
stepnumberrequired- The step number to advance (1=quote, 2=samples, 3=feedback, 4=finance production).
actionenumoptional- 'confirm' (default) or 'skip' (the optional samples step only).
messagestringoptional- Your sample feedback, required when confirming step 3 (feedback).
Orders & samples
Sample your product and track every sale.
order_sampleOrder a physical sample of your own product to check quality before selling. Returns a Stripe checkout link; Stripe collects the shipping address. If the product has options, every one needs a value: a partial selection is refused rather than guessed at, since guessing ships the wrong goods.
product_idstringrequired- The product id to order a sample of.
quantitynumberoptional- How many units (1-10, default 1).
product_variantobjectoptional- Required when the product has options, e.g. { selections: { color: "Black", size: "M" } }. A refusal names the options and their values.
list_product_ordersView orders and sales captured by your products' widgets, each with its order_id. Omit product_id to see orders across all products.
product_idstringoptional- Optional: limit to one product. Defaults to all your products.
payment_statusenumoptional- Optional filter: succeeded, pending, refunded, failed, or processing.
limitnumberoptional- Max orders to return (default 100).
get_order_statusPayment and fulfillment status of a single order by its order_id. Once shipped it returns tracking_url (a carrier tracking page, safe to link), tracking_number (display text only) and carrier. tracking_url is null when only a number is on file.
order_idstringrequired- The order id returned by order_sample or list_product_orders.
Website
Sell from a chat, embed a buy button, or create a full storefront.
get_buy_linkThe default way to sell. Returns direct "buy now" links, one per variant (e.g. each size), that open the product's secure checkout page immediately. For a custom product that has never been activated for selling, the first call turns selling on so the links work. Always use this when answering in a conversation or building a canvas (e.g. Claude), where embeds do not render: build your own buy button + variant picker from the returned variant_axes and point it at the matching link.
product_idstringrequired- The product id.
get_website_embedGet an <iframe> embed snippet for the buy widget (buy or capture email inline), plus a live preview URL. ONLY for pasting into a separate website you are building (e.g. Lovable, Webflow); the iframe is blocked inside a chat/canvas, so use get_buy_link there. Works for any product, published or not.
product_idstringrequired- The product id.
create_websiteSubscriptionPublish a dedicated <subdomain>.dough.do website for the product. Returns the website URL plus the buy-button code.
product_idstringrequired- The product id to publish.
subdomainstringrequired- Desired subdomain (becomes <subdomain>.dough.do). Lowercase letters, numbers, and hyphens.
get_storefront_design_statusSubscriptionWhich designs this product can serve, which one is live right now, whether an AI design exists, whether a design run is already in progress, and the saved version history. Call it before any other design endpoint. AI designs are an early-access capability: these endpoints appear only for accounts they are enabled for.
product_idstringrequired- The product id.
read_storefront_designSubscriptionA low-token map of the product's AI-designed storefront: every page (route and title) with the sections it contains. Returns no HTML.
product_idstringrequired- The product id.
design_storefrontSubscriptionTokenSend a design instruction to the AI storefront designer. Creates the first AI design when the product has none, and changes the existing one otherwise: copy, layout, styling, sections and whole pages are all in scope. Runs for several minutes and saves a new version. It does not change what shoppers see unless the AI design is already live. One design run per storefront at a time.
product_idstringrequired- The product id.
promptstringrequired- The change to make, in plain words. Name the page and section when the request is scoped to one.
capture_storefront_screenshotSubscriptionRender the AI-designed storefront and return hosted mobile and desktop PNG URLs, the same capture the design reviewer grades. Returns a reason instead of images when the renderer is unavailable.
product_idstringrequired- The product id.
routestringoptional- Route key to capture: "/" for home (default), or a slug from read_storefront_design.
switch_live_storefrontSubscriptionPoint the public storefront at the standard template or at the AI design. This is what changes the page shoppers see. Switching to the AI design requires one to exist.
product_idstringrequired- The product id.
template"standard" | "freestyle"required- "freestyle" is the AI design.
restore_storefront_versionSubscriptionPut a previously saved design version back, by version number from get_storefront_design_status. Saves the old design as a new version rather than deleting anything.
product_idstringrequired- The product id.
versionnumberrequired- Version number to restore.
Content generation
Access a product's photos and videos, or generate new ones.
list_product_photosList the existing photos for a product. Returns image URLs plus embeddable data: URIs that render inside a chat canvas.
product_idstringrequired- The product id.
list_product_videosList the existing videos for a product, each with its type, status, and playable url.
product_idstringrequired- The product id.
generate_product_photosTokenGenerate additional on-brand product photos (hero shots, lifestyle scenes, packaging angles) for a product from a text prompt. Each new photo is added to the gallery (never replaces existing shots), and you can keep generating as many as you like until you hit your usage limit. Synchronous and slow (~30-60s): returns the new photos directly as image URLs plus embeddable data: URIs for chat canvases.
product_idstringrequired- The product id.
promptstringoptional- What to depict, e.g. 'the bottle on a marble counter in morning light'. Defaults to on-brand hero shots.
countnumberoptional- How many photos to generate (1-4, default 2).
generate_product_videoTokenGenerate a short vertical (9:16) video ad for a product (the engine behind Dough's in-app video ads). Kicks off background generation and returns a video_id; poll list_product_videos (or get_product) until that video's status is ready, then read its url.
product_idstringrequired- The product id.
promptstringoptional- Creative direction, e.g. 'fast-paced unboxing with upbeat music'. Defaults to an auto-generated concept from the product.
Account & billing
Check your subscription and token balance, subscribe, or top up.
get_subscriptionCheck the account subscription: status, tier, and renewal date. Subscription-only endpoints (marked below) work while this is active.
No parameters.
subscribeStart a Dough subscription. Returns a Stripe checkout link to complete payment in a browser. If you already have an active subscription, it returns your current plan instead and points to account settings on app.dough.do to change it.
tierenumoptional- 'standard' (default) or 'pro'.
billing_cycleenumoptional- 'monthly' (default) or 'yearly'.
get_token_balanceCheck the monthly plan allowance (used, remaining, reset date) and the purchased token balance, which rolls over month to month until used. Product and content generation draw from these.
No parameters.
buy_tokensBuy tokens when the monthly or daily allowance runs low. Requires an active subscription: tokens top up a plan allowance, so without a subscription use subscribe instead. Tokens are spendable right away, even past those limits, and roll over month to month until used. Returns a Stripe checkout link to complete payment in a browser.
amount_usdnumberrequired- Dollar amount of tokens to add.
Feedback
Send a bug report or product idea to the Dough team.
submit_feedbackSend a bug report or feature idea to the Dough team.
messagestringrequired- The feedback or bug report.
typeenumoptional- 'bug', 'idea', or 'other' (default 'other').
product_idstringoptional- Optional product this feedback is about.