# 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`. ## Documentation - [Full reference for LLMs](https://cockpit.shirtigo.com/docs/llms-full.txt): this introduction, all guides and every endpoint with parameters in one Markdown file - [Core Concepts](https://cockpit.shirtigo.com/docs/getting-started/core-concepts/) - [Place Orders](https://cockpit.shirtigo.com/docs/getting-started/place-order/) - [Status & Webhooks](https://cockpit.shirtigo.com/docs/getting-started/status-webhooks/) - [Inventory and Stock](https://cockpit.shirtigo.com/docs/getting-started/stock-information/) - [Customize OrderProducts](https://cockpit.shirtigo.com/docs/getting-started/customize-order-products/) - [API reference](https://cockpit.shirtigo.com/docs/rest-api/): interactive reference - [OpenAPI specification](https://cockpit.shirtigo.com/docs/swagger.json): Swagger 2.0, for client generators ## Endpoints ### User-API - `GET /transactions`: Get all transactions - `GET /wallet/transactions`: Get wallet transactions - `POST /user/balance`: Get balance for current user - `GET /user`: Get user information - `POST /user`: Update user information - `POST /user/sender-address`: Update sender address - `POST /user/gpsr-address`: Update GPSR Addresses - `POST /user/advanced`: Update user advanced - `GET /verifications`: Get user verifications - `POST /verifications/create`: Create a new user verification ### Image-API - `POST /ai/generate-image`: Generate media using AI - `POST /ai/variations/{reference}/upscale`: Upscale a variation - `POST /ai/designs/{reference}/upscale`: Upscale a design - `POST /ai/designs/{reference}/remove-background`: Remove background from a design - `GET /ai/media`: Get a list of generated media - `GET /ai/media/{reference}`: Get details of a generated media by reference - `GET /ai/media-styles`: Get a list of media styles - `POST /mockup-factory/generate-image`: Generate Mockup Images - `GET /mockup-factory/rendering-tasks`: Get Rendering Tasks - `GET /mockup-factory/rendering-tasks/{reference}`: Get Rendering Task by Reference ### Catalog-API - `GET /base-products`: Get all base products - `GET /base-products/{base-product-id}`: Get base product - `GET /base-categories`: List available categories ### other - `POST /calculation`: Calculate production cost - `GET /delivery-countries`: Get delivery targets - `GET /selling-statistics`: Get selling statistics - `GET /orders-statistics`: Get order statistics - `GET /fulfillment-modes`: Get all fulfillment_modes ### Project-API - `GET /projects`: Get all projects / collections - `POST /projects`: Create project / collection - `GET /projects/{project-reference}`: Get project / collection - `PUT /projects/{project-reference}`: Update project / Collection - `DELETE /projects/{project-reference}`: Delete project / collection - `GET /projects/{project-reference}/products`: Get products for a project / collection - `POST /projects/{project-reference}/sync`: Synchronize integrations ### Product-API - `GET /products`: Get all products - `GET /products/{product-id}`: Get product - `PUT /products/{productId}`: Update product - `DELETE /products/{productId}`: Delete product - `POST /products/{product-id}/sync`: Synchronize integrations - `POST /products/{product-id}/sync-images`: Synchronize only product images - `POST /customized-product`: Create product - `PUT /customized-product/{productId}`: Update product colors - `POST /products/{productId}/images`: Add Image for ProductColor - `PUT /products/{projectProductId}/mockups`: Update Product Mockups ### Order-API - `GET /coupons/{coupon_code}`: Get coupon info - `POST /media/order-document`: Upload Order Document - `GET /orders`: Get all orders - `POST /orders`: Create order - `GET /orders/{order_reference}`: Get order - `PUT /orders/{order_reference}`: Update delivery address - `PUT /order/{reference}/release-onhold`: Release onhold - `POST /orders/{order_reference}/merchant-invoice`: Upload Merchant Invoice - `PUT /order/{reference}/set-onhold`: Set onhold - `GET /integration/{integrationreference}/{integrationOrderId}/reference`: Get OrderReference - `POST /orders/predict-price`: Calculate price - `POST /orders/available-fulfillment-modes`: Get available fulfillment modes - `POST /orders/{order_reference}/repay`: Retry payment - `POST /orders/{order_reference}/cancel`: Cancel order - `POST /orders/{order_reference}/comments`: Add order comment - `GET /orders/{order_reference}/invoice`: Retrieve order invoice - `PUT /orderproduct/{reference}/customize`: Customize OrderProduct - `PUT /orderproduct/{reference}`: Update OrderProduct - `DELETE /orderproduct/{reference}`: Delete OrderProduct ### Design-API - `GET /designs`: Get all designs - `GET /designs/{design-reference}`: Get design - `PUT /designs/{design-reference}`: Update design - `DELETE /designs/{design-reference}`: Delete design - `POST /designs/file`: Create design from file - `POST /designs/base64`: Create design from base64-encoded data - `POST /designs/url`: Create design from URL ### Integration-API - `GET /integrations/{integration_id}`: Get UserIntegration - `PUT /integrations/{integration_id}`: Update UserIntegration - `DELETE /integrations/{integration_id}`: Delete UserIntegration - `GET /integrations/{integration_id}/products`: Get UserIntegration - `POST /integrations/sync-errors/{sync_id}/translate`: Translate User Integration Sync Error ### Stock-API - `GET /stock/base-products`: Get stock of base products - `GET /stock/products`: Get stock of your products ### Branding-API - `POST /user/delivery-receipt-logo`: Upload delivery receipt logo - `DELETE /user/delivery-receipt-logo/{integration_id}`: Delete a delivery receipt logo - `POST /user/sticker`: Upload sticker logo - `DELETE /user/sticker/{integration_id}`: Delete sticker logo - `PUT /user/packin`: Update user packin - `POST /user/packin`: Create user packin - `DELETE /user/packin`: Delete user packin - `GET /user/packin/{reference}`: Get single user packin - `GET /user/packings`: Get user packings - `GET /user/packings/prices`: Get packin prices ### Warehousing-API - `GET /inbound/{reference}`: Get InboundShipping - `DELETE /inbound/{reference}`: Delete InboundShipping - `POST /inbound/{reference}/perform`: Perform solution for inbound shipment - `GET /warehousing/inventory`: Get WarehouseProductVariant - `GET /warehousing/products/{reference}`: Get WarehouseProduct - `PUT /warehousing/products/{reference}`: Update WarehouseProduct - `POST /warehousing/products`: Create WarehouseProduct - `PUT /warehousing/products/{product_reference}/variants/{reference}`: Update WarehouseProductVariant - `DELETE /warehousing/products/{product_reference}/variants/{reference}`: Delete WarehouseProductVariant - `PUT /warehousing/variants/{reference}`: Update WarehouseProductVariant by Reference ### Webhook-API - `GET /webhooks`: List webhooks - `POST /webhooks`: Create a new webhook - `GET /webhooks/{id}`: Get a single webhook by ID - `PUT /webhooks/{id}`: Update a webhook - `DELETE /webhooks/{id}`: Delete a webhook - `PUT /webhooks/`: Bulk Update webhook with same URL - `POST /webhooks/{id}/test`: Test a webook - `GET /webhook-types`: Get all User Webhook Types ### oauth - `GET /oauth/authorize`: Obtain authorization from user - `POST /oauth/token`: Request access token