# Shirtigo Cockpit API > REST API for print-on-demand and fulfillment: Shirtigo prints your designs on textiles and > other products and ships them to your customers. Use it to place orders from your own > system, manage products and designs, and receive status updates via webhooks. - Base URL: `https://cockpit.shirtigo.com/api` - Authentication: send `Authorization: Bearer ` with every request. Create the key in the Cockpit under Interfaces → API (https://cockpit.shirtigo.com/app/interfaces/api). OAuth2 is available as well. - Also send `Accept: application/json`. Requests and responses are JSON. - Ordering requires an active billing method on the account. - Validation errors return `422` with the details in the response body. ## Two ways to place an order Every order is a `POST /orders` with a delivery address and a list of products. The difference is how a product is described. ### A. Everything in one call (customized base product) The order itself carries the print data. Nothing has to exist in the account beforehand. Best for print-on-demand and personalisation, where every order can have a different design. 1. Find the blank product: `base_product_sku` (product, colour and size, e.g. `STTU169_Black_XXL`) from `GET /base-products` or the catalogue download (https://cockpit.shirtigo.com/app/baseproducts/xlsxfile). 2. `POST /orders` with, per product, `base_product_sku`, `amount` and `processings`: print area (`processingarea_type`, e.g. `front`), `design_url`, the print size in millimetres (`width` or `height`) and optionally the position (`offset_top`, `offset_center`). ### B. Create products first, then order by SKU Products are created once and live in the account. Orders only reference their SKU. Best for brands with a fixed range: products show up in statistics and can be synced to connected shops such as Shopify or Etsy. 1. Create a project (collection): `POST /projects`. 2. Upload the design: `POST /designs/url`, `/designs/file` or `/designs/base64`. 3. Create the product: `POST /customized-product` with `project_id`, `base_product_id` and `processings` (design, print area, size; can differ per colour). 4. Read the variant SKUs: `GET /projects/{project-reference}/products?include=projectProductColors`. 5. `POST /orders` with, per product, `sku` and `amount`. Both forms can be mixed within one order, together with warehouse products (SKUs starting with `WV-`). ## Testing There is no sandbox and no test mode; integrations are built against the live API. To test without production or costs, use a separate account with prepayment as payment method and create orders with `"is_onhold": true`. Such orders are never produced until released with `PUT /order/{reference}/release-onhold`. Cancel them with `POST /orders/{order_reference}/cancel`. `POST /webhooks/{id}/test` sends a signed test request without placing an order. ## After the order - Avoid duplicate orders: send your own `external_reference`. While an order with that reference is still open, a second one is rejected. - Status updates: register a webhook with `POST /webhooks` (event types: `GET /webhook-types`) or poll `GET /orders/{order_reference}`. - Price before ordering: `POST /orders/predict-price`. - Cancel: `POST /orders/{order_reference}/cancel`. ## Guides ### Core Concepts Source: https://cockpit.shirtigo.com/docs/getting-started/core-concepts/ Understanding the core concepts of the Shirtigo Cockpit API will help you maximize its capabilities and build robust integrations. #### API Overview - **Catalog API** – Provides information about base products that can be processed using different techniques. - **Order API** – Enables order placement. - **Product API** – Allows the creation of products for integrations. - **Stock API** – Provides stock levels of base products, your products and warehouse products. - **Design API** – Manages designs in your design pool for reuse in products. - **Project API** – Allows manipulation (create, view, modify) of user projects. - **Warehousing API** – Handles warehouse-related objects and their management. - **User API** – Manages user-related operations (create, view, modify). - **Image API** – Supports mockup and design generation. - **Webhook API** – Manages webhooks for real-time event notifications. - **Integration API** – Manages integrations with third-party applications. - **Authorization API** – Handles OAuth2 authentication and security. - **Miscellaneous Endpoints** – Covers additional utility functionalities. #### Enhancing API Responses Most `GET` endpoints support **includes**, allowing you to add extra data to the response. To include additional data, append the following query parameter: ```bash ?include=firstInclude,secondInclude.subInclude ``` #### Rate Limiting To ensure stable service for all users, our API implements rate limiting: - Standard tier: 60 requests per minute #### Webhooks Webhooks provide real-time updates about: - Order status changes - Production status of the item - Shipping events - System notifications #### Error Handling Our API uses standard HTTP response codes and provides detailed error messages: - 2xx: Successful operations - 4xx: Client errors - 5xx: Server errors Each error response includes: - Error code - Human-readable message - Additional context when available #### Best Practices 1. **Implement Retry Logic**: Handle temporary failures gracefully 2. **Use Webhooks**: Instead of polling for updates 3. **Cache Responses**: Store frequently accessed data 4. **Validate Input**: Check data before sending to API 5. **Handle Pagination**: For large data sets Understanding these core concepts will help you build reliable integrations with the Shirtigo Cockpit API. For detailed information about specific features, please refer to the respective sections in our documentation. ### Place Orders Source: https://cockpit.shirtigo.com/docs/getting-started/place-order/ #### Overview The Shirtigo Cockpit API supports two order workflows. Choose the one that best fits your business model. ##### 1. Order a Product Create products upfront, then reference their SKUs when placing orders. **Best for: Fashion Brands with Limited Styles** - Keeps your account organized - Enables detailed statistics and reporting - Products can sync to integrations like Shopify **How it works:** 1. Create products in advance via the API 2. Get product variant SKUs via: ```http GET /projects/{project-reference}/products?include=projectProductColors ``` 3. Reference the SKU when placing orders > **Note:** Include `projectProductColors` to retrieve SKU details. **Example Payload:** ```json { "delivery": { "company": "Example Company AG", "firstname": "John", "lastname": "Doe", "street": "Example Street 10", "postcode": "12345", "city": "Exampletown", "country": "DE" }, "products": [ { "sku": "YOUR_PRODUCT_SKU_001", "amount": 2 } ] } ``` --- ##### 2. Order a Customized Base Product Submit processing details with each order using a `base_product_sku`. **Best for: Customization Businesses with Unique Designs** - No pre-creation required - Dynamic customization per order - Ideal for print-on-demand workflows **How it works:** 1. Match our `base_product_sku` or `brand_product_sku` with your blank products 2. Find SKUs via the **Catalog API** or [download the full catalog (Excel)](https://cockpit.shirtigo.com/app/baseproducts/xlsxfile) 3. Include processing details in each order **Example Payload:** ```json { "delivery": { "company": "Example Company AG", "firstname": "John", "lastname": "Doe", "street": "Example Street 10", "postcode": "12345", "city": "Exampletown", "country": "DE" }, "sender": { "company": "Example Company AG", "firstname": "John", "lastname": "Doe", "street": "Sample Street 5", "postcode": "12345", "city": "Exampletown", "country": "DE" }, "products": [ { "base_product_sku": "STTU169_Black_XXL", "amount": 1, "processings": [ { "processingarea_type": "front", "processingmethod": "dtg", "design_url": "https://cdn.example.com/designs/custom_print.png", "width": 300, "height": 38, "ignore_validation": true } ] } ] } ``` --- #### Order Requirements To place an order, you must provide: - **Delivery Address (`delivery`)** – **Required** The destination for the shipment. - **Sender Address (`sender`)** – Optional If not provided, the default account address is used. Must be a valid physical address in Germany (shipment drop-off location). - **Product List (`products`)** – **Required** Provide one of the following formats: - `amount + sku` - `amount + base_product_sku + processings` - **Documents (`documents`)** – Optional Additional order documents can be included: - **Merchant Invoice**: Added for customs processing. - **Delivery Receipt**: Custom receipt (requires activation by key account). - **Return Label**: Pre-generated return label (requires activation by key account). - Available in **DIN A4** (return sheet + label) or **DIN A6** (shipping label only). - **Shipping Label**: User provided shipping label (only available for enterprise customers). ##### Preventing Duplicate Orders To prevent accidental duplicate orders, we strongly recommend setting: - `"external_reference"` – A unique reference for the order. - `"check_unique_external_reference": true` – Ensures that no orders exist for the given reference. The check is **enabled by default** as soon as you send an `external_reference`, so you do not have to pass the flag explicitly. Set it to `false` to opt out. Only orders in a non-terminal state are considered. A reference that was used by a canceled order or by one whose payment failed becomes available again, so you can retry with the same reference after a cancellation. ##### Delayed Address Validation By default an order with an incomplete or invalid delivery address is rejected at creation time with a `422`. If you have already taken payment from your own customer, a hard rejection is usually the worst outcome. Set `"delayed_address_validation": true` to avoid it. With the flag set, only `delivery.street`, `delivery.postcode`, `delivery.city` and `delivery.country` have to be present. Length limits as well as the requirement for `delivery.firstname` and `delivery.lastname` are dropped. The full address validation then runs **after** the order has been created. If it fails, the order is placed in `clarification` status instead of being rejected, and the `Order.clarification` webhook is fired with the concrete objections. You correct the address via `PUT /orders/{order_reference}`, after which the order continues on its regular path. See [Status & Webhooks](./04-status-webhooks.md#clarification-status) for the correction request and the webhook payload. --- #### Processing Information (`processings` Object) The `processings` object specifies the processing details (e.g., printing or embroidery). ##### Fields | Field | Description | |-----------------------|-------------| | `processingarea_type` | Defines which area of the product (e.g., front, back) will be processed. | | `width` / `height` | Dimensions in millimeters. | | `design_reference` | A pre-rendered design that has been created upfront. | | `design_url` | A URL linking directly to your design image. Ensure that the image is returned and not embedded in HTML. | | `force_position` | When set to `true`, ensures the provided positioning is used exactly as specified, without automatic adjustments. | | `offset_top` | Controls the vertical offset from the top in millimeters. Higher values move the design downward. | | `offset_center` | Controls the horizontal offset from the center in millimeters. | --- #### Processing Options ##### Cropping - **`ignore_validation`**: Accepts files that do not meet the minimum resolution (1000px width or height). ⚠️ **Note:** The check is applied after cropping. ##### Extracting Size & Position - **`extract_size_and_position`**: Extracts print dimensions and positioning from the transferred file. - Assumes the file matches the **base product processing area** and is created at **300 DPI**. - You can override `offset_top` and `offset_center`. ##### Resizing - **`resize_to_processingarea`**: Resizes the design to fit the processing area. - First, **reduces `offset_top`**. - Then, **reduces the design dimensions** if necessary. --- ##### Print Positioning Guidelines For consistent and accurate print positioning across orders, consider these important details: - **Size Considerations**: Processing area dimensions of a baseproduct are based on size L products. For smaller sizes (S, M), the maximum print size may be automatically reduced. - **Positioning Tolerance**: Due to manual textile handling, expect a standard tolerance of ±20mm in positioning. - **Precise Control**: For exact placement control: 1. Set `force_position: true` 2. Specify both `offset_top` and `offset_center` 3. Ensure values account for the ±20mm tolerance --- #### Order API Reference To see the complete API documentation for placing an order, including request and response examples, refer to: ➡️ [Place an Order – API Reference](/docs/rest-api#tag/Order-API/) --- #### Shipping Options - If no shipping method is provided, the **most economical option** is automatically selected. - If activated for your account, you can **choose the shipping carrier and product** manually. - This option is **only available for selected customers** and must be activated by your **key account manager**. --- This guide helps you **understand and implement the Shirtigo Cockpit Order API** effectively. For further details, refer to the official API documentation. ### Status & Webhooks Source: https://cockpit.shirtigo.com/docs/getting-started/status-webhooks/ This guide explains the different status types in the **Shirtigo Cockpit** system, including order statuses and individual product item statuses. #### Table of Contents - **Status Information** - [Order Status Keys](#order-status-keys) - [Order Product Item Status Keys](#order-product-item-status-keys) - **Webhooks** - [How to Choose a URL](#how-to-choose-a-url-for-your-webhook) - [Available Events](#available-webhook-events) - [Registration](#how-to-register-a-webhook-url) - [Delivery & Verification](#receiving-webhooks) #### Order Status Keys The following table shows all possible order status values: | Status Key | Description | |------------|-------------| | `pending` | Order created and payment pending | | `open` | Payment successful | | `successful` | Production preparation | | `production` | In production | | `shipped` | Shipped | | `clarification` | Clarification needed | | `out-of-stock` | Supply shortage | | `documents-required` | Commercial invoice required | | `processing-failed` | Order was cancelled due to failed async image processing | | `payment-failed` | Payment failed | | `refund` | Order cancelled | ##### Handling Failed Status Cases When an order enters a failed status, specific actions are required to resolve the issue: ###### Clarification Status If the order status is `clarification`, use the **Update delivery address** endpoint, `PUT /orders/{order_reference}`, to submit a corrected delivery address. The body differs from the `delivery` object used when placing an order. It is a flat `address` object and **requires the `id` of the address to update**: ```json { "address": { "id": 123456, "street": "Musterstraße 12", "postcode": "12345", "city": "Köln" } } ``` The `id` is returned by `GET /orders/{order_reference}` as the address with `type` `delivery`. Besides `id`, the endpoint accepts `company`, `firstname`, `lastname`, `care_of`, `street`, `postcode` and `city`. The country of an existing order cannot be changed. > **Note:** Without `id` the address is silently ignored and the endpoint still answers > `204`. This is the most common cause of "the update did nothing". The corrected address is validated **before** it is stored, so a still incomplete correction is rejected with `400` and the response body names the failing fields. Once it validates, the clarification is resolved, the order returns to its regular status and an `Order.updated` webhook is sent. ###### Documents Required Status If the order status is `documents-required`, use the **Upload Merchant Invoice** endpoint to submit a customs invoice. You can either add the merchant-invoice with the initial POST /orders call by adding a document to the request. The document needs to be uploaded upfront by using the **Upload Order Document** endpoint. ###### Processing Failed Status If the order status is `processing-failed`, check the error in the related design objects and submit the order again with corrected files. ###### Payment Failed Status If the order status is `payment-failed`, this typically occurs due to insufficient credit card funds. You can use the **Retry payment** endpoint to attempt the payment again. > **Important:** API orders can only be placed with the following payment methods: > - Prepayment > - Direct debit (requires key account activation) > - Wallet #### Order Product Item Status Keys The following table shows all possible status values for individual order product items that can be received through webhooks: | Status Key | Status Group | Description | |------------|--------------|-------------| | `pending` | preparing | Item was pushed to production system | | `ordered` | preparing | Pick order for item was created | | `printed` | processing | Pick label for item printed and item picked | | `pretreatment` | processing | Product is being pretreated | | `embroidery` | processing | Product is in embroidery process | | `dtg` | processing | Product is being printed | | `additional` | processing | Additional processing step is performed | | `branding` | processing | Product is being branded | | `passed` | processing | Product passed quality control | | `refused` | failed | Product failed quality control and will be reproduced with new item | | `sorting` | successful | Product is in outbound sorting | | `ready` | successful | Product ready for shipping | | `shipped` | successful | Product has been shipped | | `cancelled` | failed | Product has been cancelled | > **Note:** The status progression typically follows the order: preparing → processing → successful/failed. Each product item in an order can have its own status, allowing for detailed tracking of individual items. If a item fails a new one will be created for the same orderProduct. --- ### Webhooks Webhooks provide a way to receive real-time updates for specific events in your **Shirtigo Cockpit**. This section explains how to register webhooks, available events, and how to verify webhook authenticity. #### How to Choose a URL for Your Webhook To use a webhook, you need to define a **publicly accessible URL** in your system where webhook requests will be sent. The URL should be able to: - Accept **POST** requests. - Process the incoming JSON payload correctly. - Respond with a **2xx HTTP status code** to confirm successful receipt. > **Note:** If authentication is required, ensure that the webhook URL can still receive requests without restrictions, as this may interfere with delivery. #### Available Webhook Events Webhooks are triggered by specific **events**, which are defined by: - **Key**: A unique identifier that combines the resource and action. - **Resource**: The entity being affected (e.g., Order, Product, Design). - **Action**: The type of event occurring (e.g., Created, Updated, Deleted). ##### Supported Webhook Events Keys are case-sensitive. The authoritative list is always available via `GET /webhook-types`. | Key | Resource | Action | Description | |-------------------------------|-----------------|-------------------|-------------| | `Order.created` | Order | created | Triggered when a new order is placed. | | `Order.creation-failed` | Order | creation-failed | Triggered when an order cannot be created due to an issue (e.g., print file errors). | | `Order.updated` | Order | updated | Triggered when an order status changes. | | `Order.shipped` | Order | shipped | Triggered when an order is shipped. | | `Order.clarification` | Order | clarification | Triggered when an order needs your input. Covers an invalid delivery address (`clarification`), a supply shortage (`out-of-stock`) and a missing customs invoice (`documents-required`); see below. | | `Order.canceled` | Order | canceled | Triggered when an order is canceled. | | `OrderProductItem.updated` | OrderProductItem | updated | Triggered when an individual product item's status changes. | | `Product.created` | Product | created | Triggered when a new product is created. | | `Product.updated` | Product | updated | Triggered when a product is updated. | | `Product.deleted` | Product | deleted | Triggered when a product is deleted. | | `Design.created` | Design | created | Triggered when a design is created. | | `Design.rendering-failed` | Design | rendering-failed | Triggered when design rendering fails. | | `Design.updated` | Design | updated | Triggered when a design is updated. | | `Design.deleted` | Design | deleted | Triggered when a design is deleted. | | `GeneratedMedia.rendered` | GeneratedMedia | rendered | Triggered when a rendering-task for the Mockup-Factory is completed. | | `OrderWarehouseProductItem.updated` | OrderWarehouseProductItem | updated | Triggered when an individual warehouse product item's status changes. | | `UserInboundShipping.created` | UserInboundShipping | created | Triggered when a return for an order arives. | #### How to Register a Webhook URL To register a webhook, send a **POST request** to the `/webhooks` endpoint with the following parameters: ##### Webhook Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `resource` | string | Required without `types` | The entity the webhook listens to (e.g., "Order", "Product"). Must be combined with `action`. | | `action` | string | Required without `types` | The event type (e.g., "created", "updated"). Must be combined with `resource`. | | `types` | array | Required without `resource` and `action` | An array of webhook event keys (e.g., `["Order.created", "Product.updated"]`). | | `url` | string | **Yes** | The endpoint where the webhook request will be sent. | | `secret` | string | No | A secret key for verifying request signatures. | | `signature_header` | string | No | Defines the header field used for webhook signatures (default: `signature`). | | `is_active` | boolean | No | Specifies whether the webhook is active (`true`) or not (`false`). | ##### Example: Register a Webhook for New Orders ```json { "resource": "Order", "action": "created", "url": "https://yourserver.com/api/webhook-listener" } ``` This webhook will send a `POST` request to `https://yourserver.com/api/webhook-listener` whenever a new order is created. ##### The `Order.clarification` Payload One event key covers three situations, so the payload carries extra fields under `extra_data` to tell them apart: | Field | When | Description | |-------|------|-------------| | `clarification_type` | always | The order status key: `clarification`, `out-of-stock` or `documents-required`. | | `address_errors` | `clarification` | The individual objections against the delivery address. | | `address_validation_errors` | `clarification` | The parsed carrier preflight response, where one is available. | | `order_product_references` | `out-of-stock` | References of the order products that are unavailable. | This is the event to listen to when you place orders with `delayed_address_validation`, because an address that fails validation puts the order into `clarification` instead of rejecting it at creation time. #### Receiving Webhooks ##### When is a Webhook Considered Successfully Delivered? A webhook is **successfully delivered** when your server responds with an HTTP **2xx status code** (e.g., `200 OK`, `204 No Content`). If your server does not respond with a 2xx status, Shirtigo will retry sending the webhook. ##### How Are Failed Webhook Deliveries Handled? Webhook retries follow an **exponential backoff** strategy. The waiting time doubles after each failed attempt, so a delivery is attempted five times in total: | Attempt | Sent after | |---------|------------| | 1 | immediately | | 2 | ~15 minutes | | 3 | ~30 minutes | | 4 | ~60 minutes | | 5 | ~120 minutes | After the fifth failed attempt the webhook is **disabled** (`is_active` becomes `false`) and no further attempts are made, neither for this event nor for any later one. You then have to reactivate it via `PUT /webhooks/{id}`. > **Tip:** Keep this in mind while developing. An endpoint that answers with `500` during > testing will have its webhook switched off after the fifth failure. > **Tip:** Ensure your webhook handler responds **quickly** and always returns a **200 OK** status. ##### How to Verify That a Webhook is Sent by Shirtigo Cockpit Each webhook request includes a cryptographic signature that allows you to verify its authenticity. This signature is calculated using the HMAC SHA-256 algorithm with your webhook's secret key. When you register a webhook, you can provide: - A `secret` parameter (a random string known only to you and Shirtigo). If you omit it, one is generated for you and returned in the response. - A custom `signature_header` parameter (defaults to `signature` if not specified) For each webhook request, Shirtigo: 1. Takes the JSON payload as a string 2. Creates an HMAC SHA-256 hash using your secret 3. Sends this signature in the request header you specified ##### Signature Format - The signature is a **lowercase hexadecimal** string of **64 characters**. - It is **not** base64 encoded and carries **no prefix** such as `sha256=`. - It is calculated over the **raw request body**, byte for byte as transmitted. > **Important:** Verify the signature against the raw body, not against a re-serialized > object. Parsing the JSON and serializing it again changes key order, spacing and escaping, > which produces a different hash and makes every request look invalid. > **Important:** Retries send a modified body. Each retry carries a new `webhook_call_id`, > a new `created_at` and an additional `parent_call_id`. The signature belongs to the body > of that individual request, so recompute it per request rather than caching it. ###### Example: Verifying Webhook Signature (PHP) ```php function verifyWebhookSignature($payload, $receivedSignature, $secret) { // Calculate expected signature using HMAC SHA-256 $expectedSignature = hash_hmac('sha256', $payload, $secret); // Use timing-safe comparison return hash_equals($expectedSignature, $receivedSignature); } // In your webhook handler: $payload = file_get_contents('php://input'); $signature = $_SERVER['HTTP_SIGNATURE']; // Or your custom header $secret = 'your_webhook_secret'; if (verifyWebhookSignature($payload, $signature, $secret)) { // Process valid webhook http_response_code(200); } else { // Reject invalid request http_response_code(401); } ``` ###### Example: Verifying Webhook Signature (Node.js) ```javascript const crypto = require('crypto'); // rawBody must be the untouched request body (Buffer or string), NOT a parsed object. function verifySignature(rawBody, signature, secret) { const expected = crypto.createHmac('sha256', secret) .update(rawBody) .digest('hex'); const a = Buffer.from(expected, 'utf8'); const b = Buffer.from(String(signature || ''), 'utf8'); // timingSafeEqual throws on differing lengths, so check that first return a.length === b.length && crypto.timingSafeEqual(a, b); } ``` If you use Express, note that `express.json()` discards the raw body. Keep it around: ```javascript app.use(express.json({ verify: (req, res, buf) => { req.rawBody = buf; } })); app.post('/webhook-listener', (req, res) => { if (!verifySignature(req.rawBody, req.get('signature'), process.env.WEBHOOK_SECRET)) { return res.sendStatus(401); } // process req.body res.sendStatus(200); }); ``` > **Security Tips:** > - Use a strong, random string as your webhook secret > - Store your secret securely (e.g., in environment variables) > - Always verify the signature before processing webhook data > - Use a timing-safe comparison to prevent timing attacks ##### How to Test a Webhook You can test webhooks before integrating them into production. ###### **1. Using the Test Endpoint** Send a `POST` request to `/webhooks/{id}/test` with a valid `resource_id`: ```json { "resource_id": "CXY563" } ``` This simulates a real event, but the payload will contain `"mode": "test"`. ###### **2. Using a Webhook Testing Service** Use tools like [Webhook.site](https://webhook.site/) to inspect real-time webhook requests. ###### **3. Using cURL for Manual Testing** ```sh curl -X POST https://yourserver.com/webhook-endpoint \ -H "Content-Type: application/json" \ -d '{"type":"Order.created","resource":{"reference":"123456"}}' ``` #### Conclusion This documentation covers both the status information available in the Shirtigo Cockpit system and how to use webhooks to receive real-time updates. By understanding the various status types and properly configuring webhooks, you can effectively track orders and automate your workflows. ### Inventory and Stock Source: https://cockpit.shirtigo.com/docs/getting-started/stock-information/ This guide explains how to retrieve stock levels through the API. There are two stock endpoints: | Endpoint | Use it for | Keyed by | |----------|-----------|----------| | `GET /stock/base-products` | Catalog items (blank textiles) you can use for your products | `base_product_sku` | | `GET /stock/products` | Your own products and your warehouse products, e.g. to sync stock into your shop | `integration_sku` / warehouse reference | Both endpoints return the stock of **all** items in a single request. Pass `skus` with a comma separated list to restrict the result to specific items. There is no pagination. #### Table of Contents - [Stock of Base Products](#stock-of-base-products) - [Stock of Your Products](#stock-of-your-products) - [Response Fields](#response-fields) - [Good to Know](#good-to-know) #### Stock of Base Products Retrieve the stock of all base product variants available to you: **GET** `https://cockpit.shirtigo.com/api/stock/base-products` Or only for specific variants: **GET** `https://cockpit.shirtigo.com/api/stock/base-products?skus=SK-1234-M,SK-1234-L` The SKUs are the `base_product_sku` values returned by the Catalog-API (`GET /base-products/{id}`). ```json { "SK-1234-M": { "local_stock": 40, "wholesale_stock": 1000, "wholesale_delivery_duration": "2-3", "inbound_date": null }, "SK-1234-L": { "local_stock": 0, "wholesale_stock": 0, "wholesale_delivery_duration": "2-3", "inbound_date": "2026-10-20" } } ``` #### Stock of Your Products Retrieve the stock of all variants of your products and of all your warehouse products: **GET** `https://cockpit.shirtigo.com/api/stock/products` Or only for specific SKUs: **GET** `https://cockpit.shirtigo.com/api/stock/products?skus=c48211.a3f9e1,WV-8F3K2Q` - Product variants are keyed by their `integration_sku`. This is the SKU your products carry in your connected shops, and the `sku` of each size returned by the Product-API (`GET /products/{id}`). - Warehouse products (goods you store with us) are keyed by their warehouse reference (`WV-...`). They only have a `local_stock`, which is the exact number of items in stock. ```json { "c48211.a3f9e1": { "base_product_sku": "SK-1234-M", "local_stock": 7, "wholesale_stock": 1000, "wholesale_delivery_duration": "2-3", "inbound_date": null }, "WV-8F3K2Q": { "base_product_sku": null, "local_stock": 143, "wholesale_stock": null, "wholesale_delivery_duration": null, "inbound_date": null } } ``` To look up the stock of a SKU, read the entry with that SKU as key. To get the total number of items available, add `local_stock` and `wholesale_stock`. #### Response Fields | Field | Description | |-------|-------------| | `base_product_sku` | The base product variant of your product. `null` for warehouse products. Only returned by `/stock/products`. | | `local_stock` | Items in our own warehouse, ready for immediate production. | | `wholesale_stock` | Items available at the wholesaler. These are ordered on demand, which adds `wholesale_delivery_duration` to the delivery time. | | `wholesale_delivery_duration` | Additional delivery days for items that are not in our warehouse. | | `inbound_date` | Expected date the item is available again. Only set while the wholesaler is out of stock. | A value of `null` means that no stock information is available for this item at the moment. #### Good to Know - **Unknown SKUs** are omitted from the result instead of causing an error. If none of the requested SKUs is known, the response is an empty object `{}`. - **Long SKU lists**: The `skus` list is part of the URL, which is limited to about 8 KB (roughly 400 SKUs). If you need more, request everything without `skus` and pick the entries you need. - **Update frequency**: Our warehouse stock is updated whenever it changes, wholesale stock several times a day. Requesting the stock once per hour is sufficient. - **Alternatives**: Stock is also available as part of other responses, e.g. `GET /base-products/{id}?include_stock=true` or `GET /products/{id}?include_stock=true`. The stock endpoints are the recommended way, as they return everything in one request. ### Customize OrderProducts Source: https://cockpit.shirtigo.com/docs/getting-started/customize-order-products/ We offer automated workflows for **TeeInBlue**, but you are free to use **any customization tool** in combination with our API to **customize order products**. This allows you to leverage our existing workflow for transferring orders and order details between your **shop** (e.g., Shopify) and our **system**. #### **Customization Workflow Overview** 1. **Create a Customizable Product** - A product is created via **API** or **Dashboard** with the flag **`is_customizable: true`**. - This allows customization **after** the order has been placed. 2. **Order Placement** - The product is ordered via: - **Dashboard** - **API** - **Integration** (e.g., Shopify, Etsy) - The order is received and flagged as **`is_onhold: true`**, preventing automatic production until customization is completed. 3. **OrderProduct Customization** - After the order is placed, the **OrderProduct** can be customized before production. - Customization can be performed: - **Manually** via the Dashboard - **Automatically** via an **API call** - Once customization is finalized, the on-hold status needs to be released, and production begins. #### **API Endpoints for Customization** ##### **Mark a Product as Customizable** To create a customizable product, set `is_customizable: true` when creating a product via API. ```http POST /customized-product ``` ##### **Update an OrderProduct with Customization Data** After an order is placed, you can update the order product with customization details. ```http PUT /orderproduct/{reference}/customize ``` **Example Payload:** ```json { "design_reference": "11c1143c-70f9-44d6-ba71-b1020da61d0d", "processingarea_type_id": "1", "width": 300 } ``` ##### **Release on-hold status** ```http PUT /order/{reference}/release-onhold ``` #### **Use Cases** - **Personalized Products:** Customers can enter names, choose colors, or upload images before checkout. - **Print-on-Demand Customization:** Designs are dynamically applied after order placement. - **Automated Processing:** The system automatically fetches customization details and updates the order. For more details on API requests and customization, refer to our [API Documentation](/docs/rest-api#tag/Order-API). ## Endpoints ### User-API #### GET /transactions: Get all transactions Retrieve all accounting transactions issued by the currently authenticated user. The result will be paginated, meta information is included in the response. Parameters: - `page` (query, integer): Page number - `items` (query, integer): Items per page - `search` (query, integer): Search query - `sort_col` (query, string): Property to order by - `sort_dir` (query, string, one of `asc`, `desc`): Order direction - `period` (query, integer): Days to show (default: all) - `action` (query, integer): Action to filter for (default: none) Responses: - 200: Success → object #### GET /wallet/transactions: Get wallet transactions Parameters: - `items` (query, integer): Number of items per page - `search` (query, string): Search term - `sort_col` (query, string) - `sort_dir` (query, string, one of `asc`, `desc`) Responses: - 200: Successful operation → object #### POST /user/balance: Get balance for current user Return a Money object for the users current balance Responses: - 200: Success → Money #### GET /user: Get user information Some of the listed resources are available as optional includes (add to the query ?include=firstInclude,secondInclude.subInclude). The available includes for this endpoint are: integrations, billingMethod, availableBillingMethods Responses: - 200: Success → User #### POST /user: Update user information Update (some) fields of the currently authenticated user profile. JSON body: - `firstname` (string, required) - `lastname` (string, required) - `street` (string, required) - `postcode` (string, required) - `city` (string, required) - `country` (string, required) - `company_name` (string) - `phone` (string) - `is_business` (boolean, required) - `fulfillment_mode_key` (boolean) Responses: - 204: User information updated. - 422: Validation of inputs failed. #### POST /user/sender-address: Update sender address Update sender address fields of currently authenticated user. JSON body: - `sender_company_name` (string) - `sender_firstname` (string, required) - `sender_lastname` (string, required) - `sender_street` (string, required) - `sender_postcode` (string, required) - `sender_city` (string, required) - `sender_country` (string, required) Responses: - 204: User information updated. - 422: Validation of inputs failed. #### POST /user/gpsr-address: Update GPSR Addresses Updates the GPSR manufacturer and representative address fields for the authenticated user. * If the country requires a representative address (VAT_TYPE_WORLD), both addresses must be provided. JSON body: - `gpsr_manufacturer_company_name` (string, required) - `gpsr_manufacturer_street` (string, required) - `gpsr_manufacturer_postcode` (string, required) - `gpsr_manufacturer_city` (string, required) - `gpsr_manufacturer_email` (string, required) - `gpsr_manufacturer_country` (string, required) - `gpsr_representative_company_name` (string): Required if manufacturer is located outside EU - `gpsr_representative_street` (string): Required if manufacturer is located outside EU - `gpsr_representative_postcode` (string): Required if manufacturer is located outside EU - `gpsr_representative_city` (string): Required if manufacturer is located outside EU - `gpsr_representative_email` (string): Required if manufacturer is located outside EU - `gpsr_representative_country` (string): Required if manufacturer is located outside EU Responses: - 204: GPSR address information updated successfully. - 422: Validation failed. Check the input data for errors. #### POST /user/advanced: Update user advanced Update advanced user settings. JSON body: - `locale` (string) - `accounting_email` (string) - `customs_email` (string) - `receives_mail_order_placed` (boolean) - `receives_mail_order_shipped` (boolean) - `use_tracking_de` (boolean) - `use_tracking_eu` (boolean) - `use_tracking_world` (boolean) - `add_delivery_receipt` (boolean) - `use_custom_product_name` (boolean) - `delivery_receipt_note` (string) - `default_first_packin_reference` (string) - `default_second_packin_reference` (string) - `default_hangtag_reference` (string) - `default_imprint_reference` (string) - `default_label_reference` (string) - `default_product_packaging_reference` (string) - `default_order_packaging_reference` (string) Responses: - 204: User information updated. - 422: Validation of inputs failed. #### GET /verifications: Get user verifications Retrieve all verification records for the currently authenticated user. Parameters: - `include` (query, string): Comma-separated values to include additional resources Responses: - 200: Successful retrieval of user verification data. #### POST /verifications/create: Create a new user verification Allows the creation of a new verification record for the authenticated user. JSON body: - `type` (string, one of `vat`, `tax`, `lucid`, required) - `identifier` (string, required) - `country_iso` (string, required) - `fiscal_representation` (string) Responses: - 201: Verification record created successfully. - 422: Validation of inputs failed. ### Image-API #### POST /ai/generate-image: Generate media using AI Parameters: - `n_images` (query, integer): Number of images to generate - `prompt` (query, string): Prompt for image generation - `style_id` (query, integer): ID of prefered MediaStyle Responses: - 200: Successful operation → GeneratedMedia - 422: Validation error or insufficient credits #### POST /ai/variations/{reference}/upscale: Upscale a variation Responses: - 200: Successful operation → Design #### POST /ai/designs/{reference}/upscale: Upscale a design Responses: - 200: Successful operation → Design #### POST /ai/designs/{reference}/remove-background: Remove background from a design Responses: - 200: Successful operation → Design - 422: Validation error or insufficient credits #### GET /ai/media: Get a list of generated media Parameters: - `sort_col` (query, string): Column to sort by (default: created_at) - `sort_dir` (query, string): Sort direction (default: desc) - `filtered_status` (query, string): Comma-separated list of filtered statuses Responses: - 200: Successful operation → GeneratedMedia #### GET /ai/media/{reference}: Get details of a generated media by reference Parameters: - `reference` (path, string, required): Reference of the generated media Responses: - 200: Successful operation → GeneratedMedia #### GET /ai/media-styles: Get a list of media styles Responses: - 200: Successful operation → MediaStyle #### POST /mockup-factory/generate-image: Generate Mockup Images Generates custom mockup images based on the specifications provided. JSON body: - `external_job_reference` (string): External reference to track the job - `base_product_id` (integer, required): ID of the base product - `base_product_skus` (array of string): SKUs (internal_sku) of the base product variants - `color_ids` (array of integer): Alternative to SKUs, IDs of colors if specific colors are to be used - `mockup_ids` (array of integer, required): IDs of mockups to generate - `processingarea_type_key` (string): Type of the processing area for the mockup - `processing_method_key` (string): Processing method key, e.g., 'dtg' - `mockup_width_px` (integer): Width of the mockup in pixels; assumed to be square; max. 2000px - `design_url` (string): URL of the design to be used in the mockup - `design_width_mm` (integer): Width of the design in millimeters - `design_height_mm` (integer): Height of the design in millimeters - `design_y_top_mm` (integer): Top offset of the design in millimeters - `design_x_center_mm` (integer): Center offset of the design in millimeters - `format` (string): Format of the generated image, 'jpg' or 'png' allowed - `background_color_hex` (string): Hex code of the background color - `background_url` (string): URL of the background image Responses: - 200: Mockup generated successfully → object - 401: Unauthorized - 422: Validation failed for one or more parameters. #### GET /mockup-factory/rendering-tasks: Get Rendering Tasks Retrieves a paginated list of mockup-factory rendering tasks for the authenticated user. This endpoint can be used to fetch all the rendering tasks generated by the user, allowing them to track progress or results. You can register a webhook for the event GeneratedMedia.rendered Responses: - 200: Success → object - 403: Unauthorized - 500: Server Error #### GET /mockup-factory/rendering-tasks/{reference}: Get Rendering Task by Reference Retrieves detailed information about a specific mockup-factory rendering task associated with the given reference identifier. This endpoint is intended for users to fetch detailed information about a specific task, including its variations and current status. Parameters: - `reference` (path, string, required): Unique reference of the rendering task Responses: - 200: Success → object - 404: Not Found - 500: Server Error ### Catalog-API #### GET /base-products: Get all base products Retrieve a list of available base products. Optionally, a category can be passed for filtering. Parameters: - `category` (query, integer): Filter by category identifier (default: any) - `user_products_only` (query, boolean): Include user specific products - `sku` (query, string): Filter products with a variant which contains a variant where either the sku or internal_sku contains the passed value Responses: - 200: Success → object #### GET /base-products/{base-product-id}: Get base product Retrieve information on a single base product. To get stock level and end of life information please add ?include_stock=true to the request To get the actual print dimensions per variant add ?include_print_dimensions=true to the request Parameters: - `base-product-id` (path, integer, required): Numerical base product identifier - `include_stock` (query, boolean): Include stock information for the product Responses: - 200: Success → Product - 404: Product not found #### GET /base-categories: List available categories Responses: - 200: Success → object ### other #### POST /calculation: Calculate production cost Calculate the net production cost for a given product, set of print areas and color information. The VAT rate rate is preliminary, the final rate depends on the shipping target, involvement of business customers and other factors. JSON body: - `is_colored` (boolean): Is this a color print? - `printareas` (array of integer): Desired print areas - `product_id` (integer): Desired base product - `per_size` (boolean): Also return the price of every size of the color under sizes Responses: - 200: Success → MoneyWithVat - 404: Product not found #### GET /delivery-countries: Get delivery targets Retrieve a list of valid delivery target countries. The result is presented as associative array: The array keys consist of upper-case two-letter country codes, the corresponding values are the human readable country names. Responses: - 200: Success → object #### GET /selling-statistics: Get selling statistics Retrieve statistics about the current user's sales. This endpoint reports the number of sales and the total net amount for four different reporting periods: Last 24 hours, last 7 days, last 30 days and total. Passing from and/or to adds a range block for a freely chosen period, for example a single calendar month. Parameters: - `from` (query, string): Start of an additional reporting period as YYYY-MM-DD, counted from the beginning of that day. Omitted means the period is open towards the past. - `to` (query, string): End of an additional reporting period as YYYY-MM-DD, counted up to the end of that day. Omitted means the period runs up to now. Must not be before from. Responses: - 200: Success → object #### GET /orders-statistics: Get order statistics Retrieve statistics about the current user's order status distribution. This endpoint reports the number of open orders (non-shipped, non-canceled) per status (open, preparation, production, clarification) Responses: - 200: Success → object #### GET /fulfillment-modes: Get all fulfillment_modes Retrieve a list of available fulfillment_modes, which are available to authenticated user. Responses: - 200: Success → object ### Project-API #### GET /projects: Get all projects / collections Some of the listed resources are available as optional includes (add to the query ?include=firstInclude,secondInclude.subInclude). The available includes for this endpoint are: products, productInfo Parameters: - `page` (query, integer): Current page - `items` (query, integer): Number of items per page - `sort_col` (query, string): Column used to sort the results. You can sort by: name, reference, url, default_preview_position, created_at, updated_at - `sort_dir` (query, string): Direction for sorting Responses: - 200: Success → object #### POST /projects: Create project / collection Create a new project and return the inserted information. Associate the project with the currently authenticated user. JSON body: - `name` (string): Project name - `description` (string): Project description - `is_deprecated_campaign` (boolean): indicates if deprecated way for product creation is used (use 1/0 instead of true/false) Responses: - 200: Success → Project #### GET /projects/{project-reference}: Get project / collection Some of the listed resources are available as optional includes (add to the query ?include=firstInclude,secondInclude.subInclude). The available includes for this endpoint are: products, productInfo Parameters: - `project-reference` (path, string, required): Unique project identifier - `include_stock` (query, boolean): Include stock information for the products Responses: - 200: Success → Project - 400: Unknown include - 404: Project not found #### PUT /projects/{project-reference}: Update project / Collection Change information about a project Parameters: - `project-reference` (path, string, required): Unique project identifier JSON body: - `name` (string): Project name Responses: - 200: Success → Project - 404: Project not found #### DELETE /projects/{project-reference}: Delete project / collection Delete the selected project. Parameters: - `project-reference` (path, string, required): Unique project identifier Responses: - 202: Accepted. The project is hidden immediately, its products, colours and printareas are removed in the background. - 404: Project not found #### GET /projects/{project-reference}/products: Get products for a project / collection Some of the listed resources are available as optional includes (add to the query ?include=firstInclude,secondInclude.subInclude). The available includes for this endpoint are: colors, base_product, active_integration_syncs, integration_sync_log, integration_products, projectProductColors Parameters: - `project-reference` (path, string, required): Unique project identifier Responses: - 200: Success → array of CampaignProduct - 404: Project not found #### POST /projects/{project-reference}/sync: Synchronize integrations Trigger synchronization with all integrations defined for this campaign. The synchronization is performed in the background. Its status can be observed by querying for the attribute "status". It has the following enum-values: - 'is_queuing', - 'is_syncing', - 'is_completed' - 'has_errors' Parameters: - `project-reference` (path, string, required): Unique project identifier JSON body: - `integrations` (array of integer): Integration ids Responses: - 204: Success, all integrations processed ### Product-API #### GET /products: Get all products Some of the listed resources are available as optional includes (add to the query ?include=firstInclude,secondInclude.subInclude). The available includes for this endpoint are: colors, base_product, active_integration_syncs, integration_sync_log, integration_products, projectProductColors Parameters: - `finished` (query, integer): Only return products where rendering is finished. - `search` (query, string): A search term used to filter on the product and product group (collection) names. - `project_id` (query, string): Return only products for a given campaign - `design_id` (query, string): Return only products which contain a processingarea where the design for the given design_id is used - `base_product_id` (query, integer): Return which are based on the given base product id - `tags` (query, string): Filter for products containing a given tag Responses: - 200: Success → object #### GET /products/{product-id}: Get product Some of the listed resources are available as optional includes (add to the query ?include=firstInclude,secondInclude.subInclude). The available includes for this endpoint are: colors, base_product, active_integration_syncs, integration_sync_log, integration_products, projectProductColors Parameters: - `product-id` (path, integer, required): Numerical product identifier - `include_stock` (query, boolean): Include stock information for the product Responses: - 200: Success → CampaignProduct - 404: Product not found #### PUT /products/{productId}: Update product Update names, descriptions, prices and add/delete a product of the authenticated user. Parameters: - `productId` (path, integer, required): ID of the product to update JSON body: - `custom_name` (string): Product name - `price` (integer): Gross product price in Euro-cents - `description` (string): Short description - `tags` (array of string): List of tags for this product - `colors` (array of integer): List of color ids - `delete_unmentioned_colors` (bool): Set to true if colors which are stored but do not appear in the request should be deleted. Default: false - `sort_position` (integer): Set a sort position for this product within its project Responses: - 200: Success → CampaignProduct - 404: Product not found #### DELETE /products/{productId}: Delete product Parameters: - `productId` (path, integer, required): ID of the product to delete Responses: - 204: Success, product deleted - 404: Product not found #### POST /products/{product-id}/sync: Synchronize integrations Trigger synchronization for all requested integrations for this product. The synchronization is performed in the background. Its status can be observed by querying the active_integration_syncs field in the product response. Parameters: - `product-id` (path, integer, required): Numerical product identifier JSON body: - `integrations` (array of integer): Integration ids Responses: - 204: Success, all integrations processed #### POST /products/{product-id}/sync-images: Synchronize only product images Trigger image synchronization for the specified integration for this product. Only images will be updated, other product data remains unchanged. Parameters: - `product-id` (path, integer, required): Numerical product identifier JSON body: - `integration_id` (integer): Integration id Responses: - 204: Success, images synchronized #### POST /customized-product: Create product Use this endpoint to a create a product based on a specific baseProduct. The product can be customized on the baseProduct color level. This allows you to have a different design, size and positioning for each baseProduct color. Each processing can be associated to one or many colorIds. Multiple processings can be added. Workflow: create project, add customized-products JSON body: - `project_id` (string, required): Identifier of existing project - `base_product_id` (integer, required): Identifier of desired base product - `price` (integer): Product price in cents - `custom_name` (string): Custom product name - `sort_position` (integer): Sort position - `tags` (array of string): Product tags - `description` (string): Product description - `integration_feature_description` (array of string): Integration feature description - `brandings` (array of string): Product brandings - `processings` (array of object, required): List of processings to apply - `processingarea_type` (string): Processing area type - `processingposition` (string): Processing position - `processingmethod` (string): Processing method - `design_reference` (string): Design for the customization - `offset_top` (integer): Vertical offset from top in millimeters - `offset_center` (integer): Horizontal offset from center in millimeters - `width` (integer): Design width in millimeters - `is_customizable` (boolean): Flag to indicate if order products can be customized after order was placed - `is_blank_design` (boolean): Flag to indicate if order products have blank designs - `force_position` (boolean): true uses the offsets exactly as given for every size. false (default, recommended) adjusts the position per garment size automatically. - `mockups` (array of integer): List of ids for the desired mockups for this product processing - `colors` (array of object): List of baseProduct colors which should be assigned to this processing - `colorId` (integer): Numeric identifier of baseProduct color - `price` (integer): Your sales price for this product color in cents - `sortPosition` (integer): sort position for this color Responses: - 200: Success → object - 401: Unauthorized (no credentials or not eligible for ordering) - 422: Validation failed, details in response body #### PUT /customized-product/{productId}: Update product colors Use this endpoint to update an existing product. The product can be customized on the baseProduct color level similar to the create endpoint. Each processing can be associated to one or many colorIds. Multiple processings can be added. Instead of the complete processing information (design, width, position info) it is possible to pass a baseProduct color id as a referenceColorId. In this case all processing information is created based on the existing processings for the reference color. JSON body: - `processings` (array of object, required): List of processings to add / update - `processingarea_type` (string): Processing area type. Not required when only prices are adjusted - `processingposition` (string): Processing position - `processingmethod` (string): Processing method - `design_reference` (string): Design for the customization. This parameter if new colors are added and the referenceColor option is not used. - `offset_top` (integer): Vertical offset from top in millimeters. This parameter if new colors are added and the referenceColor option is not used. - `offset_center` (integer): Horizontal offset from center in millimeters. This parameter if new colors are added and the referenceColor option is not used. - `width` (string): Design width in millimeters. This parameter if new colors are added and the referenceColor option is not used. - `is_customizable` (boolean): inidicated if order products can be customized after order was placed - `force_position` (boolean): true uses the offsets exactly as given for every size. false (default, recommended) adjusts the position per garment size automatically. - `colors` (array of object): List of baseProduct colors which should be assigned to this processing - `colorId` (integer): Numeric identifier of baseProduct color - `referenceColorId` (integer): A reference color, where all processing info is taken from and used as the basis for the added colors. - `price` (integer): Your sales price for this product color in cents - `sortPosition` (integer): sort position for this color Responses: - 200: Success → object - 401: Unauthorized (no credentials or not eligible for ordering) - 422: Validation failed, details in response body #### POST /products/{productId}/images: Add Image for ProductColor Parameters: - `productId` (path, integer, required): ID of the product to add image to - `url` (query, string): Url - `style` (query, string): Style - `procesingarea_type` (query, string): Processing Area type - `name` (query, string): Name - `sort_weight` (query, integer): Sort weight Responses: - 200: Success, product image was added - 422: Error, image file does not meet requirements #### PUT /products/{projectProductId}/mockups: Update Product Mockups Updates the mockups associated with a project product. It allows adding new mockups and removing existing ones based on provided mockup IDs. Ensures that at least one mockup remains after updates to prevent product mockup configurations from being empty. Parameters: - `projectProductId` (path, integer, required): The unique identifier of the project product JSON body: - `mockups` (array of integer): Array of mockup IDs to be updated or removed Responses: - 200: Mockups updated successfully → object - 404: Product not found → object - 422: Validation error or the product needs at least one mockup → object ### Order-API #### GET /coupons/{coupon_code}: Get coupon info Retrieve information about a single order coupon. Parameters: - `coupon_code` (path, string, required): Alphanumerical coupon identifier as provided to the customer Responses: - 200: Success → Coupon - 404: Coupon not found #### POST /media/order-document: Upload Order Document Upload and store a document file related to an order. Accepts either a file upload or a base64 encoded PDF string. Parameters: - `file` (formData, file): The document file to upload (required if base64_file is not provided) - `type` (formData, string, one of `delivery-receipt`, `merchant-invoice`, `return-label`, required): The type of document being uploaded. JSON body: - `base64_file` (string): Base64 encoded PDF string - `type` (string, one of `delivery-receipt`, `merchant-invoice`, `return-label`): Upload a document for an order Responses: - 200: Document uploaded successfully → object - 422: Validation error #### GET /orders: Get all orders Some of the listed resources are available as optional includes (add to the query ?include=firstInclude,secondInclude.subInclude). The available includes for this endpoint are: parent, children, comments, products, warehouseProducts, payments, orderStatusEntries, shipping, packins Parameters: - `page` (query, integer): Page number - `filter` (query, integer): Filter by order status id - `items` (query, integer): Items per page - `search` (query, integer): Search query - `sort_col` (query, string): Property to order by - `sort_dir` (query, string, one of `asc`, `desc`): Order direction - `period` (query, integer): Days to show (default: all) - `secondary_filter` (query, string): Secondary filter level (e.g. filter reprint orders) Responses: - 200: Success → object #### POST /orders: Create order Submit a new order for the currently authenticated user. The user must have at least one registered and active billing method. A delivery address is required. The billing address is taken from the account data. The sender information is optional; if not provided, the current user information will be used. Our complete base product catalog can be downloaded as an XLSX file in the Cockpit dashboard (Import -> Download -> Product Catalog). You can either: 1. Order existing products using their SKU (including warehouse products starting with "WV-") 2. Order custom base products using base_product_sku with custom processings JSON body: - `delivery` (OrderAddress, required): Delivery address of the recipient. - `sender` (OrderAddress): Sender address printed on the parcel. Must be a physical address in Germany. Default: the address of the account. - `gpsr-manufacturer` (OrderAddress): Manufacturer address for the product safety information (GPSR). Default: the setting of the account. - `gpsr-representative` (OrderAddress): Address of the responsible person in the EU for the product safety information (GPSR). Default: the setting of the account. - `delayed_address_validation` (boolean): When set to true, only basic address validation is performed on the request itself: `delivery.street`, `delivery.postcode`, `delivery.city` and `delivery.country` have to be present, all length limits as well as the requirement for `delivery.firstname` and `delivery.lastname` are dropped. The full address validation then runs asynchronously after the order has been created. Orders with an invalid address are set to 'order clarification' status (order_status_id 80) instead of being rejected, and the `Order.clarification` webhook is fired. That webhook carries `clarification_type` (to distinguish an address problem from a stock or document problem), `address_errors` with the individual objections and, where available, `address_validation_errors` with the parsed carrier preflight response. The address must be corrected afterwards, either in the dashboard or via PUT /orders/{order_reference}. Once it validates, the order returns to its regular status and an `Order.updated` webhook is sent. - `products` (array of object, required): List of products to order. Can contain existing products (using SKU), warehouse products (using SKU starting with 'WV-'), or custom base products (using base_product_sku). - `sku` (string): SKU of existing product or warehouse product (starts with 'WV-') - `base_product_sku` (string): SKU of base product variant for custom items - `amount` (integer): Amount of this product - `sales_price_gross` (integer): Sales price in cents (only for custom base products) - `external_reference` (string): Your internal reference for this product - `customizations` (object): Custom fields for this product - `branding` (object): Branding information for this product - `hangtag_reference` (string): Reference of the hangtag attached to the product. - `product_packaging_reference` (string): Reference of the product packaging, e.g. a polybag. - `imprint_reference` (string): Reference of the imprint, e.g. a neck print. - `label_reference` (string): Reference of the label sewn into the product. - `processings` (array of object): Print data per print area. Required with base_product_sku and ignored for products ordered by sku. - `processingarea_type` (string): Print area on the base product: front, back, sleeve-left, sleeve-right or back-inside. It must be available on the base product and is usually used once per product. - `processingmethod` (string): Print method, e.g. dtg, dtf, embroidery or sublimation. It must be available for this print area on the base product. Default: the only method of the print area, or dtg if there are several. - `design_url` (string): Public URL of the print file (PNG or JPEG). Required unless design_reference is given. - `design_reference` (string): Reference of a design uploaded beforehand via the Design API. Alternative to design_url. - `width` (integer): Width of the print in millimetres. Send width or height, the other follows from the aspect ratio of the design. width plus twice the absolute offset_center must fit into the print area. - `height` (integer): Height of the print in millimetres. height plus offset_top must fit into the print area. - `offset_top` (integer): Distance in millimetres from the top edge of the print area to the top edge of the design. Default 0. - `offset_center` (integer): Horizontal shift in millimetres of the design centre from the centre line of the print area, 0 means centred. Default 0. - `force_position` (boolean): true uses the offsets exactly as given for every size. false (default, recommended) adjusts the position per garment size automatically. - `extract_size_and_position` (boolean): Treat design_url as a print file covering the whole print area at 300 dpi: transparent margins are trimmed and size and offsets are taken from the visible content. For dtg, dtf, sublimation and poster. - `resize_to_processingarea` (boolean): Scale the design down proportionally if it would not fit into the print area. - `ignore_validation` (boolean): Skip the minimum resolution check of the design (1000 px in width or height). Default true for design_url. - `mockups` (array of integer): IDs of the product mockups to render the product images with. Default: the standard mockups of the print area. - `packaging_branding` (object): Order-level packaging and branding items. These are added once per order regardless of the number of products. - `first_packin_reference` (string): Reference to the first packin (packaging insert) to be added to the order - `second_packin_reference` (string): Reference to the second packin (packaging insert) to be added to the order - `order_packaging_reference` (string): Reference to the order packaging (e.g., box, envelope) to be used for the entire order - `sticker_reference` (string): Reference to the sticker to be applied to the order - `default_product_branding` (object): Default branding items to be applied to each product in the order. These are applied per product unless overridden by product-specific branding. - `hangtag_reference` (string): Reference to the hangtag to be attached to each product - `imprint_reference` (string): Reference to the imprint to be applied to each product - `label_reference` (string): Reference to the label to be attached to each product - `product_packaging_reference` (string): Reference to the product packaging (e.g., polybag) to be used for each product - `packins` (object): Legacy packin structure (deprecated, use packaging_branding and default_product_branding instead) - `first_packin_reference` (string): Reference to the first packin - `second_packin_reference` (string): Reference to the second packin - `order_packaging_reference` (string): Reference to the order packaging - `sticker_reference` (string): Reference to the sticker - `hangtag_reference` (string): Reference to the hangtag - `imprint_reference` (string): Reference to the imprint - `label_reference` (string): Reference to the label - `product_packaging_reference` (string): Reference to the product packaging - `documents` (object): Optional document references for the order. To use custom delivery receipts or return labels, please get in touch with your key account manager. - `delivery-receipt` (object): Delivery receipt document information - `media_reference` (string): Reference to the delivery receipt media - `external_reference` (string): External reference for the delivery receipt - `merchant-invoice` (object): Merchant invoice document information - `media_reference` (string): Reference to the merchant invoice media - `external_reference` (string): External reference for the merchant invoice - `return-label` (object): Return label document information - `external_reference` (string): External reference for the return label - `carrier_key` (string): Carrier key for the return label - `format` (string, one of `a4`, `10x20`): Format of the return label. 'A4' includes a return sheet with a table for selecting return items and the return label. '10x20' contains only the return label. - `shipping-label` (object): Shipping label document information - `media_reference` (string): Reference to the shipping label media - `shipping_handle` (string): Shipping carrier handle - `tracking_number` (string): Tracking number for the shipment - `fulfillment_mode_key` (string): Choose a special fulfilment mode for this order. - `billing_method_reference` (string): Reference of billing method used for this order. - `external_reference` (string): Your internal reference for the order, that will be added to the delivery note. - `check_unique_external_reference` (boolean): Ensures that the provided external reference is unique within the account. Defaults to true when `external_reference` is provided. Only orders with an order_status_id below 90 are taken into account, so a reference used by a canceled or payment-failed order becomes available again. On a collision the request is rejected. Responses: - 201: Success, order has been created → Order - 401: Unauthorized (no credentials or not eligible for ordering) - 422: Validation failed, details in response body #### GET /orders/{order_reference}: Get order Some of the listed resources are available as optional includes (add to the query ?include=firstInclude,secondInclude.subInclude). The available includes for this endpoint are: parent, children, comments, products, warehouseProducts, payments, orderStatusEntries, shipping, packins Parameters: - `order_reference` (path, string, required): The unique reference identifier of the order Responses: - 200: Success → Order - 404: Order not found #### PUT /orders/{order_reference}: Update delivery address Updates the delivery address of an existing order, for example to resolve an order in 'order clarification' status. The address object is flat and differs from the `delivery` object used when placing an order: it requires the `id` of the address to update and accepts only the fields listed below. The `id` is returned by GET /orders/{order_reference} as the address with `type` 'delivery'. **Without `id` the address is silently ignored and the endpoint still answers 204.** The country of an existing order cannot be changed. The submitted address is fully validated before it is stored, so a still incomplete correction is rejected with 400 instead of being accepted. Parameters: - `order_reference` (path, string, required): The unique reference identifier of the order JSON body: - `address` (object, required): Updated delivery address information - `id` (integer, required): ID of the address to update, taken from GET /orders/{order_reference} - `company` (string): Company name - `firstname` (string): First name - `lastname` (string): Last name - `care_of` (string): Care of (c/o) - `street` (string): Street and number - `postcode` (string): ZIP/area code - `city` (string): City Responses: - 400: The submitted delivery address is invalid, the response body names the failing fields - 204: Success, order has been updated - 401: Unauthorized - Invalid credentials - 403: Forbidden - Order cannot be edited (wrong status or already in production) - 404: Order not found - 422: Validation failed - Invalid address or other data #### PUT /order/{reference}/release-onhold: Release onhold Orders with Flag Onhold will not be send to production until flag is released. Only Orders having completely rendered Images can be released. Responses: - 204: Success, orderProduct customized #### POST /orders/{order_reference}/merchant-invoice: Upload Merchant Invoice For orders shipped to non-eu states in some cases a customs invoice needs to be added. You can either submit it as an order document with the POST /orders call or react to the webhook after order was placed and use this endpoint. Parameters: - `invoice` (formData, file): Merchant invoice file Responses: - 201: Success, merchant invoice has been uploaded - 401: Unauthorized (no credentials or not eligible for ordering) - 422: Validation failed, details in response body #### PUT /order/{reference}/set-onhold: Set onhold Orders with Flag Onhold will not be send to production until flag is released. Orders can be set to onhold until they are pushed to production Responses: - 204: Success, orderProduct customized #### GET /integration/{integrationreference}/{integrationOrderId}/reference: Get OrderReference Get shirtigo order reference for given integrationId and integration orderId Responses: - 204: Success, orderProduct customized #### POST /orders/predict-price: Calculate price Calculate the full price (incl. shipping and taxes) for the selected order candidate. This can be done *before* ordering. The parameters are the same as to the "Create Order" endpoint. JSON body: - `delivery` (OrderAddress, required): Delivery address of the recipient. - `sender` (OrderAddress): Sender address printed on the parcel. Must be a physical address in Germany. Default: the address of the account. - `gpsr-manufacturer` (OrderAddress): Manufacturer address for the product safety information (GPSR). Default: the setting of the account. - `gpsr-representative` (OrderAddress): Address of the responsible person in the EU for the product safety information (GPSR). Default: the setting of the account. - `products` (array of object, required): List of products to order - `sku` (string): SKU of existing product or warehouse product (starts with 'WV-') - `base_product_sku` (string): SKU of base product variant for custom items - `amount` (integer): Amount of this product - `customizations` (object): Custom fields for this product - `my_textfield_1` (string) - `my_textfield_2` (string) - `branding` (object): Branding information for this product - `hangtag_reference` (string): Reference of the hangtag attached to the product. - `product_packaging_reference` (string): Reference of the product packaging, e.g. a polybag. - `imprint_reference` (string): Reference of the imprint, e.g. a neck print. - `label_reference` (string): Reference of the label sewn into the product. - `processings` (array of object): Print data per print area. Required with base_product_sku and ignored for products ordered by sku. - `processingarea_type` (string): Print area on the base product: front, back, sleeve-left, sleeve-right or back-inside. It must be available on the base product and is usually used once per product. - `processingmethod` (string): Print method, e.g. dtg, dtf, embroidery or sublimation. It must be available for this print area on the base product. Default: the only method of the print area, or dtg if there are several. - `design_url` (string): Public URL of the print file (PNG or JPEG). Required unless design_reference is given. - `design_reference` (string): Reference of a design uploaded beforehand via the Design API. Alternative to design_url. - `width` (integer): Width of the print in millimetres. Send width or height, the other follows from the aspect ratio of the design. width plus twice the absolute offset_center must fit into the print area. - `height` (integer): Height of the print in millimetres. height plus offset_top must fit into the print area. - `offset_top` (integer): Distance in millimetres from the top edge of the print area to the top edge of the design. Default 0. - `offset_center` (integer): Horizontal shift in millimetres of the design centre from the centre line of the print area, 0 means centred. Default 0. - `force_position` (boolean): true uses the offsets exactly as given for every size. false (default, recommended) adjusts the position per garment size automatically. - `extract_size_and_position` (boolean): Treat design_url as a print file covering the whole print area at 300 dpi: transparent margins are trimmed and size and offsets are taken from the visible content. For dtg, dtf, sublimation and poster. - `resize_to_processingarea` (boolean): Scale the design down proportionally if it would not fit into the print area. - `ignore_validation` (boolean): Skip the minimum resolution check of the design (1000 px in width or height). Default true for design_url. - `mockups` (array of integer): IDs of the product mockups to render the product images with. Default: the standard mockups of the print area. - `packaging_branding` (object): Order-level packaging and branding items. These are added once per order regardless of the number of products. - `first_packin_reference` (string): Reference to the first packin (packaging insert) to be added to the order - `second_packin_reference` (string): Reference to the second packin (packaging insert) to be added to the order - `order_packaging_reference` (string): Reference to the order packaging (e.g., box, envelope) to be used for the entire order - `sticker_reference` (string): Reference to the sticker to be applied to the order - `default_product_branding` (object): Default branding items to be applied to each product in the order. These are applied per product unless overridden by product-specific branding. - `hangtag_reference` (string): Reference to the hangtag to be attached to each product - `imprint_reference` (string): Reference to the imprint to be applied to each product - `label_reference` (string): Reference to the label to be attached to each product - `product_packaging_reference` (string): Reference to the product packaging (e.g., polybag) to be used for each product - `packins` (object): Legacy packin structure (deprecated, use packaging_branding and default_product_branding instead) - `first_packin_reference` (string): Reference to the first packin - `second_packin_reference` (string): Reference to the second packin - `order_packaging_reference` (string): Reference to the order packaging - `sticker_reference` (string): Reference to the sticker - `hangtag_reference` (string): Reference to the hangtag - `imprint_reference` (string): Reference to the imprint - `label_reference` (string): Reference to the label - `product_packaging_reference` (string): Reference to the product packaging - `fulfillment_mode_key` (string): Choose a special fulfilment mode for this order - `billing_method_reference` (string): Reference of billing method used for this order - `external_reference` (string): Your internal reference for the order - `check_unique_external_reference` (boolean): Ensures that the provided external reference is unique within the account. Defaults to true when `external_reference` is provided. Only orders with an order_status_id below 90 are taken into account, so a reference used by a canceled or payment-failed order becomes available again. On a collision the request is rejected. - `documents` (object): Optional document references for the order - `delivery_receipt` (object) - `media_reference` (string) - `external_reference` (string) - `merchant_invoice` (object) - `media_reference` (string) - `external_reference` (string) - `return_label` (object) - `external_reference` (string) - `carrier_key` (string) - `shipping-label` (object) - `media_reference` (string) - `shipping_handle` (string) - `tracking_number` (string) Responses: - 200: Success, price has been calculated → object - 422: Validation failed, details in response body #### POST /orders/available-fulfillment-modes: Get available fulfillment modes Get a list of all fulfillment modes which can be used for this order. This endpoint can be used to collect the available options in a checkout process. JSON body: - `delivery` (OrderAddress, required): Delivery address of the recipient. - `sender` (OrderAddress): Sender address printed on the parcel. Must be a physical address in Germany. Default: the address of the account. - `gpsr-manufacturer` (OrderAddress): Manufacturer address for the product safety information (GPSR). Default: the setting of the account. - `gpsr-representative` (OrderAddress): Address of the responsible person in the EU for the product safety information (GPSR). Default: the setting of the account. - `products` (array of object, required): List of products to order - `sku` (string): SKU of existing product or warehouse product (starts with 'WV-') - `base_product_sku` (string): SKU of base product variant for custom items - `amount` (integer): Amount of this product - `customizations` (object): Custom fields for this product - `my_textfield_1` (string) - `my_textfield_2` (string) - `branding` (object): Branding information for this product - `hangtag_reference` (string): Reference of the hangtag attached to the product. - `product_packaging_reference` (string): Reference of the product packaging, e.g. a polybag. - `imprint_reference` (string): Reference of the imprint, e.g. a neck print. - `label_reference` (string): Reference of the label sewn into the product. - `processings` (array of object): Print data per print area. Required with base_product_sku and ignored for products ordered by sku. - `processingarea_type` (string): Print area on the base product: front, back, sleeve-left, sleeve-right or back-inside. It must be available on the base product and is usually used once per product. - `processingmethod` (string): Print method, e.g. dtg, dtf, embroidery or sublimation. It must be available for this print area on the base product. Default: the only method of the print area, or dtg if there are several. - `design_url` (string): Public URL of the print file (PNG or JPEG). Required unless design_reference is given. - `design_reference` (string): Reference of a design uploaded beforehand via the Design API. Alternative to design_url. - `width` (integer): Width of the print in millimetres. Send width or height, the other follows from the aspect ratio of the design. width plus twice the absolute offset_center must fit into the print area. - `height` (integer): Height of the print in millimetres. height plus offset_top must fit into the print area. - `offset_top` (integer): Distance in millimetres from the top edge of the print area to the top edge of the design. Default 0. - `offset_center` (integer): Horizontal shift in millimetres of the design centre from the centre line of the print area, 0 means centred. Default 0. - `force_position` (boolean): true uses the offsets exactly as given for every size. false (default, recommended) adjusts the position per garment size automatically. - `extract_size_and_position` (boolean): Treat design_url as a print file covering the whole print area at 300 dpi: transparent margins are trimmed and size and offsets are taken from the visible content. For dtg, dtf, sublimation and poster. - `resize_to_processingarea` (boolean): Scale the design down proportionally if it would not fit into the print area. - `ignore_validation` (boolean): Skip the minimum resolution check of the design (1000 px in width or height). Default true for design_url. - `mockups` (array of integer): IDs of the product mockups to render the product images with. Default: the standard mockups of the print area. - `packaging_branding` (object): Order-level packaging and branding items. These are added once per order regardless of the number of products. - `first_packin_reference` (string): Reference to the first packin (packaging insert) to be added to the order - `second_packin_reference` (string): Reference to the second packin (packaging insert) to be added to the order - `order_packaging_reference` (string): Reference to the order packaging (e.g., box, envelope) to be used for the entire order - `sticker_reference` (string): Reference to the sticker to be applied to the order - `default_product_branding` (object): Default branding items to be applied to each product in the order. These are applied per product unless overridden by product-specific branding. - `hangtag_reference` (string): Reference to the hangtag to be attached to each product - `imprint_reference` (string): Reference to the imprint to be applied to each product - `label_reference` (string): Reference to the label to be attached to each product - `product_packaging_reference` (string): Reference to the product packaging (e.g., polybag) to be used for each product - `packins` (object): Legacy packin structure (deprecated, use packaging_branding and default_product_branding instead) - `first_packin_reference` (string): Reference to the first packin - `second_packin_reference` (string): Reference to the second packin - `order_packaging_reference` (string): Reference to the order packaging - `sticker_reference` (string): Reference to the sticker - `hangtag_reference` (string): Reference to the hangtag - `imprint_reference` (string): Reference to the imprint - `label_reference` (string): Reference to the label - `product_packaging_reference` (string): Reference to the product packaging - `fulfillment_mode_key` (string): Choose a special fulfilment mode for this order - `billing_method_reference` (string): Reference of billing method used for this order - `external_reference` (string): Your internal reference for the order - `check_unique_external_reference` (boolean): Ensures that the provided external reference is unique within the account. Defaults to true when `external_reference` is provided. Only orders with an order_status_id below 90 are taken into account, so a reference used by a canceled or payment-failed order becomes available again. On a collision the request is rejected. - `documents` (object): Optional document references for the order - `delivery_receipt` (object) - `media_reference` (string) - `external_reference` (string) - `merchant_invoice` (object) - `media_reference` (string) - `external_reference` (string) - `return_label` (object) - `external_reference` (string) - `carrier_key` (string) - `shipping-label` (object) - `media_reference` (string) - `shipping_handle` (string) - `tracking_number` (string) Responses: - 200: Success → object - 422: Validation failed, details in response body #### POST /orders/{order_reference}/repay: Retry payment Set the order payment method to the current user's payment method and retry credit card capture. Parameters: - `order_reference` (path, string, required): The unique reference identifier of the order Responses: - 204: Success, order has been paid. - 400: Payment failed (either duplicate payment or an error occured). #### POST /orders/{order_reference}/cancel: Cancel order Set the order status to canceled. Parameters: - `order_reference` (path, string, required): The unique reference identifier of the order Responses: - 204: Success, order has been canceled. - 404: Order not found #### POST /orders/{order_reference}/comments: Add order comment Creates a new comment for a given order. Expects the comment text. Parameters: - `order_reference` (path, string, required): The unique reference identifier of the order JSON body: - `comment` (string) Responses: - 200: Success #### GET /orders/{order_reference}/invoice: Retrieve order invoice Fetches and returns the invoice for a given order as a PDF file. Parameters: - `order_reference` (path, string, required): Unique identifier of the order for which to retrieve the invoice Responses: - 200: Success, invoice is returned as a PDF file. → file - 404: Order not found or invoice not available. #### PUT /orderproduct/{reference}/customize: Customize OrderProduct Customize an existing OrderProduct for the currently authenticated user. Parameters: - `design_reference` (query, string): Reference of design - `processingarea_type_id` (query, integer): Processingarea to be customized. 1 = front, 2 = back - `width` (query, integer): Width of design in millimeter - `offset_top` (query, integer): Offset to collar in millimeter - `offset_center` (query, integer): x-shift to centerline in millimeter Responses: - 204: Success, orderProduct customized #### PUT /orderproduct/{reference}: Update OrderProduct Update an existing OrderProducts size or/and color for the currently authenticated user. Parameters: - `color_id` (query, integer): ID for new color - `size_id` (query, integer): ID for new size - `replacement_requested` (query, boolean): Use replacement product in case current Product is not available Responses: - 204: Success, orderProduct updated #### DELETE /orderproduct/{reference}: Delete OrderProduct Delete an existing OrderProducts for the currently authenticated user. Responses: - 204: Success, orderProduct deleted ### Design-API #### GET /designs: Get all designs Retrieve a paginated list of available designs of the currently authenticated user. Responses: - 200: Success → object #### GET /designs/{design-reference}: Get design Retrieve information about a single design. Only searches designs that are available to the currently authenticated user. Parameters: - `design-reference` (path, string, required): Unique design identifier Responses: - 200: Success → Design - 404: Design not found #### PUT /designs/{design-reference}: Update design Update a single design based on the parameters given in the form body. Parameters: - `design-reference` (path, string, required): Unique design identifier JSON body: - `name` (string): name of the design - `tags` (array of string): List of tags for this design - `colors` (array of object): List of hex-color pairs with the currently used color and the color to replace. Only available for embroidery design files. - `F2E9EA` (string) - `D0DF00` (string) Responses: - 200: Success → Design - 404: Design not found #### DELETE /designs/{design-reference}: Delete design Only designs by the currently authenticated user may be deleted. Parameters: - `design-reference` (path, string, required): Unique design identifier Responses: - 204: Success, design deleted - 404: Design not found #### POST /designs/file: Create design from file Create a new design from the submitted file. The file must be at least 1000px in width or height and must be formatted either as PNG- or JPEG raster image. The endpoint returns the created design. Parameters: - `file` (formData, file): Design file JSON body: - `processingmethod` (string): The processingmethod for which the design will be used (dtg, embroidery, engraving) - `name` (string): name for the design - `tags` (array of string): List of tags for this design Responses: - 200: Success, all file has been processed → Design - 422: Error, image file does not meet requirements #### POST /designs/base64: Create design from base64-encoded data Create a new design from the base64-encoded data The endpoint returns the created design. JSON body: - `data` (string): Base64-encoded data - `original_filename` (string): Original file name (optional) - `processingmethod` (string): The processingmethod for which the design will be used (dtg, embroidery, engraving) - `name` (string): name for the design - `tags` (array of string): List of tags for this design Responses: - 200: Success, URL has been processed → Design - 422: Error, URL / image file does not meet requirements #### POST /designs/url: Create design from URL Create a new design from the submitted URL. The endpoint returns the created design. JSON body: - `url` (string): Design file URL - `processingmethod` (string): The processingmethod for which the design will be used (dtg, embroidery, engraving) - `name` (string): name for the design - `tags` (array of string): List of tags for this design Responses: - 200: Success, URL has been processed → Design - 422: Error, URL / image file does not meet requirements ### Integration-API #### GET /integrations/{integration_id}: Get UserIntegration Some of the listed resources are available as optional includes (add to the query ?include=firstInclude,secondInclude.subInclude). The available includes for this endpoint are: fulfillmentPolicy, regions, defaultStock JSON body: - `syncs` (integer): Includes current product states Responses: - 200: Success → UserIntegration - 404: integration not found #### PUT /integrations/{integration_id}: Update UserIntegration Update settings for a single user integration. The endpoint returns the updated integration. JSON body: - `is_auto_onhold` (boolean): Indicates if order is automatically pushed to production (default = false) - `is_auto_pull_orders` (boolean): Indicates if orders will be pulled and processed by Cockpit automatically (default = false) - `default_first_packin_reference` (string): Default first packin added to orders received via this intergrations (optional) - `default_second_packin_reference` (string): Default second packin added to orders received via this intergrations (optional) - `default_hangtag_reference` (string): Default hangtag added to all textil products of orders received via this intergrations (optional) - `default_imprint_reference` (string): Default imprinted added to all tagless textil products of orders received via this intergrations (optional) - `default_label_reference` (string): Default label added to all textil products of orders received via this intergrations (optional) - `default_product_packaging_reference` (string): Default packaging used for all textil products of orders received via this intergrations (optional) - `default_order_packaging_reference` (string): Default packging used for all orders received via this intergrations (optional) - `default_sticker_reference` (string): Default sticker applied to packaging of orders received via this intergrations (optional) - `add_delivery_receipt` (boolean): Indicates if delivery receipt is added to orders received via this intergrations - `delivery_receipt_note` (string): Custom note on delivery receipt - `use_custom_product_name` (boolean): Indicates if custom product name is used on delivery receipt - `default_product_inventory` (integer): Default stock-inventory for UserIntegration (Optional) - `sales_channel` (string): UserIntegration sales channel - `fulfillment_mode_key` (string): Key of the fulfillment mode to be used if available for orders with this integration - `fulfillmentPolicy` (array of object): Fulfillment-Policy - `national_shipping_cost` (float): National shipping prise - `international_shipping_cost` (float): International shipping prise - `international_additional_shipping_cost` (float): International shipping prise for additional articles - `handling_time` (integer): Maximum number of business days the seller needs for preparing and shipping an order after receiving a cleared payment for the order. - `regions` (array of object): Declaration of regions a packet will be sent to - `region_included` (string): Region an oder may be shipped. Responses: - 200: Success, URL has been processed - 422: Error, Something goes wrong #### DELETE /integrations/{integration_id}: Delete UserIntegration Uninstall this integration from your 3rd party store and delete the integration. IMPORTANT: all synchronized products will be deleted as well in the 3rd party store. Parameters: - `design-reference` (path, string, required): Unique design identifier Responses: - 204: Success, integration uninstalled and deleted - 404: integration not found #### GET /integrations/{integration_id}/products: Get UserIntegration Some of the listed resources are available as optional includes (add to the query ?include=firstInclude,secondInclude.subInclude). The available includes for this endpoint are: colors, base_product, active_integration_syncs, integration_sync_log, integration_products, projectProductColors JSON body: - `syncs` (integer): Includes current product states Responses: - 200: Success → UserIntegration - 404: integration not found #### POST /integrations/sync-errors/{sync_id}/translate: Translate User Integration Sync Error Translate technical integration sync errors into user-friendly explanations Parameters: - `sync_id` (path, integer, required): ID of the campaign product integration sync Responses: - 200: Success → object - 404: Sync record not found or no access - 422: No error found in sync record - 500: Error processing AI request ### Stock-API #### GET /stock/base-products: Get stock of base products Returns the stock of all base product variants available to you, as an object keyed by base_product_sku (as returned by the Catalog-API). Pass `skus` to restrict the result to a comma separated list of SKUs. Unknown SKUs are omitted from the result. Parameters: - `skus` (query, string): Comma separated list of base product SKUs Responses: - 200: Success → map of string → Stock #### GET /stock/products: Get stock of your products Returns the stock of all your product variants as an object keyed by the variant's integration_sku, plus the stock of your warehouse products keyed by their reference (WV-...). Pass `skus` to restrict the result to a comma separated list of integration SKUs and warehouse references. Unknown SKUs are omitted from the result. Parameters: - `skus` (query, string): Comma separated list of integration SKUs and warehouse references Responses: - 200: Success → map of string → ProductStock ### Branding-API #### POST /user/delivery-receipt-logo: Upload delivery receipt logo Upload a logo to your user account which is printed on the delivery receipt for your customers to increase the branding of your fulfillment The file needs to be a png with 900px x 385px (width x height). The endpoint returns an empty array with exit code 200. Parameters: - `file` (formData, file): Design file Responses: - 200: Success, delivery receipt logo was uploaded - 422: Error, image file does not meet requirements #### DELETE /user/delivery-receipt-logo/{integration_id}: Delete a delivery receipt logo The endpoint returns an empty array with exit code 200. Parameters: - `integration_id` (path, string): Unique integration identifier Responses: - 200: Success, delivery receipt logo was deleted #### POST /user/sticker: Upload sticker logo Upload a sticker to your user account which is printed on packaging for your customers to increase the branding of your fulfillment The file needs to be a png with 560px x 560px (width x height). The endpoint returns an empty array with exit code 200. Parameters: - `file` (formData, file): Design file - `assign` (formData, boolean): Whether to assign this sticker as the default for the user or integration (defaults to true) Responses: - 200: Success, sticker was uploaded - 422: Error, image file does not meet requirements #### DELETE /user/sticker/{integration_id}: Delete sticker logo The endpoint returns an empty array with exit code 200. Parameters: - `integration_id` (path, string): Unique integration identifier Responses: - 200: Success, sticker was deleted #### PUT /user/packin: Update user packin Update an existing packin (packaging insert) name for the authenticated user. JSON body: - `reference` (string, required): Unique packin reference identifier - `name` (string, required): New name for the packin Responses: - 204: Packin updated successfully - 404: Packin not found - 422: Validation failed - name is required #### POST /user/packin: Create user packin Create a new custom packin (packaging insert) for the user account. Packings include items like hangtags, labels, stickers, and custom packaging materials. JSON body: - `name` (string, required): Name of the packin - `type` (string, one of `packin`, `hangtag`, `imprint`, `label`, `sticker`, required): Type of packin - `position_key` (string): Position key for placement - `size_id` (integer): Size identifier - `color_ids` (string): Color identifiers - `weight` (integer): Weight in grams (required for packin, hangtag types) - `width` (integer): Width in mm (varies by type: packin/hangtag 1-150mm, imprint 50-100mm, label 15-80mm) - `height` (integer): Height in mm (varies by type: packin/hangtag 1-200mm, imprint 20-80mm, label 10-35mm) - `depth` (integer): Depth in mm - `inventory` (integer): Inventory quantity - `preview_media_id` (integer): Preview media object ID - `production_file_media_id` (integer): Production file media object ID - `admin_packin_price_net` (number): Custom price (only for users with extended API access) Responses: - 200: Packin created successfully → UserPackin - 400: Bad request - Unknown packin type - 422: Validation failed #### DELETE /user/packin: Delete user packin Delete an existing packin (packaging insert) for the authenticated user. Only inactive packings can be deleted - warehoused (active) packings must be handled by customer support. JSON body: - `reference` (string, required): Unique packin reference identifier Responses: - 204: Packin deleted successfully - 403: Cannot delete active/warehoused packin - contact customer support - 404: Packin not found #### GET /user/packin/{reference}: Get single user packin Retrieve details of a specific packin (packaging insert) by reference for the authenticated user. Parameters: - `reference` (path, string, required): Unique packin reference identifier Responses: - 200: Packin details retrieved successfully → UserPackin - 404: Packin not found #### GET /user/packings: Get user packings Retrieve all packings (packaging inserts) available to the authenticated user. This includes both user-created packings and global packings available to all users. Responses: - 200: List of user packings retrieved successfully → array of UserPackin #### GET /user/packings/prices: Get packin prices Retrieve current pricing information for different types of packings. Prices are returned with and without VAT for cost calculation purposes. Responses: - 200: Packin pricing information retrieved successfully → object ### Warehousing-API #### GET /inbound/{reference}: Get InboundShipping Return the WarehouseInboundShipment. Some of the listed resources are available as optional includes (add to the query ?include=firstInclude,secondInclude.subInclude). The available includes for this endpoint are: items Parameters: - `reference` (query, string): Reference of the Variant to be updated - `include` (query, string): Which linked entities you want to include into the response, separated by comma. Available includes are Items Responses: - 200: Success → WarehouseInboundShipment - 404: WarehouseInboundShipment not found #### DELETE /inbound/{reference}: Delete InboundShipping Deletes WarehouseInboundShipment Parameters: - `reference` (query, string): Reference of the InboundShipment to be deleted Responses: - 200: Success → WarehouseInboundShipment - 404: WarehouseInboundShipment not found #### POST /inbound/{reference}/perform: Perform solution for inbound shipment Execute a solution for an inbound shipment. The solution can be paid via wallet balance or direct debit billing method. Parameters: - `reference` (path, string, required): Reference of the inbound shipment JSON body: - `solution` (string, one of `ship-again`, `discard`, `store`, `bulk-store`, required): Solution key to execute for the inbound shipment. Available options: ship-again, discard, store, bulk-store - `billing_method` (string, required): Reference of the billing method to use for payment - `address` (object): Optional address information for the solution - `company` (string): Company name - `firstname` (string): First name - `lastname` (string): Last name - `care_of` (string): Care of - `street` (string): Street address - `postcode` (string): Postal code - `city` (string): City - `country` (string): Country code (ISO 2-letter) Responses: - 200: Success, solution has been executed - 401: Unauthorized (no credentials or not eligible) - 404: Inbound shipment not found - 422: Validation failed or payment method issues → object #### GET /warehousing/inventory: Get WarehouseProductVariant Returns the list of WarehouseProductVariants assiciated with the particular User. Parameters: - `include` (query, string): Which linked entities you want to include into the response, separated by comma. Available includes are Image and Product - `search` (query, string): Search in in variants by the name - `page` (query, integer): Current page - `items` (query, integer): Number of items per page - `sort` (query, string): Column used to sort the results. You can sort by: name, reference, created_at, updated_at - `order` (query, string): Direction for sorting - `type` (query, string): Type of the products to query. Options are warehouse, return and all. Responses: - 200: Success → object #### GET /warehousing/products/{reference}: Get WarehouseProduct Return the WarehouseProduct. Some of the listed resources are available as optional includes (add to the query ?include=firstInclude,secondInclude.subInclude). The available includes for this endpoint are: variant, variants Parameters: - `reference` (query, string): Reference of the Variant to be updated - `include` (query, string): Which linked entities you want to include into the response, separated by comma. Available includes are Variant and Variants Responses: - 200: Success → WarehouseProduct - 404: WarehouseProduct not found #### PUT /warehousing/products/{reference}: Update WarehouseProduct Updates WarehouseProduct with default Variant and associated Variants Parameters: - `reference` (query, string): Reference of the WarehouseProduct to be updated JSON body: - `name` (string): Project name - `description` (string): Project description - `size` (string): Size of the default product's variant - `color` (string): Color of the default product's variant - `hs_code` (string): HS Code of default product's variant - `country_of_origin` (string): Country of Origin of default product's variant - `item_value` (integer): Item value in cents of default product's variant - `net_sales_price` (integer): Net sales price in cents of default product's variant - `depth_cm` (integer): Depth in cm of default product's variant - `width_cm` (integer): Width in cm of default product's variant - `height_cm` (integer): Height in cm of default product's variant - `weight_gram` (integer): Weight in grams of default product's variant - `needs_box_shipping` (boolean): Indicates whether the default product's variant should be shipping in a box - `min_stock_quantity` (integer): Minimal stock quantity of default product's variant - `image` (Media): WarehouseProduct variant image - `variants` (array of WarehouseProductVariant): The array of variants of the WarehouseProduct, excluding default one Responses: - 200: Success → WarehouseProduct - 404: WarehouseProduct not found #### POST /warehousing/products: Create WarehouseProduct Creates WarehouseProduct with default Variant and associated Variants JSON body: - `name` (string): Project name - `description` (string): Project description - `size` (string): Size of the default product's variant - `color` (string): Color of the default product's variant - `hs_code` (string): HS Code of default product's variant - `country_of_origin` (string): Country of Origin of default product's variant - `item_value` (integer): Item value in cents of default product's variant - `net_sales_price` (integer): Net sales price in cents of default product's variant - `depth_cm` (integer): Depth in cm of default product's variant - `width_cm` (integer): Width in cm of default product's variant - `height_cm` (integer): Height in cm of default product's variant - `weight_gram` (integer): Weight in grams of default product's variant - `needs_box_shipping` (boolean): Indicates whether the default product's variant should be shipping in a box - `min_stock_quantity` (integer): Minimal stock quantity of default product's variant - `image` (Media): WarehouseProduct image - `variants` (array of WarehouseProductVariant): The array of variants of the WarehouseProduct, excluding default one Responses: - 200: Success → WarehouseProduct #### PUT /warehousing/products/{product_reference}/variants/{reference}: Update WarehouseProductVariant Updates WarehouseProductVariant Parameters: - `product_reference` (path, string): Reference of the WarehouseProduct to which the updated Variant belongs to - `reference` (path, string): Reference of the Variant to be updated JSON body: - `size` (string): Size of the product's variant - `color` (string): Color of the product's variant - `hs_code` (string): HS Code of product's variant - `country_of_origin` (string): Country of Origin of product's variant - `item_value` (integer): Item value in cents of product's variant - `net_sales_price` (integer): Net sales price in cents of product's variant - `depth_cm` (integer): Depth in cm of product's variant - `width_cm` (integer): Width in cm of product's variant - `height_cm` (integer): Height in cm of product's variant - `weight_gram` (integer): Weight in grams of product's variant - `needs_box_shipping` (boolean): Indicates whether the product's variant should be shipping in a box - `min_stock_quantity` (integer): Minimal stock quantity of product's variant - `image` (Media): WarehouseProduct variant image Responses: - 200: Success → WarehouseProductVariant - 404: WarehouseProductVariant not found #### DELETE /warehousing/products/{product_reference}/variants/{reference}: Delete WarehouseProductVariant Deletes WarehouseProductVariant Parameters: - `product_reference` (query, string): Reference of the WarehouseProduct to which the deleted Variant belongs to - `reference` (query, string): Reference of the Variant to be deleted Responses: - 200: Success → WarehouseProductVariant - 404: WarehouseProductVariant not found #### PUT /warehousing/variants/{reference}: Update WarehouseProductVariant by Reference Updates WarehouseProductVariant Parameters: - `reference` (path, string, required): Reference of the Variant to be updated JSON body: - `name` (string): Project name - `description` (string): Project description - `size` (string): Size of the product's variant - `color` (string): Color of the product's variant - `hs_code` (string): HS Code of product's variant - `country_of_origin` (string): Country of Origin of product's variant - `item_value` (integer): Item value in cents of product's variant - `net_sales_price` (integer): Net sales price in cents of product's variant - `depth_cm` (integer): Depth in cm of product's variant - `width_cm` (integer): Width in cm of product's variant - `height_cm` (integer): Height in cm of product's variant - `weight_gram` (integer): Weight in grams of product's variant - `needs_box_shipping` (boolean): Indicates whether the product's variant should be shipping in a box - `min_stock_quantity` (integer): Minimal stock quantity of product's variant - `image` (Media): WarehouseProduct variant image Responses: - 200: Success → WarehouseProductVariant - 404: WarehouseProductVariant not found ### Webhook-API #### GET /webhooks: List webhooks Returns a list of webhooks with pagination and optional filtering. The following events are available: Order (.created, .updated, .shipped, .canceled, .clarification, .creation-failed), Design (.created, .updated, .rendering-failed, .deleted), Product (.created, .updated, .deleted), OrderProductItem.updated, OrderWarehouseProductItem.updated, GeneratedMedia.rendered, UserInboundShipping.created Parameters: - `items` (query, integer): Number of items per page - `sort_col` (query, string): Column to sort by - `sort_dir` (query, string): Sort direction (asc or desc) - `resource` (query, string): Filter by resource. See WebhookTypes objects for available options. - `action` (query, string): Filter by action. See WebhookTypes objects for available options. - `is_active` (query, boolean): Filter by active status - `include` (query, string): Comma-separated list of related resources to include in the response. Available resources: type, calls - `loaded_webhook_calls` (query, integer): Number of loaded webhook calls when the calls include is used Responses: - 200: Successful operation → object - 401: Unauthorized - 400: Bad request #### POST /webhooks: Create a new webhook Create a new webhook based on the provided data Parameters: - `resource` (formData, string): Resource for which this webhook should be registered. Required together with action if no types array is passed. - `action` (formData, string): Action for which this webhook should be registered. Required together with resource if no types array is passed. - `types` (formData, array of string): Array of webhook type keys as an alternative to providing resource and action. - `url` (formData, string, required): URL - `secret` (formData, string): Secret used to sign webhook calls. The raw JSON body is hashed with HMAC-SHA256 and transmitted as a lowercase hex string. Generated automatically when omitted. - `signature_header` (formData, string): Name of the request header that carries the signature. Defaults to `signature` when omitted. - `is_active` (formData, boolean): Indicates if the webhook is active. Responses: - 201: webhook created successfully → object - 400: Invalid input data - 401: Unauthorized #### GET /webhooks/{id}: Get a single webhook by ID Retrieve a single webhook by its reference ID. Parameters: - `id` (path, string, required): The reference ID of the webhook. - `include` (query, string): Comma-separated list of related resources to include in the response. Available resources: type, calls Responses: - 200: webhook retrieved successfully. → Webhook - 404: webhook not found. - 401: Unauthorized. #### PUT /webhooks/{id}: Update a webhook Updates the specified webhook with the provided information. Parameters: - `id` (path, string, required): webhook reference - `url` (formData, string, required): URL for the webhook. - `secret` (formData, string): Secret used to sign webhook calls. The raw JSON body is hashed with HMAC-SHA256 and transmitted as a lowercase hex string. - `signature_header` (formData, string): Name of the request header that carries the signature. Defaults to `signature` when omitted. - `is_active` (formData, boolean): Whether the webhook is active. Responses: - 200: Successful operation → UserWebhook - 400: Bad Request → ApiError - 401: Unauthorized → ApiError - 404: Not Found → ApiError #### DELETE /webhooks/{id}: Delete a webhook Delete a webhook by its reference. Parameters: - `id` (path, string, required): Reference of the webhook to delete. Responses: - 204: webhook successfully deleted. - 401: Unauthorized. Access token is missing or invalid. - 403: Forbidden. The user does not have the necessary permissions. - 404: Not Found. The specified webhook could not be found. #### PUT /webhooks/: Bulk Update webhook with same URL Updates the specified webhooks for the given URL with the provided information. Parameters: - `url` (formData, string, required): URL for the webhooks. - `secret` (formData, string): Secret used to sign webhook calls. The raw JSON body is hashed with HMAC-SHA256 and transmitted as a lowercase hex string. - `signature_header` (formData, string): Name of the request header that carries the signature. Defaults to `signature` when omitted. - `is_active` (formData, boolean): Whether the updated webhooks are active. - `drop_unlisted` (formData, boolean): Remove all webhooks for this URL, which are not part of the listed types. Responses: - 200: Successful operation → object - 400: Bad Request → ApiError - 401: Unauthorized → ApiError - 404: Not Found → ApiError #### POST /webhooks/{id}/test: Test a webook Test a webhook for a given resource. Parameters: - `id` (path, string, required): Reference of the webhook to delete. - `resource_id` (formData, string, required): Reference of the resource used to create thhe test webhook. Responses: - 204: test webhook successfully send. - 401: Unauthorized. Access token is missing or invalid. - 403: Forbidden. The user does not have the necessary permissions. - 404: Not Found. The specified webhook could not be found. #### GET /webhook-types: Get all User Webhook Types Retrieve a list of all available User Webhook Types Responses: - 200: A list of User Webhook Types → array of WebhookType ### oauth #### GET /oauth/authorize: Obtain authorization from user As part of the OAuth2 authorization-code flow, users have to be directed to this endpoint, with the query parameters filled in. If applicable, the user will then be prompted to log into their account and confirm that their data may be used by a third party client. For security reasons, the redirect URL has to be registered beforehand, the client ID and client secrets are also issued during registration. Parameters: - `response_type` (query, string, one of `code`, required): Response type - `redirect_url` (query, string, required): Redirect URL. Must match registered redirect URL. - `client_id` (query, string, required): Client ID (from registration) - `client_secret` (query, string, required): Client Secret (from registration) Responses: - 200: Success, body contains prompt for confirmation. - 302: Success, authorization has been previously granted, redirect to callback. - 401: Error, invalid client (client ID and/or secret is invalid). #### POST /oauth/token: Request access token This endpoint constitutes the second step of the OAuth2 authorization flow, obtaining an access token from the access code. This is done on the client side and does not require any user interaction. Parameters: - `grant_type` (formData, string, one of `authorization_code`, required): Grant type - `code` (formData, string, required): Code received in callback from /oauth/authorize - `client_id` (formData, string, required): Client ID (from registration) - `client_secret` (formData, string, required): Client Secret (from registration) Responses: - 200: Success, token issued. → object - 400: Error. → OAuthServerException - 401: Error, invalid client (client ID or secret are wrong). → OAuthServerException ## Data models Response objects referenced above. #### ApiError - `message` (string) - `errors` (object) - `status_code` (integer) #### CampaignIntegrationProduct - `integration_id` (integer): The cockpit internal id of the used user integration - `integration_product_id` (string): The identifier used by the integration application - `updated_at` (string): Timestamp of last update #### CampaignProduct - `id` (integer): Numerical identifier - `project` (string): Project reference - `project_name` (string): Project name - `name` (string): Product name - `custom_name` (string): User defined product name - `description` (string): Short description in HTML format - `tags` (array of string): List of tags for this design - `price` (Money): Net price - `shirtigo_price` (Money): Your purchase price for the first color/size variant - `seedshirt_price` (Money): Your purchase price for the product when selling the product via a seedshirt instant store - `sort_position` (integer): Numerical identifier - `colors` (array of CampaignProductColor): List of available colors - `is_available` (boolean): Is the product available? - `is_rendered` (boolean): Has the product been rendered? - `has_express` (boolean): Is the product available for express processing? - `images` (array of UtilProductImage): Product images - `brandings` (array of UserPackin): Product branding options - `base_product` (Product): Base product - `active_integration_syncs` (array of CampaignProductIntegrationSync): List of currently active synchronizations with integrations - `integration_sync_log` (array of CampaignProductIntegrationSync): History of synchronizations with integrations for this product - `integration_products` (array of CampaignIntegrationProduct): List of integration products (e.g. products in shopify) for this products - `updated_at` (string): Timestamp of last update #### CampaignProductColor - `id` (integer): Numerical identifier - `color` (string): Color name - `color_hex` (string): Hexadecimal RGB color value - `is_colored` (boolean): Is this a non trivial (b/w) color? - `sales_price` (Money): The price ypu specifiet for the product - `sort_position` (integer): Numerical index used for sorting - `sizes` (array of object): Available sizes - `id` (integer): Numerical identifier - `size` (string): Size abbreviation - `is_onlocalstock` (boolean): Is the item available on local stock? - `is_available` (boolean): Is item available in general, e.g. from supplier stock? - `sort_position` (integer): Numerical index used for sorting - `shirtigo_price` (Money): Your price for the product #### CampaignProductIntegrationSync - `integration_name` (string): Name of the integration application - `integration_id` (integer): The cockpit internal id of the used user integration - `integration_product_id` (string): The identifier used by the integration application - `is_syncing` (boolean): Is the product available? - `is_successful` (boolean): Has the product been rendered? - `in_queue` (boolean): Is the current sync-process still in queue? - `error` (string): Error message - `updated_at` (string): Timestamp of last update #### Country - `iso` (string): Two-letter identifier according to ISO 3166-1 - `name` (string): Country name #### Coupon - `coupon_code` (string): The identifier on the promo coupon - `coupon_type` (string): The type of the coupon (discount, free shipping, etc.) - `discount_type` (string): The type of discount, either percentage or euro - `discount_percent` (integer): The granted discount in percent on the cart value without handling and shipping (filled for discount type percentage) - `discount_netto` (Money): The granted discount without sales taxes in euro cent (filled for discount type euro) - `discount_brutto` (Money): The gross granted discount in euro cent (filled for discount type euro) - `is_active` (boolean): Activation status of coupon - `min_order_value` (Money): Minimal total value in euro cents for an order to make this coupon applicable - `is_expired` (boolean): Flag to indicate if the coupon is expired - `expiration_date` (string): Timestamp for the validity of the coupon code - `n_activations` (integer): Number of usages for this coupon - `remaining_activations` (integer): Number of remaining usages for this coupon - `new_user_only` (integer): Flag to indicate if the coupon is for new users only - `rate_limit_exceeded` (integer): Flag to indicate if the coupon was used too often in the last hour. - `has_orders` (integer): Flag to indicate if orders for user exist. #### Design - `reference` (string): Unique identifier of this design - `filename` (string): Design file name - `name` (string): Design Name - `width` (integer): Width of the design file in pixels - `height` (integer): Height of the design file in pixels - `filetype` (string): Extension of the design file name - `tags` (array of string): List of tags for this design - `processingmethod_key` (string): Indicates for which processingmethod the design can be used - `colors` (integer): Total number of colors in the color palette - `palette` (array of string): List of hex-codes of representative colors - `complementary_color` (string): Complementary color - `preview` (string): URL to preview image - `original_file` (string): URL to full resolution image - `is_processed` (boolean): Has the design been rendered? - `is_dark` (boolean): Is this a design with dark colors? - `is_editable` (boolean): Indicates if design colors can be updated - `is_ai_generated` (boolean): Indicated if design has been generated by AI - `created_at` (string): Timestamp of creation - `updated_at` (string): Timestamp of last update #### FulfillmentMode - `key` (string): A unique key to identify a fulfillment mode - `name` (string): The name of the fulfillment mode - `description` (string): A description of the fulfillment conditions for this mode - `is_per_order` (boolean): Flag to indicate if the surcharge for this mode is per order or per item - `price_net` (Money): The net price, either per order or per item, dependent in the is_per_order_setting - `fulfillment_days` (string): The number of fulfillment days for this fulfillment mode - `sort_weight` (string): Country name #### GeneratedMedia - `reference` (string, required) - `prompt` (string, required) - `user_prompt` (string, required) - `created_at` (string, required) - `variations` (array of GeneratedMediaVariation) - `mediaStyle` (MediaStyle) #### GeneratedMediaVariation - `reference` (string, required) - `url` (string, required) - `resolution` (string, required) - `status` (string, one of `pending`, `processing`, `done`, `failed`, required) - `response_prompt` (string, required) - `has_design` (boolean, required) - `safety_system_fail` (boolean) #### Media - `reference` (string): Reference - `url` (string): Media url - `filename` (string): The basename of the file #### MediaStyle - `id` (integer, required) - `name` (string, required) - `description` (string, required) - `key` (string, required) - `url` (string, required) #### Money - `amount` (integer): Price in cents - `currency_symbol` (string): Currency symbol - `currency_code` (string): Three letter ISO 4217 code - `currency_factor` (integer): Number of cents in one unit of currency #### MoneyVatInclude - `vat_rate` (float): Value added tax (VAT) rate in percent as an integer #### MoneyWithVat - `amount` (integer): Price in cents - `currency_symbol` (string): Currency symbol - `currency_code` (string): Three letter ISO 4217 code - `currency_factor` (integer): Number of cents in one unit of currency - `vat_rate` (float): Value added tax (VAT) rate in percent as an integer #### NewsPost - `id` (integer, required) - `name` (string, required) - `description` (string, required) - `key` (string, required) #### OAuthServerException - `error` (string, required): Machine readable error type. - `message` (string, required): Human readable error message. - `hint` (string): A helper hint. #### Order - `reference` (string): Unique identifier of this order - `net_price` (Money): Total net price of this order - `gross_price` (Money): Total gross price of this order - `vat_rate` (float): VAT rate in percent - `vat_amount` (Money): VAT amount - `status` (string): Human readable order status - `status_key` (string): Number of products - `invoice` (string): URL to download the invoice - `invoice_reference` (string): Invoice reference - `fulfillment` (object): Fulfillment details or `false` if no details are available - `reference` (object) - `status` (object) - `type` (object) - `delivery` (OrderAddress): Delivery address - `sender` (OrderAddress): Sender address - `bill` (OrderAddress): Billing address - `gpsr-manufacturer` (OrderAddress): Manufacturer's address for GPSR compliance - `gpsr-representative` (OrderAddress): Representative's address for GPSR compliance - `total_items` (integer): Total number of items in the order - `add_delivery_receipt` (boolean): Indicates if delivery receipt is added to order - `delivery_receipt_logo_reference` (string): Media reference for the logo added to delivery_receipt - `delivery_receipt_note` (string): Custom note on delivery receipt - `use_custom_product_name` (boolean): Use custom product name on delivery receipt - `created_at` (string): Timestamp of creation - `updated_at` (string): Timestamp of last update - `products` (object): Array of products in this order - `data` (array of OrderProduct): Returned Items - `packins` (object): Array of packins and hangtags in this order - `data` (array of OrderPackin): Returned Items - `payments` (object): Array of payments associated with this order - `data` (array of OrderPayment): Returned Items - `orderStatusEntries` (object): Array of status messages associated with this order - `data` (array of OrderStatusEntry): Returned Items - `shipping` (OrderShipping): Details on the shipping method, status and tracking (only present if order is being or has been shipped) - `shippings` (object): Shipments with assigned line items (partial deliveries) - `data` (array of OrderShipping): Returned Items - `documents` (object): Document references for the order - `delivery-receipt` (object) - `media_reference` (string) - `external_reference` (string) - `merchant-invoice` (object) - `media_reference` (string) - `external_reference` (string) - `return-label` (object) - `external_reference` (string) - `carrier_key` (string) #### OrderAddress Address - `type` (string): address type (delivery, sender, bill, gpsr-manufacturer, gpsr-representative - `title` (string): (Academic) title - `company` (string): Company name - `firstname` (string): First name - `lastname` (string): Last name - `care_of` (string): Care of (c/o) - `street` (string): Street and number - `postcode` (string): ZIP/area code - `city` (string): City - `country` (string): A country iso-code (ISO 3166-1 alpha2) as listed in the /delivery-countries endpoint - `email` (string): Contact email - `validation_error` (array of object): Parsed DHL preflight validation errors (null when valid or not checked) - `code` (string) - `message` (string) - `field` (string) - `severity` (string) #### OrderComment - `id` (integer): ID of the order comment - `comment` (string): Text of the order comment - `created_at` (string): Timestamp of creation #### OrderPackin - `id` (integer): Packin id - `amount` (integer): Number of items - `name` (string): Packin name - `type` (string): Packin type (hangtag or packin) - `net_total_price` (Money): Total price (net_unit_price*amount) - `net_unit_price` (Money): Net unit price #### OrderPayment - `id` (string): Unique transaction identifier - `status` (string): Payment status - `status_details` (string): Payment error description (if there is any) - `type` (string): Payment type - `net_amount` (Money): Net price - `gross_amount` (Money): Gross price - `vat_amount` (Money): VAT amount - `vat_rate` (float): VAT rate in percent - `updated_at` (string): Timestamp of last update #### OrderProduct - `id` (integer): Product id - `amount` (integer): Number of items - `base_product_sku` (string): SKU of the base product variant - `sku` (string): SKU of the customized product variant - `name` (string): Product name - `color` (string): Color name - `size` (string): Size name - `images` (array of UtilProductImage): Available image URLs - `net_total_price` (Money): Total price (net_unit_price*amount) - `net_unit_price` (Money): Net unit price - `campaign_reference` (string): Reference of the campaign - `campaign_name` (string): Name of the campaign - `campaign_product_id` (int): ID of the campaign product #### OrderProductItem - `reference` (string): Product reference - `preview_image_url` (string): Preview image url - `status_name` (string): Item Status name - `status_key` (string): Color name - `status_description` (string): Status description - `status_group` (string): Status group - `availability` (string): availability #### OrderRelation - `reference` (string): Unique identifier of this order - `net_price` (Money): Total net price of this order - `gross_price` (Money): Total gross price of this order - `vat_rate` (float): VAT rate in percent - `vat_amount` (Money): VAT amount - `status` (string): Human readable order status - `status_key` (string): Number of products - `total_items` (integer): Total number of items in the order - `created_at` (string): Timestamp of creation - `updated_at` (string): Timestamp of last update #### OrderShipping - `type` (string): Shipping type - `cost` (Money): Shipping price - `is_shipped` (boolean): Has the order been shipped yet? - `country_code` (string): Two letter country code - `tracking_code` (string): Carrier tracking code - `tracking_url` (string): Carrier tracking URL - `created_at` (string): Timestamp of creation - `updated_at` (string): Timestamp of last update #### OrderStatusEntry - `key` (string): Order status key - `status` (string): Human readable status - `description` (integer): Verbose status description - `created_at` (string): Timestamp of creation - `updated_at` (string): Timestamp of last update #### OrderWarehouseProduct - `reference` (string): Product Reference - `amount` (integer): Number of items - `name` (string): Product name - `sku` (string): SKU of ordered warehouseProductVariant - `net_total_price` (Money): Total price (net_unit_price*amount) - `net_unit_price` (Money): Net unit price #### OrderWarehouseProductItem - `reference` (string): Product Reference - `sku` (string): SKU of ordered warehouseProductVariant #### Pagination Pagination information - `total` (integer): Total number of items - `count` (integer): Number of items on current page - `per_page` (integer): Default number of items per page - `current_page` (integer): Index of current page - `total_pages` (integer): Total number of pages - `links` (object): URLs of adjacent pages - `previous` (string): URL of previous page - `next` (string): URL of next page #### Payment - `id` (string): Unique transaction identifier - `status` (string): Payment type - `status_title` (string): Payment description - `payment_reference` (string): Payment reference - `order` (Order): Order - `net_amount` (Money): Net price - `gross_amount` (Money): Gross price - `vat_amount` (Money): VAT amount - `vat_rate` (float): VAT rate in percent - `created_at` (string): Timestamp of creation #### Plan - `key` (string): A unique key to identify a plan - `name` (string): The name of the plan - `description` (string): The description of the plan - `type` (string): The type of the plan - `invoice_period` (integer): number of month in interval - `invoice_interval` (string): runtime of plan - `price_net` (Money): The net price for the plan and the given priode - `sort_weight` (integer): sort weight of the plan #### ProcessingMethod - `key` (string) - `name` (string) - `description` (string) - `type` (string) - `sort_weight` (integer) #### Product - `id` (integer): Numeric identifier of this product - `name` (string): Product name - `original_name` (string): brand product name - `shipping_category` (integer): Numeric identifier of the shipping category - `category_id` (integer): Numerical identifier of the product category - `category` (string): Name of the product category - `short_description` (string): Brief description of the product - `description` (string): Detailed description of the product - `one_line_description` (string): One-line description of the product - `designer_note` (string): special notes for designing the product - `material` (string): Material composition of the product - `hs_code` (string): Harmonized System code for international shipping - `thumbnail_image` (string): URL of the product's thumbnail image - `sizechart_image` (string): URL of the product size chart image - `is_active` (boolean): Indicates whether the product is active and available for orders - `product_category_id` (integer): Numeric identifier for the specific product category - `can_use_hangtag` (boolean): Indicates whether the product can use a hangtag - `can_use_imprint` (boolean): Indicates whether the product can use an imprint - `can_use_sewing_label` (boolean): Indicates whether the product can use a sewing label - `can_be_warehoused` (boolean): Indicates whether the product can be warehoused - `is_organic` (boolean): Indicates whether the product is made of organic materials - `recommended_sales_price` (object): Recommended sales price for the product - `manufacturer` (ProductManufacturer): Manufacturer information (included by default) - `images` (object): Product images - `data` (array of ProductImage): Returned Items - `colors` (object): Color information (included by default) - `data` (array of ProductColor): Returned Items - `processing_areas` (object): Available processing areas for customization (included by default) - `data` (array of ProductProcessingArea): Returned Items - `dimensions` (object): Product dimensions for different sizes (included by default) - `data` (array of ProductDimensions): Returned Items - `mockups` (object): Product mockup templates for design preview (included by default) - `data` (array of ProductMockup): Returned Items - `price` (object): Pricing information - `data` (array of ProductPrice): Returned Items - `sales_price` (object): Pricing information on sales - `data` (array of ProductPrice): Returned Items #### ProductColor - `id` (integer): Numerical identifier - `color` (string): Color name - `color_hex` (string): Hexadecimal RGB color value - `color_hex_contrast` (string): Hexadecimal RGB value of the second color of two-tone colors, e.g. the collar of a ringer shirt, null for single colors - `is_colored` (boolean): Is this a non trivial (b/w) color? - `is_heathered` (boolean): Indicates if the fabric is heathered - `sizes` (array of object): Available sizes - `id` (integer): Numerical identifier - `size` (string): Size abbreviation - `base_product_sku` (string): Our unique SKU for this base product variant. Recommended for use. - `brand_product_sku` (string): Brand-specific SKU for this base product variant. Can also be used as base_product_sku in POST /orders. - `is_onlocalstock` (boolean): Is the item available on local stock? - `is_discontinued` (boolean): Indicates if the product is discontinued - `sort_position` (integer): Numerical index used for sorting - `weight_gram` (integer): Weight in gram - `stock` (object): Stock information for the product variant - `local_stock` (integer): Amount available in local stock - `wholesale_stock` (integer): Amount available in wholesale stock - `wholesale_delivery_duration` (integer): Estimated delivery duration from wholesaler in days - `inbound_date` (string): Expected date when out-of-stock items will be replenished - `replacement_stock` (object): Information about replacement stock if applicable - `print_dimensions` (array of object): Print dimensions for the product - `processingarea_id` (integer): Numerical identifier for the print area - `processingarea_name` (string): Name of the print area (e.g., 'front', 'back') - `width_in_mm` (integer): Width of the print area in millimeters - `height_in_mm` (integer): Height of the print area in millimeters - `distance_printarea_top_to_collar_mm` (integer): Distance from the top of the processingarea to the collar in millimeters #### ProductDimensions - `size` (string): Product size name - `width` (integer): Width in mm - `height` (integer): Height in mm #### ProductImage - `id` (integer): Product Transformer Default Includes (automatically included in all responses): - manufacturer: Product manufacturer information - colors: Available product colors with sizes and stock information - processing_areas: Available areas for customization (front, back, sleeves, etc.) - dimensions: Product measurements for different sizes - mockups: Product mockup templates for design preview Available Optional Includes: - To include additional data, use the ?include parameter in the API request - Example: /api/products?include=colors.sizes,mockups.productMockupType Nested Includes: - mockups.productMockupType: Include mockup type information with each mockup - colors.*: Additional color variant information - `url` (string): Product Transformer Default Includes (automatically included in all responses): - manufacturer: Product manufacturer information - colors: Available product colors with sizes and stock information - processing_areas: Available areas for customization (front, back, sleeves, etc.) - dimensions: Product measurements for different sizes - mockups: Product mockup templates for design preview Available Optional Includes: - To include additional data, use the ?include parameter in the API request - Example: /api/products?include=colors.sizes,mockups.productMockupType Nested Includes: - mockups.productMockupType: Include mockup type information with each mockup - colors.*: Additional color variant information - `type` (string): Product Transformer Default Includes (automatically included in all responses): - manufacturer: Product manufacturer information - colors: Available product colors with sizes and stock information - processing_areas: Available areas for customization (front, back, sleeves, etc.) - dimensions: Product measurements for different sizes - mockups: Product mockup templates for design preview Available Optional Includes: - To include additional data, use the ?include parameter in the API request - Example: /api/products?include=colors.sizes,mockups.productMockupType Nested Includes: - mockups.productMockupType: Include mockup type information with each mockup - colors.*: Additional color variant information - `sort_weight` (integer): Product Transformer Default Includes (automatically included in all responses): - manufacturer: Product manufacturer information - colors: Available product colors with sizes and stock information - processing_areas: Available areas for customization (front, back, sleeves, etc.) - dimensions: Product measurements for different sizes - mockups: Product mockup templates for design preview Available Optional Includes: - To include additional data, use the ?include parameter in the API request - Example: /api/products?include=colors.sizes,mockups.productMockupType Nested Includes: - mockups.productMockupType: Include mockup type information with each mockup - colors.*: Additional color variant information - `created_at` (string): Product Transformer Default Includes (automatically included in all responses): - manufacturer: Product manufacturer information - colors: Available product colors with sizes and stock information - processing_areas: Available areas for customization (front, back, sleeves, etc.) - dimensions: Product measurements for different sizes - mockups: Product mockup templates for design preview Available Optional Includes: - To include additional data, use the ?include parameter in the API request - Example: /api/products?include=colors.sizes,mockups.productMockupType Nested Includes: - mockups.productMockupType: Include mockup type information with each mockup - colors.*: Additional color variant information - `updated_at` (string): Product Transformer Default Includes (automatically included in all responses): - manufacturer: Product manufacturer information - colors: Available product colors with sizes and stock information - processing_areas: Available areas for customization (front, back, sleeves, etc.) - dimensions: Product measurements for different sizes - mockups: Product mockup templates for design preview Available Optional Includes: - To include additional data, use the ?include parameter in the API request - Example: /api/products?include=colors.sizes,mockups.productMockupType Nested Includes: - mockups.productMockupType: Include mockup type information with each mockup - colors.*: Additional color variant information #### ProductManufacturer - `id` (integer): Numerical identifier - `name` (string): Manufacturer name #### ProductMockup - `id` (integer): Unique identifier of the mockup - `name` (string): Name of the mockup - `is_creator_editable` (boolean): Indicates if this mockup can be edited in the creator - `processingarea_key` (string): Key of the processing area this mockup belongs to - `width_px` (integer): Width of the processing area in pixels - `height_px` (integer): Height of the processing area in pixels - `offset_x_center_px` (integer): Horizontal offset from center in pixels - `offset_y_top_px` (integer): Vertical offset from top in pixels - `px_to_mm` (number): Conversion factor from pixels to millimeters - `is_default` (boolean): Indicates if this is the default mockup for this processing area - `thumbnail_url` (string): URL of the mockup thumbnail image - `image_url` (string): URL of the full mockup image - `cutout_mask_url` (string): URL of the cutout mask image (nullable) - `svg_url` (string): URL of the SVG template (nullable) - `is_legacy` (boolean): Indicates if this mockup uses legacy rendering method - `mockup_group_id` (integer): ID of the mockup group this mockup belongs to (nullable) - `productMockupType` (object): Mockup type information (included by default) #### ProductPrice - `amount` (integer): Product Transformer Default Includes (automatically included in all responses): - manufacturer: Product manufacturer information - colors: Available product colors with sizes and stock information - processing_areas: Available areas for customization (front, back, sleeves, etc.) - dimensions: Product measurements for different sizes - mockups: Product mockup templates for design preview Available Optional Includes: - To include additional data, use the ?include parameter in the API request - Example: /api/products?include=colors.sizes,mockups.productMockupType Nested Includes: - mockups.productMockupType: Include mockup type information with each mockup - colors.*: Additional color variant information - `currency` (string): Product Transformer Default Includes (automatically included in all responses): - manufacturer: Product manufacturer information - colors: Available product colors with sizes and stock information - processing_areas: Available areas for customization (front, back, sleeves, etc.) - dimensions: Product measurements for different sizes - mockups: Product mockup templates for design preview Available Optional Includes: - To include additional data, use the ?include parameter in the API request - Example: /api/products?include=colors.sizes,mockups.productMockupType Nested Includes: - mockups.productMockupType: Include mockup type information with each mockup - colors.*: Additional color variant information - `formatted` (string): Product Transformer Default Includes (automatically included in all responses): - manufacturer: Product manufacturer information - colors: Available product colors with sizes and stock information - processing_areas: Available areas for customization (front, back, sleeves, etc.) - dimensions: Product measurements for different sizes - mockups: Product mockup templates for design preview Available Optional Includes: - To include additional data, use the ?include parameter in the API request - Example: /api/products?include=colors.sizes,mockups.productMockupType Nested Includes: - mockups.productMockupType: Include mockup type information with each mockup - colors.*: Additional color variant information #### ProductProcessingArea - `position_id` (integer): Numerical identifier - `position_name` (string): Name of the printarea - `is_printable` (boolean): Flag to indicate if this area is available for printing. - `width_in_mm` (integer): Width of the printarea in millimeters - `height_in_mm` (integer): Height of the printarea in millimeters - `width` (integer): Width of the printarea in pixels - `height` (integer): Height of the printarea in pixels - `processing_method` (object): The processing method for this area definition - `data` (ProcessingMethod) - `offset_x_center_mm` (integer): Offset in mm for the area in x compared to a centered position - `offset_y_collar_mm` (integer): Offset in mm between the collar and the top of the area - `printable_area_margin_from_top` (integer): Distance between top and processable area top #### ProductProcessingPosition - `name` (string): Name of the position (translated) - `key` (string): Unique key to identify the position - `description` (string): Description of the position - `rel_position_x` (int): Relative horizontal position within the processing area in percent, where 0 represents the center of the coordinate system. - `rel_position_y` (int): Relative vertical position within the processing area in percent - `width_in_mm` (integer): Width of the position in millimeters - `height_in_mm` (integer): Height of the position in millimeters #### ProductStock - `base_product_sku` (string): SKU of the base product variant, null for warehouse products - `local_stock` (integer): Stock in our own warehouse, available for immediate production. Null if no stock information is available. - `wholesale_stock` (integer): Stock available at the wholesaler. Null for warehouse products or if no stock information is available. - `wholesale_delivery_duration` (string): Additional delivery days if the item has to be ordered from the wholesaler. Null for warehouse products. - `inbound_date` (string): Expected date the item is available again, only set while the wholesaler is out of stock. #### Project - `reference` (string, required): Unique identifier of this project - `name` (string, required): Project name - `type` (string, required): Type - `products_count` (integer): Number of products - `is_published` (boolean): Has the project been published? - `is_syncing` (array of array of boolean): Array with a list of all CampaignProductIntegrationSyncs of this campaign and its status, if it is currently syncing. - `is_queueing` (array of array of boolean): Array with a list of all CampaignProductIntegrationSyncs of this campaign and its status, if it is currently in queue. - `status` (string): Project status - `updated_at` (string): Timestamp of last update - `created_at` (string): Timestamp of initial creation - `processings` (object): Processings associated with this project - `data` (array of ProjectPrint): Returned Items #### ProjectPrint - `area` (string): Processing site - `position` (string): Processing position - `method` (string): Processing method - `height` (integer): Design height in millimeters - `width` (integer): Design width in millimeters - `offset_top` (integer): Vertical offset from top in millimeters - `offset_center` (integer): Horizontal offset from center in millimeters - `updated_at` (string): Timestamp of last update - `design` (Design) #### ProjectWithProducts - `reference` (string, required): Unique identifier of this project - `name` (string, required): Project name - `type` (string, required): Type - `products_count` (integer): Number of products - `is_published` (boolean): Has the project been published? - `is_syncing` (array of array of boolean): Array with a list of all CampaignProductIntegrationSyncs of this campaign and its status, if it is currently syncing. - `is_queueing` (array of array of boolean): Array with a list of all CampaignProductIntegrationSyncs of this campaign and its status, if it is currently in queue. - `status` (string): Project status - `updated_at` (string): Timestamp of last update - `created_at` (string): Timestamp of initial creation - `processings` (object): Processings associated with this project - `data` (array of ProjectPrint): Returned Items - `products` (array of Product): Products associated with this Project #### ProvisionalProduct - `name` (string): Product name - `description` (string): Short description - `colors` (array of ProductColor): List of available colors - `price` (Money): Net price - `base_product` (Product): Base product #### RejectionType - `id` (integer) - `name` (string) - `description` (string) - `created_at` (string) - `updated_at` (string) #### RenderingTask - `reference` (string, required): Unique identifier of the task - `external_reference` (string, required): An external reference to link back to client-side identifiers - `status` (string, required): Overall status of the task, derived from the status of its images. Can be 'pending', 'completed', or 'failed' based on the states of the images. - `created_at` (string, required): Timestamp of when the generated media was created - `RenderingTaskImage` (array of GeneratedMediaVariation): List of images associated with the task #### RenderingTaskImage - `reference` (string, required): Unique identifier of the image - `mockup_id` (integer, required): Identifier for the associated mockup - `base_product_id` (integer, required): Identifier for the base product - `base_product_color_id` (integer, required): Identifier for the color of the base product - `base_product_variants` (string, required): Serialized array of variants for the base product - `mockup_url` (string, required): URL to the mockup image if available; null if not available. Please note that rendered mockups will be deleted after 24 hours. - `resolution` (integer, required): Resolution of the generated image in pixels - `extension` (string, required): File extension type of the generated image - `status` (string, required): Current status of the image, e.g., 'pending', 'done', 'failed' - `error_message` (string, required): Error message if the status is 'failed', otherwise null #### ShipmentStatus - `key` (string): ShipmentStatus key - `status_group` (string): ShipmentStatus status group - `name` (string): Name of the ShipmentStatus - `description` (string): Description of the ShipmentStatus #### Stock - `local_stock` (integer): Stock in our own warehouse, available for immediate production. Null if no stock information is available. - `wholesale_stock` (integer): Stock available at the wholesaler. Null for warehouse products or if no stock information is available. - `wholesale_delivery_duration` (string): Additional delivery days if the item has to be ordered from the wholesaler. Null for warehouse products. - `inbound_date` (string): Expected date the item is available again, only set while the wholesaler is out of stock. #### User - `email` (string): Email address - `firstname` (string, required): First name(s) - `lastname` (string, required): Last name - `display_name` (string): Display name, e.g. first + last name - `user_group` (UserGroup) - `is_business` (boolean): Is a business customer - `title` (string): (Academical) title - `company_name` (string): Company name - `street` (string, required): Street and number, used for billing - `postcode` (string, required): ZIP code, used for billing - `city` (string, required): City, used for billing - `country` (string, required): Country, used for billing - `phone` (string): Phone nubmer - `sender_title` (string) - `sender_company_name` (string) - `sender_firstname` (string) - `sender_lastname` (string) - `sender_street` (string) - `sender_postcode` (string) - `sender_city` (string) - `sender_state` (string) - `sender_country` (string) - `sender_type` (string, one of `full`, `company`, `legacy`) - `fulfillment_key` (string): The desired fulfillment mode - `is_billing_valid` (boolean): Have billing options been filled out? - `has_orders` (boolean): Does user have orders? - `integration_count` (number): Number of active integrations - `is_auto_onhold` (boolean): Indicates if order is automatically pushed to production (default = false) - `integrations` (array of UserIntegration): List of integrations (connected applications) for this user - `updated_at` (string): Timestamp of last update - `add_delivery_receipt` (boolean): Indicates if delivery receipt is added to orders received via this intergrations - `delivery_receipt_note` (string): Custom note on delivery receipt - `default_delivery_receipt_logo_reference` (string): Default delivery receipt logo used for orders placed via dashboard - `delivery_receipt_logo` (string): Url to custom logo added to delivery slip and shipping lable for orders placed via dashboard - `use_custom_product_name` (boolean): Indicates if custom product name is used on delivery receipt - `default_first_packin_reference` (string): Default first packin added to orders placed via dashboard (optional) - `default_second_packin_reference` (string): Default second packin added to orders placed via dashboard (optional) - `default_hangtag_reference` (string): Default hangtag added to all textil products of orders placed via dashboard (optional) - `sticker_logo` (string): Url to custom sticker logo for orders placed via dashboard (optional) #### UserBillingMethod - `reference` (ABC123): Billing method reference - `recharge_amount` (integer): The amount in cents used to auto recharge wallet - `gateway` (string): billing method type - `last4` (string): last 4 digits of credit card - `provider` (string): credit card provider - `exp_month` (string): month credit card will expire - `exp_year` (string): year credit card will expire - `is_active` (boolean): indicates if billing method is the primary billing method for the user account #### UserBillingMethodReferenceAccount - `bank_owner` (ABC123): Billing method reference - `bank_iban` (integer): The amount in cents used to auto recharge wallet - `bank_bic` (string): billing method type #### UserCreditBalance - `credit_balance` (integer): The credit balance of the user - `image_generation` (object): Details about the user's daily image generation limit - `daily_limit` (integer) - `remaining` (integer) - `image_optimizations` (object): Details about the user's daily image optimization limit - `daily_limit` (integer) - `remaining` (integer) #### UserGroup - `id` (integer): Numerical group identifier - `type` (string): Group name - `cockpit_discount` (integer): Discount in percent - `quantity` (integer): Required number of sold products - `created_at` (string): Timestamp of creation - `updated_at` (string): Timestamp of last update #### UserInboundShipping - `reference` (string): Inbound shipping reference - `name` (string): Inbound shipping name - `carrier` (string): Carrier for the inbound shipping - `tracking_number` (string): Tracking number for the inbound shipping - `url` (string): URL for the inbound shipping details PDF - `count` (integer): Total number of items in the inbound shipping - `created_at` (string): Timestamp when the inbound shipping was created - `updated_at` (string): Timestamp when the inbound shipping was last updated - `deleted_at` (string): Timestamp when the inbound shipping was deleted (null if not deleted) - `shipmentStatus` (ShipmentStatus): shipmentStatus - `userInboundShippingStatus` (UserInboundShippingStatus): userInboundShippingStatus - `reason` (UserInboundShippingReason): reason - `solution` (UserInboundShippingSolution): solution - `items` (array of UserInboundShippingItem): List of items - `order` (Order): order - `billingOrder` (Order): billingOrder #### UserInboundShippingItem - `reference` (string): Inbound shipping item reference - `amount` (integer): Amount of the inbound shipping item - `should_store` (boolean): Flag indicating if the item should be stored - `created_at` (string): Timestamp when the inbound shipping item was created - `updated_at` (string): Timestamp when the inbound shipping item was last updated - `warehouse_product_variant` (WarehouseProductVariant): warehouse_product_variant - `user_packin` (UserPackin): user_packin - `order_product_item` (OrderProductItem): order_product_item - `order_warehouse_product_item` (OrderWarehouseProductItem): order_warehouse_product_item - `rejection_type` (RejectionType): rejection_type - `status` (UserInboundShippingItemStatus): status #### UserInboundShippingItemStatus - `id` (integer): Status Id - `name` (string): Status name - `description` (string): Status description - `key` (string): Status key - `group` (string): Status group #### UserInboundShippingReason - `key` (string): Reason key - `group` (string): Reason group - `name` (string): Localized name - `description` (string): Localized description - `user_action_required` (boolean): Indicates if user action is required - `item_check_required` (boolean): Indicates if item check is required - `max_open_days` (integer): Maximum number of open days #### UserInboundShippingRejectionType - `id` (integer): Rejection type Id - `key` (string): Rejection type key - `name` (string): Rejection type name - `description` (string): Rejection type description #### UserInboundShippingSolution - `id` (integer, required) - `key` (string, required) - `name` (string, required) - `description` (string, required) - `has_shipping_fee` (boolean) - `can_use_solution` (boolean) - `created_at` (string, required) - `updated_at` (string, required) - `reasons` (array of UserInboundShippingReason): List of reasons #### UserInboundShippingStatus - `id` (integer): User inbound shipping status id - `name` (string): User inbound shipping statuss name - `key` (string): User inbound shipping status key - `description` (string): User inbound shipping status description #### UserIntegration - `id` (integer): The internal cockpit id of the used user integration - `app` (string): Name of the integration application - `name` (string): The name of the integration, i.e. the shop URL - `reference` (uuid): Reference of the integration - `expires_in` (string): Date of expire - `sales_channel` (string): Integration sales channel - `image_type` (string): Type of image transfered to external shop - `image_quality` (string): Quality of image transfered to external shop - `fulfillment_mode_key` (string): The fulfillment mode used when orders are placed via this integration - `is_token_revoked` (boolean): Flag if the access token has been revoked and needs to be updated - `is_pull_orders` (boolean): Flag if manually reimporting of orders is enabled. - `is_auto_pull_orders` (boolean): Flag if automatically reimporting of orders is enabled. - `default_first_packin_reference` (string): Default first packin added to orders received via this intergrations (optional) - `default_second_packin_reference` (string): Default second packin added to orders received via this intergrations (optional) - `default_hangtag_reference` (string): Default hangtag added to all textil products of orders received via this intergrations (optional) - `default_imprint_reference` (string): Default imprinted added to all tagless textil products of orders received via this intergrations (optional) - `default_label_reference` (string): Default label added to all textil products of orders received via this intergrations (optional) - `default_product_packaging_reference` (string): Default packaging used for all textil products of orders received via this intergrations (optional) - `default_order_packaging_reference` (string): Default packging used for all orders received via this intergrations (optional) - `default_sticker_reference` (string): Default sticker applied to packaging of orders received via this intergrations (optional) - `add_delivery_receipt` (boolean): Indicates if delivery receipt is added to orders received via this intergrations - `total_branding_count` (boolean): The count of non-null branding fields in the integration - `delivery_receipt_note` (string): Custom note on delivery receipt - `default_delivery_receipt_logo_reference` (string): Default delivery receipt logo used for orders received via this intergrations (optional) - `delivery_receipt_logo` (string): Url to custom logo added to delivery slip for orders received via this intergrations (optional) - `use_custom_product_name` (boolean): Indicates if custom product name is used on delivery receipt - `sticker_logo` (string): Url to custom sticker logo for orders received via this intergrations (optional) - `is_auto_onhold` (boolean): Indicates if order is automatically pushed to production (default = false) - `is_refresh_token_expired` (boolean): Indicates if the (OAuth-)refresh-token is expired. Currently only used for ebay. (default = false) #### UserPackin - `reference` (ABC123): Packin reference - `name` (string): Packin name - `type` (string): Packin type (packin or hangtag) - `position` (string): Position of Label - `size_id` (integer): Product size ID for which imprint will be applied - `color_ids` (string): Array of product color ids for which imprint or label will be applied - `weight_gram` (integer): Weight of one single packin in gram - `width_mm` (integer): Width of the packin in millimeter - `height_mm` (integer): Height of the packin in millimeter - `initial_inventory` (integer): Initial stock level of packin - `inventory` (integer): Actual stock level of packin - `preview_path` (string): Path to packin preview - `is_active` (boolean): Packins receives status is_active, when article is checked and warehoused - `stocking_costs` (Money): Daily costs for stocking packin - `item_costs` (Money): Costs for adding one packin to an order #### UserPayment - `reference` (string): payment reference - `type` (string): payment type - `status` (string): payment status - `amount` (integer): payment amount - `billing_method_reference` (string): reference of the associated billing method - `is_auto_recharged` (boolean): indicates if payment was trigger by user or via auto-recharge #### UserReturnPortal - `name` (string): The name of the return portal - `reference` (string): reference of the return portal - `subdomain` (string): subdomain of the return portal - `url` (string): url of the return portal - `legal_imprint_url` (string): url to the shop imprint - `legal_privacy_url` (string): url to the privacy policy - `is_active` (boolean): indicates if return portal is active - `accept_complaints_only` (boolean): indicates if return portal accepts complaints only and no withdrawals - `accept_personalized_items` (boolean): indicates if customer can return personalized items - `allow_refund_for_personalized_items` (boolean): indicates if customer can select refund as solution of persoanlized items or just a exchange - `allow_exchange` (boolean): Indicates whether a product can be exchanged for another colour or size - `withdrawal_period_days` (integer): Indicates how many days after shipment a product can be returned - `complaint_period_days` (integer): Indicates how many days after shipment a product can be complained - `mobile_logo_url` (string): url of the logo of the mobile viewport - `desktop_logo_url` (string): url of the logo of the desktop viewport - `primary_color_hex` (string): hex code for the primary css color - `secondary_color_hex` (string): hex code for the secondary css color #### UserShop - `id` (integer): The internal cockpit id of the one-click-shop - `app` (string): Name of the integration application - `name` (string): The name of the one-click-shop - `url` (string): The unique url identifier of the one-click-shop - `seedshirt_url` (string): The public url of the one-click-shop - `seedshirt_account_url` (string): The url of the one-click-shop admin interface #### UserSubscription - `name` (string): The name of the plan - `valid_from` (string): The date from which is subscription is valid - `valid_until` (string): The date until which the subscription is valid - `is_canceled` (boolean): indicates if subscription was canceled - `is_renewed` (boolean): indicates if subscription was renewed - `is_valid` (boolean): indicates if subscription is still valid #### UserWebhook - `id` (integer) - `url` (string) - `is_active` (boolean) - `secret` (string) - `signature_header` (string): Name of the request header that carries the signature, `signature` by default - `created_at` (string) - `updated_at` (string) #### UtilProductImage - `id` (integer): id of the image object - `color` (string): Color name - `area` (string): Processing area name - `urls` (object): Product name - `small` (string): URL for small preview image. - `large` (string): URL for large preview image. #### WarehouseInboundShipment - `id` (1): id - `reference` (string): Reference - `name` (string): Name of the Warehouse inbound shipment - `carrier` (string): Carrier's name - `tracking_number` (string): Shipment tracking number - `url` (string): Inbound shipment URL - `count` (string): Count of the items in the shipment - `created_at` (string): Timestamp when the record was created - `updated_at` (string): Timestamp when the record was updated - `deleted_at` (string): Timestamp when the record was deleted #### WarehouseProduct - `id` (1): id - `reference` (string): Reference - `name` (string): Name of the Warehouse product - `description` (string): Description of the Warehouse product - `hs_code` (string): HS code of the item - `country_of_origin` (string): The name the country of origin - `color_id` (string): ID of the color of the item - `item_value` (integer): Value of the item - `net_sales_price` (integer): Net sales price of the item - `width_cm` (integer): Width of the item in cm - `height_cm` (integer): Height of the item in cm - `depth_cm` (integer): Depth of the item in cm - `weight_gram` (integer): Weight of the item in gramm - `needs_box_shipping` (boolean): Boolean if the item needs extra package for shipping - `min_stock_quantity` (integer): Minimum stock quantity of the item - `created_at` (string): Timestamp when the record was created - `updated_at` (string): Timestamp when the record was updated - `deleted_at` (string): Timestamp when the record was deleted #### WarehouseProductVariant - `id` (1): id - `reference` (string): Reference - `product_reference` (string): Warehouse Product reference - `name` (string): Name of the Warehouse product variant - `description` (string): Description of the Warehouse product variant - `color_id` (string): ID of the color of the item - `size_id` (string): ID of the size of the item - `color` (string): Name of the color of the item - `size` (string): Name of the size of the item - `width_cm` (integer): Width of the item in cm - `height_cm` (integer): Height of the item in cm - `depth_cm` (integer): Depth of the item in cm - `weight_gram` (integer): Weight of the item in gramm - `item_value` (integer): Value of the item - `net_sales_price` (integer): Net sales price of the item - `shirtigo_price` (integer): Shirtigo sales price of the item - `min_stock_quantity` (integer): Minimum stock quantity of the item - `needs_box_shipping` (boolean): Boolean if the item needs extra package for shipping - `country_of_origin` (string): The name the country of origin - `hs_code` (string): HS code of the item - `created_at` (string): Timestamp when the record was created - `updated_at` (string): Timestamp when the record was updated - `deleted_at` (string): Timestamp when the record was deleted - `is_stored` (boolean): Boolean if the item is stored - `is_approved` (boolean): Boolean if the item is approved - `is_rejected` (boolean): Boolean if the item is rejected to store - `stock_amount` (integer): Current stock amount of the item #### Webhook - `id` (string): Unique identifier for the User Webhook - `user_webhook_type_key` (string): Key for the associated User Webhook Type - `url` (string): URL for the User Webhook - `secret` (string): Secret used to sign webhook calls. The raw JSON body is hashed with HMAC-SHA256 and transmitted as a lowercase hex string. - `signature_header` (string): Name of the request header that carries the signature, `signature` by default - `is_active` (boolean): Indicates if the User Webhook is active - `created_at` (string): Creation timestamp of the User Webhook - `updated_at` (string): Update timestamp of the User Webhook #### WebhookType - `id` (integer): Unique identifier for the webhook type - `key` (string): Key for the webhook type - `resource` (string): Resource for the webhook type - `action` (string): Action for the webhook type - `max_tries` (integer): Maximum number of tries for the webhook type - `name` (string): Name of the webhook type - `description` (string): Description of the webhook type