AgentMade Print on Demand

Print on demand for AI agents. No sign-up. Picture, words or logo on a tee, hoodie or tote.

Should I use this

Quality & Safety

A
Description quality
98%
Schema completeness
96%
Naming quality
96%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~10,148Tokens (tool definitions)
~12.6 KBTypical response size
Significant attention impact (7.93% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "agentmade-print-on-demand": {
      "url": "https://pod.agentmade.dev/mcp/pay"
    }
  }
}

Remote endpoints

https://pod.agentmade.dev/mcp/paystreamable-http

What it can do

Tool inventory

Tools (9)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_products(query, category, color, size)

Use this when the user wants their own picture, words or logo printed on a T-shirt, hoodie, sweatshirt or tote bag and delivered, as a gift or for themselves. Finds products by free text, category, colour and size. Returns product_id, image_url (a product photo, or null), colours, sizes and print placements. No account needed. Not for mugs, posters, caps, stickers or embroidery.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "description": "Free-text description, e.g. \"heavyweight black t-shirt\" or \"hoodie\".",
      "type": "string",
      "maxLength": 200
    },
    "category": {
      "type": "string",
      "enum": [
        "t-shirt",
        "long-sleeve",
        "sweatshirt",
        "hoodie",
        "tote-bag"
      ]
    },
    "color": {
      "description": "Only products available in this colour, e.g. \"black\".",
      "type": "string"
    },
    "size": {
      "description": "Only products available in this size, e.g. \"XL\".",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "products": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "string",
            "description": "Use in get_product, validate_artwork and quote."
          },
          "title": {
            "type": "string"
          },
          "image_url": {
            "description": "A product photo, or null when none is approved yet.",
            "type": [
              "string",
              "null"
            ]
          },
          "brand": {
            "type": [
              "string",
              "null"
            ]
          },
          "model": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "decoration_method": {
            "type": "string"
          },
          "colors": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Colour ids to pass as color."
          },
          "sizes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Size values to pass as size."
          },
          "placements": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Placement ids to pass as placement."
          },
          "printed_in_regions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Regions where this product is printed, e.g. [\"EU\", \"US\"]."
          },
          "production_business_days": {
            "type": "object",
            "properties": {
              "min": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "max": {
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "required": [
              "min",
              "max"
            ],
            "additionalProperties": {}
          }
        },
        "required": [
          "product_id",
          "title",
          "image_url",
          "brand",
          "model",
          "category",
          "description",
          "decoration_method",
          "colors",
          "sizes",
          "placements",
          "printed_in_regions",
          "production_business_days"
        ],
        "additionalProperties": {}
      }
    },
    "count": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "note": {
      "type": "string"
    }
  },
  "required": [
    "products",
    "count",
    "note"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {}
}
🟢get_product(product_id)

Full details for one product: colours with hex codes and product photos (images: url, view, style, alt; empty when none yet; ai_generated marks AI photos), sizes, variant ids, print placements with the print area in mm, placement presets (for example center_chest, left_chest, full_front, full_back), materials and artwork guidance.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string",
      "description": "Product id from search_products, e.g. \"tee-heavyweight\"."
    }
  },
  "required": [
    "product_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string",
      "description": "Use in get_product, validate_artwork and quote."
    },
    "title": {
      "type": "string"
    },
    "image_url": {
      "description": "A product photo, or null when none is approved yet.",
      "type": [
        "string",
        "null"
      ]
    },
    "brand": {
      "type": [
        "string",
        "null"
      ]
    },
    "model": {
      "type": "string"
    },
    "category": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "decoration_method": {
      "type": "string"
    },
    "colors": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "hex": {
            "type": "string"
          },
          "printed_in_regions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Regions where this product is printed, e.g. [\"EU\", \"US\"]."
          },
          "images": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "type": "string"
                },
                "view": {
                  "type": "string"
                },
                "style": {
                  "type": "string"
                },
                "alt": {
                  "type": "string"
                },
                "ai_generated": {
                  "type": "boolean",
                  "description": "True for an AI-made photo. Say so when you show it."
                }
              },
              "required": [
                "url",
                "view",
                "style",
                "alt",
                "ai_generated"
              ],
              "additionalProperties": {}
            }
          }
        },
        "required": [
          "id",
          "name",
          "hex",
          "printed_in_regions",
          "images"
        ],
        "additionalProperties": {}
      }
    },
    "sizes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Size values to pass as size."
    },
    "placements": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "print_area_mm": {
            "type": "object",
            "properties": {
              "width": {
                "type": "number"
              },
              "height": {
                "type": "number"
              }
            },
            "required": [
              "width",
              "height"
            ],
            "additionalProperties": {}
          },
          "safe_margin_mm": {
            "type": "number"
          },
          "default_preset": {
            "type": "string"
          },
          "presets": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "max_width_mm": {
                  "type": "number"
                },
                "max_height_mm": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "top_mm": {
                  "type": "number"
                }
              },
              "required": [
                "id",
                "name",
                "description",
                "max_width_mm",
                "top_mm"
              ],
              "additionalProperties": {}
            }
          }
        },
        "required": [
          "id",
          "name",
          "print_area_mm",
          "safe_margin_mm",
          "default_preset",
          "presets"
        ],
        "additionalProperties": {}
      }
    },
    "printed_in_regions": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Regions where this product is printed, e.g. [\"EU\", \"US\"]."
    },
    "production_business_days": {
      "type": "object",
      "properties": {
        "min": {
          "type": [
            "number",
            "null"
          ]
        },
        "max": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "required": [
        "min",
        "max"
      ],
      "additionalProperties": {}
    },
    "size_chart_cm": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              }
            },
            "required": [
              "name"
            ],
            "additionalProperties": {}
          }
        },
        {
          "type": "null"
        }
      ]
    },
    "variants": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "variant_id": {
            "type": "string"
          },
          "color": {
            "type": "string"
          },
          "size": {
            "type": "string"
          }
        },
        "required": [
          "variant_id",
          "color",
          "size"
        ],
        "additionalProperties": {}
      }
    },
    "artwork_guidance": {
      "type": "string"
    },
    "next_step": {
      "type": "string",
      "description": "What the agent should do next, in plain language."
    }
  },
  "required": [
    "product_id",
    "title",
    "image_url",
    "brand",
    "model",
    "category",
    "description",
    "decoration_method",
    "colors",
    "sizes",
    "placements",
    "printed_in_regions",
    "production_business_days",
    "size_chart_cm",
    "variants",
    "artwork_guidance",
    "next_step"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {}
}
🟡validate_artwork(artwork, artwork_id, file, upload_link, product_id, ...)

