Mugs
Loading product details
Mugs
Loading product details
Welcome to the Papello Print on Demand API documentation. Our API provides comprehensive print-on-demand services for businesses and developers, allowing you to create quotes, manage orders, handle shipping, and integrate with various e-commerce platforms.
Create your free account at dash.papello.com to access your API keys and manage your orders.
Generate both test and live API keys from your dashboard to start making authenticated requests.
Start with a simple quote request to understand the API structure and response format.
Papello provides separate test and live environments to ensure safe development and testing before going into production.
API Key Prefix: test_
Use for development and testing. Orders placed with test keys are not fulfilled and no charges are made.
API Key Prefix: live_
Use for production orders. Orders placed with live keys are processed and fulfilled.
All API requests require authentication using Bearer tokens. You'll receive both test and live API keys upon registration in your Papello Dashboard.
The Orders API allows you to create, retrieve, and manage print orders with comprehensive product and shipping details.
Endpoint: POST /v1/orders
Note: The response includes a holdUntil field showing when the order will automatically be released to production if no manual release occurs. Release times can be set in the order settings in the dashboard.
Endpoint: POST /v1/orders
Create an order containing multiple different products in a single order.
Endpoint: POST /v1/orders
Create an order for products that have more than one print area (e.g. front + back, inside card).
Endpoint: GET /v1/orders
Manage your orders with various actions including updates, releases, and cancellations.
Endpoint: PUT /v1/orders/{orderId}
Update recipient shipping details on a pending order.
Endpoint: PUT /v1/orders/{orderId}
Update the shipping method on a pending order.
Endpoint: POST /v1/orders/{orderId}/release
Release a pending order to production. Orders can be set to hold for a specified time to allow for changes before automatic release. Release times can be set in the order settings in the dashboard.
Endpoint: POST /v1/orders/{orderId}/cancel
Cancel a pending order. Only orders in "pending" status can be cancelled.
Generate accurate pricing quotes for potential orders without payment processing. Includes pricing breakdown, shipping costs, taxes, and duties.
Endpoint: POST /v1/quote
Endpoint: POST /v1/quote
Get pricing for multiple different products in a single quote request.
Browse the Papello product catalogue programmatically. These read-only endpoints let you discover collections, list products within a collection, and retrieve enabled variation SKUs for a product.
Use this three-step flow before placing orders or generating quotes:
POST /v1/quote or POST /v1/ordersAll catalogue endpoints require the same Bearer token authentication as the rest of the public API. Both test_ and live_ API keys work identically for catalogue reads.
Rate limits apply per API key owner (not per IP):
| Endpoint | Limit |
|---|---|
GET /v1/catalogue/collections | 60 requests / minute |
GET /v1/catalogue/collections/:slug/products | 30 requests / minute |
GET /v1/catalogue/products/:slug/variations | 30 requests / minute |
If you exceed the limit, the API returns HTTP 429 with:
Responses include a Cache-Control header allowing clients to cache for up to 5 minutes:
Catalogue data is also cached server-side for 5 minutes, so repeated requests for the same resource are fast and stable.
Collection and product :slug path parameters are the SEO canonical URL slugs from the Papello CMS (for example mugs, greeting-cards, 12oz-enamel-mug). They are not numeric IDs.
There is no global "list all products" or "list all variations" endpoint by design — products are always scoped to a collection, and variations are always scoped to a single product.
Endpoint: GET /v1/catalogue/collections
Returns all product collections in the Papello catalogue.
| Field | Type | Description |
|---|---|---|
data | array | List of collections |
data[].slug | string | Collection slug — use in GET /v1/catalogue/collections/:slug/products |
data[].title | string | Display name |
data[].image | object | null | Collection image URLs |
data[].image.url | string | Full-size image URL |
data[].image.thumbnail | string | Thumbnail image URL |
Endpoint: GET /v1/catalogue/collections/:slug/products
Returns products belonging to a single collection. Variations/SKUs are not included — use the variations endpoint for those.
| Parameter | Description |
|---|---|
slug | Collection slug from GET /v1/catalogue/collections (e.g. mugs) |
| Field | Type | Description |
|---|---|---|
data | array | Products in the collection |
data[].slug | string | Product slug — use in GET /v1/catalogue/products/:slug/variations |
data[].title | string | Product name |
data[].subtitle | string | null | Short product description |
data[].thumbnail | string | null | Product thumbnail image URL |
collection.title | string | Parent collection name |
collection.slug | string | Parent collection slug |
HTTP 404 if the collection slug does not exist:
Endpoint: GET /v1/catalogue/products/:slug/variations
Returns enabled variations (SKUs) for a single product. Use the returned sku values with POST /v1/quote, POST /v1/orders, or GET /validate-sku.
| Parameter | Description |
|---|---|
slug | Product slug from GET /v1/catalogue/collections/:slug/products (e.g. 12oz-enamel-mug) |
Products with more than one print area (e.g. greeting cards with front/back and inside) include a multiPrintArea array. When placing orders for these products, use printReadyFiles instead of a single printReadyFile — see Create Order with Multiple Print Areas in the Orders section.
| Field | Type | Description |
|---|---|---|
data | array | Enabled variations for the product |
data[].sku | string | Papello SKU — use in quotes and orders |
data[].description | string | Variation description |
data[].printArea | object | null | Primary artwork dimensions in pixels |
data[].printArea.artworkWidth | number | Artwork width (px) |
data[].printArea.artworkHeight | number | Artwork height (px) |
data[].multiPrintArea | array | Present when the product has multiple print views |
data[].multiPrintArea[].name | string | Print area name (matches order printReadyFiles[].name) |
data[].multiPrintArea[].additionalPrintFee | number | null | Extra charge for this print area, if any |
data[].multiPrintArea[].requiredView | boolean | Whether this view is required |
data[].multiPrintArea[].artworkWidth | number | null | View-specific width (px) |
data[].multiPrintArea[].artworkHeight | number | null | View-specific height (px) |
product.title | string | Parent product name |
product.slug | string | Parent product slug |
HTTP 404 if the product slug does not exist:
These endpoints complement Product Details (SKU Validation) (GET /validate-sku?sku={sku}):
| Catalogue API | SKU Validation | |
|---|---|---|
| Purpose | Browse and discover products | Validate a specific SKU before ordering |
| Scope | Collections → products → variations | Single SKU lookup |
| Returns pricing | No | Yes (Price, subscription discount) |
| Returns print areas | Yes (dimensions + multi-area names) | Yes (detailed printAreas array) |
| Best for | Building product pickers, integrations, storefronts | Pre-flight checks before order creation |
Recommended flow:
GET /v1/catalogue/collectionsGET /v1/catalogue/collections/:slug/productsGET /v1/catalogue/products/:slug/variationsGET /validate-sku?sku={sku} — optional, for pricing and detailed print-area metadataPOST /v1/quote or POST /v1/orders{ "success": true, "data": ... } wrapper).Validate product SKUs and retrieve detailed product information before placing orders.
Endpoint: GET /validate-sku?sku={variationSku}
Validate a product SKU and get detailed information including print areas and pricing.
All product SKUs should be validated before creating orders. Invalid SKUs will result in order creation failures.
PP-EAM-5x7- 5x7 Enhanced Archival MattePP-CF-MOUNT-PSM-A4-BF- A4 Black Frame MountPP-ENAMUG-12OZ-W- 12oz White Enamel MugReceive real-time notifications about order status changes and important events in your order lifecycle.
Configure webhook endpoints in your Papello Dashboard to receive event notifications.
order.shipped- When order is shipped with full tracking informationTrack and monitor order progress through various status stages from creation to delivery.
Endpoint: GET /v1/orders/{orderId}
Order created, updates can be made before processing
Order held for manual review
Order being processed
Order in production
Order has been printed
Order finished and shipped
Order cancelled
The Papello API uses conventional HTTP response codes and returns detailed error information to help you debug issues.
200 Success400 Bad Request (invalid parameters)401 Unauthorized (invalid API key)403 Forbidden (insufficient permissions)404 Not Found429 Too Many Requests (rate limit exceeded)500 Internal Server ErrorINVALID_API_KEYThe provided API key is invalid or expired
INVALID_SKUThe provided SKU does not exist
INVALID_SHIPPING_METHODThe shipping method is not available for the destination
ORDER_NOT_FOUNDThe specified order ID does not exist
ORDER_NOT_UPDATEABLEThe order cannot be updated in its current status
RATE_LIMIT_EXCEEDEDCatalogue (or other throttled) endpoint called too frequently for your API key
Understanding the complete order lifecycle from creation to delivery.
Browse the catalogue to find a valid SKU:
Generate pricing with POST /v1/quote
Place order with POST /v1/orders
Order moves through: pending → processing → completed
Monitor with GET /v1/orders/{orderId}
Receive webhook with tracking information
Customer receives product, order marked as delivered
Get help with API integration, troubleshooting, and technical questions.
AUD, BRL, GBP, CAD, DKK, EUR, HKD, INR, JPY, MYR, MXN, NZD, NOK, SGD, ZAR, KRW, SEK, CHF, THB, AED, USD
Default: New accounts default to GBP currency. You can change this in your account settings.