Scalable Press Mockup API
Render product mockups that preview a design applied to a product on the v3 mockup surface, for building customer-facing previews before a quote or order is placed.
Render product mockups that preview a design applied to a product on the v3 mockup surface, for building customer-facing previews before a quote or order is placed.
openapi: 3.0.3
info:
title: Scalable Press API
description: >-
The Scalable Press API is a REST interface to a print-on-demand and
fulfillment platform for custom apparel, accessories, and promotional
products. It lets developers browse a wholesale blank-and-printed product
catalog, generate price quotes (product, printing, and shipping costs),
place and manage print-and-ship orders, track fulfillment through order and
item events, create designs and product mockups, and retrieve billing
invoices. Authentication uses HTTP Basic auth - your private API key is
supplied as the password (the username is left blank). The API spans two
versioned surfaces - v2 for product, quote, order, design, customization,
and billing, and v3 for event and mockup - both served from
https://api.scalablepress.com.
version: '2.0'
contact:
name: Scalable Press
url: https://scalablepress.com/docs/
servers:
- url: https://api.scalablepress.com
description: Scalable Press API (v2 and v3 paths)
security:
- basicAuth: []
tags:
- name: Product
description: Product catalog, categories, availability, and item details.
- name: Quote
description: Standard and bulk price quotes including shipping.
- name: Order
description: Place and manage print-and-ship orders.
- name: Event
description: Order and item lifecycle events (v3).
- name: Design
description: Reusable design objects describing artwork and placement.
- name: Customization
description: Available customization options.
- name: Mockup
description: Product mockup rendering (v3).
- name: Billing
description: Invoices and payments.
paths:
/v2/categories:
get:
operationId: listCategories
tags:
- Product
summary: List product categories
description: Lists all product categories in the Scalable Press catalog.
responses:
'200':
description: A list of product categories.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Category'
'401':
$ref: '#/components/responses/Unauthorized'
/v2/categories/{categoryId}:
parameters:
- $ref: '#/components/parameters/CategoryId'
get:
operationId: listCategoryProducts
tags:
- Product
summary: List products in a category
description: Lists the products that belong to a given category.
responses:
'200':
description: The category and its products.
content:
application/json:
schema:
$ref: '#/components/schemas/Category'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/v2/products/{productId}:
parameters:
- $ref: '#/components/parameters/ProductId'
get:
operationId: getProduct
tags:
- Product
summary: List product information
description: Retrieves detailed information about a single product.
responses:
'200':
description: The requested product.
content:
application/json:
schema:
$ref: '#/components/schemas/Product'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/v2/products/{productId}/availability:
parameters:
- $ref: '#/components/parameters/ProductId'
get:
operationId: getProductAvailability
tags:
- Product
summary: List product availability
description: Retrieves per-color and per-size stock availability for a product.
responses:
'200':
description: Availability by color and size.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/v2/products/{productId}/items:
parameters:
- $ref: '#/components/parameters/ProductId'
get:
operationId: getProductItems
tags:
- Product
summary: List detailed item information
description: >-
Retrieves detailed item-level information (color, size, SKU, weight, and
pricing) for a product's individual variants.
responses:
'200':
description: A list of product items.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ProductItem'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/v2/quote:
post:
operationId: createQuote
tags:
- Quote
summary: Standard quote
description: >-
Requests a price quote for a print-and-ship job, itemizing product,
printing, and shipping costs. Custom shipping methods may be selected
per item via the shipping feature.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteRequest'
responses:
'200':
description: The generated quote.
content:
application/json:
schema:
$ref: '#/components/schemas/Quote'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/ValidationError'
/v2/quote/bulk:
post:
operationId: createBulkQuote
tags:
- Quote
summary: Bulk quote
description: >-
Requests a price quote for many items at once. Individual items in a
bulk order may use different custom shipping methods, or none at all.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteRequest'
responses:
'200':
description: The generated bulk quote.
content:
application/json:
schema:
$ref: '#/components/schemas/Quote'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/ValidationError'
/v2/quote/{orderToken}:
parameters:
- $ref: '#/components/parameters/OrderToken'
get:
operationId: getQuote
tags:
- Quote
summary: Retrieve quote
description: Retrieves a previously generated quote by its order token.
responses:
'200':
description: The requested quote.
content:
application/json:
schema:
$ref: '#/components/schemas/Quote'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/v2/order:
get:
operationId: listOrders
tags:
- Order
summary: Retrieve all orders
description: Lists all orders on the account.
responses:
'200':
description: A list of orders.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Order'
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createOrder
tags:
- Order
summary: Place order
description: >-
Places an order from a quote order token. The order may be placed on
account credit; orders are held when account credit is insufficient.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrderRequest'
responses:
'200':
description: The placed order.
content:
application/json:
schema:
$ref: '#/components/schemas/Order'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/ValidationError'
/v2/order/{orderId}:
parameters:
- $ref: '#/components/parameters/OrderId'
get:
operationId: getOrder
tags:
- Order
summary: Retrieve single order
description: Retrieves a single order by its ID.
responses:
'200':
description: The requested order.
content:
application/json:
schema:
$ref: '#/components/schemas/Order'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: cancelOrder
tags:
- Order
summary: Cancel entire order
description: Cancels an entire order.
responses:
'200':
description: Cancellation confirmation.
content:
application/json:
schema:
$ref: '#/components/schemas/Order'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/v2/order/{orderId}/reprint:
parameters:
- $ref: '#/components/parameters/OrderId'
post:
operationId: reprintOrder
tags:
- Order
summary: Reprint order
description: Reprints a previously placed order.
requestBody:
required: false
content:
application/json:
schema:
type: object
additionalProperties: true
responses:
'200':
description: The reprint order.
content:
application/json:
schema:
$ref: '#/components/schemas/Order'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/v2/order/{orderId}/changeAddress:
parameters:
- $ref: '#/components/parameters/OrderId'
post:
operationId: changeOrderAddress
tags:
- Order
summary: Change order address
description: Changes the shipping address for an order.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Address'
responses:
'200':
description: The updated order.
content:
application/json:
schema:
$ref: '#/components/schemas/Order'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationError'
/v3/event:
get:
operationId: queryEvents
tags:
- Event
summary: Query events
description: >-
Queries order and item lifecycle events - such as order, validated,
paid, unpaid, printing, shipped, cancelled, address-changed, expired,
and hold - optionally filtered by order and event type.
parameters:
- name: orderId
in: query
required: false
description: Filter events for a specific order.
schema:
type: string
- name: type
in: query
required: false
description: Filter by event type.
schema:
type: string
responses:
'200':
description: A list of events.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Event'
'401':
$ref: '#/components/responses/Unauthorized'
/v3/event/{eventId}:
parameters:
- name: eventId
in: path
required: true
description: The ID of the event.
schema:
type: string
get:
operationId: getEvent
tags:
- Event
summary: Retrieve single event
description: Retrieves a single event by its ID.
responses:
'200':
description: The requested event.
content:
application/json:
schema:
$ref: '#/components/schemas/Event'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/v2/design:
post:
operationId: createDesign
tags:
- Design
summary: Create design object
description: Creates a reusable design object describing artwork and its placement.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Design'
responses:
'200':
description: The created design.
content:
application/json:
schema:
$ref: '#/components/schemas/Design'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/ValidationError'
/v2/design/{designId}:
parameters:
- name: designId
in: path
required: true
description: The ID of the design.
schema:
type: string
get:
operationId: getDesign
tags:
- Design
summary: Retrieve design object
description: Retrieves a design object by its ID.
responses:
'200':
description: The requested design.
content:
application/json:
schema:
$ref: '#/components/schemas/Design'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deleteDesign
tags:
- Design
summary: Delete design
description: Deletes a design object by its ID.
responses:
'200':
description: Deletion confirmation.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/v2/customization:
get:
operationId: getCustomizations
tags:
- Customization
summary: Retrieve customizations
description: Retrieves the available customization options.
responses:
'200':
description: The available customizations.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
/v3/mockup:
post:
operationId: createMockup
tags:
- Mockup
summary: Create mockup
description: Renders a product mockup previewing a design applied to a product.
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: true
responses:
'200':
description: The rendered mockup.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/ValidationError'
/v2/billing/invoice:
get:
operationId: listInvoices
tags:
- Billing
summary: List invoices
description: Lists the billing invoices on the account.
responses:
'200':
description: A list of invoices.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Invoice'
'401':
$ref: '#/components/responses/Unauthorized'
/v2/billing/invoice/{invoiceId}:
parameters:
- name: invoiceId
in: path
required: true
description: The ID of the invoice.
schema:
type: string
get:
operationId: getInvoice
tags:
- Billing
summary: Retrieve invoice
description: Retrieves a single invoice by its ID.
responses:
'200':
description: The requested invoice.
content:
application/json:
schema:
$ref: '#/components/schemas/Invoice'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/v2/billing/invoice/{invoiceId}/pay/paypal:
parameters:
- name: invoiceId
in: path
required: true
description: The ID of the invoice.
schema:
type: string
post:
operationId: payInvoicePaypal
tags:
- Billing
summary: Pay invoice with PayPal
description: Pays an invoice via PayPal.
responses:
'200':
description: Payment result.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
components:
securitySchemes:
basicAuth:
type: http
scheme: basic
description: >-
HTTP Basic authentication. Supply your private Scalable Press API key as
the password; the username is left blank.
parameters:
CategoryId:
name: categoryId
in: path
required: true
description: The ID of the product category.
schema:
type: string
ProductId:
name: productId
in: path
required: true
description: The ID of the product.
schema:
type: string
OrderToken:
name: orderToken
in: path
required: true
description: The order token returned by a quote.
schema:
type: string
OrderId:
name: orderId
in: path
required: true
description: The ID of the order.
schema:
type: string
responses:
Unauthorized:
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: The requested resource was not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
ValidationError:
description: The request payload failed validation.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Error:
type: object
properties:
statusCode:
type: integer
message:
type: string
issues:
type: array
items:
type: object
additionalProperties: true
Category:
type: object
properties:
categoryId:
type: string
name:
type: string
products:
type: array
items:
$ref: '#/components/schemas/Product'
Product:
type: object
properties:
id:
type: string
name:
type: string
type:
type: string
brand:
type: string
colors:
type: array
items:
type: string
sizes:
type: array
items:
type: string
properties:
type: object
additionalProperties: true
ProductItem:
type: object
properties:
id:
type: string
color:
type: string
size:
type: string
sku:
type: string
weight:
type: number
price:
type: number
QuoteRequest:
type: object
properties:
items:
type: array
items:
type: object
additionalProperties: true
address:
$ref: '#/components/schemas/Address'
features:
type: object
description: >-
Optional per-quote features. The shipping feature selects custom
shipping methods using carrier service codes such as US-FC, UPS-GND,
FDX-GND, and DHL-GM.
additionalProperties: true
Quote:
type: object
properties:
orderToken:
type: string
total:
type: number
items:
type: array
items:
type: object
additionalProperties: true
shipping:
type: object
additionalProperties: true
OrderRequest:
type: object
required:
- orderToken
properties:
orderToken:
type: string
name:
type: string
address:
$ref: '#/components/schemas/Address'
Order:
type: object
properties:
orderId:
type: string
status:
type: string
items:
type: array
items:
type: object
additionalProperties: true
address:
$ref: '#/components/schemas/Address'
events:
type: array
items:
$ref: '#/components/schemas/Event'
Address:
type: object
properties:
name:
type: string
address1:
type: string
address2:
type: string
city:
type: string
state:
type: string
zip:
type: string
country:
type: string
Event:
type: object
properties:
eventId:
type: string
type:
type: string
description: >-
Event type such as order, validated, paid, unpaid, printing,
shipped, cancelled, address-changed, expired, or hold.
orderId:
type: string
timestamp:
type: string
format: date-time
data:
type: object
additionalProperties: true
Design:
type: object
properties:
designId:
type: string
sides:
type: object
additionalProperties: true
name:
type: string
Invoice:
type: object
properties:
invoiceId:
type: string
status:
type: string
total:
type: number
currency:
type: string
createdAt:
type: string
format: date-time