Upload artwork and check that it prints well on one product placement. Send exactly one of: artwork with svg (markup, best for text and logos), base64 (a PNG, JPEG or SVG file up to about 2 MB, no data: prefix) or url (a public HTTPS link to the file); file (a file object from your client); or upload_link:true when you cannot send the file in this call. Returns artwork_id and PASS/WARN/FAIL checks: print size in mm, resolution (DPI), print and safe area, transparent background, contrast with the product colour. For photos and AI images use preset center_chest. Use the artwork_id in quote.

Input Schema

{
  "type": "object",
  "properties": {
    "artwork": {
      "description": "New artwork to upload: exactly one of svg, base64 or url.",
      "type": "object",
      "properties": {
        "svg": {
          "description": "Inline SVG markup. Best for logos and text.",
          "type": "string",
          "minLength": 1
        },
        "base64": {
          "description": "Base64-encoded PNG, JPEG or SVG file contents, no data: prefix. Only for files up to about 2 MB; for larger files use url, file or upload_link.",
          "type": "string",
          "minLength": 1
        },
        "url": {
          "description": "Public HTTPS URL of a PNG, JPEG or SVG file.",
          "type": "string",
          "format": "uri"
        },
        "filename": {
          "type": "string",
          "maxLength": 200
        }
      }
    },
    "artwork_id": {
      "description": "Re-validate artwork uploaded earlier, or validate the file of an upload link.",
      "type": "string"
    },
    "file": {
      "description": "A file that your client gives you as a file object (for example in ChatGPT).",
      "type": "object",
      "properties": {
        "download_url": {
          "type": "string",
          "format": "uri",
          "description": "Temporary HTTPS link to the file."
        },
        "file_id": {
          "type": "string",
          "description": "Client file id."
        },
        "mime_type": {
          "type": "string"
        },
        "file_name": {
          "type": "string"
        }
      },
      "required": [
        "download_url",
        "file_id"
      ]
    },
    "upload_link": {
      "description": "Set true when you cannot send the file in this call. The answer gives an artwork_id and a one-time upload_url: upload with curl, or give the link to the person. Then call validate_artwork with the artwork_id.",
      "type": "boolean",
      "const": true
    },
    "product_id": {
      "type": "string",
      "description": "Product to print on."
    },
    "color": {
      "description": "Product colour, for the contrast check.",
      "type": "string"
    },
    "size": {
      "description": "Garment size, e.g. \"XL\". Print areas can differ by size; without it the smallest size is checked.",
      "type": "string"
    },
    "placement": {
      "default": "front",
      "description": "Print location on the product, e.g. \"front\" or \"back\". See get_product for the list.",
      "type": "string"
    },
    "preset": {
      "description": "Named position inside the placement, e.g. \"center_chest\", \"left_chest\", \"full_front\". Defaults to the placement default.",
      "type": "string"
    },
    "width_mm": {
      "description": "Exact printed width of the visible artwork in millimetres. Height follows the aspect ratio.",
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 1000
    },
    "height_mm": {
      "description": "Maximum printed height in millimetres.",
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 1000
    },
    "top_mm": {
      "description": "Distance from the top of the print area to the top of the artwork.",
      "type": "number",
      "minimum": 0,
      "maximum": 1000
    },
    "left_mm": {
      "description": "Distance from the left edge of the print area. Default: horizontally centred.",
      "type": "number",
      "minimum": 0,
      "maximum": 1000
    }
  },
  "required": [
    "product_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "artwork_id": {
      "description": "Only in the upload_link answer: the reserved id for the file.",
      "type": "string"
    },
    "upload_url": {
      "description": "Only in the upload_link answer: the one-time upload link.",
      "type": "string"
    },
    "expires_at": {
      "type": "string"
    },
    "artwork": {
      "type": "object",
      "properties": {
        "artwork_id": {
          "type": "string",
          "description": "Use in quote and create_mockup."
        },
        "format": {
          "type": "string"
        },
        "width_px": {
          "type": "number"
        },
        "height_px": {
          "type": "number"
        },
        "transparent_background": {
          "type": "boolean"
        }
      },
      "required": [
        "artwork_id",
        "format",
        "width_px",
        "height_px",
        "transparent_background"
      ],
      "additionalProperties": {}
    },
    "validation": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "enum": [
            "PASS",
            "WARN",
            "FAIL"
          ],
          "description": "PASS: prints well. WARN: tell the user, then continue if they agree. FAIL: fix the artwork, then validate again."
        },
        "placement": {
          "type": "string"
        },
        "preset": {
          "type": [
            "string",
            "null"
          ]
        },
        "print_box": {
          "type": "object",
          "properties": {
            "left_mm": {
              "type": "number"
            },
            "top_mm": {
              "type": "number"
            },
            "width_mm": {
              "type": "number"
            },
            "height_mm": {
              "type": "number"
            }
          },
          "required": [
            "left_mm",
            "top_mm",
            "width_mm",
            "height_mm"
          ],
          "additionalProperties": {},
          "description": "Position and size of the printed artwork inside the print area, in mm."
        },
        "print_area_mm": {
          "type": "object",
          "properties": {
            "width": {
              "type": "number"
            },
            "height": {
              "type": "number"
            }
          },
          "required": [
            "width",
            "height"
          ],
          "additionalProperties": {}
        },
        "effective_dpi": {
          "description": "Resolution at the printed size. Null for vector artwork.",
          "type": [
            "number",
            "null"
          ]
        },
        "checks": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "PASS",
                  "WARN",
                  "FAIL"
                ]
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "status",
              "message"
            ],
            "additionalProperties": {}
          }
        },
        "summary": {
          "type": "string",
          "description": "Status and the checks in short lines; relay the gist to the user."
        }
      },
      "required": [
        "status",
        "placement",
        "preset",
        "print_box",
        "print_area_mm",
        "effective_dpi",
        "checks",
        "summary"
      ],
      "additionalProperties": {}
    },
    "next_step": {
      "type": "string",
      "description": "What the agent should do next, in plain language."
    }
  },
  "required": [
    "next_step"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {}
}
🟡create_mockup(artwork_id, product_id, color, size, style, ...)

