---
# System prepended metadata

title: Cimpress Open Partner Integration
tags: [Cimpress-Open, Cimpress]

---

# Cimpress Open Integration Guide

## 1. Overview

Cimpress Open is a unified integration platform that connects partners seamlessly with Cimpress Mass Customisation Platform (MCP). It simplifies order ingestion by removing the need for direct MCP integrations, ensuring smooth order processing, real-time status updates, flexible customization, and scalable growth.

## 2. Key Business Benefits

🔌 **Seamless Integration**
Cimpress Open enables your systems to inject orders directly into the Cimpress network through customized solutions and secure API, ensuring frictionless onboarding without complex technical rework.

🕒 **Near Real-Time Visibility**
Receive near real-time order status updates on your registered API callbacks, giving your businesses and customers clear visibility and confidence at every step.

🔒 **Secure & Scalable**
Built on an event-driven architecture, the platform scales with your business. Its modular and secure design ensures flexibility, privacy, and growth with minimal disruption, avoiding the noisy neighbor problem through isolated pipelines.

---

## 3. Capabilities

* **Secure Order Ingestion:**
  Provides a single, secure HTTPS endpoint for receiving partner orders. The platform validates, transforms, and automatically routes orders to the correct fulfillment provider.

* **Automated Status Callbacks:**
  Proactive, real-time status updates are pushed to your registered API endpoint (webhook). This includes "In Production" status and "Shipped" status with a tracking URL.

* **Centralized Authentication:**
  All API communication is secured using the OAuth 2.0 Client Credentials flow for server-to-server authentication.

---

## 4. How It Works

