Bundles

Sell sets of prints under one SKU. One listing, one order, every print in the set.

Updated on
Bundles

In short

  • A bundle is one SKU for a set of 2 to 10 prints that already exist as products. Put the bundle SKU on a listing, or send it on an API order, and the order arrives as every print in the set, each priced as a normal print.
  • POST /api-create-bundle makes one from product SKUs; GET /api-get-bundle reads it; DELETE /api-delete-bundle removes it. Bundles can’t be edited: delete and create again.
  • Each print in the set uses the size the buyer chose, unless you pin a fixed size to that item. Pin every item for a gallery-wall set of mixed sizes; leave sizes off for a set that is all one size.
  • A set of 3 or more prints qualifies for the 20% discount on its own, because the discount is counted per order and a bundle order is 3 prints.
  • A bundle that contains a deleted product can’t be ordered until it is rebuilt, and an imported set order with no matching bundle stops as “This is a set” for the seller.

Before you start

  • Every print in the set saved as a product, with artwork in every size the set will sell (see Save Products). Creating a bundle checks that the files exist and refuses the whole bundle if any are missing.
  • A bundle SKU that isn’t already a product SKU, a size SKU or another bundle’s SKU, capitals ignored (see SKUs).
  • A decision on sizes: all one size chosen by the buyer, or fixed per item.

How a bundle orders

A bundle is never printed as a bundle; it is a shortcut for a list of prints. When an order carries a bundle SKU we replace it with one line per product (times its quantity), each matched to that product’s file for the size in play, each priced as a normal print, and the order is then an ordinary order of several prints to one address. Every print follows the same type, paper and frame colour as the line that named the bundle. Editing a bundle order in the app turns its prints into ordinary lines that the seller can change one by one.

Create a bundle

curl -s -X POST "https://api.printshrimp.com/functions/v1/api-create-bundle" \
  -H "x-api-key: $PS_API_KEY" -H "Content-Type: application/json" \
  -d '{
    "name": "Woodland Set of 3",
    "sku": "WOODLAND-SET",
    "items": [ { "sku": "FOX-01" }, { "sku": "OWL-01" }, { "sku": "DEER-01", "size": "A4" } ]
  }'
Field Required Rules
name yes max 255
sku yes letters, numbers, -, _; max 100; not already a bundle, product or size SKU, capitals ignored
items yes 1 to 10 products; plain strings also work: ["FOX-01", "OWL-01"]
items[].sku yes a saved product SKU; each product once, with quantity for extra copies
items[].quantity no default 1
items[].size no always print this item in this size; leave it out to use the size the buyer ordered

The set must come to 2 to 10 prints counting quantities. An item with a fixed size needs artwork saved in that size; items without a fixed size need at least one size they all have artwork for. It is all or nothing: if any item fails, nothing is created.

Response 201:

{
  "success": true,
  "bundle": {
    "bundle_id": "b7a1...",
    "name": "Woodland Set of 3",
    "sku": "WOODLAND-SET",
    "created_at": "2026-10-19T09:41:10.512+00:00",
    "total_prints": 3,
    "items": [
      { "product_id": "...", "sku": "FOX-01", "name": "Fox", "quantity": 1, "size": null },
      { "product_id": "...", "sku": "OWL-01", "name": "Owl", "quantity": 1, "size": null },
      { "product_id": "...", "sku": "DEER-01", "name": "Deer", "quantity": 1, "size": "A4" }
    ]
  }
}

Errors come back as 400 with an errors array naming each failing item, for example { "error": "1 of 3 items can't go in a bundle. Nothing was created.", "errors": [ { "index": 2, "sku": "DEER-01", "error": "\"DEER-01\" has no artwork uploaded in A4." } ] }, or 409 when the bundle SKU is already used. A 409 on a retry means the first attempt worked.

Read bundles

curl -s "https://api.printshrimp.com/functions/v1/api-get-bundle?sku=WOODLAND-SET" \
  -H "x-api-key: $PS_API_KEY"

With sku: { "success": true, "bundle": {...} }, the same shape as the create response. Without: { "success": true, "bundles": [...], "page": 1, "total_bundles": 12 }, 25 per page, newest first. A product that has been deleted shows as an item with product_id, sku and name all null, and that bundle can’t be ordered until it is deleted and created again with a live product. Reading bundles before each listing run is the cheap way to catch this.

Delete a bundle

curl -s -X DELETE "https://api.printshrimp.com/functions/v1/api-delete-bundle?sku=WOODLAND-SET" \
  -H "x-api-key: $PS_API_KEY"

sku or bundle_id selects it; both are also accepted as a JSON body, and POST works as an alias. The response is { "success": true, "deleted": { ...bundle shape... } }. The products and their artwork are kept; only the grouping goes. Errors: 400 for no selector or a bad id, 404 not found. There is no update call, so changing a set means deleting and recreating it with the same SKU, which is instant and keeps listings that carry the SKU valid.

Ordering a bundle

Through the API, send the bundle SKU as one line, with the size, type, paper_type and variant you want for the set:

"products": [
  { "sku": "WOODLAND-SET", "size": "A3", "paper_type": "Matte" }
]

This becomes three prints: the fox and the owl in A3 (the size sent), and the deer in A4 (its fixed size), all matte. Capitals are ignored for bundle SKUs. The 50-print limit per order counts prints after the split, so a 10-print bundle is 10 of the 50. The type on the line applies to every print: "type": "Frame" with a variant frames every print in the set, "type": "FineArt" makes every print fine art. A bundle containing a deleted product refuses the order.

On an Etsy or Shopify listing, put the bundle SKU on the listing exactly as you would a product SKU. The order imports as every print in the set, with the buyer’s chosen size applied to items that have no fixed size, and the order check decides print or frame and paper from the listing as usual. A set listing whose SKU matches no bundle shows “This is a set” with a Create bundle button, and only the seller can act on it. A bundle order with a missing or duplicate print can’t be paid until it is fixed.

Discount. Every print in an order of 3 or more prints to one address is 20% off, so a set of 3 qualifies by itself and a set of 2 doesn’t. Fine art prints count separately from prints, and frames never count and are never discounted. Shipping is charged once for the whole order. Quote the order with GET /api-get-pricing per print, then apply the discount rule (see Pricing).

Rules and limits

  • 2 to 10 prints per bundle, from 1 to 10 products; each product once, with quantity for copies.
  • Bundle SKU max 100 characters; unique against products, size SKUs and bundles with capitals ignored.
  • Rate limits per account per rolling hour: 2,000 reads; 500 creates and 500 deletes.
  • No edits. Delete and create again, using the same SKU if listings already carry it.
  • Bundles made in the app (My Print Files → Bundles) and through the API are the same bundles.

What this page doesn’t cover

Next

Previous: Save Products · Next: Pricing · Back to the hub: PrintShrimp for AI agents

Last updated 19 October 2026.

CoFounder
Updated on