In short
- Thirteen calls on one base URL, all JSON over HTTPS, authenticated with one header. Field names below are exact; copy them.
- Reads: pricing, products, templates, drafts, bundles, orders. Writes: products, drafts, bundles, orders. Nothing here publishes a listing, pays an order, or changes an order after it is placed; those stay with the seller in the app.
- Values in angle brackets in example responses are placeholders. Prices only ever come from the live pricing call.
- Limits, error codes and safe retries are on Limits and Errors; this page lists each endpoint’s own errors.
Every call
Base URL: https://api.printshrimp.com/functions/v1
Header: x-api-key: $PS_API_KEY (or Authorization: Bearer $PS_API_KEY)
Body: JSON, with Content-Type: application/json
Keys look like psk_live_ plus 32 characters and don’t expire. Successful responses carry "success": true. Errors are always { "error": "<message>" }, sometimes with an errors array (one entry per failing item) or a credits object (402).
| Code | Body |
|---|---|
| 401 |
{ "error": "Missing or invalid API key" } (no key, or the wrong prefix) or { "error": "Invalid API key" } (unknown or revoked) |
| 405 | { "error": "Method not allowed" } |
| 429 |
{ "error": "Rate limit exceeded" }, no Retry-After header |
| 500 |
{ "error": "An unexpected error occurred" } (wording varies by endpoint) |
Index
| Call | Does | Limit per hour |
|---|---|---|
GET /api-get-pricing |
Prices per size for one country | 2,000 |
POST /api-create-product |
Save a product with files per size | 1,000 |
PUT /api-update-product |
Rename, re-SKU, add sizes, replace files | 500 |
DELETE /api-delete-product |
Delete a product or one size | 500 |
GET /api-get-product |
Read one product or list them | 2,000 |
GET /api-get-templates |
List the seller’s listing templates | 2,000 |
POST /api-bulk-list |
Turn artwork links into listing drafts | 500 |
GET /api-bulk-list |
Read draft progress | 2,000 |
POST /api-create-bundle |
Save a set of products under one SKU | 500 |
GET /api-get-bundle |
Read one bundle or list them | 2,000 |
DELETE /api-delete-bundle |
Delete a bundle | 500 |
POST /api-create-order |
Create a real order | 1,000 orders per 24 hours |
GET /api-get-order |
Read one order or list paid orders | 2,000 |
GET /api-get-pricing
curl -s "https://api.printshrimp.com/functions/v1/api-get-pricing?country=GB" \
-H "x-api-key: $PS_API_KEY"
country: 2-letter ISO code or full country name. Required.
{
"success": true,
"country": "United Kingdom",
"currency": "GBP",
"sizes": [
{
"size": "A3",
"label": "A3",
"print": { "price": <number>, "shipping": <number>, "vat_rate": 0.2, "vat_amount": <number>, "net_price": <number> },
"frame": { "price": <number>, "shipping": <number>, "vat_rate": 0.2, "vat_amount": <number>, "net_price": <number> },
"fine_art": { "price": <number>, "shipping": <number>, "vat_rate": 0.2, "vat_amount": <number>, "net_price": <number> }
},
{
"size": "30x40cm",
"label": "12x16\" (30x40cm)",
"print": { ... },
"frame": null,
"fine_art": null
}
]
}
-
nullmeans that product isn’t offered in that size to that country; sizes not offered at all are left out. - Send
size, notlabel, when ordering. -
shippingis charged once per order, on the first item. - UK prices include VAT (
vat_rate0.2) andvat_amountis insideprice, never added on top. Other countries havevat_rate0. - Countries with no prices of their own get Rest of World prices.
Errors: 400 Missing required query parameter: country · 400 Unknown country: XX · 404 No pricing available for <country>.
POST /api-create-product
curl -s -X POST "https://api.printshrimp.com/functions/v1/api-create-product" \
-H "x-api-key: $PS_API_KEY" -H "Content-Type: application/json" \
-d '{
"name": "Mountain Sunset Print",
"sku": "MSP-001",
"variants": [
{ "size": "A4", "image_url": "https://example.com/sunset-a4.jpg" },
{ "size": "A3", "image_url": "https://example.com/sunset-a3.jpg" }
]
}'
| Field | Required | Rules |
|---|---|---|
name |
yes | max 200 characters |
sku |
yes | letters, numbers, -, _; max 50; unique on the account and not a bundle SKU |
variants |
no | max 22 per call; add more with PUT /api-update-product
|
variants[].size |
yes | one of the sizes listed at the end of this page, case-sensitive; each size once per call |
variants[].image_url |
yes | HTTPS, JPEG or PNG, max 50 MB; the file’s shape must fit the size within 2% |
variants[].type |
no |
Print (default), Frame, FineArt; ordering decides print or frame anyway, so leave it out |
Response 201:
{
"success": true,
"product": {
"id": "f0f17d46-...",
"name": "Mountain Sunset Print",
"sku": "MSP-001",
"type": "poster",
"created_at": "2026-10-19T09:41:10.512+00:00",
"variants": [
{ "id": "232171d7-...", "sku": "MSP-001-A4", "size": "A4", "type": "Print", "image_url": "https://...", "thumbnail_url": "https://..." },
{ "id": "8c2e19a0-...", "sku": "MSP-001-A3", "size": "A3", "type": "Print", "image_url": "https://...", "thumbnail_url": null }
]
},
"warning": "Product created, but one or more thumbnails could not be generated yet."
}
- This response says
id;GET /api-get-productsaysproduct_idandvariant_idfor the same values. -
variantsis missing when none were sent.warningappears only while artwork copying is still running in the background;image_urlmay still be your URL until it finishes. - The variant SKU is always
{sku}-{size}.
Errors: 400 Missing required field: name / sku · 400 SKU must be 50 characters or less. · 400 Too many variants. Maximum 22 variants per request. · 400 variants[1]: Invalid size "a4". Accepted values: ... · 400 variants[0]: Duplicate size "A4". ... · 400 variants[0]: Invalid image_url: <reason> · 400 product limit reached (25,000 per account) · 409 SKU "MSP-001" already exists · 409 SKU "X" belongs to a bundle. ...
PUT /api-update-product
curl -s -X PUT "https://api.printshrimp.com/functions/v1/api-update-product" \
-H "x-api-key: $PS_API_KEY" -H "Content-Type: application/json" \
-d '{
"sku": "MSP-001",
"variants": [
{ "size": "A4", "image_url": "https://example.com/sunset-a4-v2.jpg" },
{ "size": "24x36", "image_url": "https://example.com/sunset-24x36.jpg" }
]
}'
| Field | Required | Rules |
|---|---|---|
sku |
yes | existing product SKU |
name |
no | new name, max 200 |
new_sku |
no | new product SKU, same rules as create; variant SKUs follow (MSP-002-A4) |
variants |
no | max 22 per call |
variants[].image_url |
yes | same rules as create |
variants[].size / variant_sku (or sku) / variant_id
|
one of |
size creates the size if the product doesn’t have it; the other two must match an existing variant |
variants[].type |
no | only with size: Print (default), Frame, FineArt
|
Response 200:
{
"success": true,
"sku_updated": false,
"updated_variants": 1,
"created_variants": 1,
"product": {
"product_id": "f0f17d46-...",
"name": "Mountain Sunset Print",
"sku": "MSP-001",
"thumbnail_url": "https://...",
"created_at": "2026-10-19T09:41:10.512+00:00",
"updated_at": "2026-10-19T11:02:44.020+00:00",
"variants": [
{ "variant_id": "232171d7-...", "sku": "MSP-001-A4", "size": "A4", "type": "Print", "image_url": "https://...", "thumbnail_url": "https://...", "created_at": "...", "updated_at": "..." },
{ "variant_id": "5d0e8b11-...", "sku": "MSP-001-24x36", "size": "24x36", "type": "Print", "image_url": "https://...", "thumbnail_url": null, "created_at": "...", "updated_at": null }
]
}
}
May also carry warning while artwork copying finishes. variants lists every size the product has, not just the ones sent.
DELETE /api-delete-product
# whole product
curl -s -X DELETE "https://api.printshrimp.com/functions/v1/api-delete-product?sku=MSP-001" \
-H "x-api-key: $PS_API_KEY"
# one size
curl -s -X DELETE "https://api.printshrimp.com/functions/v1/api-delete-product?sku=MSP-001&size=A4" \
-H "x-api-key: $PS_API_KEY"
Selectors: sku or product_id (whole product); sku + size, variant_sku or variant_id (one size). Also accepted as a JSON body, and POST works as an alias. Cannot be undone; files are removed after 30 days; past orders keep their copy.
{
"success": true,
"deleted": {
"product_id": "f0f17d46-...",
"sku": "MSP-001",
"name": "Mountain Sunset Print",
"variants": [
{ "variant_id": "232171d7-...", "sku": "MSP-001-A4", "size": "A4", "type": "Print" },
{ "variant_id": "8c2e19a0-...", "sku": "MSP-001-A3", "size": "A3", "type": "Print" }
]
}
}
One size: same, plus "remaining_variants": 3, with deleted.variants holding the one size. Errors: 400 no selector, or variant not on that product · 404 not found · 409 product is used by other records.
GET /api-get-product
curl -s "https://api.printshrimp.com/functions/v1/api-get-product?sku=MSP-001" \
-H "x-api-key: $PS_API_KEY"
sku = one product. No sku = list, 25 per page, page from 1.
{
"success": true,
"product": {
"product_id": "f0f17d46-...",
"name": "Mountain Sunset Print",
"sku": "MSP-001",
"thumbnail_url": "https://...",
"created_at": "2026-10-19T09:41:10.512+00:00",
"variants": [
{
"variant_id": "232171d7-...",
"sku": "MSP-001-A4",
"size": "A4",
"type": "Print",
"image_url": "https://api.printshrimp.com/storage/v1/object/public/...",
"thumbnail_url": "https://...",
"created_at": "2026-10-19T09:41:10.512+00:00"
}
]
}
}
List: { "success": true, "products": [ ...same shape... ], "page": 1, "total_products": 142 }. When every variant’s image_url is on our storage, we have our own copy and the caller can delete theirs. 404 when no product has that SKU.
GET /api-get-templates
curl -s "https://api.printshrimp.com/functions/v1/api-get-templates" -H "x-api-key: $PS_API_KEY"
{
"success": true,
"default_template_id": "3f6c1e2a-...",
"templates": [
{
"template_id": "3f6c1e2a-...",
"name": "Botanical",
"ratio": "A",
"ratio_label": "A-series",
"mode": "easy",
"sizes": ["A4", "A3", "A2"],
"mockups": { "scenes": 6, "photos": 2 },
"print_files": true,
"is_default": true,
"created_at": "2026-08-02T09:41:10.512+00:00",
"updated_at": "2026-09-20T16:03:44.031+00:00"
}
]
}
ratio: A, 2:3, 3:4, 4:5. print_files: false = mockup-only template, never makes PrintShrimp products. More than 6 scenes = 2 credits per draft. Templates are made and edited in the Listing Hub, not through the API.
POST /api-bulk-list
curl -s -X POST "https://api.printshrimp.com/functions/v1/api-bulk-list" \
-H "x-api-key: $PS_API_KEY" -H "Content-Type: application/json" \
-d '{
"template_id": "3f6c1e2a-...",
"tags": ["vintage botanical prints"],
"instructions": { "title": "Start the title with the plant name." },
"items": [
{ "image_url": "https://example.com/fern.png", "sku": "FERN-001", "name": "Fern Botanical Print", "keywords": "fern, green, vintage" },
{ "image_url": "https://example.com/oak-leaf.png" }
]
}'
| Field | Required | Rules |
|---|---|---|
template_id |
no | from GET /api-get-templates; default template if left out |
items |
yes | 1 to 10 |
items[].image_url |
yes | HTTPS JPEG or PNG, max 50 MB, ratio = the template’s family (A, 2:3, 3:4, 4:5) within 2%; landscape OK; square not yet |
items[].sku |
no | letters, numbers, -, _; max 32; defaults to the file name |
items[].name |
no | max 200; defaults to the file name |
items[].keywords |
no | hints for the AI, max 300 |
tags / items[].tags
|
no | up to 13 tags, 20 characters each, kept ahead of the AI’s tags |
instructions / items[].instructions
|
no |
{ title, description, tags }, free text, max 2,000 characters each |
generate |
no | default true; false = drafts only, no credits used |
Response 201:
{
"success": true,
"template": { "template_id": "3f6c1e2a-...", "name": "Botanical", "ratio": "A", "ratio_label": "A-series" },
"generate": true,
"credits": { "cost": 2, "available": 340 },
"drafts": [
{
"index": 0,
"status": "created",
"draft_id": "9b1d7c40-...",
"sku": "FERN-001",
"name": "Fern Botanical Print",
"image": { "url": "https://...", "width": 3508, "height": 4961, "ratio": "A", "ratio_label": "A-series", "orientation": "portrait" },
"mockups": 6,
"credit_cost": 1,
"ai_status": "queued"
}
]
}
-
drafts[].status:created,failed(seeerror),skipped(ran out of time, send that image again). If none were created: 500 withsuccess: falseanderror: "No draft could be created. See drafts[].error." -
creditsisnullwhengenerateisfalse.
Errors (nothing is created):
// 400: any image failed the checks
{
"error": "1 of 2 images failed validation. Nothing was created.",
"errors": [
{ "index": 1, "image_url": "https://example.com/oak-leaf.png", "error": "Artwork is 2:3 (1024x1536px) but template \"Botanical\" is A-series. Use a 2:3 template or resize the file." }
]
}
// 402: not enough credits for the whole batch
{ "error": "Not enough credits: this request needs 12 and you have 4. Top up or send fewer images.", "credits": { "cost": 12, "available": 4 } }
// 409: SKU already on the account
{ "error": "1 SKU conflict(s). Nothing was created.", "errors": [ { "index": 0, "image_url": "https://example.com/fern.png", "error": "SKU \"FERN-001\" is already used by a product or draft on your account." } ] }
GET /api-bulk-list
curl -s "https://api.printshrimp.com/functions/v1/api-bulk-list?draft_id=9b1d7c40-..." \
-H "x-api-key: $PS_API_KEY"
draft_id = one · draft_ids=a,b,c = up to 50 · nothing = newest 25, page from 1.
{
"success": true,
"draft": {
"draft_id": "9b1d7c40-...",
"created_at": "2026-10-19T10:12:03.120+00:00",
"sku": "FERN-001",
"name": "Fern Botanical Print",
"template_id": "3f6c1e2a-...",
"image": { "url": "https://...", "thumbnail_url": "https://...", "width": 3508, "height": 4961, "ratio": "A", "ratio_label": "A-series" },
"generation": {
"status": "done",
"error": null,
"queued_at": "...", "started_at": "...", "completed_at": "...",
"title": "Fern Botanical Print, Vintage Green Wall Art",
"short_title": "Fern Botanical Print",
"description": "...",
"tags": ["botanical print", "fern wall art"]
},
"mockups": { "total": 6, "rendered": 6, "status": "done" },
"etsy": { "status": null, "listing_id": null, "error": null, "listed_at": null },
"product_id": null
}
}
-
generation.status:not_started,queued,processing,done,failed(failed drafts are not charged). -
mockups.status:none,pending,rendering,done,failed. -
etsy.status:nulluntil the seller lists it from the Listing Hub, thenqueued,processing,done,failed. -
draft_idsform:{ "success": true, "drafts": [...], "missing": ["<id not on account>"] }. List form:{ "success": true, "drafts": [...], "page": 1, "total_drafts": 87 }.
POST /api-create-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 (case ignored) |
items |
yes | 1 to 10 products; plain strings also work: ["FOX-01", "OWL-01"]
|
items[].sku |
yes | a saved product SKU |
items[].quantity |
no | default 1 |
items[].size |
no | always print this item in this size; leave out to use the ordered size |
2 to 10 prints per bundle counting quantities. Every product needs artwork in its fixed size; items without a size need a size they all share. All or nothing. No update: delete and create again.
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: 400 with errors per item, e.g. { "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." } ] } · 409 bundle SKU already used.
GET /api-get-bundle
?sku=WOODLAND-SET → { "success": true, "bundle": {...} } (same shape as create). No sku → { "success": true, "bundles": [...], "page": 1, "total_bundles": 12 }, 25 per page, newest first. A deleted product shows as an item with product_id, sku and name all null; that bundle can’t be ordered until it is rebuilt.
DELETE /api-delete-bundle
?sku=WOODLAND-SET or ?bundle_id=<uuid> (or JSON body; POST alias). Response { "success": true, "deleted": { ...bundle shape... } }. Products and their artwork are kept. 400 no selector / bad id · 404 not found.
POST /api-create-order
Makes a real order. Not charged until paid, but with auto-pay on it is paid, printed and shipped. Always send external_order_number.
curl -s -X POST "https://api.printshrimp.com/functions/v1/api-create-order" \
-H "x-api-key: $PS_API_KEY" -H "Content-Type: application/json" \
-d '{
"external_order_number": "SHOP-1001",
"customerInfo": {
"name": "Jane Example",
"address1": "1 Example Street",
"city": "London",
"zip": "SW1A 1AA",
"country": "GB",
"shipping": "standard"
},
"products": [
{ "sku": "MSP-001", "size": "A4", "paper_type": "Matte" },
{ "sku": "MSP-001", "size": "A3", "type": "Frame", "variant": "Oak" },
{ "size": "A4", "paper_type": "Gloss", "image": { "artwork_url": "https://example.com/art.jpg" } }
]
}'
Top level:
| Field | Required | Rules |
|---|---|---|
external_order_number |
no (always send) | max 100; a second API order with the same value is refused with 400 |
gift_message |
no | max 500 |
customerInfo |
yes | below |
products |
yes | 1 to 50 prints (after bundles are split); one entry = one print |
customerInfo:
| Field | Required | Rules |
|---|---|---|
name |
yes | max 60 |
address1 |
yes | max 60 |
address2 |
no | max 60 |
city |
yes | max 60, no digits |
state |
US, CA, AU | max 60 |
zip |
yes | max 20; UK: no hyphen, not all digits; US: no letters |
country |
yes | 2-letter ISO (GB, not UK); JE, GG, IM are refused |
email |
no | valid format, max 254 |
phone |
no | max 30 |
shipping |
no |
standard (default), tracking upgrade, priority; the last two UK only; frames and fine art always ship standard |
products[], one of two modes per item:
| Field | Required | Rules |
|---|---|---|
sku |
SKU mode | a saved product SKU or a bundle SKU |
image.artwork_url |
URL mode | HTTPS, JPEG, PNG or PDF, max 50 MB, ratio must fit the size |
size |
yes | product sizes plus 12x16 (= 30x40cm) and 20x28 (= 50x70cm) |
type |
no |
Print (default), Frame, FineArt (Fine Art also works) |
paper_type |
prints |
Matte, Satin, Gloss; ignored for frames (Matte) and fine art |
variant |
frames |
Black, White, Oak
|
Sending both sku and image.artwork_url, or neither, is a 400. A bundle SKU becomes one print per product in the bundle, using the type, paper_type and variant sent; fixed-size bundle items use their own size.
Response 201 (status is always Pending):
{
"success": true,
"order": {
"order_id": "f0f17d46-...",
"external_order_number": "SHOP-1001",
"status": "Pending",
"shipping_type": "Standard",
"total_price": <number>,
"shipping_cost": <number>,
"created_at": "2026-10-19T09:41:10.512+00:00",
"items": [
{ "id": "a1...", "sku": "MSP-001", "size": "A4", "type": "Print", "variant": null, "paper_type": "Matte", "price": <number>, "title": "Mountain Sunset Print" },
{ "id": "b2...", "sku": "MSP-001", "size": "A3", "type": "Frame", "variant": "Oak", "paper_type": "Matte", "price": <number>, "title": "Mountain Sunset Print" },
{ "id": "c3...", "sku": null, "size": "A4", "type": "Print", "variant": null, "paper_type": "Gloss", "price": <number>, "title": null }
],
"vat_rate": 0.2,
"vat_amount": <number>
}
}
-
shipping_type:Standard,Tracking Upgrade,Priority. -
total_priceincludes shipping and, for the UK, VAT (vat_amountis inside it). -
Unknown SKU: the order is still created and the response looks normal (
title: null). That print needs artwork before the order can be paid.GET /api-get-ordershows the item as"fulfillable": false, "reason_code": "SKU_NOT_FOUND". Safer: check SKUs withGET /api-get-productfirst.
Errors, all 400 with { "error": "..." }, for example:
Invalid request format. Expected { customerInfo: {...}, products: [...] }Missing customer information: zip. All of these are required: name, address1, city, zip, countryCountry must be a 2-letter ISO code (e.g. "GB", "US", "AU"). Received: "UK"State/province is required for United States. Please provide a "state" field.Shipping option "priority" is only available for United Kingdom. Use "standard" for other countries.Product[0]: Missing required field: paper_type. Accepted values: Matte, Satin, GlossProduct[1]: Frame orders require a "variant" field. Accepted values: Black, White, OakProduct[0]: Provide either "sku" (to reference a saved product) or "image.artwork_url" (to provide artwork directly), not both.-
An order with external_order_number "SHOP-1001" already exists.(the safe-retry case: treat it as already placed and look it up)
GET /api-get-order
curl -s "https://api.printshrimp.com/functions/v1/api-get-order?external_order_number=SHOP-1001" \
-H "x-api-key: $PS_API_KEY"
order_id or external_order_number = one order (Pending included). Nothing = paid orders only, all sources, 25 per page, newest first, page from 1.
Paid order:
{
"success": true,
"order": {
"order_id": "f0f17d46-...",
"external_order_number": "SHOP-1001",
"status": "Shipped",
"paid": true,
"shipping_type": "Standard",
"total_price": <number>,
"shipping_cost": <number>,
"vat_rate": 0.2,
"vat_amount": <number>,
"vat_treatment": "uk_standard",
"tracking": "AB123456789GB",
"tracking_courier": "Royal Mail",
"completed": false,
"order_num": 10042,
"created_at": "2026-10-19T09:41:10.512+00:00",
"items": [
{ "id": "a1...", "sku": "MSP-001", "size": "A4", "type": "Print", "paper_type": "Matte", "price": <number>, "friendly_name": null }
]
}
}
- Pending order: same top fields with
paid: false,vat_*andtracking*null, and nocompletedororder_num. Its items carryfulfillable(true/false) andreason_code(e.g.SKU_NOT_FOUND) instead offriendly_name. - List:
{ "success": true, "orders": [ ...paid shape... ], "page": 1, "total_orders": 42 }. -
status:Pending,Paid,In Production,Shipped,Cancelled,Reshipping. Treat anything else as In Production. -
vat_treatment:uk_standard,zero_export,out_of_scope. -
trackingappears once shipped. Poll every 30 to 60 minutes; no webhooks.
Sizes
Products and orders: A5 A4 A3 A2 A1 A0 5x7 6x8 8x10 8.5x11 11x14 11x17 12x18 16x20 16x24 18x24 20x30 24x32 24x36 28x40 30x40 30x40cm 50x70cm 10x10 12x12 14x14 16x16 18x18 20x20. Case-sensitive. Orders also accept 12x16 for 30x40cm and 20x28 for 50x70cm. Inches unless marked cm or A-series; 8.5x11 ships to the USA only. Which sizes are offered to a country, and as which products, comes from GET /api-get-pricing.
What the API doesn’t do
- Create an account or an API key; the seller does that in the app.
- Pay an order, top up the wallet or change auto-pay.
- Edit or cancel an order after it is created, or open a case about one.
- Publish a listing to Etsy or Shopify, or create or edit a listing template.
- Regenerate a draft’s AI writing, or return the Etsy attributes it filled in.
- Send webhooks. Poll
GET /api-get-orderandGET /api-bulk-list. - List unpaid orders. One unpaid order is readable by
order_idorexternal_order_number.
What this page doesn’t cover
- Rate limits, every status code and safe retries: Limits and Errors.
- How to use the calls for each job, with the reasoning: start at the hub, PrintShrimp for AI agents.
Next
Previous: Limits and Errors · Next: Rules · Back to the hub: PrintShrimp for AI agents
Last updated 19 October 2026.