Render a preview PNG of the artwork on the product in the chosen colour and placement. style flat draws the placement; style packshot uses a product photo with the exact print at real size, or gives the flat preview with a note when no photo exists. Returns mockup_url, blank_image_url and image_prompt (an optional text prompt for an illustration of a person who wears the product; such an image is an illustration, not the exact print). Optional.

Input Schema

{
  "type": "object",
  "properties": {
    "artwork_id": {
      "type": "string"
    },
    "product_id": {
      "type": "string"
    },
    "color": {
      "type": "string",
      "description": "Product colour, e.g. \"black\"."
    },
    "size": {
      "type": "string"
    },
    "style": {
      "default": "flat",
      "description": "flat: quick placement drawing. packshot: product photo with the exact print at real size (where a product photo exists).",
      "type": "string",
      "enum": [
        "flat",
        "packshot"
      ]
    },
    "placement": {
      "default": "front",
      "description": "Print location on the product, e.g. \"front\" or \"back\". See get_product for the list.",
      "type": "string"
    },
    "preset": {
      "description": "Named position inside the placement, e.g. \"center_chest\", \"left_chest\", \"full_front\". Defaults to the placement default.",
      "type": "string"
    },
    "width_mm": {
      "description": "Exact printed width of the visible artwork in millimetres. Height follows the aspect ratio.",
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 1000
    },
    "height_mm": {
      "description": "Maximum printed height in millimetres.",
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 1000
    },
    "top_mm": {
      "description": "Distance from the top of the print area to the top of the artwork.",
      "type": "number",
      "minimum": 0,
      "maximum": 1000
    },
    "left_mm": {
      "description": "Distance from the left edge of the print area. Default: horizontally centred.",
      "type": "number",
      "minimum": 0,
      "maximum": 1000
    }
  },
  "required": [
    "artwork_id",
    "product_id",
    "color"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "mockup_url": {
      "type": "string",
      "description": "PNG preview of the exact print on the product."
    },
    "style": {
      "type": "string",
      "enum": [
        "flat",
        "packshot"
      ]
    },
    "blank_image_url": {
      "type": [
        "string",
        "null"
      ]
    },
    "validation_status": {
      "type": "string",
      "enum": [
        "PASS",
        "WARN",
        "FAIL"
      ]
    },
    "summary": {
      "type": "string"
    },
    "image_prompt": {
      "type": "string",
      "description": "A prompt for your own image model, to make an illustration from mockup_url."
    },
    "note": {
      "type": "string"
    }
  },
  "required": [
    "mockup_url",
    "style",
    "blank_image_url",
    "validation_status",
    "summary",
    "image_prompt",
    "note"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {}
}
⚪quote(items, ship_to, preference, purpose, deliver_by, ...)

Price printed items delivered to one destination. Returns quote_id, the total that the payer pays (products, shipping and VAT where AgentMade collects it), what is not included, the delivery estimate and the expiry. Needs artwork_id values from validate_artwork. Charges nothing. For a destination where orders are not open, the quote is for information only.

Input Schema

{
  "type": "object",
  "properties": {
    "items": {
      "minItems": 1,
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "string",
            "description": "Product id from search_products, e.g. \"tee-heavyweight\"."
          },
          "color": {
            "type": "string",
            "description": "Colour id or name, e.g. \"black\"."
          },
          "size": {
            "type": "string",
            "description": "Size, e.g. \"XL\". For one-size products use \"ONE SIZE\" (\"ONE\" also works)."
          },
          "quantity": {
            "default": 1,
            "type": "integer",
            "minimum": 1,
            "maximum": 50
          },
          "artwork": {
            "minItems": 1,
            "maxItems": 4,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "placement": {
                  "default": "front",
                  "description": "Print location on the product, e.g. \"front\" or \"back\". See get_product for the list.",
                  "type": "string"
                },
                "preset": {
                  "description": "Named position inside the placement, e.g. \"center_chest\", \"left_chest\", \"full_front\". Defaults to the placement default.",
                  "type": "string"
                },
                "width_mm": {
                  "description": "Exact printed width of the visible artwork in millimetres. Height follows the aspect ratio.",
                  "type": "number",
                  "exclusiveMinimum": 0,
                  "maximum": 1000
                },
                "height_mm": {
                  "description": "Maximum printed height in millimetres.",
                  "type": "number",
                  "exclusiveMinimum": 0,
                  "maximum": 1000
                },
                "top_mm": {
                  "description": "Distance from the top of the print area to the top of the artwork.",
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1000
                },
                "left_mm": {
                  "description": "Distance from the left edge of the print area. Default: horizontally centred.",
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1000
                },
                "artwork_id": {
                  "type": "string",
                  "description": "artwork_id returned by validate_artwork."
                }
              },
              "required": [
                "artwork_id"
              ]
            },
            "description": "One entry per print placement. Each placement may appear once per item."
          }
        },
        "required": [
          "product_id",
          "color",
          "size",
          "artwork"
        ]
      }
    },
    "ship_to": {
      "description": "Destination. country_code is required; postal_code and state_code improve shipping accuracy.",
      "type": "object",
      "properties": {
        "country_code": {
          "type": "string",
          "minLength": 2,
          "maxLength": 2
        },
        "state_code": {
          "type": "string",
          "maxLength": 10
        },
        "postal_code": {
          "type": "string",
          "maxLength": 20
        },
        "city": {
          "type": "string",
          "maxLength": 60
        }
      },
      "required": [
        "country_code"
      ]
    },
    "preference": {
      "default": "fewest_packages",
      "description": "How AgentMade picks the manufacturing route: fewest_packages (default: fewest parcels, then best price among the fastest routes), cheapest, or fastest.",
      "type": "string",
      "enum": [
        "fewest_packages",
        "cheapest",
        "fastest"
      ]
    },
    "purpose": {
      "description": "What the order is for. Set it only if the user already said it. Do not ask for it.",
      "type": "string",
      "enum": [
        "gift",
        "personal",
        "group",
        "work",
        "event",
        "sample"
      ]
    },
    "deliver_by": {
      "description": "Date by which the parcel should arrive, e.g. \"2026-12-20\". The quote is never refused because of it: if the estimate is later, the quote says so.",
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    },
    "speed": {
      "default": "standard",
      "description": "Shipping speed. Only standard is offered now; express returns a note and a standard quote.",
      "type": "string",
      "enum": [
        "standard",
        "express"
      ]
    },
    "currency": {
      "description": "ISO 4217 currency of the payer, e.g. \"USD\". Optional. The quote states the currency that it uses.",
      "type": "string",
      "pattern": "^[A-Za-z]{3}$"
    },
    "buyer": {
      "description": "Only for a company purchase with an invoice. Business checkout is not open yet: the quote charges destination VAT.",
      "type": "object",
      "properties": {
        "company_name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Registered company name for the invoice."
        },
        "vat_id": {
          "description": "EU or UK VAT number with the country prefix, e.g. \"DE123456789\".",
          "type": "string",
          "maxLength": 20
        }
      },
      "required": [
        "company_name"
      ]
    }
  },
  "required": [
    "items",
    "ship_to"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "quote_id": {
      "type": "string",
      "description": "Use in purchase before expires_at."
    },
    "status": {
      "type": "string",
      "enum": [
        "valid",
        "expired"
      ]
    },
    "expires_at": {
      "type": "string"
    },
    "currency": {
      "type": "string"
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "line_id": {
            "type": "string"
          },
          "product_id": {
            "type": "string"
          },
          "variant_id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "color": {
            "type": "string"
          },
          "size": {
            "type": "string"
          },
          "quantity": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "line_total_minor": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Integer minor units (cents) of `currency`."
          },
          "placements": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "artwork_id": {
                  "type": "string"
                },
                "placement": {
                  "type": "string"
                },
                "validation": {
                  "type": "string",
                  "enum": [
                    "PASS",
                    "WARN",
                    "FAIL"
                  ]
                },
                "warnings": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "required": [
                "artwork_id",
                "placement",
                "validation",
                "warnings"
              ],
              "additionalProperties": {}
            }
          }
        },
        "required": [
          "line_id",
          "product_id",
          "variant_id",
          "title",
          "color",
          "size",
          "quantity",
          "line_total_minor",
          "placements"
        ],
        "additionalProperties": {}
      }
    },
    "ship_to": {
      "type": "object",
      "properties": {
        "country_code": {
          "type": "string"
        }
      },
      "required": [
        "country_code"
      ],
      "additionalProperties": {}
    },
    "shipping": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "price_minor": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "Integer minor units (cents) of `currency`."
        },
        "transit_business_days": {
          "type": "object",
          "properties": {
            "min": {
              "type": [
                "number",
                "null"
              ]
            },
            "max": {
              "type": [
                "number",
                "null"
              ]
            }
          },
          "required": [
            "min",
            "max"
          ],
          "additionalProperties": {}
        }
      },
      "required": [
        "name",
        "price_minor",
        "transit_business_days"
      ],
      "additionalProperties": {}
    },
    "packages": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "package": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "line_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "ships_from": {
            "description": "Country code where the package is printed.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "package",
          "line_ids",
          "ships_from"
        ],
        "additionalProperties": {}
      }
    },
    "package_count": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "tax": {
      "type": "object",
      "properties": {
        "label": {
          "type": "string"
        },
        "rate_percent": {
          "type": "number"
        },
        "amount_minor": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "Integer minor units (cents) of `currency`."
        },
        "included_in_total": {
          "type": "boolean"
        },
        "note": {
          "type": "string"
        }
      },
      "required": [
        "label",
        "rate_percent",
        "amount_minor",
        "included_in_total",
        "note"
      ],
      "additionalProperties": {}
    },
    "totals": {
      "type": "object",
      "properties": {
        "products_minor": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "Integer minor units (cents) of `currency`."
        },
        "shipping_minor": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "Integer minor units (cents) of `currency`."
        },
        "tax_minor": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "Integer minor units (cents) of `currency`."
        },
        "total_minor": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "Integer minor units (cents) of `currency`."
        },
        "total_formatted": {
          "type": "string"
        }
      },
      "required": [
        "products_minor",
        "shipping_minor",
        "tax_minor",
        "total_minor",
        "total_formatted"
      ],
      "additionalProperties": {},
      "description": "total_minor is the full amount that the payer pays. Show total_formatted to the user. products_minor and shipping_minor are before VAT; tax_minor is the VAT included in the total, or 0 when tax is not collected."
    },
    "delivery_estimate_business_days": {
      "type": "object",
      "properties": {
        "min": {
          "type": [
            "number",
            "null"
          ]
        },
        "max": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "required": [
        "min",
        "max"
      ],
      "additionalProperties": {}
    },
    "delivery_estimate_dates": {
      "type": "object",
      "properties": {
        "earliest": {
          "type": "string"
        },
        "latest": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      },
      "required": [
        "earliest",
        "latest",
        "note"
      ],
      "additionalProperties": {},
      "description": "Calendar dates (YYYY-MM-DD) for the delivery estimate. Tell the user these dates."
    },
    "purchase_open": {
      "type": "boolean",
      "description": "False when this destination does not take orders yet or the quote expired. Then do not call purchase."
    },
    "assumptions": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Things to tell the user before purchase."
    },
    "next_step": {
      "type": "string",
      "description": "What the agent should do next, in plain language."
    }
  },
  "required": [
    "quote_id",
    "status",
    "expires_at",
    "currency",
    "items",
    "ship_to",
    "shipping",
    "packages",
    "package_count",
    "tax",
    "totals",
    "delivery_estimate_business_days",
    "delivery_estimate_dates",
    "purchase_open",
    "assumptions",
    "notes",
    "next_step"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {}
}
⚪purchase(quote_id, recipient, orders, contact_email, payment_capabilities, ...)

Turn a quote into an order. Needs quote_id, the full recipient address (it must match the quoted destination) and rights_attestation=true. contact_email is the payer's own email, never the gift recipient's. Returns order_id and payment.url: the order page where the person pays by card, Apple Pay or Google Pay. Nothing is printed until the payment is confirmed. Idempotent per quote_id.

Input Schema

{
  "type": "object",
  "properties": {
    "quote_id": {
      "description": "quote_id returned by quote, for one parcel. Set quote_id or orders, not both.",
      "type": "string"
    },
    "recipient": {
      "description": "Shipping address. Country, state and postal code must match the quote destination. Send the full address when you have it. If you cannot collect the street address, send only country_code, postal_code (and state_code for US, CA and AU): the person then enters the address on the order page before paying. Required with quote_id.",
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100,
          "description": "Full name of the recipient."
        },
        "company": {
          "type": "string",
          "maxLength": 100
        },
        "address1": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100,
          "description": "Street and house number."
        },
        "address2": {
          "description": "Apartment, floor, etc.",
          "type": "string",
          "maxLength": 100
        },
        "city": {
          "type": "string",
          "minLength": 1,
          "maxLength": 60
        },
        "state_code": {
          "description": "State or province code. Required for US, CA and AU.",
          "type": "string",
          "maxLength": 10
        },
        "postal_code": {
          "type": "string",
          "minLength": 1,
          "maxLength": 20
        },
        "country_code": {
          "description": "ISO 3166-1 alpha-2 country code, e.g. CZ, DE, US.",
          "type": "string",
          "minLength": 2,
          "maxLength": 2
        },
        "email": {
          "description": "Recipient email, for carrier delivery notices only. Never used for receipts. For a gift, leave it empty unless the recipient agrees.",
          "type": "string",
          "format": "email",
          "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
        },
        "phone": {
          "type": "string",
          "maxLength": 30
        }
      },
      "required": [
        "postal_code",
        "country_code"
      ]
    },
    "orders": {
      "description": "Many parcels with one payment: one quote_id and one recipient per parcel. Not live yet: call purchase once per quote_id for now.",
      "minItems": 2,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "quote_id": {
            "type": "string",
            "description": "quote_id returned by quote."
          },
          "recipient": {
            "description": "Shipping address. Country, state and postal code must match the quote destination. Send the full address when you have it. If you cannot collect the street address, send only country_code, postal_code (and state_code for US, CA and AU): the person then enters the address on the order page before paying.",
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100,
                "description": "Full name of the recipient."
              },
              "company": {
                "type": "string",
                "maxLength": 100
              },
              "address1": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100,
                "description": "Street and house number."
              },
              "address2": {
                "description": "Apartment, floor, etc.",
                "type": "string",
                "maxLength": 100
              },
              "city": {
                "type": "string",
                "minLength": 1,
                "maxLength": 60
              },
              "state_code": {
                "description": "State or province code. Required for US, CA and AU.",
                "type": "string",
                "maxLength": 10
              },
              "postal_code": {
                "type": "string",
                "minLength": 1,
                "maxLength": 20
              },
              "country_code": {
                "description": "ISO 3166-1 alpha-2 country code, e.g. CZ, DE, US.",
                "type": "string",
                "minLength": 2,
                "maxLength": 2
              },
              "email": {
                "description": "Recipient email, for carrier delivery notices only. Never used for receipts. For a gift, leave it empty unless the recipient agrees.",
                "type": "string",
                "format": "email",
                "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
              },
              "phone": {
                "type": "string",
                "maxLength": 30
              }
            },
            "required": [
              "name",
              "address1",
              "city",
              "postal_code",
              "country_code"
            ]
          }
        },
        "required": [
          "quote_id",
          "recipient"
        ]
      }
    },
    "contact_email": {
      "description": "Email of the payer, for the order confirmation and the payment receipt. Not the recipient's email: for a gift, the recipient must not see the price. Optional.",
      "type": "string",
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "payment_capabilities": {
      "default": [
        "hosted_checkout"
      ],
      "description": "Payment methods the calling agent can use. \"hosted_checkout\" = a link that the person opens to pay by card, Apple Pay or Google Pay. Always supported.",
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "hosted_checkout",
          "x402",
          "mpp"
        ]
      }
    },
    "gift_message": {
      "description": "Short message for the packing slip of a gift. Not printed yet: the answer says so.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "rights_attestation": {
      "type": "boolean",
      "const": true,
      "description": "Must be true: confirms the customer owns or is licensed to print all submitted artwork, and that it is not prohibited content."
    }
  },
  "required": [
    "rights_attestation"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "string",
      "description": "A bearer key: whoever has it can read and cancel the order. Do not share it publicly."
    },
    "status": {
      "type": "string",
      "enum": [
        "AWAITING_PAYMENT",
        "PAID",
        "VALIDATING",
        "SUBMITTING",
        "SUBMITTED",
        "IN_PRODUCTION",
        "SHIPPED",
        "DELIVERED",
        "QUOTE_EXPIRED",
        "PAYMENT_FAILED",
        "REJECTED",
        "SUBMISSION_FAILED",
        "CANCELLED",
        "REFUND_PENDING",
        "REFUNDED",
        "DISPUTED"
      ]
    },
    "next_step": {
      "type": "string",
      "description": "What the agent should do next, in plain language."
    },
    "address_needed": {
      "type": "boolean",
      "description": "True when purchase had no street address: the person enters it on the order page before paying."
    },
    "destination": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "country_code": {
              "type": "string"
            }
          },
          "required": [
            "country_code"
          ],
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ],
      "description": "While address_needed: the quoted destination."
    },
    "status_reason": {
      "type": [
        "string",
        "null"
      ]
    },
    "quote_id": {
      "type": "string"
    },
    "total": {
      "type": "object",
      "properties": {
        "amount_minor": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "Integer minor units (cents) of `currency`."
        },
        "currency": {
          "type": "string"
        },
        "formatted": {
          "type": "string"
        }
      },
      "required": [
        "amount_minor",
        "currency",
        "formatted"
      ],
      "additionalProperties": {}
    },
    "order_url": {
      "type": "string",
      "description": "The order page. The person sees the status there."
    },
    "payment": {
      "type": "object",
      "properties": {
        "method": {
          "type": "string"
        },
        "paid": {
          "type": "boolean",
          "description": "True only after a verified payment."
        },
        "url": {
          "description": "While unpaid: the link to give the person who pays.",
          "type": [
            "string",
            "null"
          ]
        },
        "expires_at": {
          "type": [
            "string",
            "null"
          ]
        },
        "instructions": {
          "type": [
            "string",
            "null"
          ]
        },
        "note": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "method",
        "paid",
        "url",
        "expires_at",
        "instructions",
        "note"
      ],
      "additionalProperties": {}
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "color": {
            "type": "string"
          },
          "size": {
            "type": "string"
          },
          "quantity": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "image_url": {
            "type": [
              "string",
              "null"
            ]
          },
          "mockups": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "placement": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                }
              },
              "required": [
                "placement",
                "url"
              ],
              "additionalProperties": {}
            },
            "description": "One preview per print side of the ordered design on the product. Show them to the person as the exact print."
          }
        },
        "required": [
          "product_id",
          "title",
          "color",
          "size",
          "quantity",
          "image_url",
          "mockups"
        ],
        "additionalProperties": {}
      }
    },
    "shipments": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "carrier": {
            "type": [
              "string",
              "null"
            ]
          },
          "tracking_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "tracking_url": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "carrier",
          "tracking_number",
          "tracking_url"
        ],
        "additionalProperties": {}
      }
    },
    "delivery_estimate_business_days": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "min": {
              "type": [
                "number",
                "null"
              ]
            },
            "max": {
              "type": [
                "number",
                "null"
              ]
            }
          },
          "required": [
            "min",
            "max"
          ],
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ],
      "description": "Null when the order ended (cancelled, refunded, rejected, expired or delivered)."
    },
    "timeline": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "at": {
            "type": "string"
          },
          "status": {
            "type": [
              "string",
              "null"
            ]
          },
          "note": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "at",
          "status",
          "note"
        ],
        "additionalProperties": {}
      }
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "order_id",
    "status",
    "next_step",
    "address_needed",
    "destination",
    "status_reason",
    "quote_id",
    "total",
    "order_url",
    "payment",
    "items",
    "shipments",
    "delivery_estimate_business_days",
    "timeline",
    "notes"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {}
}
🟢get_order(order_id)

