Servidor MCP

agentee

art.allover/agentee
Comercio y retail Diseño y creatividad Público y accesible MCP 2026-07-28

Qué hace este MCP

Searches and purchases all-over print apparel, manages carts, promotions, shipping, checkout, orders, and user-submitted designs.

add_custom_to_cart
Add custom print to cart
Put a FINISHED custom print into the cart as a product. Args: print_id (must be done), product? (same set as studio_generate), size, qty?. Then the normal checkout flow applies (get_order_preview -> prepare_order).
Esquema de entrada
{'type': 'object', 'required': ['print_id', 'size'], 'properties': {'qty': {'type': 'integer', 'description': 'Quantity (default 1, max 99).'}, 'size': {'type': 'string', 'description': 'Size label; must be available for the chosen product.'}, 'product': {'type': 'string', 'description': 'Studio product base, same set as studio_generate (default mens_oversize_tshirt).'}, 'print_id': {'type': 'string', 'description': 'Finished print id — studio_status must report status=done.'}}}
Esquema de salida
{'type': 'object', 'properties': {'error': {'type': 'string', 'description': 'Present instead of a cart when the call failed (bad index, unavailable size, ...).'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'qty': {'type': 'integer'}, 'code': {'type': 'string'}, 'size': {'type': 'string'}, 'price': {'type': 'number'}, 'title': {'type': 'string'}, 'custom': {'type': 'boolean', 'description': 'True when the line is a user-generated custom print.'}, 'fabric': {'type': 'string'}, 'good_id': {'type': 'integer'}, 'product': {'type': 'string'}, 'currency': {'type': 'string'}}}, 'description': 'Cart lines in index order — this index is what set_cart_quantity/cart_update/cart_remove take.'}, 'currency': {'type': 'string'}, 'subtotal': {'type': 'number', 'description': 'Sum of price x qty over all lines, USD.'}, 'checkout_url': {'type': 'string', 'description': 'Cart page URL for the human.'}}}
add_to_cart
Add to cart
Add a product to the user's cart. Args: good_id (from search/get_product), size (must be one of the product's sizes), fabric? (if the product offers a choice), qty? (default 1). Returns the updated cart.
Esquema de entrada
{'type': 'object', 'required': ['good_id', 'size'], 'properties': {'qty': {'type': 'integer', 'description': 'Quantity to add (default 1, max 99).'}, 'size': {'type': 'string', 'description': "Size label; must be one of the product's available sizes."}, 'fabric': {'type': 'string', 'description': 'Fabric label from get_product, if the product offers a choice.'}, 'good_id': {'type': 'integer', 'description': 'Numeric product id from search_products/get_product.'}}}
Esquema de salida
{'type': 'object', 'properties': {'error': {'type': 'string', 'description': 'Present instead of a cart when the call failed (bad index, unavailable size, ...).'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'qty': {'type': 'integer'}, 'code': {'type': 'string'}, 'size': {'type': 'string'}, 'price': {'type': 'number'}, 'title': {'type': 'string'}, 'custom': {'type': 'boolean', 'description': 'True when the line is a user-generated custom print.'}, 'fabric': {'type': 'string'}, 'good_id': {'type': 'integer'}, 'product': {'type': 'string'}, 'currency': {'type': 'string'}}}, 'description': 'Cart lines in index order — this index is what set_cart_quantity/cart_update/cart_remove take.'}, 'currency': {'type': 'string'}, 'subtotal': {'type': 'number', 'description': 'Sum of price x qty over all lines, USD.'}, 'checkout_url': {'type': 'string', 'description': 'Cart page URL for the human.'}}}
apply_promo
Apply promo code
Validate and apply a promo code to the cart (server-checked). Returns the new discount/shipping/total, or applied=false with a reason. Args: code.
Idempotente
Esquema de entrada
{'type': 'object', 'required': ['code'], 'properties': {'code': {'type': 'string', 'description': 'Promo code to validate and apply.'}}}
Esquema de salida
{'type': 'object', 'properties': {'code': {'type': 'string', 'description': 'Normalized promo code (when applied).'}, 'error': {'type': 'string', 'description': 'Present when the cart is empty or code is missing.'}, 'total': {'type': 'number'}, 'reason': {'type': 'string', 'description': 'Why the code was rejected (when applied=false).'}, 'applied': {'type': 'boolean'}, 'currency': {'type': 'string'}, 'discount': {'type': 'number'}, 'shipping': {'type': 'number'}, 'subtotal': {'type': 'number'}}}
cart_remove
Remove cart line
Remove a cart line by its index (from view_cart). Args: index.
Destructivo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['index'], 'properties': {'index': {'type': 'integer', 'description': 'Zero-based cart line index from view_cart.'}}}
Esquema de salida
{'type': 'object', 'properties': {'error': {'type': 'string', 'description': 'Present instead of a cart when the call failed (bad index, unavailable size, ...).'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'qty': {'type': 'integer'}, 'code': {'type': 'string'}, 'size': {'type': 'string'}, 'price': {'type': 'number'}, 'title': {'type': 'string'}, 'custom': {'type': 'boolean', 'description': 'True when the line is a user-generated custom print.'}, 'fabric': {'type': 'string'}, 'good_id': {'type': 'integer'}, 'product': {'type': 'string'}, 'currency': {'type': 'string'}}}, 'description': 'Cart lines in index order — this index is what set_cart_quantity/cart_update/cart_remove take.'}, 'currency': {'type': 'string'}, 'subtotal': {'type': 'number', 'description': 'Sum of price x qty over all lines, USD.'}, 'checkout_url': {'type': 'string', 'description': 'Cart page URL for the human.'}}}
cart_update
Update cart line
Change a cart line by its index (from view_cart): set qty (0 removes), or switch size/fabric. Args: index, qty?, size?, fabric?.
Idempotente
Esquema de entrada
{'type': 'object', 'required': ['index'], 'properties': {'qty': {'type': 'integer', 'description': 'New quantity; 0 removes the line.'}, 'size': {'type': 'string', 'description': 'New size for this line (must be available for the product).'}, 'index': {'type': 'integer', 'description': 'Zero-based cart line index from view_cart.'}, 'fabric': {'type': 'string', 'description': 'New fabric for this line (must be available for the product).'}}}
Esquema de salida
{'type': 'object', 'properties': {'error': {'type': 'string', 'description': 'Present instead of a cart when the call failed (bad index, unavailable size, ...).'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'qty': {'type': 'integer'}, 'code': {'type': 'string'}, 'size': {'type': 'string'}, 'price': {'type': 'number'}, 'title': {'type': 'string'}, 'custom': {'type': 'boolean', 'description': 'True when the line is a user-generated custom print.'}, 'fabric': {'type': 'string'}, 'good_id': {'type': 'integer'}, 'product': {'type': 'string'}, 'currency': {'type': 'string'}}}, 'description': 'Cart lines in index order — this index is what set_cart_quantity/cart_update/cart_remove take.'}, 'currency': {'type': 'string'}, 'subtotal': {'type': 'number', 'description': 'Sum of price x qty over all lines, USD.'}, 'checkout_url': {'type': 'string', 'description': 'Cart page URL for the human.'}}}
checkout_link
Get checkout link
Get the URL where the human opens their cart to review and pay. The agent never pays — checkout is always done by the person in the browser.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {}}
Esquema de salida
{'type': 'object', 'properties': {'url': {'type': 'string', 'description': 'Cart page for the human to review and pay.'}, 'note': {'type': 'string'}, 'items_in_cart': {'type': 'integer'}}}
create_colorway
Create a colorway set
Group my recolours of ONE artwork into a set (2+ of my designs). The catalog then shows one card for the set; every variant keeps its own page and link. Args: design_ids (list of my design ids), primary? (which one represents the set).
Esquema de entrada
{'type': 'object', 'required': ['design_ids'], 'properties': {'primary': {'type': 'integer', 'description': 'Which variant represents the set.'}, 'design_ids': {'type': 'array', 'items': {'type': 'integer'}, 'description': 'At least two of my own design ids.'}}}
Esquema de salida
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'note': {'type': 'string'}, 'error': {'type': 'string'}, 'pitch': {'type': 'string', 'description': 'Designer-program pitch to relay to the user — present when is_partner is false.'}, 'primary': {'type': 'integer'}, 'variants': {'type': 'array', 'items': {'type': 'integer'}}, 'colorway_id': {'type': 'integer'}, 'how_to_join': {'type': 'string', 'description': 'How to join the designer program — present when is_partner is false.'}}}
designer_add_to_colorway
Add to a colorway set
Add one more of my recolours to a set of mine. Args: colorway_id, design_id.
Esquema de entrada
{'type': 'object', 'required': ['colorway_id', 'design_id'], 'properties': {'design_id': {'type': 'integer'}, 'colorway_id': {'type': 'integer'}}}
Esquema de salida
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'note': {'type': 'string'}, 'error': {'type': 'string'}, 'pitch': {'type': 'string', 'description': 'Designer-program pitch to relay to the user — present when is_partner is false.'}, 'variants': {'type': 'array', 'items': {'type': 'integer'}}, 'colorway_id': {'type': 'integer'}, 'how_to_join': {'type': 'string', 'description': 'How to join the designer program — present when is_partner is false.'}}}
designer_colorways
List my colorway sets
My colorway sets: one catalog card per set instead of one per colour. No args.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {}}
Esquema de salida
{'type': 'object', 'properties': {'note': {'type': 'string'}, 'sets': {'type': 'array', 'items': {'type': 'object', 'properties': {'shown_as': {'type': 'string'}, 'variants': {'type': 'array', 'items': {'type': 'object'}}, 'colorway_id': {'type': 'integer'}}}}, 'pitch': {'type': 'string', 'description': 'Designer-program pitch to relay to the user — present when is_partner is false.'}, 'is_partner': {'type': 'boolean'}, 'how_to_join': {'type': 'string', 'description': 'How to join the designer program — present when is_partner is false.'}}}
designer_designs
List my designs
The user's own published designs with live status (products on sale / hidden / pending). Args: limit? (default 50).
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'description': 'Max designs to return (default 50, max 200).'}}}
Esquema de salida
{'type': 'object', 'properties': {'note': {'type': 'string'}, 'pitch': {'type': 'string', 'description': 'Designer-program pitch to relay to the user — present when is_partner is false.'}, 'designs': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string', 'description': 'Product page (null if nothing is live).'}, 'name': {'type': 'string'}, 'status': {'type': 'string', 'description': 'live | hidden | no products yet'}, 'design_id': {'type': 'integer'}, 'live_products': {'type': 'integer', 'description': 'Active products with this design.'}}}}, 'is_partner': {'type': 'boolean'}, 'how_to_join': {'type': 'string', 'description': 'How to join the designer program — present when is_partner is false.'}, 'designer_page': {'type': 'string'}}}
designer_remove_from_colorway
Remove from a colorway set
Take one of my designs out of its set — it gets its own catalog card again. A set left with a single variant is dissolved. Args: design_id.
Esquema de entrada
{'type': 'object', 'required': ['design_id'], 'properties': {'design_id': {'type': 'integer'}}}
Esquema de salida
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'note': {'type': 'string'}, 'error': {'type': 'string'}, 'pitch': {'type': 'string', 'description': 'Designer-program pitch to relay to the user — present when is_partner is false.'}, 'design_id': {'type': 'integer'}, 'how_to_join': {'type': 'string', 'description': 'How to join the designer program — present when is_partner is false.'}}}
designer_stats
Designer stats
The user's designer-program stats (if they are a designer-partner): units sold, revenue, accrued royalties, available for payout, royalty percent, their designer page URL.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {}}
Esquema de salida
{'type': 'object', 'properties': {'note': {'type': 'string'}, 'pitch': {'type': 'string', 'description': 'Designer-program pitch to relay to the user — present when is_partner is false.'}, 'accrued': {'type': 'number', 'description': 'Royalties accrued from paid orders.'}, 'landing': {'type': 'string', 'description': "The designer's public page URL."}, 'revenue': {'type': 'number'}, 'nickname': {'type': 'string'}, 'is_partner': {'type': 'boolean'}, 'units_sold': {'type': 'integer'}, 'how_to_join': {'type': 'string', 'description': 'How to join the designer program — present when is_partner is false.'}, 'royalty_percent': {'type': 'number'}, 'available_for_payout': {'type': 'number', 'description': 'Accrued royalties from delivered orders, ready for payout.'}}}
designer_submissions
List my submissions
The user's Studio publications in moderation: in review / in catalog / needs changes. Args: limit?.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'description': 'Max submissions to return (default 20, max 100).'}}}
Esquema de salida
{'type': 'object', 'properties': {'note': {'type': 'string'}, 'pitch': {'type': 'string', 'description': 'Designer-program pitch to relay to the user — present when is_partner is false.'}, 'is_partner': {'type': 'boolean'}, 'how_to_join': {'type': 'string', 'description': 'How to join the designer program — present when is_partner is false.'}, 'submissions': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'integer'}, 'status': {'type': 'string', 'description': 'in review | in catalog | needs changes'}, 'design_name': {'type': 'string'}, 'submitted_at': {'type': 'string'}}}}}}
designer_uploads
My uploads
What the designer has already sent in and where it stands: in review / accepted / needs changes (with the reason). Args: limit?.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'description': 'Max rows (default 50, max 200).'}}}
Esquema de salida
{'type': 'object', 'properties': {'note': {'type': 'string'}, 'pitch': {'type': 'string', 'description': 'Designer-program pitch to relay to the user — present when is_partner is false.'}, 'uploads': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'integer'}, 'name': {'type': 'string'}, 'batch': {'type': 'string'}, 'reason': {'type': 'string'}, 'status': {'type': 'string'}}}}, 'is_partner': {'type': 'boolean'}, 'how_to_join': {'type': 'string', 'description': 'How to join the designer program — present when is_partner is false.'}}}
designer_upload_slot
Get an upload URL
Get a short-lived URL to upload an image file to us (use when the designer has no public link — otherwise pass the URL straight to submit_design). Args: filename?. PUT the raw bytes to upload_url, then pass the returned upload_id to submit_design.
Esquema de entrada
{'type': 'object', 'properties': {'filename': {'type': 'string', 'description': 'Original file name, for readability.'}}}
Esquema de salida
{'type': 'object', 'properties': {'note': {'type': 'string'}, 'pitch': {'type': 'string', 'description': 'Designer-program pitch to relay to the user — present when is_partner is false.'}, 'method': {'type': 'string'}, 'upload_id': {'type': 'string'}, 'expires_in': {'type': 'integer', 'description': 'Seconds the URL stays valid.'}, 'is_partner': {'type': 'boolean'}, 'upload_url': {'type': 'string'}, 'how_to_join': {'type': 'string', 'description': 'How to join the designer program — present when is_partner is false.'}}}
get_order_preview
Preview order
Full order summary to show the human before ordering: line items, promo/discount, shipping, address, grand total. Prices are server-computed.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {}}
Esquema de salida
{'type': 'object', 'properties': {'note': {'type': 'string'}, 'error': {'type': 'string', 'description': 'Present when the cart is empty.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'qty': {'type': 'integer'}, 'size': {'type': 'string'}, 'price': {'type': 'number'}, 'title': {'type': 'string'}, 'custom': {'type': 'boolean'}, 'product': {'type': 'string'}}}, 'description': 'Re-priced order lines.'}, 'total': {'type': 'number'}, 'issues': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Lines that became unavailable, if any.'}, 'currency': {'type': 'string'}, 'discount': {'type': 'number'}, 'shipping': {'type': 'object', 'properties': {'price': {'type': 'number'}, 'method': {'type': 'string'}}}, 'subtotal': {'type': 'number'}, 'promo_code': {'type': 'string'}, 'ready_to_prepare': {'type': 'boolean', 'description': 'True when an address is set and all lines are orderable.'}, 'shipping_address': {'type': 'object', 'description': 'Address set via set_shipping_address (null if not set).'}}}
get_product
Get product details
Full details of one product by its code: available sizes, fabrics, per-variant price, and the design 'about' text. Args: code (from search_products).
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['code'], 'properties': {'code': {'type': 'string', 'description': 'Product code from search_products results.'}}}
Esquema de salida
{'type': 'object', 'properties': {'url': {'type': 'string'}, 'code': {'type': 'string'}, 'about': {'type': 'string', 'description': 'Design description text (may be null).'}, 'error': {'type': 'string', 'description': 'Present when the product was not found.'}, 'image': {'type': 'string'}, 'price': {'type': 'number'}, 'sizes': {'type': 'array', 'items': {'type': 'string'}}, 'theme': {'type': 'string'}, 'title': {'type': 'string'}, 'fabrics': {'type': 'array', 'items': {'type': 'string'}}, 'good_id': {'type': 'integer'}, 'product': {'type': 'string'}, 'currency': {'type': 'string'}, 'variants': {'type': 'array', 'items': {'type': 'object', 'properties': {'size': {'type': 'string'}, 'price': {'type': 'number'}, 'fabric': {'type': 'string'}}}, 'description': 'Price per size+fabric combination.'}}}
get_saved_addresses
Get saved addresses
Return shipping addresses the user used in past orders — offer these to a returning buyer instead of asking again.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {}}
Esquema de salida
{'type': 'object', 'properties': {'addresses': {'type': 'array', 'items': {'type': 'object', 'properties': {'zip': {'type': 'string'}, 'city': {'type': 'string'}, 'name': {'type': 'string'}, 'phone': {'type': 'string'}, 'address': {'type': 'string'}, 'country': {'type': 'string'}, 'summary': {'type': 'string', 'description': 'One-line address summary.'}}}, 'description': 'Up to 5 distinct addresses from past orders, newest first.'}}}
get_shipping_options
Get shipping options
Available shipping methods for the current cart/address, with price and ETA (free over the threshold).
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {}}
Esquema de salida
{'type': 'object', 'properties': {'options': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Pass this to set_shipping_method.'}, 'eta': {'type': 'string'}, 'note': {'type': 'string'}, 'label': {'type': 'string'}, 'price': {'type': 'number'}, 'currency': {'type': 'string'}}}}, 'free_shipping_from': {'type': 'number', 'description': 'Subtotal (USD) at which shipping becomes free.'}}}
get_user_prefs
Get saved size/fit
Return the shopper's saved default size and fit. Call this BEFORE asking the user for a size — if a default is set, apply it automatically (add_to_cart uses it when size is omitted), and prefer products matching their fit (basic vs oversized).
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {}}
Esquema de salida
{'type': 'object', 'properties': {'fit': {'type': 'string', 'description': 'Saved fit preference: basic | oversized, or null.'}, 'size': {'type': 'string', 'description': 'Saved default size, or null.'}}}
list_collections
List collections
List active curated collections (themed landing pages) with their slugs and urls. Args: limit?.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'description': 'Max collections to return (default 50, max 100).'}}}
Esquema de salida
{'type': 'object', 'properties': {'collections': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string', 'description': 'Collection landing page.'}, 'slug': {'type': 'string'}, 'title': {'type': 'string'}}}}}}
order_status
Check order status
Look up the user's recent orders (or one by number) and their fulfilment status. Args: number?, limit? (default 5).
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'description': 'Max orders to return (default 5, max 20).'}, 'number': {'type': 'string', 'description': 'Exact order number to look up; omit for the most recent orders.'}}}
Esquema de salida
{'type': 'object', 'properties': {'note': {'type': 'string', 'description': 'Present when the account has no email on file.'}, 'orders': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string', 'description': 'Order tracking page.'}, 'total': {'type': 'number'}, 'number': {'type': 'string'}, 'status': {'type': 'string'}, 'currency': {'type': 'string'}, 'created_at': {'type': 'string', 'description': 'ISO 8601 timestamp.'}}}}}}
prepare_order
Prepare checkout
Create a draft order from the cart + address + promo and return {checkout_url, draft_id, expires_at}. The human opens checkout_url — everything is pre-filled — reviews and pays. The agent never pays. Call get_order_preview and confirm with the human first.
Esquema de entrada
{'type': 'object', 'properties': {}}
Esquema de salida
{'type': 'object', 'properties': {'note': {'type': 'string'}, 'error': {'type': 'string', 'description': 'Empty cart, missing address or no orderable items.'}, 'total': {'type': 'number'}, 'issues': {'type': 'array', 'items': {'type': 'string'}}, 'currency': {'type': 'string'}, 'draft_id': {'type': 'string', 'description': 'Draft order number.'}, 'expires_at': {'type': 'string', 'description': 'ISO 8601 time when the draft expires (48 h).'}, 'checkout_url': {'type': 'string', 'description': 'Pre-filled checkout link — send it to the human to review and pay.'}}}
remove_promo
Remove promo code
Remove the applied promo code from the cart.
Idempotente
Esquema de entrada
{'type': 'object', 'properties': {}}
Esquema de salida
{'type': 'object', 'properties': {'applied': {'type': 'boolean', 'description': 'Always false after removal.'}}}
search_products
Search catalog
Search the allover.art catalog (one card per design). Args: query? (free text, e.g. 'cat', 'neon koi'), theme? (canonical theme like Cats/Anime/Skulls, comma-separated for several), section? (mens|womens|kids), limit? (<=48), max_price? (USD). Returns product cards with good_id, price and url.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'description': 'Max cards to return (default 24, max 48).'}, 'query': {'type': 'string', 'description': "Free-text search, e.g. 'cat' or 'neon koi'."}, 'theme': {'type': 'string', 'description': 'Canonical theme filter (Cats, Anime, Skulls, ...); comma-separate several.'}, 'section': {'type': 'string', 'description': 'Catalog section: mens, womens or kids.'}, 'max_price': {'type': 'number', 'description': 'Only items priced at or below this amount, USD.'}}}
Esquema de salida
{'type': 'object', 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string', 'description': 'Canonical product page.'}, 'code': {'type': 'string'}, 'image': {'type': 'string'}, 'price': {'type': 'number'}, 'theme': {'type': 'string'}, 'title': {'type': 'string'}, 'good_id': {'type': 'integer'}, 'product': {'type': 'string'}, 'currency': {'type': 'string'}}}, 'description': 'Product cards.'}, 'total': {'type': 'integer', 'description': 'Total catalog matches for the filters.'}, 'showing': {'type': 'integer', 'description': 'Number of cards returned.'}}}
set_cart_quantity
Set cart quantity
Change the quantity of a cart line by its index (from view_cart); qty=0 removes it. Args: index, qty.
Idempotente
Esquema de entrada
{'type': 'object', 'required': ['index', 'qty'], 'properties': {'qty': {'type': 'integer', 'description': 'New quantity (0 removes the line, max 99).'}, 'index': {'type': 'integer', 'description': 'Zero-based cart line index from view_cart.'}}}
Esquema de salida
{'type': 'object', 'properties': {'error': {'type': 'string', 'description': 'Present instead of a cart when the call failed (bad index, unavailable size, ...).'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'qty': {'type': 'integer'}, 'code': {'type': 'string'}, 'size': {'type': 'string'}, 'price': {'type': 'number'}, 'title': {'type': 'string'}, 'custom': {'type': 'boolean', 'description': 'True when the line is a user-generated custom print.'}, 'fabric': {'type': 'string'}, 'good_id': {'type': 'integer'}, 'product': {'type': 'string'}, 'currency': {'type': 'string'}}}, 'description': 'Cart lines in index order — this index is what set_cart_quantity/cart_update/cart_remove take.'}, 'currency': {'type': 'string'}, 'subtotal': {'type': 'number', 'description': 'Sum of price x qty over all lines, USD.'}, 'checkout_url': {'type': 'string', 'description': 'Cart page URL for the human.'}}}
set_colorway_primary
Set the face of a colorway set
Choose which variant of my set represents it in the catalog. Args: colorway_id, design_id.
Esquema de entrada
{'type': 'object', 'required': ['colorway_id', 'design_id'], 'properties': {'design_id': {'type': 'integer'}, 'colorway_id': {'type': 'integer'}}}
Esquema de salida
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'note': {'type': 'string'}, 'error': {'type': 'string'}, 'pitch': {'type': 'string', 'description': 'Designer-program pitch to relay to the user — present when is_partner is false.'}, 'primary': {'type': 'integer'}, 'colorway_id': {'type': 'integer'}, 'how_to_join': {'type': 'string', 'description': 'How to join the designer program — present when is_partner is false.'}}}
set_shipping_address
Set shipping address
Set the shipping address for this order (validated). Args: name, country, city, address, zip?, phone.
Idempotente
Esquema de entrada
{'type': 'object', 'required': ['name', 'country', 'city', 'address', 'phone'], 'properties': {'zip': {'type': 'string', 'description': 'Postal / ZIP code (optional where not used).'}, 'city': {'type': 'string', 'description': 'Destination city.'}, 'name': {'type': 'string', 'description': 'Recipient full name.'}, 'phone': {'type': 'string', 'description': 'Contact phone number for delivery.'}, 'address': {'type': 'string', 'description': 'Street address line.'}, 'country': {'type': 'string', 'description': 'Destination country.'}}}
Esquema de salida
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'error': {'type': 'string', 'description': 'Missing fields or empty cart.'}, 'shipping': {'type': 'object', 'properties': {'zip': {'type': 'string'}, 'city': {'type': 'string'}, 'name': {'type': 'string'}, 'phone': {'type': 'string'}, 'country': {'type': 'string'}, 'address_line': {'type': 'string'}, 'full_address': {'type': 'string'}}, 'description': 'Saved address snapshot.'}}}
set_shipping_method
Set shipping method
Choose a shipping method by its option_id (from get_shipping_options). Args: option_id.
Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'option_id': {'type': 'string', 'description': "Shipping option id from get_shipping_options (currently 'worldwide')."}}}
Esquema de salida
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'error': {'type': 'string', 'description': 'Unknown option_id or empty cart.'}, 'shipping_method': {'type': 'string'}}}
set_user_prefs
Save size/fit
Save the shopper's default size and/or fit so they don't re-enter it each time. Args: size (XS…5XL), fit (basic | oversized). Pass only what the user stated.
Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'fit': {'type': 'string', 'description': 'Fit preference: basic or oversized.'}, 'size': {'type': 'string', 'description': 'Default size: XS, S, M, L, XL, 2XL…5XL.'}}}
Esquema de salida
{'type': 'object', 'properties': {'fit': {'type': 'string'}, 'size': {'type': 'string'}, 'error': {'type': 'string'}}}
studio_credits
Check Studio credits
The user's Studio credit balance. Check before studio_generate (1 credit per generation, either engine; welcome bonus 20; every bought tee adds 20).
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {}}
Esquema de salida
{'type': 'object', 'properties': {'note': {'type': 'string'}, 'error': {'type': 'string'}, 'detail': {'type': 'string'}, 'balance': {'type': 'number', 'description': 'Current Studio credit balance.'}, 'studio_account': {'type': 'boolean', 'description': 'False if the user has no Studio account yet (first generate auto-creates one).'}}}
studio_generate
Generate custom print
Generate a CUSTOM t-shirt print from a text prompt (AI, takes 2-10 min). SPENDS THE ACCOUNT OWNER'S STUDIO CREDITS: tell them the cost and their balance and get a yes BEFORE calling this — never spend silently, and never spend to 'try something' on your own initiative. Credits are earned (20 free on signup, 20 with every tee bought), so a wasted one is a real loss to them. Free exception: preserve=true prints their own image as-is and costs nothing. IMPORTANT: first call studio_options and ask the human to pick placement + product (and optionally background); do NOT silently use defaults. Args: prompt (design description), product? (one of ['kids_basic_tshirt_boy', 'kids_basic_tshirt_girl', 'kids_oversize_tshirt_boy', 'kids_oversize_tshirt_girl', 'mens_basic_tshirt', 'mens_oversize_tshirt', 'womens_basic_tshirt', 'womens_oversize_tshirt']), background? (t-shirt background, one of ['washed-beige', 'washed-black', 'washed-blue', 'washed-brown', 'washed-gray', 'washed-green', 'washed-orange', 'washed-pink', 'washed-red', 'washed-yellow', 'watercolor-beige', 'watercolor-blue', 'watercolor-sky']), placement? (print size/position, one of ['portrait_extended', 'square_center', 'chest_small']), model? (nb2 default | gpt-image-2 — both 1 credit, different styles), image_url? (https link to the user's OWN image — used as style/subject reference), preserve? (true = print the user's image exactly as-is, no AI redraw — kids' drawings, own art; FREE, no credits; requires image_url). Returns print_id — poll studio_status until done.
Acceso externo
Esquema de entrada
{'type': 'object', 'required': ['prompt'], 'properties': {'model': {'type': 'string', 'description': 'Generation engine: nb2 (default) or gpt-image-2 — both 1 credit.'}, 'prompt': {'type': 'string', 'description': 'Text description of the design to generate.'}, 'product': {'type': 'string', 'description': 'Studio product base from studio_options (default mens_oversize_tshirt).'}, 'preserve': {'type': 'boolean', 'description': 'true = print the image exactly as-is, no AI redraw (free); requires image_url.'}, 'image_url': {'type': 'string', 'description': "https link to the user's OWN image, used as style/subject reference."}, 'placement': {'type': 'string', 'description': 'Print size/position: portrait_extended (default), square_center or chest_small.'}, 'background': {'type': 'string', 'description': 'T-shirt background choice (see studio_options backgrounds).'}}}
Esquema de salida
{'type': 'object', 'properties': {'note': {'type': 'string'}, 'error': {'type': 'string', 'description': 'e.g. not enough Studio credits, daily limit reached, invalid product.'}, 'detail': {'type': 'string'}, 'status': {'type': 'string'}, 'print_id': {'type': 'string', 'description': 'Generation id — poll studio_status with it.'}, 'tell_user': {'type': 'string', 'description': 'Say this to the account owner — what was spent from their balance and what is left.'}, 'topup_url': {'type': 'string', 'description': "Where the user can buy credits (present on 'not enough credits')."}, 'cost_credits': {'type': 'number', 'description': 'Credits spent on this generation.'}, 'signup_bonus': {'type': 'number'}, 'balance_after': {'type': 'number', 'description': 'Credits left after this generation.'}, 'balance_before': {'type': 'number'}, 'studio_account_created': {'type': 'boolean', 'description': 'Present when a Studio account was auto-created for the user.'}}}
studio_options
Custom print options
START HERE for any custom-print request: the menu of generation choices (print placements with plain-language descriptions, products, backgrounds, engines+costs). Present these to the human — at minimum ask which PLACEMENT and which PRODUCT they want — before calling studio_generate.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {}}
Esquema de salida
{'type': 'object', 'properties': {'note': {'type': 'string'}, 'models': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'label': {'type': 'string'}, 'default': {'type': 'boolean'}}}, 'description': 'Generation engines with cost notes.'}, 'products': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'label': {'type': 'string'}}}}, 'placements': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'label': {'type': 'string'}, 'description': {'type': 'string'}}}, 'description': 'Print size/position choices.'}, 'backgrounds': {'type': 'array', 'items': {'type': 'string'}}}}
studio_status
Check print generation
Check a custom print generation. Args: print_id (from studio_generate). When done returns preview_url — show it to the human.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['print_id'], 'properties': {'print_id': {'type': 'string', 'description': 'Generation id returned by studio_generate.'}}}
Esquema de salida
{'type': 'object', 'properties': {'note': {'type': 'string'}, 'error': {'type': 'string', 'description': 'Generation failure reason (credits are refunded).'}, 'detail': {'type': 'string'}, 'status': {'type': 'string', 'description': "Generation state; 'done' and 'failed' are terminal."}, 'print_id': {'type': 'string'}, 'design_url': {'type': 'string', 'description': 'Shareable Studio design page (when done) — the link to SHARE with the human.'}, 'preview_url': {'type': 'string', 'description': 'Raw print image (when done) — embed/attach it so the human sees the print in chat.'}}}
submit_design
Submit artwork
Send one of the designer's own artworks for moderation. TWO inputs, same path: either artwork files — front/back accept a public image URL OR an upload_id from designer_upload_slot — or session_id of a FINISHED Studio session of theirs (generated with studio_generate; no need to download the print, we fetch it server-side). Args: name (required), front OR session_id (one of them), back?, layout? ('front_back' default, or 'r10' for a ready print-side file), note?, batch? (same string across a bulk run so the moderator sees them as one batch). Minimum 2048px on the short side. IMPORTANT for the designer: this queues the artwork for moderation — catalog listing follows production and is not instant.
Esquema de entrada
{'type': 'object', 'required': ['name', 'front'], 'properties': {'back': {'type': 'string', 'description': 'Optional second side: URL or upload_id.'}, 'name': {'type': 'string', 'description': 'Design name the moderator will see.'}, 'note': {'type': 'string', 'description': 'Anything the moderator should know.'}, 'batch': {'type': 'string', 'description': 'Group id for a bulk upload.'}, 'front': {'type': 'string', 'description': 'Image URL or upload_id. Omit when passing session_id.'}, 'layout': {'type': 'string', 'description': "'front_back' (default) or 'r10'."}, 'session_id': {'type': 'string', 'description': 'Finished Studio session of this designer (print_id from studio_generate). Alternative to front.'}}}
Esquema de salida
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'note': {'type': 'string'}, 'error': {'type': 'string'}, 'pitch': {'type': 'string', 'description': 'Designer-program pitch to relay to the user — present when is_partner is false.'}, 'status': {'type': 'string'}, 'upload_id': {'type': 'integer'}, 'is_partner': {'type': 'boolean'}, 'how_to_join': {'type': 'string', 'description': 'How to join the designer program — present when is_partner is false.'}}}
view_cart
View cart
Show the current contents of the user's cart (the same cart they see in the browser when signed in).
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {}}
Esquema de salida
{'type': 'object', 'properties': {'error': {'type': 'string', 'description': 'Present instead of a cart when the call failed (bad index, unavailable size, ...).'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'qty': {'type': 'integer'}, 'code': {'type': 'string'}, 'size': {'type': 'string'}, 'price': {'type': 'number'}, 'title': {'type': 'string'}, 'custom': {'type': 'boolean', 'description': 'True when the line is a user-generated custom print.'}, 'fabric': {'type': 'string'}, 'good_id': {'type': 'integer'}, 'product': {'type': 'string'}, 'currency': {'type': 'string'}}}, 'description': 'Cart lines in index order — this index is what set_cart_quantity/cart_update/cart_remove take.'}, 'currency': {'type': 'string'}, 'subtotal': {'type': 'number', 'description': 'Sum of price x qty over all lines, USD.'}, 'checkout_url': {'type': 'string', 'description': 'Cart page URL for the human.'}}}
Añadido
set_colorway_primary
17 de September de 2026 a las 07:58
Añadido
designer_remove_from_colorway
17 de September de 2026 a las 07:58
Añadido
designer_add_to_colorway
17 de September de 2026 a las 07:58
Añadido
create_colorway
17 de September de 2026 a las 07:58
Añadido
designer_colorways
17 de September de 2026 a las 07:58
Añadido
designer_submissions
17 de September de 2026 a las 07:58
Añadido
designer_uploads
17 de September de 2026 a las 07:58
Añadido
submit_design
17 de September de 2026 a las 07:58
Añadido
designer_upload_slot
17 de September de 2026 a las 07:58
Añadido
designer_designs
17 de September de 2026 a las 07:58
Añadido
designer_stats
17 de September de 2026 a las 07:58
Añadido
add_custom_to_cart
17 de September de 2026 a las 07:58
Añadido
studio_credits
17 de September de 2026 a las 07:58
Añadido
studio_status
17 de September de 2026 a las 07:58
Añadido
studio_generate
17 de September de 2026 a las 07:58
Añadido
studio_options
17 de September de 2026 a las 07:58
Añadido
prepare_order
17 de September de 2026 a las 07:58
Añadido
get_order_preview
17 de September de 2026 a las 07:58
Añadido
set_shipping_method
17 de September de 2026 a las 07:58
Añadido
get_shipping_options
17 de September de 2026 a las 07:58
Añadido
set_shipping_address
17 de September de 2026 a las 07:58
Añadido
get_saved_addresses
17 de September de 2026 a las 07:58
Añadido
set_user_prefs
17 de September de 2026 a las 07:58
Añadido
get_user_prefs
17 de September de 2026 a las 07:58
Añadido
remove_promo
17 de September de 2026 a las 07:58
Añadido
apply_promo
17 de September de 2026 a las 07:58
Añadido
cart_remove
17 de September de 2026 a las 07:58
Añadido
cart_update
17 de September de 2026 a las 07:58
Añadido
order_status
17 de September de 2026 a las 07:58
Añadido
checkout_link
17 de September de 2026 a las 07:58