![image](https://hackmd.io/_uploads/Skl0QPHg-e.png)

The integration process includes two key stages: a **secure credential setup** and an **order processing flow** that enables seamless connectivity between partner systems and Cimpress Open.

### 4.1. Setup: Credential Management

All integrations with Cimpress Open are secured using the **OAuth 2.0 Client Credentials Flow** ensuring that only authorized systems access Cimpress Open APIs.

* The designated technical contact of the partner organization is invited and granted access to the Cimpress Authentication Portal, where API credentials can be managed and rotated.
* Partners must securely store credentials within their systems and rotate them before they expire.

### 4.2. Partner → Cimpress Open

This is the first step in the order flow. Your system authenticates using its credentials to get a short-lived Access Token ([see 5.1 Authentication API](#authentication-api)). You then use this token in the `Authorization` header to submit the new order to your dedicated API endpoint ([see 5.2 Order Submission API](#order-submission-api)).

### 4.3. Cimpress Open → Cimpress Fulfilment Network

Once your order is accepted, the Cimpress Open Processing Pipeline transforms the payload into Cimpress standardized data format. This includes:

* Applying partner-specific configurations and adapting to their PII handling requirements.
* Converting artwork files into Cimpress-standard formats.
* Routing the order to the correct fulfillment provider for production.

### 4.4. Cimpress Open → Partner

As the order's status changes (e.g., "Processing", "Shipped"), Cimpress Open sends real-time notifications to your registered API endpoint ([see 5.3 Status Update API](#status-update-api)). These outbound calls are authenticated using the method agreed upon during integration.

---

## 5. API Reference

<a id="authentication-api"></a>

### 5.1. Authentication API

Used to obtain an access token in exchange for client credentials.

* **Endpoint:**
  `POST https://oauth.cimpress.io/v2/token`

* **Headers**

  | Field        | Type   | Description        |
  | ------------ | ------ | ------------------ |
  | Content-Type | string | `application/json` |

* **Request Body**

  | Parameter     | Type   | Description                   |
  | ------------- | ------ | ----------------------------- |
  | grant_type    | string | Must be `client_credentials`. |
  | client_id     | string | Your unique Client ID.        |
  | client_secret | string | Your unique Client Secret.    |
  | audience      | string | Credential Audience           |

* **Success Response (`200 OK`)**

  | Field        | Type    | Description
  |-|-|-|
  | access_token | string  | The Bearer token used for subsequent API requests.
  | expires_in   | integer | The token's lifespan in seconds (e.g. `86400`).
  | token_type   | string  | Will always be `Bearer`

* **Error Responses**

  | Status Code      | Description
  |-|-|
  | 400 Bad Request  | Invalid parameters (e.g., missing `client_id`). |
  | 401 Unauthorized | Invalid `client_id` or `client_secret`.         |

---

<a id="order-submission-api"></a>

### 5.2. Order Submission API

Used to submit partner orders for processing within Cimpress Open.

* **Endpoint:**
  `POST https://partnerapi.cimpressopen.cimpress.io/[PARTNER_IDENTIFIER]/v1/orders`
 
* **URL Params:**

  | Field         | Type   | Description
  |-|-|-|
  | PARTNER_IDENTIFIER | string | A unique string to be allocated to each Cimpress Partner during the integration.
  
* **Headers:**

  | Field         | Type   | Description
  |-|-|-|
  | Authorization | string | Cimpress Owned Access Token (e.g. `Bearer <YOUR_ACCESS_TOKEN>`) |
  | Content-Type  | string | Must be `application/json`.                                     |

---

<a id="top-level-attributes"></a>

#### **Order Payload Schema**

##### **Top Level Attributes**

| Field                | Type   | Description
|-|-|-|
| orderId              | string | Your unique order identifier (e.g. `Order-987654`)
| purchaseDate         | string | The date when the order was created. In ISO 8601 date-time format (e.g. `2025-10-30T10:00:00Z`).
| currencyCode         | string | The three-digit currency code. In [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) format (e.g. `EUR`, `USD`).
|items                | array  | An array containing one or more product item objects to be fulfilled. **See [Items Attributes](#items-attributes)**
<a id="items-attributes"></a> shippingAddress      | object | Contains all required details for the shipping destination. **See [ShippingAddress Attributes](#shippingaddress-attributes)**
| salesChannelId        | string | (optional) The predefined region or market from which the order originated. Values are determined during integration (e.g. `NL`, `DE`).
| earliestShippedDate  | string | (optional) The start of the time period within which you have committed to ship the order. In [ISO 8601](https://developer-docs.amazon.com/sp-api/docs/iso-8601) date time format.
| earliestDeliveryDate | string | (optional) The start of the time period within which you have committed to deliver the order. In [ISO 8601](https://developer-docs.amazon.com/sp-api/docs/iso-8601) date time format.

##### **Items Attributes**

| Field         | Type    | Description
 -|-|-|
| itemId        | string  | A unique partner-defined identifier for this specific order item.
| variantId     | string  | A unique product variant id.
| quantity      | integer | The total number of units for this item to be produced.
| artwork       | object  | <details><summary>(optional) Object containing details for the item's customization.</summary><br/>• **artwork.url** — A publicly accessible, downloadable HTTPS URL for the artwork file.<br/>• **artwork.type** — The file format of the artwork (e.g. `pdf`).<br/><br/></details>
| price         | object  | <details><summary>(optional) Price breakdown details for the individual item.</summary><br/>• **price.totalAmount** — The total price of the item excluding tax. Must be a numerical string (e.g. `"19.99"`).<br/>• **price.taxAmount** — (optional) The calculated tax amount for the item. Must be a numerical string (e.g. `"2.10"`).<br/>• **price.discount** — (optional) The total discount applied to the item(s). Must be a numerical string (e.g. `"1.00"`).<br/><br/></details>
| shippingPrice | object  | <details><summary>(optional) Shipping price breakdown details for the item.</summary><br/>• **shippingPrice.amount** — The total shipping price of the item excluding tax. Must be a numerical string (e.g. `"3.99"`).<br/>• **shippingPrice.taxAmount** — (optional) The calculated shipping tax amount for the item. Must be a numerical string (e.g. `"1.10"`).<br/>• **shippingPrice.discount** — (optional) The total discount applied to the item(s). Must be a numerical string (e.g. `"0.50"`).<br/><br/></details> |

</details>


<a id="shippingaddress-attributes"></a>

##### **ShippingAddress Attributes**

| Field         | Type   | Description |
|-|-|-|
| method        | string | The predefined chosen shipping service level (e.g. `standard`, `express`). |
| name          | string | Recipient's full name. |
| stateOrRegion | string | The state, region, or province name/code. |
| postalCode    | string | The postal code or ZIP code. |
| countryCode   | string | The country code, a two-character code in [ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1) alpha-2 format (e.g. `DE`). |
| city          | string | The city name. |
| addressLine1  | string | The primary street address line. |
| addressLine2  | string | (optional) Secondary address details (e.g., apartment number, suite). |
| type          | string | (optional) The shipping address classification (e.g. `residential`, `business`). |
| phone         | string | (optional) Recipient's phone number (essential for delivery). |
| email         | string | (optional) Recipient's email (essential for delivery). |
</details>

---

##### **Error Responses**

| Status Code               | Description
|-|-|
| 400 Bad Request           | Validation failure on payload structure or business rules.
| 401 Unauthorized          | Invalid or expired Access Token.
| 429 Too Many Request      | Rate limit exceeded.
| 500 Internal Server Error | An unexpected error occurred on the server side.

---

<a id="status-update-api"></a>

### 5.3. Status Update API

* **Endpoint:**
  `https://[PARTNER-PROVIDED-ENDPOINT]`

* **Authentication:**
  Cimpress Open will authenticate its requests to your endpoint. We will configure our system to use your required authentication mechanism during the integration setup.

**Status Payload Schema**

**Top Level Attributes**

| Field       | Type   | Description |
|-------------|--------|-------------|
| orderId   | string | Partner Order Number |
| status    | string | Partner Specific Order Status (e.g. `processing`, `shipped`) |
| timestamp | string | Time of Event [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) |
| shipment  | array | (optional) An array containing one or more shipment detail when status is `shipped`. See [Shipment Attribute](#shipment-attribute) |

<a id="shipment-attribute"></a>
**Shipment Attributes**

| Field | Type | Description |
|------|------|-------------|
| itemId | string | Order Item identifier being shipped. |
| quantity | number | Quantity of the item included in this shipment |
| trackingURL | string | Carrier Tracking URL |