Current order status (AWAITING_PAYMENT, PAID, SUBMITTED, IN_PRODUCTION, SHIPPED, DELIVERED or an exception state), next_step in plain language, the payment link while unpaid, shipments and a timeline.

Input Schema

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "string",
      "description": "order_id returned by purchase."
    }
  },
  "required": [
    "order_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "string",
      "description": "A bearer key: whoever has it can read and cancel the order. Do not share it publicly."
    },
    "status": {
      "type": "string",
      "enum": [
        "AWAITING_PAYMENT",
        "PAID",
        "VALIDATING",
        "SUBMITTING",
        "SUBMITTED",
        "IN_PRODUCTION",
        "SHIPPED",
        "DELIVERED",
        "QUOTE_EXPIRED",
        "PAYMENT_FAILED",
        "REJECTED",
        "SUBMISSION_FAILED",
        "CANCELLED",
        "REFUND_PENDING",
        "REFUNDED",
        "DISPUTED"
      ]
    },
    "next_step": {
      "type": "string",
      "description": "What the agent should do next, in plain language."
    },
    "address_needed": {
      "type": "boolean",
      "description": "True when purchase had no street address: the person enters it on the order page before paying."
    },
    "destination": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "country_code": {
              "type": "string"
            }
          },
          "required": [
            "country_code"
          ],
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ],
      "description": "While address_needed: the quoted destination."
    },
    "status_reason": {
      "type": [
        "string",
        "null"
      ]
    },
    "quote_id": {
      "type": "string"
    },
    "total": {
      "type": "object",
      "properties": {
        "amount_minor": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "Integer minor units (cents) of `currency`."
        },
        "currency": {
          "type": "string"
        },
        "formatted": {
          "type": "string"
        }
      },
      "required": [
        "amount_minor",
        "currency",
        "formatted"
      ],
      "additionalProperties": {}
    },
    "order_url": {
      "type": "string",
      "description": "The order page. The person sees the status there."
    },
    "payment": {
      "type": "object",
      "properties": {
        "method": {
          "type": "string"
        },
        "paid": {
          "type": "boolean",
          "description": "True only after a verified payment."
        },
        "url": {
          "description": "While unpaid: the link to give the person who pays.",
          "type": [
            "string",
            "null"
          ]
        },
        "expires_at": {
          "type": [
            "string",
            "null"
          ]
        },
        "instructions": {
          "type": [
            "string",
            "null"
          ]
        },
        "note": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "method",
        "paid",
        "url",
        "expires_at",
        "instructions",
        "note"
      ],
      "additionalProperties": {}
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "color": {
            "type": "string"
          },
          "size": {
            "type": "string"
          },
          "quantity": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "image_url": {
            "type": [
              "string",
              "null"
            ]
          },
          "mockups": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "placement": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                }
              },
              "required": [
                "placement",
                "url"
              ],
              "additionalProperties": {}
            },
            "description": "One preview per print side of the ordered design on the product. Show them to the person as the exact print."
          }
        },
        "required": [
          "product_id",
          "title",
          "color",
          "size",
          "quantity",
          "image_url",
          "mockups"
        ],
        "additionalProperties": {}
      }
    },
    "shipments": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "carrier": {
            "type": [
              "string",
              "null"
            ]
          },
          "tracking_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "tracking_url": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "carrier",
          "tracking_number",
          "tracking_url"
        ],
        "additionalProperties": {}
      }
    },
    "delivery_estimate_business_days": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "min": {
              "type": [
                "number",
                "null"
              ]
            },
            "max": {
              "type": [
                "number",
                "null"
              ]
            }
          },
          "required": [
            "min",
            "max"
          ],
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ],
      "description": "Null when the order ended (cancelled, refunded, rejected, expired or delivered)."
    },
    "timeline": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "at": {
            "type": "string"
          },
          "status": {
            "type": [
              "string",
              "null"
            ]
          },
          "note": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "at",
          "status",
          "note"
        ],
        "additionalProperties": {}
      }
    }
  },
  "required": [
    "order_id",
    "status",
    "next_step",
    "address_needed",
    "destination",
    "status_reason",
    "quote_id",
    "total",
    "order_url",
    "payment",
    "items",
    "shipments",
    "delivery_estimate_business_days",
    "timeline"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {}
}
🟢track_order(order_id)

Carrier, tracking number and tracking link for each shipment of an order, and the delivery estimate.

Input Schema

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "string",
      "description": "order_id returned by purchase."
    }
  },
  "required": [
    "order_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "AWAITING_PAYMENT",
        "PAID",
        "VALIDATING",
        "SUBMITTING",
        "SUBMITTED",
        "IN_PRODUCTION",
        "SHIPPED",
        "DELIVERED",
        "QUOTE_EXPIRED",
        "PAYMENT_FAILED",
        "REJECTED",
        "SUBMISSION_FAILED",
        "CANCELLED",
        "REFUND_PENDING",
        "REFUNDED",
        "DISPUTED"
      ]
    },
    "next_step": {
      "type": "string",
      "description": "What the agent should do next, in plain language."
    },
    "order_url": {
      "type": "string"
    },
    "shipments": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "carrier": {
            "type": [
              "string",
              "null"
            ]
          },
          "tracking_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "tracking_url": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "carrier",
          "tracking_number",
          "tracking_url"
        ],
        "additionalProperties": {}
      }
    },
    "delivery_estimate_business_days": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "min": {
              "type": [
                "number",
                "null"
              ]
            },
            "max": {
              "type": [
                "number",
                "null"
              ]
            }
          },
          "required": [
            "min",
            "max"
          ],
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ],
      "description": "Null when the order ended (cancelled, refunded, rejected, expired or delivered)."
    },
    "tracking_available": {
      "type": "boolean"
    }
  },
  "required": [
    "order_id",
    "status",
    "next_step",
    "order_url",
    "shipments",
    "delivery_estimate_business_days",
    "tracking_available"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {}
}
🔴cancel_order(order_id, reason)

Cancel an order. Unpaid: closes the payment link; nothing is charged. Paid and not yet in production: cancels and refunds in full. In production or shipped: cannot be cancelled; the error gives the reason. A second call on a cancelled order is safe.

Input Schema

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "string",
      "description": "order_id returned by purchase."
    },
    "reason": {
      "type": "string",
      "maxLength": 500
    }
  },
  "required": [
    "order_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "string",
      "description": "A bearer key: whoever has it can read and cancel the order. Do not share it publicly."
    },
    "status": {
      "type": "string",
      "enum": [
        "AWAITING_PAYMENT",
        "PAID",
        "VALIDATING",
        "SUBMITTING",
        "SUBMITTED",
        "IN_PRODUCTION",
        "SHIPPED",
        "DELIVERED",
        "QUOTE_EXPIRED",
        "PAYMENT_FAILED",
        "REJECTED",
        "SUBMISSION_FAILED",
        "CANCELLED",
        "REFUND_PENDING",
        "REFUNDED",
        "DISPUTED"
      ]
    },
    "next_step": {
      "type": "string",
      "description": "What the agent should do next, in plain language."
    },
    "address_needed": {
      "type": "boolean",
      "description": "True when purchase had no street address: the person enters it on the order page before paying."
    },
    "destination": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "country_code": {
              "type": "string"
            }
          },
          "required": [
            "country_code"
          ],
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ],
      "description": "While address_needed: the quoted destination."
    },
    "status_reason": {
      "type": [
        "string",
        "null"
      ]
    },
    "quote_id": {
      "type": "string"
    },
    "total": {
      "type": "object",
      "properties": {
        "amount_minor": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "Integer minor units (cents) of `currency`."
        },
        "currency": {
          "type": "string"
        },
        "formatted": {
          "type": "string"
        }
      },
      "required": [
        "amount_minor",
        "currency",
        "formatted"
      ],
      "additionalProperties": {}
    },
    "order_url": {
      "type": "string",
      "description": "The order page. The person sees the status there."
    },
    "payment": {
      "type": "object",
      "properties": {
        "method": {
          "type": "string"
        },
        "paid": {
          "type": "boolean",
          "description": "True only after a verified payment."
        },
        "url": {
          "description": "While unpaid: the link to give the person who pays.",
          "type": [
            "string",
            "null"
          ]
        },
        "expires_at": {
          "type": [
            "string",
            "null"
          ]
        },
        "instructions": {
          "type": [
            "string",
            "null"
          ]
        },
        "note": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "method",
        "paid",
        "url",
        "expires_at",
        "instructions",
        "note"
      ],
      "additionalProperties": {}
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "color": {
            "type": "string"
          },
          "size": {
            "type": "string"
          },
          "quantity": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "image_url": {
            "type": [
              "string",
              "null"
            ]
          },
          "mockups": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "placement": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                }
              },
              "required": [
                "placement",
                "url"
              ],
              "additionalProperties": {}
            },
            "description": "One preview per print side of the ordered design on the product. Show them to the person as the exact print."
          }
        },
        "required": [
          "product_id",
          "title",
          "color",
          "size",
          "quantity",
          "image_url",
          "mockups"
        ],
        "additionalProperties": {}
      }
    },
    "shipments": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "carrier": {
            "type": [
              "string",
              "null"
            ]
          },
          "tracking_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "tracking_url": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "carrier",
          "tracking_number",
          "tracking_url"
        ],
        "additionalProperties": {}
      }
    },
    "delivery_estimate_business_days": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "min": {
              "type": [
                "number",
                "null"
              ]
            },
            "max": {
              "type": [
                "number",
                "null"
              ]
            }
          },
          "required": [
            "min",
            "max"
          ],
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ],
      "description": "Null when the order ended (cancelled, refunded, rejected, expired or delivered)."
    },
    "timeline": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "at": {
            "type": "string"
          },
          "status": {
            "type": [
              "string",
              "null"
            ]
          },
          "note": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "at",
          "status",
          "note"
        ],
        "additionalProperties": {}
      }
    }
  },
  "required": [
    "order_id",
    "status",
    "next_step",
    "address_needed",
    "destination",
    "status_reason",
    "quote_id",
    "total",
    "order_url",
    "payment",
    "items",
    "shipments",
    "delivery_estimate_business_days",
    "timeline"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": {}
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded9 tools