Browse the Printful catalog, orders, shipping quotes and stats, and create draft orders and mockups.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Add a print file to the File Library from a public URL (PNG/JPG recommended). If a file with the same URL already exists it is returned instead. Processing is async — poll printful_get_file until status is ok. Printful: POST /files.
Public URL Printful downloads the file from.
Role of the file, e.g. default or preview.
Additional file options.
Show the file in the dashboard's File Library (default true).
File name to store it under.
Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
Add a print file to the File Library from a public URL (PNG/JPG recommended). If a file with the same URL already exists it is returned instead. Processing is async — poll printful_get_file until status is ok. Printful: POST /files.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public URL Printful downloads the file from. |
| type | string | Role of the file, e.g. default or preview. |
| options | array | Additional file options. |
| visible | boolean | Show the file in the dashboard's File Library (default true). |
| filename | string | File name to store it under. |
| store_id | string | Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Public URL Printful downloads the file from."
},
"type": {
"type": "string",
"description": "Role of the file, e.g. default or preview."
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "Option id, e.g. stitch_color or thread_colors."
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"description": "Option value."
}
}
},
"description": "Additional file options."
},
"visible": {
"type": "boolean",
"description": "Show the file in the dashboard's File Library (default true)."
},
"filename": {
"type": "string",
"description": "File name to store it under."
},
"store_id": {
"type": "string",
"description": "Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token."
}
}
}Quote the shipping options (method id, name, rate, delivery-day estimate) for a set of items to an address. Only country_code is required (plus state_code for US/CA/AU). Changes nothing. Printful: POST /shipping/rates.
| Argument | Type | Description |
|---|---|---|
| items* | array | Items to ship — give one of the variant ids per item. |
| locale | string | Locale for rate names: en_US (default) or es_ES. |
| currency | string | 3-letter currency to quote in (default: store currency). |
| store_id | string | Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token. |
| recipient* | object | Destination; more detail can return more precise rates. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipient",
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"quantity"
],
"properties": {
"value": {
"type": "string",
"description": "Item retail value, helps customs estimates."
},
"quantity": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Quantity."
},
"variant_id": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "string"
}
],
"description": "Catalog variant id."
},
"external_variant_id": {
"type": "string",
"description": "Your platform's variant id."
},
"warehouse_product_variant_id": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "string"
}
],
"description": "Warehouse product variant id."
}
}
},
"minItems": 1,
"description": "Items to ship — give one of the variant ids per item."
},
"locale": {
"type": "string",
"description": "Locale for rate names: en_US (default) or es_ES."
},
"currency": {
"type": "string",
"description": "3-letter currency to quote in (default: store currency)."
},
"store_id": {
"type": "string",
"description": "Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token."
},
"recipient": {
"type": "object",
"required": [
"country_code"
],
"properties": {
"zip": {
"type": "string"
},
"city": {
"type": "string"
},
"phone": {
"type": "string"
},
"address1": {
"type": "string"
},
"address2": {
"type": "string"
},
"state_code": {
"type": "string",
"description": "Required for US, CA and AU."
},
"country_code": {
"type": "string",
"description": "Two-letter ISO country code."
}
},
"description": "Destination; more detail can return more precise rates."
}
}
}Create an order as a DRAFT — nothing is charged or produced. It must be confirmed later in the Printful dashboard, where the charge is shown. Each item needs one of variant_id (+ files), sync_variant_id, external_variant_id, warehouse_product_variant_id or product_template_id (+ variant_id). Printful: POST /orders (never with confirm).
| Argument | Type | Description |
|---|---|---|
| gift | object | Gift message for the packing slip. |
| items* | array | Order items. |
| shipping | string | Shipping method id from printful_calculate_shipping_rates (default STANDARD). |
| store_id | string | Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token. |
| recipient* | object | Ship-to address (name, address1, city, country_code, zip are normally needed). |
| external_id | string | Your own order id; the order is then also addressable as @<external_id>. |
| packing_slip | object | Custom packing slip. |
| retail_costs |
Start generating product mockups for a design on a catalog product — returns a task_key; poll printful_get_mockup_task for the images. Heavily rate-limited (about 10/min for established stores, 2/min for new ones). Printful: POST /mockup-generator/create-task/{id}.
| Argument | Type | Description |
|---|---|---|
| files | array | Design files per placement. Give files or product_template_id. |
| width | integer | Mockup width in px, 50-2000 (default 1000). |
| format | string | Output format (png is transparent). |
| options | array | Mockup option names to generate (see printfiles). |
| store_id | string | Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token. |
| product_id* | integer | Catalog product id. |
| variant_ids* | array | Catalog variant ids to render. |
| option_groups | array | Mockup option groups to generate. |
Price an order WITHOUT creating it: item, print, shipping and tax costs, plus retail totals. Same item shape as printful_create_draft_order. Changes nothing. Printful: POST /orders/estimate-costs.
| Argument | Type | Description |
|---|---|---|
| items* | array | Order items. |
| shipping | string | Shipping method id from printful_calculate_shipping_rates (default STANDARD). |
| store_id | string | Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token. |
| recipient* | object | Ship-to address. |
| retail_costs | object | Retail costs to show on the packing slip. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipient",
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"quantity"
],
"properties": {
"sku": {
"type": "string",
"description": "Your SKU."
},
"name": {
"type": "string",
"description": "Display name on the packing slip."
},
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Id of a file already in the File Library. Give url or id."
},
"url": {
"type": "string",
"description": "Public URL of the print file. Give url or id."
},
"type": {
"type": "string",
"description": "Placement / role of the file, e.g. default, front, back, preview (see the catalog product's files)."
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "Option id, e.g. stitch_color or thread_colors."
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"description": "Option value."
}
}
},
"description": "Additional file options."
},
"filename": {
"type": "string",
"description": "File name."
}
}
},
"description": "Print files (needed with a plain catalog variant_id)."
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "Option id, e.g. stitch_color or thread_colors."
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"description": "Option value."
}
}
},
"description": "Product options, e.g. embroidery thread colors."
},
"quantity": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Quantity (max 1000 per item)."
},
"variant_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Catalog variant id (then give files)."
},
"external_id": {
"type": "string",
"description": "Your line-item id."
},
"retail_price": {
"type": "string",
"description": "Retail price shown on the packing slip, e.g. \"29.99\"."
},
"sync_variant_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Sync Variant id from your Printful store."
},
"external_variant_id": {
"type": "string",
"description": "Your platform's variant id for a Sync Variant."
},
"product_template_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Product Template to generate print files from (variant_id is then required)."
},
"warehouse_product_variant_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Warehouse product variant id."
}
}
},
"minItems": 1,
"description": "Order items."
},
"shipping": {
"type": "string",
"description": "Shipping method id from printful_calculate_shipping_rates (default STANDARD)."
},
"store_id": {
"type": "string",
"description": "Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token."
},
"recipient": {
"type": "object",
"required": [
"country_code"
],
"properties": {
"zip": {
"type": "string",
"description": "ZIP / postal code."
},
"city": {
"type": "string",
"description": "City."
},
"name": {
"type": "string",
"description": "Full name."
},
"email": {
"type": "string",
"description": "Email address."
},
"phone": {
"type": "string",
"description": "Phone number."
},
"company": {
"type": "string",
"description": "Company name."
},
"address1": {
"type": "string",
"description": "Address line 1."
},
"address2": {
"type": "string",
"description": "Address line 2."
},
"state_code": {
"type": "string",
"description": "State code — required for US, CA and AU."
},
"tax_number": {
"type": "string",
"description": "Tax number (required for Brazil: CPF/CNPJ)."
},
"country_code": {
"type": "string",
"description": "Two-letter ISO country code, e.g. US."
}
},
"description": "Ship-to address."
},
"retail_costs": {
"type": "object",
"properties": {
"tax": {
"type": "string"
},
"currency": {
"type": "string",
"description": "3-letter currency code."
},
"discount": {
"type": "string"
},
"shipping": {
"type": "string"
},
"subtotal": {
"type": "string"
}
},
"description": "Retail costs to show on the packing slip."
}
}
}Fetch one catalog product with ALL its variants (size, color, variant_id, price, stock). Use the variant_id values when quoting shipping or building an order. Printful: GET /products/{id}.
| Argument | Type | Description |
|---|---|---|
| product_id* | integer | Catalog product id, e.g. 71. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"product_id"
],
"properties": {
"product_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Catalog product id, e.g. 71."
}
}
}Fetch one catalog variant and its parent product. Printful: GET /products/variant/{id}.
| Argument | Type | Description |
|---|---|---|
| variant_id* | integer | Catalog variant id, e.g. 4012. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"variant_id"
],
"properties": {
"variant_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Catalog variant id, e.g. 4012."
}
}
}Fetch one File Library entry — processing status (ok / waiting / failed), dimensions, DPI and preview URLs. Poll this after printful_add_file. Printful: GET /files/{id}.
| Argument | Type | Description |
|---|---|---|
| file_id* | integer | File id. |
| store_id | string | Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"file_id"
],
"properties": {
"file_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "File id."
},
"store_id": {
"type": "string",
"description": "Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token."
}
}
}Check a mockup-generation task: status (pending / completed / failed) and, when done, the mockup image URLs per placement and variant. Printful: GET /mockup-generator/task.
| Argument | Type | Description |
|---|---|---|
| store_id | string | Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token. |
| task_key* | string | The task_key returned by printful_create_mockup_task. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"task_key"
],
"properties": {
"store_id": {
"type": "string",
"description": "Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token."
},
"task_key": {
"type": "string",
"description": "The task_key returned by printful_create_mockup_task."
}
}
}Fetch one order: status, recipient, items, costs, and shipments with carrier and tracking links — the answer to 'where is my order?'. Printful: GET /orders/{id}.
| Argument | Type | Description |
|---|---|---|
| order_id* | string | Numeric Printful order id, or your External ID prefixed with @ (e.g. @SHOP-1001). |
| store_id | string | Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"order_id"
],
"properties": {
"order_id": {
"type": "string",
"description": "Numeric Printful order id, or your External ID prefixed with @ (e.g. @SHOP-1001)."
},
"store_id": {
"type": "string",
"description": "Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token."
}
}
}List the print areas (placements) and required print-file pixel sizes/DPI for each variant of a catalog product — what a design must match before mockups or orders. DTG is assumed unless technique is given. Printful: GET /mockup-generator/printfiles/{id}.
| Argument | Type | Description |
|---|---|---|
| store_id | string | Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token. |
| technique | string | Printing technique for multi-technique products, e.g. DTG, EMBROIDERY, SUBLIMATION, DTFILM. |
| product_id* | integer | Catalog product id. |
| orientation | string | For wall art: orientation. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"product_id"
],
"properties": {
"store_id": {
"type": "string",
"description": "Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token."
},
"technique": {
"type": "string",
"description": "Printing technique for multi-technique products, e.g. DTG, EMBROIDERY, SUBLIMATION, DTFILM."
},
"product_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Catalog product id."
},
"orientation": {
"enum": [
"horizontal",
"vertical"
],
"type": "string",
"description": "For wall art: orientation."
}
}
}Sales, costs, profit and order-count reports for a period of at most 6 months. Printful: GET /reports/statistics.
| Argument | Type | Description |
|---|---|---|
| date_to* | string | End date, YYYY-MM-DD (max 6 months after date_from). |
| currency | string | 3-letter currency, or display_currency for the account's display currency (default: store currency). |
| store_id | string | Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token. |
| date_from* | string | Start date, YYYY-MM-DD. |
| report_types* | array | Reports to include, e.g. ["sales_and_costs_summary", "profit", "total_paid_orders"]. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"date_from",
"date_to",
"report_types"
],
"properties": {
"date_to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "End date, YYYY-MM-DD (max 6 months after date_from)."
},
"currency": {
"type": "string",
"description": "3-letter currency, or display_currency for the account's display currency (default: store currency)."
},
"store_id": {
"type": "string",
"description": "Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token."
},
"date_from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Start date, YYYY-MM-DD."
},
"report_types": {
"type": "array",
"items": {
"enum": [
"sales_and_costs",
"sales_and_costs_summary",
"printful_costs",
"profit",
"total_paid_orders",
"costs_by_amount",
"costs_by_product",
"costs_by_variant",
"average_fulfillment_time"
],
"type": "string"
},
"minItems": 1,
"description": "Reports to include, e.g. [\"sales_and_costs_summary\", \"profit\", \"total_paid_orders\"]."
}
}
}Fetch one product of a Manual-order / API store with all its Sync Variants — catalog variant, print files, retail price. For a Shopify, Etsy, WooCommerce or other integrated store use printful_get_sync_product instead. Printful: GET /store/products/{id}.
| Argument | Type | Description |
|---|---|---|
| store_id | string | Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token. |
| product_id* | string | Numeric Printful id, or your platform's External ID prefixed with @ (e.g. @988123). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"product_id"
],
"properties": {
"store_id": {
"type": "string",
"description": "Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token."
},
"product_id": {
"type": "string",
"description": "Numeric Printful id, or your platform's External ID prefixed with @ (e.g. @988123)."
}
}
}Fetch one product imported from an integrated store (Shopify, Etsy, WooCommerce…) with all its Sync Variants — catalog variant, print files, retail price, sync status. Ids come from printful_list_sync_products. Printful: GET /sync/products/{id}.
| Argument | Type | Description |
|---|---|---|
| store_id | string | Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token. |
| product_id* | string | Numeric Printful id, or your platform's External ID prefixed with @ (e.g. @988123). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"product_id"
],
"properties": {
"store_id": {
"type": "string",
"description": "Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token."
},
"product_id": {
"type": "string",
"description": "Numeric Printful id, or your platform's External ID prefixed with @ (e.g. @988123)."
}
}
}List Printful's catalog categories (T-shirts, Mugs, Posters…) with their ids and parent ids — the filter for printful_list_catalog_products. Printful: GET /categories.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List the blank products Printful can print on (id, title, brand, model, variant count, print-file placements), optionally filtered by category. Printful: GET /products.
| Argument | Type | Description |
|---|---|---|
| category_id | string | Comma-separated category ids, e.g. 24 or 24,55 (see printful_list_catalog_categories). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"category_id": {
"type": "string",
"description": "Comma-separated category ids, e.g. 24 or 24,55 (see printful_list_catalog_categories)."
}
}
}List the store's orders, newest first, optionally by status (draft, pending, failed, canceled, inprocess, onhold, partial, fulfilled, archived). Printful: GET /orders.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Items per page, 1-100. |
| offset | integer | Result set offset (items to skip). |
| status | string | Order status, e.g. draft, pending, fulfilled, failed. |
| store_id | string | Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Items per page, 1-100."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Result set offset (items to skip)."
},
"status": {
"type": "string",
"description": "Order status, e.g. draft, pending, fulfilled, failed."
},
"store_id": {
"type": "string",
"description": "Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token."
}
}
}List the Sync Products in a Manual-order / API store. For a Shopify, Etsy, WooCommerce or other integrated store use printful_list_sync_products instead. Printful: GET /store/products.
| Argument | Type | Description |
|---|---|---|
| status | string | Filter by sync status. |
| store_id | string | Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token. |
| category_id | string | Comma-separated catalog category ids. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"status": {
"enum": [
"all",
"synced",
"unsynced",
"ignored",
"imported",
"discontinued",
"out_of_stock"
],
"type": "string",
"description": "Filter by sync status."
},
"store_id": {
"type": "string",
"description": "Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token."
},
"category_id": {
"type": "string",
"description": "Comma-separated catalog category ids."
}
}
}List the stores this token can reach (id, name, platform type). A cheap way to confirm the token works, and where to find the store_id an ACCOUNT-level token needs. Printful: GET /stores.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List the products Printful has imported from an integrated store (Shopify, Etsy, WooCommerce…), with how many variants are synced. Filter by status=unsynced to find products that still need a design or catalog variant. Printful: GET /sync/products.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Items per page, 1-100. |
| offset | integer | Result set offset (items to skip). |
| search | string | Product name search. |
| status | string | Filter by sync status. |
| store_id | string | Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Items per page, 1-100."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Result set offset (items to skip)."
},
"search": {
"type": "string",
"description": "Product name search."
},
"status": {
"enum": [
"all",
"synced",
"unsynced",
"ignored",
"imported",
"discontinued",
"out_of_stock"
],
"type": "string",
"description": "Filter by sync status."
},
"store_id": {
"type": "string",
"description": "Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token."
}
}
}Change a DRAFT order (unsubmitted orders only) — send only the fields to change. CAUTION: if you send `items`, it replaces the list: existing items not included (by id or external_id) are removed. The order stays a draft; nothing is charged. Printful: PUT /orders/{id} (never with confirm).
| Argument | Type | Description |
|---|---|---|
| gift | object | |
| items | array | Full replacement item list (see caution). |
| order_id* | string | Numeric Printful order id, or External ID prefixed with @. |
| shipping | string | New shipping method id. |
| store_id | string | Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token. |
| recipient | object | New ship-to address fields. |
| external_id | string | New external id. |
| packing_slip | object | |
| retail_costs |
| object |
| Retail costs to show on the packing slip. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipient",
"items"
],
"properties": {
"gift": {
"type": "object",
"properties": {
"message": {
"type": "string",
"description": "Gift message text."
},
"subject": {
"type": "string",
"description": "Gift message title."
}
},
"description": "Gift message for the packing slip."
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"quantity"
],
"properties": {
"sku": {
"type": "string",
"description": "Your SKU."
},
"name": {
"type": "string",
"description": "Display name on the packing slip."
},
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Id of a file already in the File Library. Give url or id."
},
"url": {
"type": "string",
"description": "Public URL of the print file. Give url or id."
},
"type": {
"type": "string",
"description": "Placement / role of the file, e.g. default, front, back, preview (see the catalog product's files)."
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "Option id, e.g. stitch_color or thread_colors."
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"description": "Option value."
}
}
},
"description": "Additional file options."
},
"filename": {
"type": "string",
"description": "File name."
}
}
},
"description": "Print files (needed with a plain catalog variant_id)."
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "Option id, e.g. stitch_color or thread_colors."
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"description": "Option value."
}
}
},
"description": "Product options, e.g. embroidery thread colors."
},
"quantity": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Quantity (max 1000 per item)."
},
"variant_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Catalog variant id (then give files)."
},
"external_id": {
"type": "string",
"description": "Your line-item id."
},
"retail_price": {
"type": "string",
"description": "Retail price shown on the packing slip, e.g. \"29.99\"."
},
"sync_variant_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Sync Variant id from your Printful store."
},
"external_variant_id": {
"type": "string",
"description": "Your platform's variant id for a Sync Variant."
},
"product_template_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Product Template to generate print files from (variant_id is then required)."
},
"warehouse_product_variant_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Warehouse product variant id."
}
}
},
"minItems": 1,
"description": "Order items."
},
"shipping": {
"type": "string",
"description": "Shipping method id from printful_calculate_shipping_rates (default STANDARD)."
},
"store_id": {
"type": "string",
"description": "Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token."
},
"recipient": {
"type": "object",
"required": [
"country_code"
],
"properties": {
"zip": {
"type": "string",
"description": "ZIP / postal code."
},
"city": {
"type": "string",
"description": "City."
},
"name": {
"type": "string",
"description": "Full name."
},
"email": {
"type": "string",
"description": "Email address."
},
"phone": {
"type": "string",
"description": "Phone number."
},
"company": {
"type": "string",
"description": "Company name."
},
"address1": {
"type": "string",
"description": "Address line 1."
},
"address2": {
"type": "string",
"description": "Address line 2."
},
"state_code": {
"type": "string",
"description": "State code — required for US, CA and AU."
},
"tax_number": {
"type": "string",
"description": "Tax number (required for Brazil: CPF/CNPJ)."
},
"country_code": {
"type": "string",
"description": "Two-letter ISO country code, e.g. US."
}
},
"description": "Ship-to address (name, address1, city, country_code, zip are normally needed)."
},
"external_id": {
"type": "string",
"description": "Your own order id; the order is then also addressable as @<external_id>."
},
"packing_slip": {
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "Customer-service email."
},
"phone": {
"type": "string",
"description": "Customer-service phone."
},
"message": {
"type": "string",
"description": "Custom packing-slip message."
},
"logo_url": {
"type": "string",
"description": "Logo / sticker URL (printed monochrome)."
},
"store_name": {
"type": "string",
"description": "Store name override for the return address."
},
"custom_order_id": {
"type": "string",
"description": "Your own order id to print instead of Printful's."
}
},
"description": "Custom packing slip."
},
"retail_costs": {
"type": "object",
"properties": {
"tax": {
"type": "string"
},
"currency": {
"type": "string",
"description": "3-letter currency code."
},
"discount": {
"type": "string"
},
"shipping": {
"type": "string"
},
"subtotal": {
"type": "string"
}
},
"description": "Retail costs to show on the packing slip."
}
}
}| product_options | object | Product options, e.g. embroidery thread colors. |
| product_template_id | integer | Use a saved Product Template instead of files. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"product_id",
"variant_ids"
],
"properties": {
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"placement",
"image_url"
],
"properties": {
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "Option id, e.g. stitch_color or thread_colors."
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"description": "Option value."
}
}
}
},
"position": {
"type": "object",
"required": [
"area_width",
"area_height",
"width",
"height",
"top",
"left"
],
"properties": {
"top": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"left": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"width": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"height": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"area_width": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"area_height": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"description": "Where the image sits inside the print area, in pixels."
},
"image_url": {
"type": "string",
"description": "Public URL of the design image."
},
"placement": {
"type": "string",
"description": "Placement, e.g. front, back (see printful_get_printfiles)."
}
}
},
"description": "Design files per placement. Give files or product_template_id."
},
"width": {
"type": "integer",
"maximum": 2000,
"minimum": 50,
"description": "Mockup width in px, 50-2000 (default 1000)."
},
"format": {
"enum": [
"jpg",
"png"
],
"type": "string",
"description": "Output format (png is transparent)."
},
"options": {
"type": "array",
"items": {
"type": "string"
},
"description": "Mockup option names to generate (see printfiles)."
},
"store_id": {
"type": "string",
"description": "Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token."
},
"product_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Catalog product id."
},
"variant_ids": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"minItems": 1,
"description": "Catalog variant ids to render."
},
"option_groups": {
"type": "array",
"items": {
"type": "string"
},
"description": "Mockup option groups to generate."
},
"product_options": {
"type": "object",
"description": "Product options, e.g. embroidery thread colors.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
}
},
"product_template_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Use a saved Product Template instead of files."
}
}
}| object |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"order_id"
],
"properties": {
"gift": {
"type": "object",
"properties": {
"message": {
"type": "string",
"description": "Gift message text."
},
"subject": {
"type": "string",
"description": "Gift message title."
}
}
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"quantity"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Existing line-item id to keep/update."
},
"sku": {
"type": "string",
"description": "Your SKU."
},
"name": {
"type": "string",
"description": "Display name on the packing slip."
},
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Id of a file already in the File Library. Give url or id."
},
"url": {
"type": "string",
"description": "Public URL of the print file. Give url or id."
},
"type": {
"type": "string",
"description": "Placement / role of the file, e.g. default, front, back, preview (see the catalog product's files)."
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "Option id, e.g. stitch_color or thread_colors."
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"description": "Option value."
}
}
},
"description": "Additional file options."
},
"filename": {
"type": "string",
"description": "File name."
}
}
},
"description": "Print files (needed with a plain catalog variant_id)."
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "Option id, e.g. stitch_color or thread_colors."
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"description": "Option value."
}
}
},
"description": "Product options, e.g. embroidery thread colors."
},
"quantity": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Quantity (max 1000 per item)."
},
"variant_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Catalog variant id (then give files)."
},
"external_id": {
"type": "string",
"description": "Your line-item id."
},
"retail_price": {
"type": "string",
"description": "Retail price shown on the packing slip, e.g. \"29.99\"."
},
"sync_variant_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Sync Variant id from your Printful store."
},
"external_variant_id": {
"type": "string",
"description": "Your platform's variant id for a Sync Variant."
},
"product_template_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Product Template to generate print files from (variant_id is then required)."
},
"warehouse_product_variant_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Warehouse product variant id."
}
}
},
"description": "Full replacement item list (see caution)."
},
"order_id": {
"type": "string",
"description": "Numeric Printful order id, or External ID prefixed with @."
},
"shipping": {
"type": "string",
"description": "New shipping method id."
},
"store_id": {
"type": "string",
"description": "Store id (numeric) for an ACCOUNT-level token; overrides PRINTFUL_STORE_ID. Not needed with a store-level token."
},
"recipient": {
"type": "object",
"properties": {
"zip": {
"type": "string",
"description": "ZIP / postal code."
},
"city": {
"type": "string",
"description": "City."
},
"name": {
"type": "string",
"description": "Full name."
},
"email": {
"type": "string",
"description": "Email address."
},
"phone": {
"type": "string",
"description": "Phone number."
},
"company": {
"type": "string",
"description": "Company name."
},
"address1": {
"type": "string",
"description": "Address line 1."
},
"address2": {
"type": "string",
"description": "Address line 2."
},
"state_code": {
"type": "string",
"description": "State code — required for US, CA and AU."
},
"tax_number": {
"type": "string",
"description": "Tax number (required for Brazil: CPF/CNPJ)."
},
"country_code": {
"type": "string",
"description": "Two-letter ISO country code, e.g. US."
}
},
"description": "New ship-to address fields."
},
"external_id": {
"type": "string",
"description": "New external id."
},
"packing_slip": {
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "Customer-service email."
},
"phone": {
"type": "string",
"description": "Customer-service phone."
},
"message": {
"type": "string",
"description": "Custom packing-slip message."
},
"logo_url": {
"type": "string",
"description": "Logo / sticker URL (printed monochrome)."
},
"store_name": {
"type": "string",
"description": "Store name override for the return address."
},
"custom_order_id": {
"type": "string",
"description": "Your own order id to print instead of Printful's."
}
}
},
"retail_costs": {
"type": "object",
"properties": {
"tax": {
"type": "string"
},
"currency": {
"type": "string",
"description": "3-letter currency code."
},
"discount": {
"type": "string"
},
"shipping": {
"type": "string"
},
"subtotal": {
"type": "string"
}
}
}
}
}