SPOD Stock API
Check inventory availability across product variants. Retrieve stock for all variants or for a specific SKU so you can surface availability in your shop before an article is ordered.
Check inventory availability across product variants. Retrieve stock for all variants or for a specific SKU so you can surface availability in your shop before an article is ordered.
openapi: 3.0.3
info:
title: SPOD (Spreadconnect) Fulfillment REST API
version: '1.0'
description: >-
REST API for SPOD (Spreadshirt Print-On-Demand), now branded Spreadconnect.
Create customizable articles from designs, place and manage print-on-demand
orders, choose shipping types and track shipments, browse the catalog of
product types, check stock, and subscribe to webhook notifications for
article, order, and shipment events. All requests are authenticated with a
per-account API access token sent in the X-SPOD-ACCESS-TOKEN header. This
document is an API Evangelist reference grounded in SPOD's published
OpenAPI and developer documentation; verify request/response schemas against
the live docs before production use.
contact:
name: SPOD
url: https://www.spod.com
email: business@spod.com
termsOfService: https://faq.spod.com/hc/en-us/articles/360020630280
servers:
- url: https://rest.spod.com
description: Production
- url: https://rest.spreadconnect-staging.app
description: Staging / test environment
security:
- access_token: []
tags:
- name: Common
- name: Articles
- name: Orders
- name: Shipping
- name: Product Types
- name: Stock
- name: Subscriptions
paths:
/authentication:
get:
tags:
- Common
operationId: authenticationInfo
summary: Verify the API access token
description: Returns authentication information for the supplied access token, used to confirm credentials are valid.
responses:
'200':
description: Authentication information.
'401':
description: Missing or invalid access token.
/articles:
get:
tags:
- Articles
operationId: getArticles
summary: List articles
description: Retrieve all articles for the account, paginated.
parameters:
- name: limit
in: query
required: false
schema:
type: integer
- name: offset
in: query
required: false
schema:
type: integer
responses:
'200':
description: A paginated list of articles.
post:
tags:
- Articles
operationId: createArticle
summary: Create an article
description: Create a new customizable article by combining a design with a product type and view.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ArticleRequest'
responses:
'201':
description: The created article.
/articles/{articleId}:
get:
tags:
- Articles
operationId: getArticle
summary: Get an article
parameters:
- $ref: '#/components/parameters/ArticleId'
responses:
'200':
description: The requested article.
'404':
description: Article not found.
delete:
tags:
- Articles
operationId: deleteArticle
summary: Delete an article
parameters:
- $ref: '#/components/parameters/ArticleId'
responses:
'204':
description: Article deleted.
/orders:
post:
tags:
- Orders
operationId: createOrder
summary: Create an order
description: >-
Create a new order. In the simple flow you send a preferred shipping
type and state CONFIRMED in one request; in the controlled flow you
create the order with mandatory fields, then set the shipping type and
confirm it in later requests.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrderRequest'
responses:
'201':
description: The created order.
/orders/{orderId}:
get:
tags:
- Orders
operationId: getOrder
summary: Get an order
parameters:
- $ref: '#/components/parameters/OrderId'
responses:
'200':
description: The requested order.
'404':
description: Order not found.
put:
tags:
- Orders
operationId: updateOrder
summary: Update an order
parameters:
- $ref: '#/components/parameters/OrderId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrderRequest'
responses:
'200':
description: The updated order.
/orders/{orderId}/confirm:
post:
tags:
- Orders
operationId: confirmOrder
summary: Confirm an order
description: Confirm an order so it enters production. A confirmed order can no longer be edited.
parameters:
- $ref: '#/components/parameters/OrderId'
responses:
'200':
description: The confirmed order.
/orders/{orderId}/cancel:
post:
tags:
- Orders
operationId: cancelOrder
summary: Cancel an order
description: Attempt to cancel an order. Cancellation only succeeds while the order has not yet entered production.
parameters:
- $ref: '#/components/parameters/OrderId'
responses:
'200':
description: Cancellation result.
/orders/{orderId}/shippingTypes:
get:
tags:
- Shipping
operationId: getShippingTypes
summary: Get available shipping types for an order
description: List the shipping types available for the order, including price and estimated delivery time.
parameters:
- $ref: '#/components/parameters/OrderId'
responses:
'200':
description: Available shipping types.
/orders/{orderId}/shippingType:
post:
tags:
- Shipping
operationId: setShippingType
summary: Set the shipping type for an order
parameters:
- $ref: '#/components/parameters/OrderId'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
shippingType:
type: integer
description: The identifier of the chosen shipping type.
responses:
'200':
description: The order with the shipping type set.
/orders/{orderId}/shipments:
get:
tags:
- Shipping
operationId: getShipments
summary: Get shipments for an order
description: Retrieve the shipment records for an order, including carrier and tracking details once dispatched.
parameters:
- $ref: '#/components/parameters/OrderId'
responses:
'200':
description: Shipment records for the order.
/productTypes:
get:
tags:
- Product Types
operationId: getProductTypes
summary: List product types
description: List the catalog of available product types (article types) that articles can be built from.
responses:
'200':
description: A list of product types.
/productTypes/{productTypeId}:
get:
tags:
- Product Types
operationId: getProductType
summary: Get a product type
description: Retrieve a product type with its sizes, colors, views, and printable areas.
parameters:
- name: productTypeId
in: path
required: true
schema:
type: integer
responses:
'200':
description: The requested product type.
'404':
description: Product type not found.
/stock:
get:
tags:
- Stock
operationId: getStocks
summary: List stock for all variants
description: Retrieve inventory availability across all product variants.
responses:
'200':
description: Stock across variants.
/stock/{sku}:
get:
tags:
- Stock
operationId: getStock
summary: Get stock for a SKU
parameters:
- name: sku
in: path
required: true
schema:
type: string
responses:
'200':
description: Stock for the given SKU.
'404':
description: SKU not found.
/subscriptions:
get:
tags:
- Subscriptions
operationId: getSubscriptions
summary: List subscriptions
description: List the account's active webhook subscriptions.
responses:
'200':
description: A list of subscriptions.
post:
tags:
- Subscriptions
operationId: createSubscription
summary: Create a subscription
description: >-
Register a webhook subscription. Notifications are delivered by POST
following an at-least-once model and must be acknowledged with a 202
status, a response within 8 seconds, and the payload [accepted]. If a
secret is set, notifications carry an X-SPRD-SIGNATURE header (a Base64
SHA256 HMAC over the request body) for authenticity verification.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SubscriptionRequest'
responses:
'201':
description: The created subscription.
/subscriptions/{subscriptionId}:
delete:
tags:
- Subscriptions
operationId: deleteSubscription
summary: Delete a subscription
parameters:
- name: subscriptionId
in: path
required: true
schema:
type: integer
responses:
'204':
description: Subscription deleted.
/orders/{orderId}/simulate/order-cancelled:
post:
tags:
- Subscriptions
operationId: simulateOrderCancelledEvent
summary: Simulate an Order.cancelled event
description: Trigger a test Order.cancelled webhook notification for the given order (test/staging use).
parameters:
- $ref: '#/components/parameters/OrderId'
responses:
'200':
description: Simulated event dispatched.
/orders/{orderId}/simulate/order-processed:
post:
tags:
- Subscriptions
operationId: simulateOrderProcessedEvent
summary: Simulate an Order.processed event
description: Trigger a test Order.processed webhook notification for the given order (test/staging use).
parameters:
- $ref: '#/components/parameters/OrderId'
responses:
'200':
description: Simulated event dispatched.
/orders/{orderId}/simulate/shipment-sent:
post:
tags:
- Subscriptions
operationId: simulateShipmentSentEvent
summary: Simulate a Shipment.sent event
description: Trigger a test Shipment.sent webhook notification for the given order (test/staging use).
parameters:
- $ref: '#/components/parameters/OrderId'
responses:
'200':
description: Simulated event dispatched.
components:
securitySchemes:
access_token:
type: apiKey
in: header
name: X-SPOD-ACCESS-TOKEN
description: >-
Per-account API access token generated in the SPOD / Spreadconnect web
application. Send it as a header on every request.
parameters:
ArticleId:
name: articleId
in: path
required: true
schema:
type: integer
OrderId:
name: orderId
in: path
required: true
schema:
type: integer
schemas:
ArticleRequest:
type: object
description: Article creation payload. Refer to the live SPOD docs for the full schema.
properties:
title:
type: string
description:
type: string
productTypeId:
type: integer
configurations:
type: array
items:
type: object
OrderRequest:
type: object
description: Order payload. Refer to the live SPOD docs for the full schema.
properties:
orderItems:
type: array
items:
type: object
shipping:
type: object
billingAddress:
type: object
state:
type: string
enum:
- NEW
- CONFIRMED
SubscriptionRequest:
type: object
description: Webhook subscription payload.
properties:
eventType:
type: string
description: The event to subscribe to (for example Article.added, Order.processed, Order.cancelled, Shipment.sent).
url:
type: string
format: uri
description: The endpoint that will receive POST notifications.
secret:
type: string
description: Optional secret used to compute the X-SPRD-SIGNATURE HMAC.