# Objects reference > Every object the API returns — fields, types and descriptions, generated from the API schema. Source: https://swaglists.com/docs/objects The objects below are returned by the API and embedded in events. Field lists are generated from the API's OpenAPI schema, so they always match the API. Types: `string | null` means the field is always present but may be `null`. ## Conventions - Every object has an `object` field naming its type, and most have an `id` with a type prefix (`ord_`, `prod_`, …). - Amounts are integers in cents with a lowercase `currency` (`usd`). - Timestamps are ISO-8601 strings in UTC; fields that do not apply are `null`. - New fields can be added at any time — ignore fields you do not know. ## List List endpoints return a list object. See [Pagination](https://swaglists.com/docs/pagination.md). | Field | Type | Description | | --- | --- | --- | | `object` | string | Always `list`. | | `data` | array | The objects of this page. | | `has_more` | boolean | Whether more objects exist beyond this page (in the paging direction). | | `url` | string | Path of the list endpoint. | ## Account Your account as seen by the API key, including its mode and wallet summary. Returned by: `GET /account`. | Field | Type | Description | | --- | --- | --- | | `object` | "account" | Type of the object: always `account`. | | `id` | string | Unique identifier (starts with `org_`). | | `name` | string | Your account (organization) name. | | `brand_name` | string \| null | Brand printed on packing slips and shown on the tracking page. | | `support_email` | string \| null | Support email shown to your customers (packing slips, tracking page, shipment emails). | | `website` | string \| null | Your website. | | `country` | string \| null | Country of your business (ISO 3166-1 alpha-2). | | `mode` | string | Mode of the API key used for this request. One of: `live`, `test`. | | `livemode` | boolean | `true` in live mode, `false` in test mode. | | `live_mode_enabled` | boolean | Whether live mode is enabled for the account (live keys work and live orders are produced). | | `settings` | object | Order settings that change how the API behaves (Settings → Orders in the dashboard). | | `settings.auto_confirm_orders` | boolean | Default of `confirm` when creating orders. | | `settings.insufficient_funds_behavior` | string | What happens to an order your credits don't cover. hold: it waits on hold and is released automatically (oldest first) when credits arrive; hold_manual: it waits on hold until you release it (dashboard, or POST /orders/{id}/confirm); reject: POST /orders answers 402 insufficient_funds and nothing is created. One of: `hold`, `hold_manual`, `reject`. | | `wallet` | [Wallet](https://swaglists.com/docs/objects.md#wallet) | Wallet of the key's mode. | | `created_at` | string | When the object was created (ISO-8601, UTC). |
Example account ```json { "object": "account", "id": "org_01k8x3q8m4h2c9t6v5r7w1y0za", "name": "Company A", "brand_name": "Company A Apparel", "support_email": "help@company-a.example", "website": "https://company-a.example", "country": "US", "mode": "live", "livemode": true, "live_mode_enabled": true, "settings": { "auto_confirm_orders": true, "insufficient_funds_behavior": "hold" }, "wallet": { "object": "wallet", "mode": "live", "livemode": true, "currency": "usd", "available": 482550, "held": 12480, "total": 495030, "low_balance_threshold": 10000 }, "created_at": "2026-10-21T14:32:05.000Z" } ```
## Wallet Prepaid credit balance of one mode (live and test have separate wallets). Returned by: `GET /wallet`, `POST /test/wallet/fund`, `event wallet.low_balance`. | Field | Type | Description | | --- | --- | --- | | `object` | "wallet" | Type of the object: always `wallet`. | | `mode` | string | `live` or `test`. One of: `live`, `test`. | | `livemode` | boolean | `true` in live mode, `false` in test mode. | | `currency` | string | Three-letter currency code, lowercase (`usd`). | | `available` | integer | Spendable credits in cents. May be negative after a payment dispute. | | `held` | integer | Credits reserved for in-flight orders, in cents. | | `total` | integer | available + held, in cents. | | `low_balance_threshold` | integer \| null | Low-balance notification threshold in cents. |
Example wallet ```json { "object": "wallet", "mode": "live", "livemode": true, "currency": "usd", "available": 482550, "held": 12480, "total": 495030, "low_balance_threshold": 10000 } ```
## Transaction An immutable wallet ledger entry: every change to your balance is one transaction. Returned by: `GET /wallet/transactions`, `event wallet.credited`. | Field | Type | Description | | --- | --- | --- | | `object` | "transaction" | Type of the object: always `transaction`. | | `id` | string | Unique identifier (starts with `txn_`). | | `type` | string | Kind of balance change. One of: `topup`, `bonus`, `hold`, `release`, `capture`, `charge`, `refund`, `adjustment`, `reversal`, `test_credit`. | | `amount` | integer | Signed change to available credits (cents). | | `held_delta` | integer | Signed change to held credits (cents). | | `balance_after` | integer | Available credits after this transaction (cents). | | `currency` | string | Three-letter currency code, lowercase (`usd`). | | `description` | string | Human-readable description. | | `order_id` | string \| null | Order the transaction belongs to, if any. | | `topup_id` | string \| null | Top-up the transaction belongs to, if any. | | `created_at` | string | When the object was created (ISO-8601, UTC). |
Example transaction ```json { "object": "transaction", "id": "txn_01k8x4b2q8w0e2r4t6y8u0i2o4", "type": "hold", "amount": -2598, "held_delta": 2598, "balance_after": 479952, "currency": "usd", "description": "Credits reserved for order ord_01k8x4b2q9w7e3r5t1y8u6i0pa", "order_id": "ord_01k8x4b2q9w7e3r5t1y8u6i0pa", "topup_id": null, "created_at": "2026-10-21T14:32:05.000Z" } ```
## Top-up A credit purchase (made in the dashboard). Returned by: `GET /topups`, `GET /topups/{id}`, `events topup.*`. | Field | Type | Description | | --- | --- | --- | | `object` | "topup" | Type of the object: always `topup`. | | `id` | string | Unique identifier (starts with `top_`). | | `status` | string | Payment status of the top-up. One of: `pending`, `processing`, `succeeded`, `failed`, `canceled`, `refunded`, `partially_refunded`, `disputed`. | | `amount` | integer | Amount paid (cents). | | `bonus` | integer | Bonus credits granted (cents). | | `bonus_percent` | number | Bonus percentage, e.g. 5 for 5%. | | `credits` | integer | Credits added = amount + bonus (cents). | | `currency` | string | Three-letter currency code, lowercase (`usd`). | | `payment_method_type` | string \| null | How it was paid (e.g. `card`, `us_bank_account`). | | `receipt_url` | string \| null | Payment receipt, when available. | | `created_at` | string | When the object was created (ISO-8601, UTC). | | `succeeded_at` | string \| null | When the credits were added. |
Example top-up ```json { "object": "topup", "id": "top_01k8x1q3w5e7r9t1y3u5i7o9p1", "status": "succeeded", "amount": 500000, "bonus": 25000, "bonus_percent": 5, "credits": 525000, "currency": "usd", "payment_method_type": "us_bank_account", "receipt_url": null, "created_at": "2026-10-21T14:32:05.000Z", "succeeded_at": "2026-10-21T14:32:05.000Z" } ```
## Catalog category A group of catalog products (categories can be nested with `parent_id`). Returned by: `GET /catalog/categories`. | Field | Type | Description | | --- | --- | --- | | `object` | "catalog_category" | Type of the object: always `catalog_category`. | | `id` | string | Unique identifier (starts with `cat_`). | | `slug` | string | URL-friendly identifier; use it as the `category` filter of `GET /catalog/products`. | | `name` | string | Category name. | | `parent_id` | string \| null | Parent category (null for top-level categories). | | `description` | string \| null | Category description. | | `image_url` | string \| null | Category image. | | `sort_order` | integer | Display order (ascending). | | `product_count` | integer | Active products in this category and its sub-categories. | | `created_at` | string \| null | When the object was created (ISO-8601, UTC). | | `updated_at` | string \| null | When the object was last changed (ISO-8601, UTC). |
Example catalog category ```json { "object": "catalog_category", "id": "cat_01k8w0q1w2e3r4t5y6u7i8o9p0", "slug": "t-shirts", "name": "T-Shirts", "parent_id": null, "description": "Classic and premium tees.", "image_url": null, "sort_order": 0, "product_count": 12, "created_at": "2026-10-21T14:32:05.000Z", "updated_at": "2026-10-21T14:32:05.000Z" } ```
## Catalog product A product you can customize and sell, with your wholesale prices, print areas and mockup templates. Returned by: `GET /catalog/products`, `GET /catalog/products/{id_or_slug}`. | Field | Type | Description | | --- | --- | --- | | `object` | "catalog_product" | Type of the object: always `catalog_product`. | | `id` | string | Unique identifier (starts with `cp_`). | | `slug` | string | URL-friendly identifier; can be used instead of the id in `GET /catalog/products/{id_or_slug}`. | | `title` | string | Product title. | | `subtitle` | string \| null | Short tagline. | | `description` | string \| null | Markdown. | | `category` | [CatalogCategoryRef](https://swaglists.com/docs/objects.md#catalog_category) | Category of the product. | | `tags` | array of string | Tags (e.g. `bestseller`). | | `images` | array of object | Product photos. | | `images[].url` | string | Image URL. | | `images[].alt` | string \| null | Alt text. | | `features` | array of string | Selling points. | | `techniques` | array of string | Print techniques used (e.g. `dtg`, `embroidery`, `sublimation`, `digital`). | | `material` | string \| null | Material. | | `care_instructions` | string \| null | Care instructions. | | `size_guide` | map of any \| null | Size chart data, when available. | | `options` | array of object | Option names and values (e.g. Color, Size) in display order. | | `options[].name` | string | Option name (e.g. `Color`). | | `options[].values` | array of object | Values of the option. | | `options[].values[].value` | string | Value as used in variant `options`. | | `options[].values[].label` | string | Display label. | | `options[].values[].hex` | string \| null | Color swatch (hex), for color options. | | `production_days` | object | Business days to produce before shipping. | | `production_days.min` | integer | Fastest production time in business days. | | `production_days.max` | integer | Slowest production time in business days. | | `featured` | boolean | Featured products are listed first. | | `placements` | array of [Placement](https://swaglists.com/docs/objects.md#placement) | Print areas you can put artwork on. | | `variants` | array of [CatalogVariant](https://swaglists.com/docs/objects.md#catalog_variant) | Active variants with your wholesale price and availability. | | `mockup_templates` | array of [MockupTemplate](https://swaglists.com/docs/objects.md#mockup_template) | Templates to render previews. | | `price_range` | object \| null | Lowest and highest wholesale variant price (first placement). | | `price_range.min` | integer | Lowest variant price in cents. | | `price_range.max` | integer | Highest variant price in cents. | | `price_range.currency` | string | Currency of the prices. | | `price_from` | integer \| null | Lowest wholesale price over active variants (cents). | | `currency` | string | Three-letter currency code, lowercase (`usd`). | | `created_at` | string \| null | When the object was created (ISO-8601, UTC). | | `updated_at` | string \| null | When the object was last changed (ISO-8601, UTC). |
Example catalog product ```json { "object": "catalog_product", "id": "cp_01k8w1a2s3d4f5g6h7j8k9m0n1", "slug": "classic-unisex-tee", "title": "Classic Unisex Tee", "subtitle": "100% combed cotton", "description": "A soft, everyday tee.", "category": { "object": "catalog_category", "id": "cat_01k8w0q1w2e3r4t5y6u7i8o9p0", "slug": "t-shirts", "name": "T-Shirts", "parent_id": null }, "tags": [ "bestseller" ], "images": [ { "url": "https://swaglists.com/f/file_01k8w1c2v4b6n8m0q2w4e6r8t1/1767225600.9b1c/tee.png", "alt": "Classic tee" } ], "features": [ "Pre-shrunk", "Side-seamed" ], "techniques": [ "dtg" ], "material": "100% cotton", "care_instructions": "Machine wash cold, inside out.", "size_guide": null, "options": [ { "name": "Color", "values": [ { "value": "Black", "label": "Black", "hex": "#111111" } ] }, { "name": "Size", "values": [ { "value": "M", "label": "M", "hex": null } ] } ], "production_days": { "min": 2, "max": 4 }, "featured": true, "placements": [ { "object": "placement", "key": "front", "label": "Front", "description": "Front print area", "technique": "dtg", "aspect_ratio": 0.833333, "width_in": 15, "height_in": 18, "recommended_width_px": 4500, "recommended_height_px": 5400, "min_dpi": 150, "required": false, "file_requirements": { "formats": [ "png", "jpeg", "webp", "tiff", "svg" ], "max_file_size_bytes": 104857600, "max_dimension_px": 30000, "recommended_width_px": 4500, "recommended_height_px": 5400, "recommended_dpi": 300, "min_dpi": 150, "color_profile": "sRGB", "transparent_background": true } } ], "variants": [ { "object": "catalog_variant", "id": "cv_01k8w1a2s7d9f1g3h5j7k9m1n3", "catalog_product_id": "cp_01k8w1a2s3d4f5g6h7j8k9m0n1", "sku": "TEE-CLASSIC-BLK-M", "title": "Black / M", "options": { "Color": "Black", "Size": "M" }, "color": "Black", "color_hex": "#111111", "size": "M", "image_url": null, "available": true, "price": 1299, "currency": "usd" } ], "mockup_templates": [ { "object": "mockup_template", "id": "cmt_01k8w1b3c5v7b9n1m3a5s7d9f1", "placement_key": "front", "color": "Black", "label": "Front", "image_url": "https://swaglists.com/f/file_01k8w1c2v4b6n8m0q2w4e6r8t0/1767225600.3f9a/tee-front.png", "image_width_px": 1600, "image_height_px": 2000, "print_area": { "x": 0.3, "y": 0.25, "width": 0.4, "height": 0.48 }, "blend_mode": "multiply", "is_primary": true } ], "price_range": { "min": 1299, "max": 1599, "currency": "usd" }, "price_from": 1299, "currency": "usd", "created_at": "2026-10-21T14:32:05.000Z", "updated_at": "2026-10-21T14:32:05.000Z" } ```
## Catalog variant One color/size (or other option combination) of a catalog product. Returned by: `GET /catalog/products/{id_or_slug}`. | Field | Type | Description | | --- | --- | --- | | `object` | "catalog_variant" | Type of the object: always `catalog_variant`. | | `id` | string | Unique identifier (starts with `cv_`). | | `catalog_product_id` | string | Catalog product of the variant. | | `sku` | string | Catalog SKU (ours). Your own SKUs live on product variants. | | `title` | string | Variant title (e.g. `Black / M`). | | `options` | map of string | Option values (e.g. `{"Color": "Black", "Size": "M"}`). | | `color` | string \| null | Color name, when the product has colors. | | `color_hex` | string \| null | Color swatch (hex). | | `size` | string \| null | Size, when the product has sizes. | | `image_url` | string \| null | Photo of this variant, when available. | | `available` | boolean | Currently in stock and orderable. | | `price` | integer \| null | Your wholesale price per unit in cents, printed on the first placement. Null when not purchasable. | | `currency` | string | Three-letter currency code, lowercase (`usd`). |
Example catalog variant ```json { "object": "catalog_variant", "id": "cv_01k8w1a2s7d9f1g3h5j7k9m1n3", "catalog_product_id": "cp_01k8w1a2s3d4f5g6h7j8k9m0n1", "sku": "TEE-CLASSIC-BLK-M", "title": "Black / M", "options": { "Color": "Black", "Size": "M" }, "color": "Black", "color_hex": "#111111", "size": "M", "image_url": null, "available": true, "price": 1299, "currency": "usd" } ```
## Placement A printable area of a catalog product (front, back, sleeve, …) with its recommended artwork size. Returned by: `GET /catalog/products/{id_or_slug}`. | Field | Type | Description | | --- | --- | --- | | `object` | "placement" | Type of the object: always `placement`. | | `key` | string | Use this key as `placement` in designs. | | `label` | string | Display name (e.g. `Front`). | | `description` | string \| null | Description of the print area. | | `technique` | string | Print technique, e.g. dtg, embroidery, sublimation, digital. | | `aspect_ratio` | number \| null | Width / height of the print area. | | `width_in` | number \| null | Print area width in inches. | | `height_in` | number \| null | Print area height in inches. | | `recommended_width_px` | integer \| null | Artwork width (px) that covers the full print area at 300 DPI. | | `recommended_height_px` | integer \| null | Artwork height (px) that covers the full print area at 300 DPI. | | `min_dpi` | integer | Below this effective DPI you get a `dpi_low` warning. | | `required` | boolean | Products must include a design for this placement. | | `file_requirements` | [FileRequirements](https://swaglists.com/docs/objects.md#file_requirements) | Artwork requirements of this placement. |
Example placement ```json { "object": "placement", "key": "front", "label": "Front", "description": "Front print area", "technique": "dtg", "aspect_ratio": 0.833333, "width_in": 15, "height_in": 18, "recommended_width_px": 4500, "recommended_height_px": 5400, "min_dpi": 150, "required": false, "file_requirements": { "formats": [ "png", "jpeg", "webp", "tiff", "svg" ], "max_file_size_bytes": 104857600, "max_dimension_px": 30000, "recommended_width_px": 4500, "recommended_height_px": 5400, "recommended_dpi": 300, "min_dpi": 150, "color_profile": "sRGB", "transparent_background": true } } ```
## File requirements Artwork requirements of a placement (`placement.file_requirements`). Returned by: `GET /catalog/products/{id_or_slug}`. | Field | Type | Description | | --- | --- | --- | | `formats` | array of string | Accepted artwork formats. SVG is rasterized; PNG with transparency is recommended. | | `max_file_size_bytes` | integer | Maximum upload size in bytes. | | `max_dimension_px` | integer | Maximum width or height of an image in pixels. | | `recommended_width_px` | integer \| null | Artwork width (px) that covers the full print area at 300 DPI. | | `recommended_height_px` | integer \| null | Artwork height (px) that covers the full print area at 300 DPI. | | `recommended_dpi` | integer | Recommended print resolution. | | `min_dpi` | integer | Below this effective DPI, prints may look blurry (you receive a warning). | | `color_profile` | string | Color profile artwork is printed in. | | `transparent_background` | boolean | Transparent pixels are not printed. |
Example file requirements ```json { "formats": [ "png", "jpeg", "webp", "tiff", "svg" ], "max_file_size_bytes": 104857600, "max_dimension_px": 30000, "recommended_width_px": 4500, "recommended_height_px": 5400, "recommended_dpi": 300, "min_dpi": 150, "color_profile": "sRGB", "transparent_background": true } ```
## Mockup template A background photo plus the print-area rectangle on it, to render previews. Returned by: `GET /catalog/products/{id_or_slug}`. | Field | Type | Description | | --- | --- | --- | | `object` | "mockup_template" | Type of the object: always `mockup_template`. | | `id` | string | Unique identifier (starts with `cmt_`). | | `placement_key` | string | Placement the template shows. | | `color` | string \| null | Variant color the photo shows (null = any color). | | `label` | string \| null | Display name. | | `image_url` | string | Background photo URL. | | `image_width_px` | integer \| null | Photo width in pixels. | | `image_height_px` | integer \| null | Photo height in pixels. | | `print_area` | object | Where the print area sits on the photo, as fractions of the photo. | | `print_area.x` | number \| null | Left edge (fraction of the photo width). | | `print_area.y` | number \| null | Top edge (fraction of the photo height). | | `print_area.width` | number \| null | Width (fraction of the photo width). | | `print_area.height` | number \| null | Height (fraction of the photo height). | | `blend_mode` | string | How artwork is blended onto the photo (e.g. `multiply`). | | `is_primary` | boolean | Default template for the placement. |
Example mockup template ```json { "object": "mockup_template", "id": "cmt_01k8w1b3c5v7b9n1m3a5s7d9f1", "placement_key": "front", "color": "Black", "label": "Front", "image_url": "https://swaglists.com/f/file_01k8w1c2v4b6n8m0q2w4e6r8t0/1767225600.3f9a/tee-front.png", "image_width_px": 1600, "image_height_px": 2000, "print_area": { "x": 0.3, "y": 0.25, "width": 0.4, "height": 0.48 }, "blend_mode": "multiply", "is_primary": true } ```
## File An uploaded image (artwork or logo) or a generated mockup. Use its id as `file_id` in designs. Returned by: `POST /files`, `GET /files`, `GET /files/{id}`, `event file.processed`. | Field | Type | Description | | --- | --- | --- | | `object` | "file" | Type of the object: always `file`. | | `id` | string | Unique identifier (starts with `file_`). | | `filename` | string | File name. | | `mime_type` | string | Media type (images are stored as PNG, JPEG or WebP). | | `size_bytes` | integer | Size in bytes. | | `width_px` | integer \| null | Width in pixels. | | `height_px` | integer \| null | Height in pixels. | | `dpi` | number \| null | Resolution stored in the image metadata, when present (informational — print resolution depends on the placed size). | | `status` | string | ready to use, still processing (pending), failed processing, or deleted. One of: `pending`, `ready`, `failed`, `deleted`. | | `purpose` | string | artwork or logo (your uploads), or mockup (generated product mockups). One of: `artwork`, `logo`, `mockup`. | | `url` | string \| null | Signed download URL, valid for about 24 hours. | | `created_at` | string | When the object was created (ISO-8601, UTC). |
Example file ```json { "object": "file", "id": "file_01k8x3y1q3w5e7r9t1y3u5i7o9", "filename": "logo-front.png", "mime_type": "image/png", "size_bytes": 482113, "width_px": 4500, "height_px": 5400, "dpi": 300, "status": "ready", "purpose": "artwork", "url": "https://swaglists.com/f/file_01k8x3y1q3w5e7r9t1y3u5i7o9/1767225600.ab12cd/logo-front.png", "created_at": "2026-10-21T14:32:05.000Z" } ```
## Product Your product: a catalog product + your designs + variants with your SKUs. Returned by: `POST /products`, `GET /products`, `GET /products/{id}`, `PATCH /products/{id}`, `events product.*`. | Field | Type | Description | | --- | --- | --- | | `object` | "product" | Type of the object: always `product`. | | `id` | string | Unique identifier (starts with `prod_`). | | `title` | string | Product title. | | `description` | string \| null | Product description (plain text or markdown). | | `status` | string | draft, active, or archived (archived products can no longer be ordered). One of: `draft`, `active`, `archived`. | | `catalog_product_id` | string | Catalog product this product is made from. | | `external_id` | string \| null | Your id for the product (e.g. your store's product id). | | `tags` | array of string | Your tags. | | `metadata` | map of string | Your key/value pairs (string values). | | `retail_price` | integer \| null | Default retail price of the variants (informational, used in exports), in cents. | | `currency` | "usd" | Three-letter currency code, lowercase (`usd`). | | `designs` | array of [Design](https://swaglists.com/docs/objects.md#design) | Artwork per placement. | | `variants` | array of [ProductVariant](https://swaglists.com/docs/objects.md#product_variant) | Sellable variants with your SKUs. | | `mockups` | array of object | Generated preview images. Rendered in the background; `product.updated` fires when they are ready. | | `mockups[].url` | string | Image URL that does not expire (use it in your store). Replaced when the mockups are re-rendered; the old URL then returns 404. | | `mockups[].placement` | string | Placement shown. | | `mockups[].color` | string \| null | Variant color shown (null when not color-specific). | | `mockups[].is_primary` | boolean | Main image of the product. | | `warnings` | array of [ProductWarning](https://swaglists.com/docs/objects.md#product_warning) | Only on create/update responses: non-blocking design issues. | | `created_at` | string | When the object was created (ISO-8601, UTC). | | `updated_at` | string | When the object was last changed (ISO-8601, UTC). |
Example product ```json { "object": "product", "id": "prod_01k8x3z7r1t3y5u7i9o1p3a5s7", "title": "Company A Logo Tee", "description": "Our classic logo on a soft tee.", "status": "active", "catalog_product_id": "cp_01k8w1a2s3d4f5g6h7j8k9m0n1", "external_id": "shopify-product-9921", "tags": [ "logo" ], "metadata": {}, "retail_price": 2900, "currency": "usd", "designs": [ { "placement": "front", "layers": [ { "file_id": "file_01k8x3y1q3w5e7r9t1y3u5i7o9", "transform": { "x": 0.1, "y": 0.05, "width": 0.8, "height": 0.6, "rotation": 0 }, "opacity": 1 } ] } ], "variants": [ { "object": "product_variant", "id": "pvar_01k8x3z7r4f6g8h0j2k4l6z8x0", "product_id": "prod_01k8x3z7r1t3y5u7i9o1p3a5s7", "sku": "CA-TEE-BLK-M", "catalog_variant_id": "cv_01k8w1a2s7d9f1g3h5j7k9m1n3", "title": "Black / M", "options": { "Color": "Black", "Size": "M" }, "retail_price": 2900, "price": 1299, "currency": "usd", "external_id": "shopify-variant-4410", "enabled": true, "available": true } ], "mockups": [ { "url": "https://swaglists.com/f/file_01k8x3y9a1s3d5f7g9h1j3k5l7/1782777600.c0ffee/mockup-front.png", "placement": "front", "color": "Black", "is_primary": true } ], "created_at": "2026-10-21T14:32:05.000Z", "updated_at": "2026-10-21T14:32:05.000Z" } ```
## Product variant A sellable variant of your product with your SKU. Returned by: `GET /products/{id}/variants`, `GET /product_variants/{id}`, `GET /products/by_sku/{sku}`. | Field | Type | Description | | --- | --- | --- | | `object` | "product_variant" | Type of the object: always `product_variant`. | | `id` | string | Unique identifier (starts with `pvar_`). | | `product_id` | string | Product the variant belongs to. | | `sku` | string | Your SKU (unique in your account). Order items can reference it. | | `catalog_variant_id` | string | Catalog variant that is produced for this SKU. | | `title` | string | Variant title (e.g. `Black / M`). | | `options` | map of string | Option values (e.g. `{"Color": "Black", "Size": "M"}`). | | `retail_price` | integer \| null | Your retail price (informational), cents. | | `price` | integer \| null | Your wholesale price per unit with this product's designs, cents. | | `currency` | "usd" | Three-letter currency code, lowercase (`usd`). | | `external_id` | string \| null | Your id for the variant (e.g. your store's variant id). | | `enabled` | boolean | Disabled variants cannot be ordered (their SKU stays reserved). | | `available` | boolean | Whether the variant can be ordered right now: enabled, product not archived, and the catalog variant offered and in stock. `false` while it is temporarily out of stock — mark it sold out in your store; `product.updated` fires when this changes. |
Example product variant ```json { "object": "product_variant", "id": "pvar_01k8x3z7r4f6g8h0j2k4l6z8x0", "product_id": "prod_01k8x3z7r1t3y5u7i9o1p3a5s7", "sku": "CA-TEE-BLK-M", "catalog_variant_id": "cv_01k8w1a2s7d9f1g3h5j7k9m1n3", "title": "Black / M", "options": { "Color": "Black", "Size": "M" }, "retail_price": 2900, "price": 1299, "currency": "usd", "external_id": "shopify-variant-4410", "enabled": true, "available": true } ```
## Product warning A non-blocking design issue returned on product create/update. Returned by: `POST /products`, `PATCH /products/{id}`. | Field | Type | Description | | --- | --- | --- | | `code` | string | Warning code: `dpi_low` (artwork below the recommended resolution) or `layer_outside_area` (a layer is outside the print area and will not print). | | `message` | string | Human-readable explanation. | | `param` | string | The design layer the warning is about. | | `placement` | string | Placement key. | | `effective_dpi` | number \| null | Effective resolution of the artwork at its placed size (resolution warnings only). |
Example product warning ```json { "code": "dpi_low", "message": "Artwork on Front is 120 DPI at this size (recommended 150+). It may print slightly blurry.", "param": "designs[0].layers[0]", "placement": "front", "effective_dpi": 120 } ```
## Design Artwork layers on one placement (as returned on products and order items). Returned by: `Product.designs`, `OrderItem.designs`. | Field | Type | Description | | --- | --- | --- | | `placement` | string | Placement key (e.g. `front`). | | `layers` | array of object | Layers, bottom to top. | | `layers[].file_id` | string | Artwork file. | | `layers[].transform` | [Transform](https://swaglists.com/docs/objects.md#transform) | Position of the layer in the print area. | | `layers[].opacity` | number | Opacity from 0 to 1. |
Example design ```json { "placement": "front", "layers": [ { "file_id": "file_01k8x3y1q3w5e7r9t1y3u5i7o9", "transform": { "x": 0.1, "y": 0.05, "width": 0.8, "height": 0.6, "rotation": 0 }, "opacity": 1 } ] } ```
## Transform Where a layer sits in the print area, as fractions of the area (see Designs & transforms). Returned by: `Design.layers[].transform`. | Field | Type | Description | | --- | --- | --- | | `x` | number | Left edge of the artwork box as a fraction of the print area width. | | `y` | number | Top edge of the artwork box as a fraction of the print area height. | | `width` | number | Artwork width as a fraction of the print area width. | | `height` | number | Artwork height as a fraction of the print area height. | | `rotation` | number | Clockwise rotation in degrees around the artwork center. |
Example transform ```json { "x": 0.1, "y": 0.05, "width": 0.8, "height": 0.6, "rotation": 0 } ```
## Shipping rate Price and delivery time of one shipping method for a destination and items. Returned by: `POST /shipping/rates`, `OrderEstimate.available_shipping_methods`. | Field | Type | Description | | --- | --- | --- | | `object` | "shipping_rate" | Type of the object: always `shipping_rate`. | | `method` | string | Shipping method (use it as `shipping_method` on orders). One of: `economy`, `standard`, `express`, `priority`. | | `name` | string | Display name of the method. | | `price` | integer | Shipping price for these items (cents). | | `currency` | string | Three-letter currency code, lowercase (`usd`). | | `min_days` | integer | Minimum transit time in business days. | | `max_days` | integer | Maximum transit time in business days. | | `estimated_delivery_days` | object | Business days from order to delivery, including production time. | | `estimated_delivery_days.min` | integer | Fastest estimate in business days. | | `estimated_delivery_days.max` | integer | Slowest estimate in business days. |
Example shipping rate ```json { "object": "shipping_rate", "method": "standard", "name": "Standard", "price": 475, "currency": "usd", "min_days": 3, "max_days": 5, "estimated_delivery_days": { "min": 5, "max": 9 } } ```
## Order An order for your end customer: items, recipient, totals, status, shipments and tracking. Returned by: `POST /orders`, `GET /orders`, `GET /orders/{id}`, `events order.*`. | Field | Type | Description | | --- | --- | --- | | `object` | "order" | Type of the object: always `order`. | | `id` | string | Unique identifier (starts with `ord_`). | | `number` | integer | Sequential human-friendly order number. | | `external_id` | string \| null | Your order id (unique per mode). Look the order up with `GET /orders/ext:`. | | `livemode` | boolean | `true` in live mode, `false` in test mode. | | `status` | string | draft → processing → in_production → (partially_)shipped → delivered; on_hold (see hold_reason), canceled, failed. One of: `draft`, `on_hold`, `processing`, `in_production`, `partially_shipped`, `shipped`, `delivered`, `canceled`, `failed`. | | `hold_reason` | string \| null | Why the order is on hold; only set while `status` is `on_hold`. One of: `insufficient_funds`, `manual_review`, `artwork_issue`, `address_issue`, `fulfillment_issue`. | | `funds_status` | string | State of the credits for this order: `none` (draft), `awaiting` (on hold for credits), `held` (reserved), `partially_captured`/`captured` (spent), `released` (returned unspent), `partially_refunded`/`refunded`. One of: `none`, `awaiting`, `held`, `partially_captured`, `captured`, `released`, `partially_refunded`, `refunded`. | | `source` | string | Where the order was created. One of: `api`, `dashboard`, `import`, `admin`. | | `recipient` | [Recipient](https://swaglists.com/docs/objects.md#recipient) | Shipping address of the end customer. | | `shipping_method` | string | Shipping speed of the order. One of: `economy`, `standard`, `express`, `priority`. | | `currency` | string | Three-letter currency code, lowercase (`usd`). | | `subtotal` | integer | Items total in cents. | | `shipping` | integer | Shipping price in cents. | | `tax` | integer | Tax in cents (0 unless tax applies to the destination). | | `discount` | integer | Discount in cents. | | `total` | integer | Credits charged for this order (cents). | | `refunded` | integer | Credits refunded to your wallet for this order, in cents. | | `items` | array of [OrderItem](https://swaglists.com/docs/objects.md#order_item) | Line items of the order. | | `shipments` | array of [Shipment](https://swaglists.com/docs/objects.md#shipment) | Parcels shipped so far (an order can ship in several parcels). | | `tracking_page_url` | string \| null | Your branded tracking page for the end customer. null while the order is a draft (the page exists once it is confirmed). | | `packing_slip` | object \| null | Packing slip overrides of this order (null when none were sent). | | `packing_slip.message` | string \| null | Message printed on the packing slip. | | `packing_slip.brand_name` | string \| null | Brand name printed instead of your account brand name. | | `packing_slip.logo_file_id` | string \| null | The uploaded file printed as the logo on the packing slip (null: your account logo). | | `packing_slip.customer_order_number` | string \| null | Order number your customer knows (e.g. `#1042`), printed on the slip. | | `gift_message` | string \| null | Gift message included with the parcel. | | `customer_note` | string \| null | Note from your customer. | | `metadata` | map of string | Your key/value pairs (string values). | | `created_at` | string \| null | When the object was created (ISO-8601, UTC). | | `updated_at` | string \| null | When the object was last changed (ISO-8601, UTC). | | `placed_at` | string \| null | When the order was confirmed (credits reserved, or the order put on hold for funds). | | `in_production_at` | string \| null | When production started. | | `shipped_at` | string \| null | When the order shipped. | | `delivered_at` | string \| null | When every shipment was delivered. | | `canceled_at` | string \| null | When the order was canceled. | | `cancel_reason` | string \| null | Reason given when the order was canceled. | | `failed_at` | string \| null | When the order failed. | | `failure_reason` | string \| null | Why the order failed (reserved credits were released). |
Example order ```json { "object": "order", "id": "ord_01k8x4b2q9w7e3r5t1y8u6i0pa", "number": 1042, "external_id": "1042", "livemode": true, "status": "shipped", "hold_reason": null, "funds_status": "captured", "source": "api", "recipient": { "name": "Jane Doe", "company": null, "address1": "123 Market St", "address2": "Apt 4", "city": "San Francisco", "state_code": "CA", "postal_code": "94107", "country_code": "US", "phone": null, "email": "jane@example.com" }, "shipping_method": "standard", "currency": "usd", "subtotal": 2598, "shipping": 700, "tax": 0, "discount": 0, "total": 3298, "refunded": 0, "items": [ { "object": "order_item", "id": "oi_01k8x4b2qa3s5d7f9g1h3j5k7l", "product_id": "prod_01k8x3z7r1t3y5u7i9o1p3a5s7", "product_variant_id": "pvar_01k8x3z7r4f6g8h0j2k4l6z8x0", "catalog_product_id": "cp_01k8w1a2s3d4f5g6h7j8k9m0n1", "catalog_variant_id": "cv_01k8w1a2s7d9f1g3h5j7k9m1n3", "sku": "CA-TEE-BLK-M", "title": "Company A Logo Tee", "variant_title": "Black / M", "quantity": 2, "shipped_quantity": 2, "unit_price": 1299, "total_price": 2598, "retail_price": 2500, "status": "shipped", "designs": [ { "placement": "front", "layers": [ { "file_id": "file_01k8x3y1q3w5e7r9t1y3u5i7o9", "transform": { "x": 0.1, "y": 0.05, "width": 0.8, "height": 0.6, "rotation": 0 }, "opacity": 1 } ] } ], "mockup_url": null, "external_line_id": "line-1", "metadata": {} } ], "shipments": [ { "object": "shipment", "id": "shp_01k8x9z1m3n5b7v9c1x3z5a7s9", "order_id": "ord_01k8x4b2q9w7e3r5t1y8u6i0pa", "status": "in_transit", "carrier": "usps", "service": "USPS Ground Advantage", "tracking_number": "9400111899223197428490", "tracking_url": "https://tools.usps.com/go/TrackConfirmAction?tLabels=9400111899223197428490", "items": [ { "order_item_id": "oi_01k8x4b2qa3s5d7f9g1h3j5k7l", "quantity": 2 } ], "shipped_at": "2026-10-23T09:12:44.000Z", "estimated_delivery_at": null, "delivered_at": null, "created_at": "2026-10-23T09:12:44.000Z" } ], "tracking_page_url": "https://swaglists.com/track/Zx81kLm2pQ", "packing_slip": { "message": "Thanks for shopping with Company A!", "brand_name": null, "logo_file_id": null, "customer_order_number": "#1042" }, "gift_message": null, "customer_note": null, "metadata": {}, "created_at": "2026-10-21T14:32:05.000Z", "updated_at": "2026-10-23T09:12:44.000Z", "placed_at": "2026-10-21T14:32:05.000Z", "in_production_at": "2026-10-21T14:32:05.000Z", "shipped_at": "2026-10-23T09:12:44.000Z", "delivered_at": null, "canceled_at": null, "cancel_reason": null, "failed_at": null, "failure_reason": null } ```
## Order item A line of an order (prices and designs are snapshotted when the order is created). Returned by: `Order.items`. | Field | Type | Description | | --- | --- | --- | | `object` | "order_item" | Type of the object: always `order_item`. | | `id` | string | Unique identifier (starts with `oi_`). | | `product_id` | string \| null | Your product (null for items ordered by catalog variant with inline designs). | | `product_variant_id` | string \| null | Your product variant (null for inline catalog items). | | `catalog_product_id` | string | Catalog product of the item. | | `catalog_variant_id` | string | Catalog variant of the item. | | `sku` | string \| null | Your SKU (null for inline catalog items). | | `title` | string | Product title at order time. | | `variant_title` | string \| null | Variant title at order time (e.g. `Black / M`). | | `quantity` | integer | Units ordered. | | `shipped_quantity` | integer | Units shipped so far. | | `unit_price` | integer | Wholesale unit price (cents). | | `total_price` | integer | `unit_price` × `quantity`, in cents. | | `retail_price` | integer \| null | Your retail unit price to the end customer (cents), as given on the order or taken from the product; null when unknown. | | `status` | string | Production status of the item. One of: `draft`, `pending`, `in_production`, `shipped`, `delivered`, `canceled`, `failed`. | | `designs` | array of [Design](https://swaglists.com/docs/objects.md#design) | Snapshot of the designs at order time. | | `mockup_url` | string \| null | Preview image of the item, when available (signed URL). | | `external_line_id` | string \| null | Your line item id. | | `metadata` | map of string | Your key/value pairs (string values). |
Example order item ```json { "object": "order_item", "id": "oi_01k8x4b2qa3s5d7f9g1h3j5k7l", "product_id": "prod_01k8x3z7r1t3y5u7i9o1p3a5s7", "product_variant_id": "pvar_01k8x3z7r4f6g8h0j2k4l6z8x0", "catalog_product_id": "cp_01k8w1a2s3d4f5g6h7j8k9m0n1", "catalog_variant_id": "cv_01k8w1a2s7d9f1g3h5j7k9m1n3", "sku": "CA-TEE-BLK-M", "title": "Company A Logo Tee", "variant_title": "Black / M", "quantity": 2, "shipped_quantity": 2, "unit_price": 1299, "total_price": 2598, "retail_price": 2500, "status": "shipped", "designs": [ { "placement": "front", "layers": [ { "file_id": "file_01k8x3y1q3w5e7r9t1y3u5i7o9", "transform": { "x": 0.1, "y": 0.05, "width": 0.8, "height": 0.6, "rotation": 0 }, "opacity": 1 } ] } ], "mockup_url": null, "external_line_id": "line-1", "metadata": {} } ```
## Recipient The end customer's shipping address. Returned by: `Order.recipient`. | Field | Type | Description | | --- | --- | --- | | `name` | string | Full name of the recipient. | | `company` | string \| null | Company name. | | `address1` | string | Street address. | | `address2` | string \| null | Apartment, suite, unit, etc. | | `city` | string | City. | | `state_code` | string \| null | State/province code (e.g. `CA`), where applicable. | | `postal_code` | string | Postal / ZIP code (empty for countries without postal codes). | | `country_code` | string | ISO 3166-1 alpha-2 country code. | | `phone` | string \| null | Phone number (carriers may use it for delivery questions). | | `email` | string \| null | Email address (used for shipment notifications, when enabled). |
Example recipient ```json { "name": "Jane Doe", "company": null, "address1": "123 Market St", "address2": "Apt 4", "city": "San Francisco", "state_code": "CA", "postal_code": "94107", "country_code": "US", "phone": null, "email": "jane@example.com" } ```
## Shipment A parcel with carrier tracking. An order can ship in several parcels. Returned by: `Order.shipments`, `events shipment.*`. | Field | Type | Description | | --- | --- | --- | | `object` | "shipment" | Type of the object: always `shipment`. | | `id` | string | Unique identifier (starts with `shp_`). | | `order_id` | string | Order the parcel belongs to. | | `status` | string | Tracking status of the parcel. One of: `pending`, `label_created`, `in_transit`, `out_for_delivery`, `delivered`, `exception`, `returned`. | | `carrier` | string \| null | Carrier code (e.g. `usps`, `ups`, `fedex`, `dhl`). | | `service` | string \| null | Carrier service name (e.g. `USPS Ground Advantage`). | | `tracking_number` | string \| null | Carrier tracking number. | | `tracking_url` | string \| null | Carrier tracking page. | | `items` | array of object | Order items (and quantities) in this parcel. | | `items[].order_item_id` | string | Order item in the parcel. | | `items[].quantity` | integer | Units of that item in the parcel. | | `shipped_at` | string \| null | When the parcel was handed to the carrier. | | `estimated_delivery_at` | string \| null | Carrier's estimated delivery date, when known. | | `delivered_at` | string \| null | When the parcel was delivered. | | `created_at` | string \| null | When the object was created (ISO-8601, UTC). |
Example shipment ```json { "object": "shipment", "id": "shp_01k8x9z1m3n5b7v9c1x3z5a7s9", "order_id": "ord_01k8x4b2q9w7e3r5t1y8u6i0pa", "status": "in_transit", "carrier": "usps", "service": "USPS Ground Advantage", "tracking_number": "9400111899223197428490", "tracking_url": "https://tools.usps.com/go/TrackConfirmAction?tLabels=9400111899223197428490", "items": [ { "order_item_id": "oi_01k8x4b2qa3s5d7f9g1h3j5k7l", "quantity": 2 } ], "shipped_at": "2026-10-23T09:12:44.000Z", "estimated_delivery_at": null, "delivered_at": null, "created_at": "2026-10-23T09:12:44.000Z" } ```
## Order event An entry of an order's timeline. Returned by: `GET /orders/{id}/events`. | Field | Type | Description | | --- | --- | --- | | `object` | "order_event" | Type of the object: always `order_event`. | | `id` | string | Unique identifier (starts with `oev_`). | | `type` | string | Kind of entry (for example `confirmed`, `status_changed`, `on_hold`, `shipment_created`, `canceled`). | | `message` | string | Human-readable description. | | `from_status` | string \| null | Order status before the change (status changes only). | | `to_status` | string \| null | Order status after the change (status changes only). | | `created_at` | string \| null | When the object was created (ISO-8601, UTC). |
Example order event ```json { "object": "order_event", "id": "oev_01k8x4b2qc5v7b9n1m3k5j7h9g", "type": "status_changed", "message": "Order is in production", "from_status": "processing", "to_status": "in_production", "created_at": "2026-10-21T14:32:05.000Z" } ```
## Order estimate Exactly what an order would cost; nothing is created. Returned by: `POST /orders/estimate`. | Field | Type | Description | | --- | --- | --- | | `object` | "order_estimate" | Type of the object: always `order_estimate`. | | `livemode` | boolean | `true` in live mode, `false` in test mode. | | `currency` | string | Three-letter currency code, lowercase (`usd`). | | `shipping_method` | string | Shipping method the estimate was priced with. One of: `economy`, `standard`, `express`, `priority`. | | `items` | array of object | Priced items, in the order you sent them. | | `items[].index` | integer | Position of the item in your `items` array. | | `items[].catalog_variant_id` | string | Catalog variant that will be produced. | | `items[].product_variant_id` | string \| null | Your product variant (null for inline catalog items). | | `items[].sku` | string \| null | Your SKU (null for inline catalog items). | | `items[].title` | string | Product title. | | `items[].variant_title` | string \| null | Variant title. | | `items[].quantity` | integer | Units. | | `items[].unit_price` | integer | Wholesale unit price in cents. | | `items[].total_price` | integer | `unit_price` × `quantity`, in cents. | | `subtotal` | integer | Items total in cents. | | `shipping` | integer | Shipping price in cents. | | `tax` | integer | Tax in cents. | | `total` | integer | Exactly what POST /orders would charge. | | `available_shipping_methods` | array of [ShippingRate](https://swaglists.com/docs/objects.md#shipping_rate) | Every shipping method you could choose, with its price. | | `estimated_delivery_days` | object | Business days from order to delivery, including production. | | `estimated_delivery_days.min` | integer | Fastest estimate in business days. | | `estimated_delivery_days.max` | integer | Slowest estimate in business days. | | `wallet_available` | integer | Available credits (cents). | | `sufficient_funds` | boolean | Whether your available credits cover `total`. |
Example order estimate ```json { "object": "order_estimate", "livemode": true, "currency": "usd", "shipping_method": "standard", "items": [ { "index": 0, "catalog_variant_id": "cv_01k8w1a2s7d9f1g3h5j7k9m1n3", "product_variant_id": "pvar_01k8x3z7r4f6g8h0j2k4l6z8x0", "sku": "CA-TEE-BLK-M", "title": "Company A Logo Tee", "variant_title": "Black / M", "quantity": 2, "unit_price": 1299, "total_price": 2598 } ], "subtotal": 2598, "shipping": 700, "tax": 0, "total": 3298, "available_shipping_methods": [ { "object": "shipping_rate", "method": "standard", "name": "Standard", "price": 475, "currency": "usd", "min_days": 3, "max_days": 5, "estimated_delivery_days": { "min": 5, "max": 9 } } ], "estimated_delivery_days": { "min": 5, "max": 9 }, "wallet_available": 482550, "sufficient_funds": true } ```
## Webhook endpoint A URL we POST events to. Returned by: `POST /webhook_endpoints`, `GET /webhook_endpoints`, `GET /webhook_endpoints/{id}`. | Field | Type | Description | | --- | --- | --- | | `object` | "webhook_endpoint" | Type of the object: always `webhook_endpoint`. | | `id` | string | Unique identifier (starts with `we_`). | | `url` | string | URL we POST events to. | | `description` | string \| null | Your description. | | `enabled_events` | array of string | Event types delivered to this endpoint; ["*"] = all. | | `status` | string | `enabled` endpoints receive events. One of: `enabled`, `disabled`. | | `disabled_reason` | string \| null | Why the endpoint was disabled: `disabled_by_user`, `failing_deliveries` (every delivery failed for 5 days) or `endpoint_gone` (it answered HTTP 410). | | `mode` | string | `live` or `test`. One of: `live`, `test`. | | `livemode` | boolean | `true` in live mode, `false` in test mode. | | `created_at` | string | When the object was created (ISO-8601, UTC). | | `secret` | string | Signing secret (whsec_…). Only returned when the endpoint is created and when the secret is rotated — store it safely. |
Example webhook endpoint ```json { "object": "webhook_endpoint", "id": "we_01k8x2m4n6b8v0c2x4z6a8s0d2", "url": "https://company-a.example/webhooks/print", "description": "Production order updates", "enabled_events": [ "order.shipped", "order.delivered" ], "status": "enabled", "disabled_reason": null, "mode": "live", "livemode": true, "created_at": "2026-10-21T14:32:05.000Z" } ```
## Webhook delivery One event delivered (or being delivered) to one endpoint. Returned by: `POST /webhook_endpoints/{id}/test`. | Field | Type | Description | | --- | --- | --- | | `object` | "webhook_delivery" | Type of the object: always `webhook_delivery`. | | `id` | string | Unique identifier (starts with `whd_`). | | `event_id` | string | Event delivered. | | `endpoint_id` | string | Endpoint delivered to. | | `status` | string | `pending`, `retrying`, `succeeded` or `failed`. One of: `pending`, `retrying`, `succeeded`, `failed`. | | `attempts` | integer | Attempts made so far. | | `response_status` | integer \| null | HTTP status of the last attempt. | | `next_attempt_at` | string \| null | When the next attempt is scheduled. | | `last_attempt_at` | string \| null | When the last attempt was made. | | `created_at` | string | When the object was created (ISO-8601, UTC). |
Example webhook delivery ```json { "object": "webhook_delivery", "id": "whd_01k8x4b2r3e5w7q9a1s3d5f7g9", "event_id": "evt_01k8x4b2r1t3y5u7i9o1p3a5s7", "endpoint_id": "we_01k8x2m4n6b8v0c2x4z6a8s0d2", "status": "pending", "attempts": 0, "response_status": null, "next_attempt_at": "2026-10-21T14:32:05.000Z", "last_attempt_at": null, "created_at": "2026-10-21T14:32:05.000Z" } ```
## Event Something that happened in your account — also the exact JSON body POSTed to your webhook endpoints. Returned by: `GET /events`, `GET /events/{id}`, `webhook deliveries`. | Field | Type | Description | | --- | --- | --- | | `id` | string | Event id. Also sent as the `webhook-id` header and stable across retries — deduplicate on it. | | `object` | "event" | Type of the object: always `event`. | | `type` | string | Event type (e.g. `order.shipped`). | | `api_version` | string | API version the payload was rendered with. | | `created_at` | string | When the event happened (ISO-8601, UTC). | | `livemode` | boolean | `true` in live mode, `false` in test mode. | | `data` | map of any | `object` is the resource as of the event (same shape as the API returns); `previous_attributes` lists changed fields on *.updated events. |
Example event ```json { "id": "evt_01k8x4b2r1t3y5u7i9o1p3a5s7", "object": "event", "type": "order.shipped", "api_version": "2026-10-01", "created_at": "2026-10-21T14:32:05.000Z", "livemode": true, "data": { "object": { "object": "order", "id": "ord_01k8x4b2q9w7e3r5t1y8u6i0pa", "number": 1042, "external_id": "1042", "livemode": true, "status": "shipped", "hold_reason": null, "funds_status": "captured", "source": "api", "recipient": { "name": "Jane Doe", "company": null, "address1": "123 Market St", "address2": "Apt 4", "city": "San Francisco", "state_code": "CA", "postal_code": "94107", "country_code": "US", "phone": null, "email": "jane@example.com" }, "shipping_method": "standard", "currency": "usd", "subtotal": 2598, "shipping": 700, "tax": 0, "discount": 0, "total": 3298, "refunded": 0, "items": [ { "object": "order_item", "id": "oi_01k8x4b2qa3s5d7f9g1h3j5k7l", "product_id": "prod_01k8x3z7r1t3y5u7i9o1p3a5s7", "product_variant_id": "pvar_01k8x3z7r4f6g8h0j2k4l6z8x0", "catalog_product_id": "cp_01k8w1a2s3d4f5g6h7j8k9m0n1", "catalog_variant_id": "cv_01k8w1a2s7d9f1g3h5j7k9m1n3", "sku": "CA-TEE-BLK-M", "title": "Company A Logo Tee", "variant_title": "Black / M", "quantity": 2, "shipped_quantity": 2, "unit_price": 1299, "total_price": 2598, "retail_price": 2500, "status": "shipped", "designs": [ { "placement": "front", "layers": [ { "file_id": "file_01k8x3y1q3w5e7r9t1y3u5i7o9", "transform": { "x": 0.1, "y": 0.05, "width": 0.8, "height": 0.6, "rotation": 0 }, "opacity": 1 } ] } ], "mockup_url": null, "external_line_id": "line-1", "metadata": {} } ], "shipments": [ { "object": "shipment", "id": "shp_01k8x9z1m3n5b7v9c1x3z5a7s9", "order_id": "ord_01k8x4b2q9w7e3r5t1y8u6i0pa", "status": "in_transit", "carrier": "usps", "service": "USPS Ground Advantage", "tracking_number": "9400111899223197428490", "tracking_url": "https://tools.usps.com/go/TrackConfirmAction?tLabels=9400111899223197428490", "items": [ { "order_item_id": "oi_01k8x4b2qa3s5d7f9g1h3j5k7l", "quantity": 2 } ], "shipped_at": "2026-10-23T09:12:44.000Z", "estimated_delivery_at": null, "delivered_at": null, "created_at": "2026-10-23T09:12:44.000Z" } ], "tracking_page_url": "https://swaglists.com/track/Zx81kLm2pQ", "packing_slip": { "message": "Thanks for shopping with Company A!", "brand_name": null, "logo_file_id": null, "customer_order_number": "#1042" }, "gift_message": null, "customer_note": null, "metadata": {}, "created_at": "2026-10-21T14:32:05.000Z", "updated_at": "2026-10-23T09:12:44.000Z", "placed_at": "2026-10-21T14:32:05.000Z", "in_production_at": "2026-10-21T14:32:05.000Z", "shipped_at": "2026-10-23T09:12:44.000Z", "delivered_at": null, "canceled_at": null, "cancel_reason": null, "failed_at": null, "failure_reason": null } } } ```
## Error Every error response has this body. Returned by: `any 4xx/5xx response`. | Field | Type | Description | | --- | --- | --- | | `error` | object | The error. | | `error.type` | string | Category of the error. One of: `invalid_request_error`, `authentication_error`, `permission_error`, `not_found_error`, `conflict_error`, `idempotency_error`, `rate_limit_error`, `insufficient_funds_error`, `api_error`. | | `error.code` | string | Stable, machine-readable error code (see doc_url). | | `error.message` | string | Human-readable explanation; safe to log, not meant for end customers. | | `error.param` | string | The request parameter the error relates to, e.g. items[0].quantity. | | `error.doc_url` | string | Documentation for this error code. | | `error.request_id` | string | Id of the request (also in the Request-Id header). Quote it when contacting support. | | `error.required_amount` | integer | insufficient_funds only: credits required (cents). | | `error.available_amount` | integer | insufficient_funds only: credits available (cents). | | `error.currency` | string | Currency of the amounts (insufficient_funds only). | | `error.existing_id` | string | duplicate_external_id / resource_already_exists only: id of the existing resource (e.g. the order that already has this external_id). | | `error.required_scope` | string | insufficient_scope only: the scope the key is missing. | | `error.errors` | array of object | Validation errors only: every problem found in the request (at most 50); the first one is the top-level code / param / message. Fix them all before retrying. Up to 50 items. | | `error.errors[].param` | string \| null | The parameter of this problem (null for the request as a whole). | | `error.errors[].code` | string | Error code of this problem (usually parameter_invalid). | | `error.errors[].message` | string | Human-readable explanation of this problem. | | `error.allowed_values` | array of string or number or boolean | For a value outside a fixed set (e.g. a placement key): the accepted values (`[true, false]` for a yes/no customization). | | `error.available_shipping_methods` | array of string | shipping_method_unavailable: the shipping methods that are available for this request; recipient errors another method would avoid (po_box_not_supported, recipient_phone_required, recipient_email_required): the methods that would deliver. | | `error.max_length` | integer | For a field that is too long: the largest length (in characters) that can be accepted. | | `error.max_quantity` | integer | For a quantity that is too large: the largest quantity that can be accepted. |
Example error ```json { "error": { "type": "invalid_request_error", "code": "parameter_invalid", "message": "Invalid items[0].quantity: must be greater than or equal to 1.", "param": "items[0].quantity", "doc_url": "https://swaglists.com/docs/errors#parameter_invalid", "request_id": "req_01k8x4b2q7w9e1r3t5y7u9i1o3" } } ```
## Catalog price change The `data.object` of `catalog.price_changed` events. | Field | Type | Description | | --- | --- | --- | | `object` | string | Always `catalog_price_change`. | | `catalog_product_id` | string | Catalog product whose wholesale prices changed. | | `catalog_variant_ids` | array of string | Changed catalog variants that your products use. | | `reason` | string | One of: `cost_increase`, `cost_decrease`, `cost_change`, `pricing_change`. |