Skip to main content
Glama

Create a product

create_product
Destructive

Create a product from a design or digital product, configure details, and publish it immediately or keep it hidden.

Instructions

Rate limit: 5 requests / minute per shop. See Rate limiting.

Creates a product from a design or a digital product.

Input Schema

NameRequiredDescriptionDefault
accountNoExact private shop profile label; not a provider identity or authorization proof.
confirmNoSet true only when the user asked for exactly this action.
payloadNoComplete current native JSON body; cannot mix with native body flags or payload_file.
payload_fileNoAbsolute regular non-symlink native JSON body file, at most1MiB. Cannot mix with payload or body flags.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv3.0.0
    • addedInput schema / $defs
      Added value: +{
      +  "Create_Product_Request": {
      +    "description": "Request to create a product. The shape is discriminated by the `type` field.",
      +    "properties": {
      +      "type": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "title": "Create Product Request",
      +    "type": "object"
      +  }
      +}
    • changedInput schema / properties / confirm / description
      Previous value: -"Explicit approval for this exact provider effect or local private-file operation."New value: +"Set true only when the user asked for exactly this action."
    • changedInput schema / properties / payload / oneOf
      Previous value: -[
      -  {
      -    "allOf": [
      -      {
      -        "description": "Request to create a product. The shape is discriminated by the `type` field.",
      -        "properties": {
      -          "type": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "type"
      -        ],
      -        "title": "Create Product Request",
      -        "type": "object"
      -      },
      -      {
      -        "properties": {
      -          "colors": {
      -            "description": "Colors to render. Defaults to all available product colors when omitted. Values not offered by the product are ignored; the request is rejected with 400 if none of the supplied colors are available.",
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "description": {
      -            "description": "Product description",
      -            "type": "string"
      -          },
      -          "name": {
      -            "description": "Product name",
      -            "type": "string"
      -          },
      -          "productTemplateId": {
      -            "description": "Id of the product template to render the design onto, from `GET /open-api/v1.0/product-templates`.",
      -            "type": "string"
      -          },
      -          "profitMargin": {
      -            "description": "Profit margin in USD applied on top of the base cost.",
      -            "type": "number"
      -          },
      -          "publishOnCreate": {
      -            "description": "Publish the product immediately on creation. Defaults to false (product stays hidden).",
      -            "type": "boolean"
      -          },
      -          "regions": {
      -            "description": "Design regions to place on the product. Each region references a registered media image by id (register it via `POST /open-api/v1.0/media/images` and pass the returned id as `imageId`).",
      -            "items": {
      -              "description": "A product region paired with the registered media image to render on it.",
      -              "properties": {
      -                "imageId": {
      -                  "description": "Id of a registered media-library image to render on the region. Register the image first via `POST /open-api/v1.0/media/images` and pass the returned id here.",
      -                  "type": "string"
      -                },
      -                "placementId": {
      -                  "description": "Placement to target when `placementStrategy` is `PLACEMENT_ID`. Required for that strategy and ignored by the others.",
      -                  "type": "string"
      -                },
      -                "placementStrategy": {
      -                  "description": "How the image is placed on the region. Defaults to `AUTO` when omitted, and takes precedence over `placementId`/`fillAllPlacements`.\n- `AUTO` — let the renderer decide using the product's automation defaults (its preferred placement, or fill-all for products like mugs/stickers).\n- `FILL_ALL` — apply the image to every placement in the region.\n- `FULL_REGION` — render the image across the full region, skipping the preferred placement.\n- `PLACEMENT_ID` — target the single placement named by `placementId` (required for this strategy).",
      -                  "enum": [
      -                    "AUTO",
      -                    "FILL_ALL",
      -                    "FULL_REGION",
      -                    "PLACEMENT_ID"
      -                  ],
      -                  "type": "string"
      -                },
      -                "region": {
      -                  "description": "Name of the product region to place the image on, e.g. `front` or `back`.",
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "imageId",
      -                "region"
      -              ],
      -              "title": "Product Design Region",
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "sizes": {
      -            "description": "Sizes to include. Defaults to all available product sizes when omitted. Values not offered by the product are ignored; the request is rejected with 400 if none of the supplied sizes are available. When both colors and sizes are supplied, the request is also rejected with 400 if no requested color/size combination is an available variant.",
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      {
      -        "properties": {
      -          "type": {
      -            "const": "design"
      -          }
      -        },
      -        "type": "object"
      -      }
      -    ],
      -    "description": "Create a product by running the design pipeline: renders each region's registered image into mockups and creates a purchasable product. The product is created hidden unless `publishOnCreate` is true.",
      -    "required": [
      -      "name",
      -      "productTemplateId",
      -      "regions",
      -      "type"
      -    ],
      -    "title": "Create Design Product Request"
      -  },
      -  {
      -    "allOf": [
      -      {
      -        "description": "Request to create a product. The shape is discriminated by the `type` field.",
      -        "properties": {
      -          "type": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "type"
      -        ],
      -        "title": "Create Product Request",
      -        "type": "object"
      -      },
      -      {
      -        "properties": {
      -          "description": {
      -            "description": "Product description",
      -            "type": "string"
      -          },
      -          "name": {
      -            "description": "Product name",
      -            "type": "string"
      -          },
      -          "price": {
      -            "description": "Price set by the creator, in USD.",
      -            "type": "number"
      -          },
      -          "publishOnCreate": {
      -            "description": "Publish the product immediately on creation. Defaults to false (product stays hidden).",
      -            "type": "boolean"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      {
      -        "properties": {
      -          "type": {
      -            "const": "digital"
      -          }
      -        },
      -        "type": "object"
      -      }
      -    ],
      -    "description": "Create a digital product with a creator-set price in USD and digital fulfillment. Attach files and images via the /products/{productId}/digital-files and /products/{productId}/images endpoints.",
      -    "required": [
      -      "description",
      -      "name",
      -      "price",
      -      "type"
      -    ],
      -    "title": "Create Digital Product Request"
      -  }
      -]New value: +[
      +  {
      +    "allOf": [
      +      {
      +        "$ref": "#/$defs/Create_Product_Request"
      +      },
      +      {
      +        "properties": {
      +          "colors": {
      +            "description": "Colors to render. Defaults to all available product colors when omitted. Values not offered by the product are ignored; the request is rejected with 400 if none of the supplied colors are available.",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "description": {
      +            "description": "Product description",
      +            "type": "string"
      +          },
      +          "name": {
      +            "description": "Product name",
      +            "type": "string"
      +          },
      +          "productTemplateId": {
      +            "description": "Id of the product template to render the design onto, from `GET /open-api/v1.0/product-templates`.",
      +            "type": "string"
      +          },
      +          "profitMargin": {
      +            "description": "Profit margin in USD applied on top of the base cost.",
      +            "type": "number"
      +          },
      +          "publishOnCreate": {
      +            "description": "Publish the product immediately on creation. Defaults to false (product stays hidden).",
      +            "type": "boolean"
      +          },
      +          "regions": {
      +            "description": "Design regions to place on the product. Each region references a registered media image by id (register it via `POST /open-api/v1.0/media/images` and pass the returned id as `imageId`).",
      +            "items": {
      +              "description": "A product region paired with the registered media image to render on it.",
      +              "properties": {
      +                "imageId": {
      +                  "description": "Id of a registered media-library image to render on the region. Register the image first via `POST /open-api/v1.0/media/images` and pass the returned id here.",
      +                  "type": "string"
      +                },
      +                "placementId": {
      +                  "description": "Placement to target when `placementStrategy` is `PLACEMENT_ID`. Required for that strategy and ignored by the others.",
      +                  "type": "string"
      +                },
      +                "placementStrategy": {
      +                  "description": "How the image is placed on the region. Defaults to `AUTO` when omitted, and takes precedence over `placementId`/`fillAllPlacements`.\n- `AUTO` — let the renderer decide using the product's automation defaults (its preferred placement, or fill-all for products like mugs/stickers).\n- `FILL_ALL` — apply the image to every placement in the region.\n- `FULL_REGION` — render the image across the full region, skipping the preferred placement.\n- `PLACEMENT_ID` — target the single placement named by `placementId` (required for this strategy).",
      +                  "enum": [
      +                    "AUTO",
      +                    "FILL_ALL",
      +                    "FULL_REGION",
      +                    "PLACEMENT_ID"
      +                  ],
      +                  "type": "string"
      +                },
      +                "region": {
      +                  "description": "Name of the product region to place the image on, e.g. `front` or `back`.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "imageId",
      +                "region"
      +              ],
      +              "title": "Product Design Region",
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "sizes": {
      +            "description": "Sizes to include. Defaults to all available product sizes when omitted. Values not offered by the product are ignored; the request is rejected with 400 if none of the supplied sizes are available. When both colors and sizes are supplied, the request is also rejected with 400 if no requested color/size combination is an available variant.",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      {
      +        "properties": {
      +          "type": {
      +            "const": "design"
      +          }
      +        },
      +        "type": "object"
      +      }
      +    ],
      +    "description": "Create a product by running the design pipeline: renders each region's registered image into mockups and creates a purchasable product. The product is created hidden unless `publishOnCreate` is true.",
      +    "required": [
      +      "name",
      +      "productTemplateId",
      +      "regions",
      +      "type"
      +    ],
      +    "title": "Create Design Product Request"
      +  },
      +  {
      +    "allOf": [
      +      {
      +        "$ref": "#/$defs/Create_Product_Request"
      +      },
      +      {
      +        "properties": {
      +          "description": {
      +            "description": "Product description",
      +            "type": "string"
      +          },
      +          "name": {
      +            "description": "Product name",
      +            "type": "string"
      +          },
      +          "price": {
      +            "description": "Price set by the creator, in USD.",
      +            "type": "number"
      +          },
      +          "publishOnCreate": {
      +            "description": "Publish the product immediately on creation. Defaults to false (product stays hidden).",
      +            "type": "boolean"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      {
      +        "properties": {
      +          "type": {
      +            "const": "digital"
      +          }
      +        },
      +        "type": "object"
      +      }
      +    ],
      +    "description": "Create a digital product with a creator-set price in USD and digital fulfillment. Attach files and images via the /products/{productId}/digital-files and /products/{productId}/images endpoints.",
      +    "required": [
      +      "description",
      +      "name",
      +      "price",
      +      "type"
      +    ],
      +    "title": "Create Digital Product Request"
      +  }
      +]
  2. First observedv2.0.0

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description does add one genuinely useful behavioral fact — the 5 requests/minute per-shop rate limit — but says nothing about the confirmation requirement, what the destructive side effects are, or that creation is not idempotent (retries can duplicate products).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short blocks with no filler; the rate-limit constraint is front-loaded in italics where an agent will see it first. Nothing is wasted, though the single purpose sentence is arguably too terse for a tool with this much branching behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a non-idempotent, destructive-flagged create operation with a nested discriminated-union body, a `confirm` gate, and no output schema, yet the description is one sentence plus a rate limit. It omits the confirmation prerequisite, the hidden-by-default creation behavior, and any hint of what a successful call returns, so an agent must reconstruct all of that from the schema alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter including `account`, `confirm`, `payload`, `payload_file` and the nested region objects is already documented in the schema. The phrase "from a design or a digital product" loosely gestures at the `type` discriminator but adds no syntax, defaults, or constraints beyond what the schema states. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Creates a product") and names the two supported modes — design or digital — which maps cleanly onto the schema's discriminated union. It does not differentiate itself from the surrounding product-mutation siblings (update_product_state, archive_product, toggle_product_availability), but the purpose itself is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a rate limit but no when-to-use guidance: it never says when to prefer the design flow over the digital flow, what prerequisites exist (e.g. the image must already be registered, the template must already exist), or that the `confirm` flag gates the call. An agent must infer all routing from the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools