ArtFlow API
A RESTful HTTP API that gives you programmatic access to Pictorem's print fulfillment platform. Validate product configurations, retrieve live pricing and lead times, submit production orders with your own artwork, and track every order through to delivery — all from your own application.
Getting Started
Five steps from zero to your first fulfilled order.
1 — Get an API key
Contact us through your Pictorem account to receive your ArtFlowKey.
Every request must include it as an HTTP header. Keys can optionally be issued in
test mode so you can integrate without placing real orders.
2 — Explore the catalog
Call getcatalog once to pull the full tree of materials,
types, orientations, sizes and options, or use buildproductlist
to expand a partial code interactively.
3 — Validate and price
Build a preordercode, confirm it with
validatepreorder, then fetch the cost with
getprice and the production time with
getleadtime.
4 — Place the order
Submit with sendorder — upload the artwork file directly,
point to a public URL, or reference a Pictorem collection ID. Always send a unique
po: it makes retries safe (duplicates are rejected with HTTP 409
and the existing order ID) and lets you query by your own reference later.
5 — Track it
Register a webhook to be notified on every order status and
production stage change (including tracking numbers on shipment), or poll
getorderstatus /
getorderlist.
Pre-production orders can be cancelled with cancelorder.
Validate Pre-Order
Validate a pre-order code before placing an order. The code is run through the same sanitizer used by
sendorder, then compared against what you submitted:
status is true only when preordercode and
preordersanitize come back identical. Any difference means your code was incomplete or
invalid — use data.preordersanitize as the corrected code. The optional border color
is validated at the same time. Looking for the thank-you card? It is an order-level
sendorder field now (thanksnotemsg /
thanksnoteurl), not a code option.
Not sure how to assemble a code? Build one visually with the interactive code builder.
Body
| Key | Type | Value |
|---|---|---|
| form-data | ||
preordercode |
text * | numCopies|material|type|orientation|width|height|additional… |
bordercolorhex |
text | ffffff |
PHP cURL
$postData = [ 'preordercode' => '2|canvas|stretched|horizontal|30|24|303-12|semigloss|mirrorimage|c15|moulding|opt', // Only send this when the code actually calls for it: // 'bordercolorhex' => 'ffffff', // required by the bordercolor canvas wrap ];
Response (JSON)
{
"status": true,
"data": {
"preordercode": "2|canvas|stretched|horizontal|30|24|303-12|semigloss|mirrorimage|c15|moulding|opt",
"preordersanitize": "2|canvas|stretched|horizontal|30|24|303-12|semigloss|mirrorimage|c15|moulding|opt"
}
}
Here da9 is not a real acrylic type, so the sanitizer replaced it with the first available one
and filled in the missing orientation and size. The returned code differs from the one submitted, so
status is false.
{
"status": false,
"data": {
"preordercode": "1|acrylic|da9",
"preordersanitize": "1|acrylic|ac220",
"error": "Preorder code was modified during sanitization — use data.preordersanitize",
"errorlist": []
}
}
Get Price
Returns a full pricing worksheet for a product configuration, including list price, discount, artist commission, taxes (GST/PST), and total in USD. Optionally scoped to a specific collection and delivery region for accurate tax calculation.
Note: the optional thank-you card is a flat per-order fee (USD 2.99, free for Premium accounts) added at sendorder time — it is never part of a preordercode price.
Body
| Key | Type | Value |
|---|---|---|
| form-data | ||
preordercode |
text * | numCopies|material|type|orientation|width|height|additional… |
collectionid |
text | xxxxxx |
deliveryprovince |
text | QC |
deliverycountry |
text | Canada |
PHP cURL
$postData = [ 'preordercode' => '2|canvas|stretched|horizontal|30|24|303-12|semigloss|mirrorimage|c15|moulding|opt', 'deliveryprovince' => 'QC', 'deliverycountry' => 'Canada', ];
Response (JSON)
All prices are in USD $ — amounts rounded to 2 decimals, tax rates to 5
{
"status": true,
"msg": [],
"worksheet": {
"enabledDiscount": true,
"price": {
"list": {
"main": 20.06,
"cert": 5
},
"discount": {
"main": 6.02,
"cert": 1.5
},
"artistCommission": {
"main": 25.06
},
"artistCommissionDiscount": {
"main": 7.52
},
"listTotal": 25.06,
"discountTotal": 7.52,
"artistCommissionTotal": 25.06,
"artistCommissionDiscountTotal": 7.52,
"subTotal": 35.08,
"taxes": {
"taxPercentage": 0.14975,
"taxGST": 1.75,
"taxPST": 3.5
},
"total": 40.34
}
}
}
Reading the worksheet.
list, discount, artistCommission and artistCommissionDiscount
hold one key per component of the preordercode — main is only the product itself,
and every option you priced (float, semigloss, cert, moulding codes…) gets its own key.
The key names are dynamic, so never read main alone: you would drop everything the order is charged for.
Use the listTotal, discountTotal, artistCommissionTotal and
artistCommissionDiscountTotal aggregates instead — they already sum every component.
list is the price before discount, and discount is an amount to
subtract — not a rate, and not something to add back onto list. The worksheet always balances as:
subTotal = listTotal - discountTotal + artistCommissionTotal - artistCommissionDiscountTotal total = subTotal + taxes.taxGST + taxes.taxPST
enabledDiscount reports whether the account discount applied at all. It is false when the
account is on special pricing (pro price level or product-specific pricing); in that case discount comes back
empty because the list figures are already the negotiated ones.
{
"status": false,
"msg": {
"error": ["PreOrder Code is NOT valid."]
}
}
Get Lead Time
Returns the estimated production lead time (in business days) for a given product configuration. Use this before placing an order to set customer delivery expectations.
Body
| Key | Type | Value |
|---|---|---|
| form-data | ||
preordercode |
text * | numCopies|material|type|orientation|width|height|additional… |
PHP cURL
$postData = [ 'preordercode' => '2|canvas|stretched|horizontal|30|24|303-12|semigloss|mirrorimage|c15|moulding|opt', ];
Response (JSON)
{
"status": true,
"msg": [],
"data": {
"productionLeadTime": 8
}
}
{
"status": false,
"msg": {
"error": ["PreOrder Code is NOT valid."]
}
}
Get Shipping Quote
Returns every UPS service available for a shipment, priced, together with a
quoteid you pass back to sendorder. Use this to show
shipping and collect payment before placing the order: the quoted price is the price we bill, so you
never end up charging your customer a different amount than we invoice you.
Send the whole order in one call. Lines are packed together the way they will actually ship — several small prints travel in one carton — so quoting item by item and adding up the results will overcharge.
Express and air-only destinations. There is no separate express price list and no fixed air
surcharge to apply: the services UPS returns are the express options, at the real rate for that
address. Hawaii, Alaska and Puerto Rico are air-only, so ground does not appear in services for
them and groundavailable comes back false. Pick any service in the list and send
its code.
Body
| Key | Type | Value |
|---|---|---|
| Destination | ||
deliveryInfo[city] |
text * | Honolulu |
deliveryInfo[province] |
text * | HI — state / province code |
deliveryInfo[country] |
text * | USA — ISO code or full country name |
deliveryInfo[cp] |
text * | 96815 — postal / zip code |
deliveryInfo[address1] |
text | Optional here — rating needs only city, state, postal and country. Still required on sendorder. |
| Order Items — one entry per line, the same codes you will order | ||
orderList[0][code] |
text * | numCopies|material|type|orientation|width|height|additional… |
orderList[1][code] |
text | No image source needed — this endpoint prices the box, not the artwork. |
PHP cURL
$postData = [ 'deliveryInfo[city]' => 'Honolulu', 'deliveryInfo[province]' => 'HI', 'deliveryInfo[country]' => 'USA', 'deliveryInfo[cp]' => '96815', 'orderList[0][code]' => '2|canvas|stretched|horizontal|30|24|semigloss|mirrorimage|c15', 'orderList[1][code]' => '1|acrylic|da8|horizontal|16|12', ];
Response (JSON)
{
"status": true,
"msg": [],
"quoteid": "q_8f14e45fceea167a5a36dedd4bea2543",
"expires": "2026-09-14 15:42:00",
"cached": false,
"services": [
{
"service": "02",
"name": "UPS 2nd Day Air",
"price": 148.72,
"currency": "USD",
"transitdays": 2,
"ground": false
},
{
"service": "01",
"name": "UPS Next Day Air",
"price": 263.19,
"currency": "USD",
"transitdays": 1,
"ground": false
}
],
"groundavailable": false,
"packages": 2
}
services is sorted cheapest first, so services[0] is a safe default.
transitdays is UPS's guaranteed business days in transit where UPS guarantees the service and
null where it does not — it counts from dispatch, so add the production lead time from
getleadtime to get a delivery date. packages is how many
cartons the order consolidates into. cached is true when the same lines to the same
address were quoted in the last hour and you are getting that quote back rather than a fresh one.
{
"status": true,
"msg": {
"error": ["UPS returned no rate for this destination. Verify the postal code and country, or contact us for a manual quote."]
},
"quoteid": null,
"services": []
}
HTTP 200 with an empty services list: the request was valid, but UPS would not rate
that address. Handle it as "shipping unavailable, contact us" rather than as an error.
{
"status": false,
"msg": {
"error": [
"deliveryInfo[cp] is required.",
"orderList[0][code]: PreOrder Code is NOT valid."
]
}
}
Using the quote on sendorder
Pass quoteid plus the service code your customer paid for. We charge the price that
was quoted for that service and it lands on the order as its shipping line.
$postData = [ 'quoteid' => 'q_8f14e45fceea167a5a36dedd4bea2543', 'shippingservice' => '02', // …the rest of your sendorder fields ];
A quote is valid for 60 minutes, is good for one order, and is tied to the
postal code it was priced for — shipping to a different address needs a new quote. Sending
quoteid is optional: omit it and the order is created with no shipping charge, exactly as
before.
Send Order
Submit a production order to Pictorem. Supports three image sources per line item: direct file upload, a public image URL, or an artwork from a Pictorem collection. Returns the Pictorem order ID on success.
An optional document (waybill, shipping label, PDF…) can be attached to the order via document (file upload) or documenturl (public URL).
An optional 7x5″ printed thank-you card can be added to the package via thanksnotemsg (we typeset your message) or thanksnoteurl (your own print-ready design) —
one card per order, USD 2.99 flat, free for Premium accounts.
Body
| Key | Type | Value |
|---|---|---|
| General | ||
ordercomment |
text | Proin maximus magna ante, semper porttitor neque tincidunt et. |
po |
text | MY-PO-2026-001 — your own reference number, searchable via getorderstatus. Must be unique per order: a reused PO is rejected with HTTP 409 and the existing order ID, which makes retries safe. |
testmode |
text | 1 — dry run: validates everything but creates nothing. See Sandbox / test mode. |
| Delivery Information | ||
deliveryInfo[firstname] |
text * | Kathleen |
deliveryInfo[lastname] |
text * | Bernal |
deliveryInfo[company] |
text | Bennett Brothers |
deliveryInfo[address1] |
text * | 3371 Sycamore Lake Road |
deliveryInfo[address2] |
text | |
deliveryInfo[city] |
text * | Oshkosh |
deliveryInfo[province] |
text * | WI |
deliveryInfo[country] |
text * | USA |
deliveryInfo[cp] |
text * | 54901 |
deliveryInfo[phone] |
text | 920-456-7364 |
| Order Items — Upload via File | ||
orderList[0][code] |
text * | numCopies|material|type|orientation|width|height|additional… |
orderList[0][file] |
file * | my-file.jpg (jpg / png / tiff) |
orderList[0][bordercolorhex] |
text * | ffffff |
orderList[0][comment] |
text | Your own reference for this item, such as the end customer it is for — shown on the order line (255 char max) |
| Order Items — Upload via URL | ||
orderList[1][code] |
text * | numCopies|material|type|orientation|width|height|additional… |
orderList[1][fileurl] |
text * | https://images.unsplash.com/photo-xxxx?q=80&w=3987 |
orderList[1][filetype] |
text * | jpg (jpg / png / tiff) |
| Order Items — From a Collection | ||
orderList[2][code] |
text * | numCopies|material|type|orientation|width|height|additional… |
orderList[2][collectionID] |
text * | 357936 |
Shipping — Optional (from getshippingquote) | ||
quoteid |
text | q_8f14e45fceea167a5a36dedd4bea2543 — a quote returned by getshippingquote. We bill the price that quote carried for the service you name below, so your customer's shipping charge and ours match. Valid 60 minutes, one order per quote, and only for the postal code it was priced for. Omit it and the order is created with no shipping charge, as before. |
shippingservice |
text | 02 — the service code your customer paid for, from that quote's services list. Required whenever quoteid is sent. |
| Document Attachment — Optional | ||
document |
file | Optional document to attach to the order (waybill, shipping label, packing slip…). Accepted: pdf / jpg / jpeg / png. Mutually exclusive with documenturl. The document appears alongside the order in your account and for our production team. |
documenturl |
text | Public http(s) URL to a document to attach (pdf / jpg / jpeg / png). Mutually exclusive with document. Example: https://example.com/waybill-472175.pdf |
| Thank-You Card — Optional (one 7x5″ card per order, USD 2.99 flat, free for Premium accounts) | ||
thanksnotemsg |
text | Thank you for your purchase! We hope you enjoy your new custom print. — Pictorem typesets your message on the card in a handwriting font (accounts with a private-label logo get it printed on top). Mutually exclusive with thanksnoteurl. |
thanksnoteurl |
text | Public http(s) URL to your own print-ready card design (jpg / jpeg / png, 7:5 landscape, 2100×1500 px recommended — printed as-is). Mutually exclusive with thanksnotemsg. Example: https://example.com/my-thankyou-card.jpg |
PHP cURL
$postData = [
'po' => 'MY-PO-2026-001',
'deliveryInfo[firstname]' => 'Kathleen',
'deliveryInfo[lastname]' => 'Bernal',
'deliveryInfo[address1]' => '3371 Sycamore Lake Road',
'deliveryInfo[city]' => 'Oshkosh',
'deliveryInfo[province]' => 'WI',
'deliveryInfo[country]' => 'USA',
'deliveryInfo[cp]' => '54901',
'orderList[0][code]' => '1|canvas|stretched|horizontal|16|12',
'orderList[0][file]' => new CURLFile('/path/to/file.jpg'),
'orderList[0][bordercolorhex]' => 'ffffff',
// Optional per-item note kept on the order line, e.g. who the print is for:
'orderList[0][comment]' => 'Caroline Courteau',
// Optional 7x5" thank-you card - one per order, USD 2.99, free for Premium.
// Use EITHER your text (we typeset it) OR your own print-ready image URL:
'thanksnotemsg' => 'Thank you for your purchase! We hope you enjoy your new custom print.',
// 'thanksnoteurl' => 'https://example.com/my-thankyou-card.jpg',
// Optional document attachment (waybill, shipping label...) - pdf / jpg / jpeg / png
// Use EITHER a direct upload OR a public URL, not both:
'document' => new CURLFile('/path/to/waybill.pdf'),
// 'documenturl' => 'https://example.com/waybill-472175.pdf',
];
Response (JSON)
{
"status": true,
"msg": [],
"orderid": 472175
}
failedstep names the pipeline stage that rejected the order. For code validation
failures, msg.detail[] carries one entry per failing item: its orderList
index, the submitted code, the code the validator expected (preordersanitize — same
value validatepreorder returns) and the sanitizer error codes explaining
what was changed or dropped. Internal failures (pricing, order creation, file transfer) answer
HTTP 500 instead.
{
"status": false,
"msg": {
"error": [
"orderList[0]: PreOrder Code: 2|canvas|stretched|horizontal|30|24|303-12|semigloss|mirrorimage|c15|mouldin3g|opt is NOT valid."
],
"detail": [
{
"item": 0,
"preordercode": "2|canvas|stretched|horizontal|30|24|303-12|semigloss|mirrorimage|c15|mouldin3g|opt",
"preordersanitize": "2|canvas|stretched|horizontal|30|24|303-12|semigloss|mirrorimage|c15|moulding|opt",
"processerror": ["Error::5900::mouldin3g"]
}
]
},
"orderid": null,
"failedstep": "sanitizePreOrderList"
}
{
"status": false,
"msg": {
"error": ["PO \"MY-PO-2026-001\" was already used on order 472174. Use a unique PO per order."]
},
"orderid": 472174,
"duplicate": true
}
Get Order Status
Retrieve the full status of an existing order, including the production stage, tracking information, line items, and billing status. Query by Pictorem order ID or your own PO number. Results are always scoped to your API account.
Body
| Key | Type | Value |
|---|---|---|
| form-data — provide either field | ||
orderid |
text | 472174 — Pictorem order ID |
po |
text | MY-PO-2026-001 — your own PO number |
PHP cURL
// Search by Pictorem order ID $postData = [ 'orderid' => '472174', ]; // — OR — search by your own PO number $postData = [ 'po' => 'MY-PO-2026-001', ];
Response (JSON)
{
"status": true,
"msg": [],
"order": {
"orderid": 472174,
"po": "MY-PO-2026-001",
"date": "2026-03-15 10:22:00",
"order_status": "0",
"order_status_label": "Processing",
"production_status": "27",
"production_status_label": "Ready for Print",
"production_progress": 30,
"billing_status": "1",
"billing_status_label": "Paid",
"tracking_number": null,
"tracking_carrier": null,
"total": 125.40,
"currency": "USD",
"delivery": {
"firstname": "Kathleen",
"lastname": "Bernal",
"company": null,
"address1": "3371 Sycamore Lake Road",
"address2": null,
"city": "Oshkosh",
"province": "WI",
"country": "USA",
"postal": "54901"
},
"lines": [
{
"line_id": 889421,
"status": "27",
"status_label": "Ready for Print",
"is_option": false,
"product": "canvas",
"type": "stretched",
"orientation": "horizontal",
"width": "30",
"height": "24",
"qty": 1,
"total": 125.40,
"tracking": null
}
]
}
}
Two Statuses Per Order
Pictorem tracks an order's progress on two separate axes and this endpoint returns both. Reading only one of them is the single most common integration mistake, so it is worth being explicit:
| Field | Meaning |
|---|---|
order_status |
Where the order stands commercially: quoted, processing, on hold, shipped, cancelled. It does not move while the order travels through the workshop, so it never reports a production stage such as Ready for Print. |
production_status |
Where the items stand on the production floor, derived from the line
statuses. An order is only as far along as its least advanced item, so this reports
Ready for Print once every item is ready — not when the first one is.
null for an order with no items yet.
|
production_progress |
Completion percentage (0-100) of production_status, the same number the
Pictorem order tracking page shows. Convenient for a progress bar, and safe to compare
across codes — higher always means further along.
|
lines[].status |
Per-item production stage, if you need item-level granularity rather than the
order-level roll-up. Lines with is_option set to true are
attachments (frames, mounts, thank-you cards) that follow their parent item and are
excluded from production_status.
|
Order Status Codes
Values order_status takes. Labels below are read live from our status
table, so they match order_status_label exactly.
| Code | Label |
|---|---|
| 9 | QUOTE - Waiting payment |
| 0 | Processing |
| 11 | Action required |
| 20 | Verification required |
| 4 | Incident to Inspect |
| 89 | Hold by customer |
| 78 | Waiting for Address - on hold for shipping |
| 2 | Shipped |
| 38 | Picked up by customer |
| 3 | Canceled |
Production Stage Codes
The stages you will see most often on production_status and
lines[].status, in production order. The full pipeline has dozens more
internal steps — treat any other code as "in production" and display
production_status_label rather than mapping codes yourself.
| Code | Label |
|---|---|
| 20 | Verification required |
| 27 | Ready for Print |
| 75 | In Production |
| 74 | In Production |
| 67 | In Production |
| 28 | In Production - Quality Control / Finalizing |
| 8 | In Production - Quality Control / Finalizing |
{
"status": false,
"msg": {
"error": ["Order not found."]
}
}
Get Order List
Paginated list of all your orders, newest first, each with the same order status and production stage pair as getorderstatus. Optionally filter by order status or date range. Results are always scoped to your API account.
Body
| Key | Type | Value |
|---|---|---|
| form-data — all optional | ||
page |
text | Page number — default: 1 |
limit |
text | Items per page, max 100 — default: 25 |
status |
text | Filter by order status code — e.g. 2 for Shipped. Filters on order_status only; there is no production stage filter, so scan production_status in the results instead |
datefrom |
text | YYYY-MM-DD — orders placed on or after this date |
dateto |
text | YYYY-MM-DD — orders placed on or before this date |
PHP cURL
$postData = [ 'page' => '1', 'limit' => '25', 'status' => '2', // Shipped only ];
Response (JSON)
{
"status": true,
"msg": [],
"data": {
"total": 63,
"page": 1,
"limit": 25,
"pages": 3,
"orders": [
{
"orderid": 472174,
"po": "MY-PO-2026-001",
"date": "2026-03-15 10:22:00",
"order_status": "2",
"order_status_label": "Shipped",
"production_status": "2",
"production_status_label": "Shipped",
"production_progress": 100,
"billing_status": "1",
"billing_status_label": "Paid",
"tracking_number": "1Z999AA10123456784",
"tracking_carrier": "UPS",
"total": 125.40,
"currency": "USD"
}
]
}
}
Cancel Order
Cancel an order before it enters production. Only orders in QUOTE - Waiting payment (9), Processing (0) or Action required (11) can be cancelled through the API — once production has started, contact support instead.
Body
| Key | Type | Value |
|---|---|---|
| form-data — provide either field | ||
orderid |
text | 472174 — Pictorem order ID |
po |
text | MY-PO-2026-001 — your own PO number |
PHP cURL
$postData = [ 'orderid' => '472174', ];
Response (JSON)
{
"status": true,
"msg": [],
"order": {
"orderid": 472174,
"order_status": "3",
"order_status_label": "Canceled"
}
}
{
"status": false,
"msg": {
"error": ["Order 472174 is already in production and can no longer be cancelled via the API. Please contact support."]
}
}
Build Product List
Expands a partial pre-order code into the full set of valid product configurations available for that base
selection. Unlike validatepreorder, a partial code is expected here — send as little as
1|canvas and you get back every choice that is still open, already filtered by the
compatibility rules. Call it again after each selection to drive a step-by-step product picker.
The interactive code builder is this endpoint wired to a UI — a working reference for your own picker.
Note that each group of type one gets its first choice applied automatically, so
preordersanitize normally comes back longer than what you sent. Whenever it differs from
preordercode the response also carries data.error — on this endpoint that is a
"your code was normalized" flag, not a failure. status is always true here;
use validatepreorder when you need a strict yes/no.
Body
| Key | Type | Value |
|---|---|---|
| form-data | ||
preordercode |
text * | numCopies|material|type|orientation|width|height|additional… |
PHP cURL
$postData = [ 'preordercode' => '1|acrylic', ];
Response (JSON)
Only the groups that can still be resolved are returned. Here no orientation was given yet, so
size and additional are absent — they appear once the code is complete enough.
{
"status": true,
"data": {
"preordercode": "1|acrylic",
"preordersanitize": "1|acrylic|ac220",
"products": {
"material": {
"title": "Material",
"choices": [
{ "id": "canvas", "title": "canvas" },
{ "id": "acrylic", "title": "acrylic" }
]
},
"type": {
"title": "Type",
"choices": [
{ "id": "ac220", "title": "acrylic print 1/4 ( 0.220 )" },
{ "id": "da8", "title": "acrylic print 1/8" }
]
},
"shape": {
"title": "Shape",
"choices": [
{ "id": "vertical", "title": "vertical" },
{ "id": "horizontal", "title": "horizontal" },
{ "id": "square", "title": "square" }
]
}
},
"error": "Errors Everywhere"
}
}
Response — complete code
Once numCopies, material, type, orientation, width and height are all present, the
size and additional groups are included too. Each additional group carries a
choicetype: one (pick exactly one), multi (pick any number) or
text (a free-text value sent as its own form field, such as bordercolorhex).
Frames too large for the requested size come back flagged with isDisabled.
{
"status": true,
"data": {
"preordercode": "1|canvas|stretched|horizontal|30|24",
"preordersanitize": "1|canvas|stretched|horizontal|30|24|boxclassic|c15|imagewrap|none|regular",
"products": {
"material": { "title": "Material", "choices": [ ... ] },
"type": { "title": "Type", "choices": [ ... ] },
"shape": { "title": "Shape", "choices": [ ... ] },
"size": {
"title": "Size",
"choices": [
{ "width": "30", "height": "24" },
{ "width": "36", "height": "24" }
]
},
"additional": {
"title": "Additional",
"choices": [
{
"id": "packaging",
"title": "Packaging",
"choicetype": "one",
"choices": [
{ "id": "boxclassic", "title": "Classic Boxes 2 Ply" },
{ "id": "cra", "title": "Wooden Crate Packaging On A Pallet" }
]
},
{
"id": "frames",
"title": "decorative moulding",
"choicetype": "one",
"choices": [
{ "id": "303-12", "title": "303-12 natural wood floating frame" },
{ "id": "360-29", "title": "360-29 black floating frame", "isDisabled": true }
]
}
]
}
},
"error": "Errors Everywhere"
}
}
An unrecognised segment is not rejected — it is replaced with the first valid value for that position.
Here da9 is not a real acrylic type, so it became ac220. Always read
preordersanitize back rather than assuming your input survived.
{
"status": true,
"data": {
"preordercode": "1|acrylic|da9",
"preordersanitize": "1|acrylic|ac220",
"products": { ... },
"error": "Errors Everywhere"
}
}
Get Catalog
Returns the complete product configuration tree as structured JSON — every material, type, orientation, size, additional option and frame, including compatibility requirements. This is the same source data the validator uses, so you can build product pickers programmatically instead of hardcoding values from the field reference. Cache it: the catalog changes rarely.
Body
No parameters — just the ArtFlowKey header.
PHP cURL
$ch = curl_init('https://www.pictorem.com/artflow/0.1/getcatalog/');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, ['fetch' => '1']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['ArtFlowKey: YOUR_API_KEY']);
$catalog = json_decode(curl_exec($ch), true);
curl_close($ch);
Response (JSON)
{
"status": true,
"msg": [],
"data": {
"preordercodeFormat": "numCopies|material|type|orientation|width|height|additional|additional…",
"products": { "material": { "canvas": { ... }, "acrylic": { ... }, ... } },
"orientations": { "shapes": { "choices": { "vertical": { ... }, "horizontal": { ... }, "square": { "requirements": [...] } } } },
"sizes": { ... },
"additionals": { "packaging": { "title": "Packaging", "choices": { ... } }, ... },
"frames": { "moulding": { "title": "Decorative Moulding", "choices": { "303-12": { "title": "303-12 Natural Wood Floating Frame" }, ... } } }
}
}
Get Artist Artwork Listing
Returns a paginated list of your own artworks — name, keywords, categories, description,
orientation, stats and a ready-to-use image set. Generated print renders (acrylic, metal, wood, murals,
canvas, framed, puzzle…) are available on request through previews.
Every URL returned is verified to resolve before it is sent. An image that has not been generated is omitted rather than returned as a dead link, so you can hand any URL from this response straight to a downstream importer. Absence of a key means "not generated", never "broken".
Body
| Key | Type | Description |
|---|---|---|
| form-data — all optional | ||
userid |
text |
Your own Artist UserID. Results are always scoped to the account behind the
ArtFlowKey, so this is optional — send it and it must match, or you get
HTTP 403.
|
page |
text | Page number — default: 1 |
limit |
text |
Items per page — default 48, max 100.
When previews is used the default and maximum both drop to 24.
|
sort |
text | featured (default) · newest · oldest · name · views |
previews |
text |
Comma-separated list of print renders to include, e.g. wallpreview,acr1,book.
Omitted entirely by default. See the table below for valid values; an unknown value returns
HTTP 422 listing the accepted ones.
|
pricing |
text |
1 adds a commission object per artwork — what you earn when someone
else orders it. For the price of a specific configuration use
getprice.
|
includeprivate |
text |
1 also lists artwork in your hidden / password-protected albums. Off by default so
an export cannot accidentally republish private work. Artwork taken down by staff is never listed.
|
Image Set — always returned
| Key | Description |
|---|---|
image.thumb | Small rendition of the original |
image.preview | Room-context wall preview — the best image to show a shopper. null when none has been generated. |
image.full | Large rendition of the original |
image.source | The uploaded source file |
Print Renders — previews values
Pass any combination as a comma-separated list. Each key that resolves comes back as a single URL;
keys whose render does not exist are left out of the previews object.
| Value | Product |
|---|---|
wallpreview | Room-context wall preview (hi-res, same image as image.preview) |
wallrandomsmall | Room-context wall preview, small |
wall, wallsmall | Static wall mockup |
book | Stretched canvas |
acr1–acr4 (+ acr1small…) | Acrylic |
metalbrush1, metalbrush2 (+ smalls) | Brushed metal |
sublim1–sublim3 (+ smalls) | HD Metal / Sublimation |
wood1, wood2 | Wood |
mural1–mural3 (+ smalls) | Wall murals |
puzzle1, puzzle2 (+ smalls) | Puzzle |
pf | Framed print |
gallerysmall | Cropped gallery thumbnail |
canvasPrint.view2 / view3
(book2_, book3_), splitPanels, decoFrame,
imageLink and wallMockup.generated are no longer produced and have been
removed from this endpoint. Split-panel layouts are now rendered live in the browser rather than as
per-artwork files. Remove them from any exporter selection logic — for canvas, use book.
Code Example
$ch = curl_init('https://www.pictorem.com/artflow/0.1/getartworklist/');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['ArtFlowKey: YOUR_API_KEY']);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'page' => '1',
'limit' => '24',
'sort' => 'newest',
// Optional: ask for specific print renders (omit for metadata + image only)
'previews' => 'wallpreview,book,acr1',
// Optional: include what you earn per artwork
'pricing' => '1',
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
const body = new FormData();
body.append('page', '1');
body.append('limit', '24');
body.append('sort', 'newest');
body.append('previews', 'wallpreview,book,acr1');
body.append('pricing', '1');
fetch('https://www.pictorem.com/artflow/0.1/getartworklist/', {
method: 'POST',
headers: { 'ArtFlowKey': 'YOUR_API_KEY' },
body: body,
})
.then(r => r.json())
.then(data => console.log(data));
Response (JSON)
{
"status": true,
"msg": [],
"data": {
"total": 147,
"page": 1,
"limit": 24,
"pages": 7,
"artworks": [
{
"id": 2452666,
"name": "Mona Lisa",
"author": "Stock Photography",
"keywords": ["classical", "portrait", "renaissance"],
"description": "...",
"categories": [
{ "id": 12, "name": "Classical Portraits" }
],
"url": "https://www.pictorem.com/2452666/Mona-Lisa.html",
"orientation": "vertical",
"ratio": 0.6693,
"image": {
"thumb": "https://www.pictorem.com/uploads/collection/A/ABC123/small_2452666.jpg",
"preview": "https://s3.pictorem.com/images/collection/A/ABC123/rand_2452666.webp",
"full": "https://www.pictorem.com/uploads/collection/A/ABC123/big_2452666.jpg",
"source": "https://www.pictorem.com/uploads/collection/A/ABC123/2452666.jpg"
},
"stats": { "rating": 4.5, "nbRating": 12, "views": 340 },
"createdAt": "2024-01-15 10:22:00",
"previews": {
"wallpreview": "https://s3.pictorem.com/images/collection/A/ABC123/rand_2452666.webp",
"book": "https://s3.pictorem.com/images/collection/A/ABC123/book_2452666.jpg"
},
"commission": { "strategy": "percentage", "value": 30, "source": "collection" }
}
]
}
}
previews is present only when the previews parameter was sent, and
commission only when pricing=1 was sent. In the example above
acr1 was requested but no acrylic render exists for this artwork, so the key is absent
rather than pointing at a 404.
commission.strategy is one of percentage, sqft,
dynamic or fixed — whichever is set takes effect, checked in that order.
source tells you whether the value comes from the artwork itself
(collection) or from your account default (account).
A strategy of null means no commission is configured.
{
"status": false,
"msg": {
"error": ["userid must be your own account (ABC123). This endpoint only lists artwork belonging to the API key used."]
}
}
{
"status": false,
"msg": {
"error": [
"Unknown previews value(s): book2, splitPanels.",
"Valid values: acr1, acr1small, acr2, ... , wallpreview, wallsmall."
]
}
}
{
"status": false,
"error": "Access Denied"
}
System Health Check
Lightweight ping to verify that the ArtFlow API is reachable and that your
ArtFlowKey is recognized. Intended for uptime monitors and pre-flight
checks before heavier calls like sendorder. Does not count toward the
rate limit and is not logged in API request reports.
Body
Empty multipart/form-data — no fields. Authentication is via the
ArtFlowKey header only.
Response fields
| Field | Type | Meaning |
|---|---|---|
status |
boolean | true when the API is accepting traffic; false during maintenance mode |
artFlowKey |
boolean | Only evaluated when status is true — true when the ArtFlowKey header matches a registered key; false when missing, invalid, or when status is false |
PHP cURL
$ch = curl_init('https://www.pictorem.com/artflow/0.1/shc/');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, []);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['ArtFlowKey: YOUR_API_KEY']);
$health = json_decode(curl_exec($ch), true);
curl_close($ch);
Response (JSON)
{
"status": true,
"artFlowKey": true
}
{
"status": true,
"artFlowKey": false
}
{
"status": false,
"artFlowKey": false
}
When status is false (maintenance mode), artFlowKey is not
checked and is always false. Unlike other endpoints, an invalid key does
not return HTTP 401 — check artFlowKey in the JSON body
instead (only meaningful when status is true). Non-POST requests
return HTTP 405 with {"status": false, "artFlowKey": false}.
Webhooks — Overview
Instead of polling getorderstatus, register a callback URL and Pictorem will
POST a JSON payload to your server whenever one of your ArtFlow orders changes status —
including every production stage such as Ready for Print, and the tracking number the moment
an order ships. Only orders placed after the webhook was registered generate notifications.
What triggers a delivery
A delivery is queued whenever order_status or production_status moves —
the same two fields getorderstatus returns. The
changed array tells you which of the two it was, so you can ignore production noise
and react only to commercial changes if that is all you need.
Changes are detected on a schedule rather than the instant a status is written, so expect a delay of a few minutes. If an order moves through two stages inside the same window, you receive a delivery for each one, in order.
Delivery, retries & signature
Each delivery is an HTTPS POST with Content-Type: application/json and four headers:
X-ArtFlow-Event (the event name), X-ArtFlow-Delivery (a unique ID for this
change, stable across retries), X-ArtFlow-Attempt (1 on the first try) and
X-ArtFlow-Signature — an HMAC-SHA256 hex digest of the raw request body,
signed with your API key. Always verify the signature before trusting a payload.
Respond with any 2xx status within 10 seconds. Anything else — a 5xx, a timeout, an unreachable host — is retried with a growing delay of roughly 10, 30, 60, 180 and 480 minutes, so your endpoint can be down for about half a day without you losing a status change. Deliveries for the same order are always attempted in order: a failing one holds the rest of that order's queue until it succeeds or runs out of attempts.
A retry re-sends the change that was detected, not the order's current state, and reuses the same
X-ArtFlow-Delivery ID. Because a slow acknowledgement can be retried after we already
recorded a failure, treat that ID as an idempotency key.
Payload
{
"event": "order.status_changed",
"orderid": 472174,
"po": "MY-PO-2026-001",
"changed": ["production_status"],
"order_status": "0",
"order_status_label": "Processing",
"previous_order_status": "0",
"production_status": "27",
"production_status_label": "Ready for Print",
"production_progress": 30,
"previous_production_status": "20",
"tracking_number": null,
"tracking_carrier": null,
"queued_at": "2026-07-15T10:28:00-04:00",
"delivery_id": 91233,
"attempt": 1,
"sent_at": "2026-07-15T10:30:00-04:00"
}
previous_status is still present as an alias of previous_order_status for
integrations written against the original payload. It will be removed in a future version — read
previous_order_status instead.
Verifying the signature (PHP)
$rawBody = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_ARTFLOW_SIGNATURE'] ?? '';
$expected = hash_hmac('sha256', $rawBody, 'YOUR_API_KEY');
if (!hash_equals($expected, $signature)) {
http_response_code(401);
exit;
}
$payload = json_decode($rawBody, true);
// handle $payload['event'] ...
Register Webhook
Subscribe a callback URL to an event. Re-registering the same URL + event re-activates it.
Body
| Key | Type | Value |
|---|---|---|
| form-data | ||
url |
text * | https://your-app.com/webhooks/pictorem — must be https:// |
event |
text | order.status_changed (default — currently the only event; it covers both order status and production stage changes) |
Response (JSON)
{
"status": true,
"msg": [],
"webhook": {
"webhookid": 12,
"url": "https://your-app.com/webhooks/pictorem",
"event": "order.status_changed",
"active": true
}
}
List Webhooks
Returns every webhook registered on your account, active and inactive.
Body
No parameters — just the ArtFlowKey header.
Response (JSON)
{
"status": true,
"msg": [],
"webhooks": [
{
"webhookid": 12,
"url": "https://your-app.com/webhooks/pictorem",
"event": "order.status_changed",
"active": true,
"createdAt": "2026-07-15 10:22:00"
}
]
}
Delete Webhook
Deactivates a webhook. Delivery history is preserved; re-register the same URL to re-activate it.
Body
| Key | Type | Value |
|---|---|---|
| form-data | ||
webhookid |
text * | 12 — returned by registerwebhook / listwebhooks |
Response (JSON)
{
"status": true,
"msg": [],
"webhook": {
"webhookid": 12,
"active": false
}
}
Authentication Header
Every request must include your ArtFlow API key as an HTTP header.
Required Header
| Key | Value |
|---|---|
ArtFlowKey |
YOUR_API_KEY |
Errors & HTTP Status Codes
Every response carries a boolean status field. Failures also return a meaningful HTTP status
code, with human-readable messages in msg.error[].
Status Codes
| HTTP | Meaning | Returned when |
|---|---|---|
200 | OK | Request succeeded |
401 | Unauthorized | Missing or invalid ArtFlowKey header |
404 | Not Found | Order or webhook not found (always scoped to your account) |
409 | Conflict | Duplicate PO on sendorder, or cancelorder on an order already in production / cancelled |
422 | Unprocessable | Validation failed — details in msg.error[] |
429 | Too Many Requests | Rate limit exceeded |
503 | Service Unavailable | API maintenance mode — returned by shc and all other endpoints |
500 | Server Error | Unexpected failure on our side — safe to retry |
Error Body
{
"status": false,
"msg": {
"error": [
"deliveryInfo[address1] is required.",
"orderList[0] needs an image source: file, fileurl or collectionID."
]
}
}
sendorder failures may additionally include failedstep (the pipeline stage
that rejected the order) and msg.detail[] with a per-item diagnosis — the failing
orderList index, the submitted and expected codes, and the sanitizer error codes.
See the sendorder fail example.
Rate Limits
Each API key may make up to 120 requests per minute. Beyond that, requests are rejected
with HTTP 429 until the window rolls over. If you need a higher limit for a launch or batch
import, contact us. To stay well under the limit: cache getcatalog, batch order lines into
a single sendorder call, and prefer webhooks over polling.
429 Response
{
"status": false,
"error": "Rate limit exceeded — max 120 requests per minute.",
"msg": {
"error": ["Rate limit exceeded — max 120 requests per minute."]
}
}
Sandbox / Test Mode
Test your integration end-to-end without creating real orders. In test mode, sendorder runs
the full validation pipeline (delivery fields, image sources, preorder codes) but
no order is created, no file is stored, no card is charged and no email is sent.
All read endpoints (getprice, validatepreorder, getcatalog…) behave normally.
Two Ways to Enable It
testmode=1 |
Add this form-data field to any sendorder request |
| Test API key | Ask us to flag your key as test-mode — every sendorder through it becomes a dry run, no code changes needed |
Test Mode Response
{
"status": true,
"msg": [],
"orderid": null,
"testmode": true
}
PHP cURL — Full Example
Complete authenticated request with file upload.
Example
$url = 'https://www.pictorem.com/artflow/0.1/sendorder/';
$apiKey = 'YOUR_API_KEY';
$postData = [
'deliveryInfo[firstname]' => 'Kathleen',
'deliveryInfo[lastname]' => 'Bernal',
'deliveryInfo[address1]' => '3371 Sycamore Lake Road',
'deliveryInfo[city]' => 'Oshkosh',
'deliveryInfo[province]' => 'WI',
'deliveryInfo[country]' => 'USA',
'deliveryInfo[cp]' => '54901',
'orderList[0][code]' => '1|canvas|stretched|horizontal|16|12',
'orderList[0][file]' => new CURLFile('/path/to/file.jpg'),
'orderList[0][bordercolorhex]' => 'ffffff',
'thanksnotemsg' => 'Thank you for your order!', // optional 7x5" card, one per order
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'ArtFlowKey: ' . $apiKey,
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if ($response === false) {
echo 'cURL Error: ' . curl_error($ch);
} else {
$data = json_decode($response, true);
var_dump($data);
}
curl_close($ch);
JavaScript Fetch — Full Example
Complete authenticated request using the Fetch API with FormData.
Example
const apiKey = 'YOUR_API_KEY';
const endpoint = 'https://www.pictorem.com/artflow/0.1/sendorder/';
const formData = new FormData();
formData.append('deliveryInfo[firstname]', 'Kathleen');
formData.append('deliveryInfo[lastname]', 'Bernal');
formData.append('deliveryInfo[address1]', '3371 Sycamore Lake Road');
formData.append('deliveryInfo[city]', 'Oshkosh');
formData.append('deliveryInfo[province]', 'WI');
formData.append('deliveryInfo[country]', 'USA');
formData.append('deliveryInfo[cp]', '54901');
formData.append('orderList[0][code]', '1|canvas|stretched|horizontal|16|12');
formData.append('orderList[0][fileurl]', 'https://images.unsplash.com/photo-xxxx');
formData.append('orderList[0][filetype]', 'jpg');
formData.append('orderList[0][bordercolorhex]', 'ffffff');
formData.append('thanksnotemsg', 'Thank you for your order!'); // optional 7x5" card, one per order
fetch(endpoint, {
method: 'POST',
headers: { 'ArtFlowKey': apiKey },
body: formData,
})
.then(response => {
if (!response.ok) {
throw new Error('HTTP error: ' + response.status);
}
return response.json();
})
.then(data => console.log('Order placed:', data))
.catch(error => console.error('Error:', error));
OpenAPI Specification
The full API is described in a machine-readable OpenAPI 3.0 document. Import it into
Postman or Insomnia for a ready-made collection, generate typed client SDKs with
openapi-generator, or feed it to AI coding assistants for accurate integrations.
Spec URL
https://www.pictorem.com/artflow/0.1/openapi/
Changelog & Versioning
The API version is part of every URL (/artflow/0.1/…).
Within a version we only make additive changes — new endpoints, new optional fields,
new response keys. Breaking changes ship as a new version, and previous versions keep working for at
least 6 months after a replacement is announced on this page.
Changelog
| 2026-09 |
Shipping can now be quoted before payment.
New getshippingquote returns live UPS rates for a whole
order to one address — every available service, priced, with a quoteid. Pass that
quoteid plus the chosen shippingservice to
sendorder and we bill exactly what was quoted, so your
customer's shipping charge and ours cannot drift apart.
Express services and air-only destinations need nothing special: the returned list is the
express options at real rates, and for Hawaii, Alaska and Puerto Rico ground is simply absent with
groundavailable: false.
Lines are packed the way they actually ship, so a multi-item order is quoted on the cartons it
consolidates into rather than per item.
Both fields are optional — an integration that sends neither behaves exactly as
before, with no shipping charged.
|
| 2026-08 |
Hanging hardware is now orderable and priced.
Framed pieces accept a hanging option group — wire,
sawtooth, dring, cleat and
security — the same hardware the website offers. The group only appears
once the code carries frame or moulding, and it is
optional: a code without a hanging segment keeps validating exactly as
before, so existing integrations are unaffected.
Two availability rules are enforced: wire stops at 70 combined inches
(width + height) and cleat needs a cleat-compatible moulding.
buildproductlist flags an unusable choice with
isDisabled, and validatepreorder
drops it with Error::5230 (too large for the hardware) or
Error::5240 (frame cannot take a cleat).
|
| 2026-08 |
Production stages are now reported at order level.
getorderstatus and
getorderlist return
production_status, production_status_label and
production_progress alongside order_status, so stages such as
Ready for Print — which only ever existed on the individual line items —
are visible without walking lines[]. Line items gained
is_option to distinguish attachments (frames, mounts, cards) from products.
Webhooks now fire on production stage changes too, carry a changed array plus
the production fields, and are retried for about half a day until your
endpoint answers 2xx — previously a single failed POST consumed the change.
New X-ArtFlow-Delivery and X-ArtFlow-Attempt headers make
deliveries idempotent. Status labels in these docs are now read from the same source as
the API responses, fixing labels that did not match what the endpoints returned.
|
| 2026-08 |
Added auto as an orientation value — skips the
orientation check and takes the print orientation directly from width x
height (e.g. 1|canvas|stretched|auto|36|24).
Moved the thank-you card to the order-level thanksnotemsg /
thanksnoteurl fields on sendorder (one 7x5″ card
per order, USD 2.99, free for Premium accounts) — thanksnote is no longer a
code option. Fixed validation of codes containing numeric frame models (e.g.
84005), which were previously rejected as invalid.
Richer sendorder failures: errors are prefixed with the failing
orderList index, failedstep names the pipeline stage, and
msg.detail[] returns the expected code plus sanitizer error codes per failing
item. Failure HTTP statuses now match this table (422 validation, 409 duplicate PO,
500 internal) instead of always 200.
|
| 2026-08 |
getartworklist reworked. Every preview URL is now verified before
it is returned, and unavailable images are omitted instead of advertised as dead links — this
fixes downstream importers (WooCommerce, Shopify) aborting on a 404 image. Results are scoped to
the account behind the ArtFlowKey: userid is optional and must match
your own, otherwise HTTP 403. Originals are served from their real location rather
than a guessed S3 path. Added previews, pricing, sort and
includeprivate. keywords and categories are now arrays,
previews is a flat map of resolved URLs, the per-artwork
s3migration flag is gone, and hidden or taken-down artwork is no longer listed.
Retired renders removed: canvasPrint.view2/view3,
splitPanels, decoFrame, imageLink,
wallMockup.generated.
|
| 2026-07 |
Added shc (System Health Check) — lightweight POST endpoint to verify API
availability and ArtFlowKey validity.
|
| 2026-07 |
Added getorderlist, cancelorder, getcatalog and webhooks
(registerwebhook / listwebhooks / deletewebhook with signed
order.status_changed deliveries). Added sandbox test mode, duplicate-PO protection
(HTTP 409), rate limiting, meaningful HTTP status codes, rounded pricing values and the
OpenAPI spec. Hardened file upload validation.
|
| 2026-06 | Added getartworklist with full preview image URLs. |
| 2026-02 |
Initial beta: validatepreorder, getprice, getleadtime,
sendorder, getorderstatus, buildproductlist.
|
PreOrder Code — Field Reference
The preordercode is a pipe-delimited string: numCopies|material|type|orientation|width|height|additional|additional….
Expand each section below to see the accepted values.
¹ Requires a specific material | ² Requires a specific option
1, 2, 5
canvas
metal
paper
wood
panel
puzzle
mural
specialty
- da8
- da16
- ac4
- a38
- ng8
Canvas:- cnvr
- cnvm
- cnvg
- cnvs
Metal:- al
- alw
- hd
Paper:- poster
- glossphoto
- art
- vinyl
- pearl
Wood:- ru14
- ru58
- pineveneer
- plgatorplast
- plfomecor
- plpvc3
- plpvc6
- mdf12
- cor04
Puzzle:- 120pcs
- 315pcs
- 500pcs
- 1000pcs
- 1500pcs
Mural:- regular
Specialty:- guitar
- skateboard
- snowboard
- surfboard
- 12rd
- 12sq
- 16rd
- 16sq
- 24rd
- 24sq
horizontal
square ¹
auto
auto skips the orientation check entirely: the print orientation is taken
directly from the submitted width x height
(e.g. 1|canvas|stretched|auto|36|24 prints horizontal,
auto|24|36 prints vertical). Use it when your system already knows the
exact dimensions and you don't want to compute vertical / horizontal / square yourself.
16, 24.5, 37.25Fractional-inch support depends on the product, exposed as
decimaldim in
getcatalog and buildproductlist:"1" — any decimal is accepted (e.g. 37.25, 14.5)"Q" — quarter inches only; values are snapped to the nearest .25 / .5 / .75"" — whole inches only; decimals are rounded downIf a dimension is adjusted, validatepreorder returns
status: false with the corrected code in data.preordersanitize.
- matte
- semigloss
- silver
Canvas Wrap ¹ ²:- bordercolor
- mirrorimage
- imagewrap
Canvas Border Color ¹ ²:- textbordercolor
Canvas Thickness ¹:- roll
- c15 ¹
- c075 ¹
White Border ¹:- none
- wb175
- wb25
Mounting ¹:- none
- standoff ¹
- gromet ¹
- box ¹
- float ¹
- moulding ¹
- moulding34 ¹
- frame ¹
- lam1 ¹
- sebbox ¹
- lam2 ¹
- lam4c ¹
- drymount ¹
- kraft ¹
- sintraback ¹
- masoniteback ¹
- dryf ¹
- dryxl ¹
- dryg ¹
Cutting Option ¹:- none
- circular ¹
- roundedcorner ¹
- metalbox ¹
- diecut ¹
- octogonal ¹
- exactcut ¹
- 175inchcut ¹
- 25inchcut ¹
Graphic:- none
- opt
- retouch
- blackink
- 2intransparency ¹
- selectivetransparency
- frost
- backlit
- autopen
- inborder
- noir ¹
- blanc
Varnish ¹:- none ¹
- knife ¹
Mat Board ²:- none
- mb01
- mb02
- mb03
- mb04
- mb05
- mb06
- mb07
- mb08
- mb09
- mb10
- ws01
- ws02
- ws03
- ws04
- ws05
- ws06
- ws07
- ws08
- ws09
- ws10
Plexi Glass ²:- plexiglass
- plexiglassprint
- glass
Hanging ²:- none
- wire
- crochetf
- cleat
- security
- woodcleat
- sawtooth
- dring
Certificate:- none
- cert
Miscellaneous ¹:- signature
- editioncount
- mirror
Cfs 15 ¹ ²:- cfs15 ¹
301-10 — 301-10 Satin Gold Picture Frame301-11 — 301-11 Bronze Picture Frame301-21 — 301-21 Espresso Floating Frame301-22 — 301-22 White Floating Frame301-29 — 301-29 Black Floating Frame303-11 — 303-11 Espresso Floating Frame303-12 — 303-12 Natural Wood Floating Frame303-19 — 303-19 Black Floating Frame317-11 — 317-11 Bronze Floating Frame 317-21 — 317-21 Espresso Floating Frame317-22 — 317-22 White Floating Frame317-29 — 317-29 Black Floating Frame317-30 — 317-30 Gold Floating Frame317-73 — 317-73 Silver Floating Frame340-21 — 340-21 Espresso Floating Frame340-29 — 340-29 Black Floating Frame348-09 — 348-09 Black Lacquer Picture Frame360-02 — 360-02 White Lacquer Floating Frame360-09 — 360-09 Black Lacquer Floating Frame360-108 — 360-108 Grey Floating Frame360-11 — 360-11 Bronze Floating Frame360-111 — 360-111 Wallnut Floating Frame360-112 — 360-112 Ivory Floating Frame360-118 — 360-118 Brown Floating Frame360-18 — 360-18 Charcoal Floating Frame360-22 — 360-22 White Floating Frame360-23 — 360-23 Warm Silver Floating Frame360-29 — 360-29 Black Floating Frame360-30 — 360-30 Gold Floating Frame360-71 — 360-71 Brown Woodgrain Floating Frame360-72 — 360-72 Off-white Woodgrain Floating Frame360-73 — 360-73 Silver Floating Frame360-78 — 360-78 Grey Woodgrain Floating Frame360-79 — 360-79 Black Woodgrain Floating Frame360-81 — 360-81 Dark Brown Woodgrain Floating Frame360-82 — 360-82 Natural Woodgrain Floating Frame360-88 — 360-88 Charcoal Woodgrain Floating Frame361-121 — 361-121 Heavy Brown Floating Frame361-122 — 361-122 White-brown Wood Floating Frame361-128 — 361-128 Light Grey Wood Floating Frame361-131 — 361-131 Brown Wood Floating Frame361-138 — 361-138 Grey Wood Floating Frame514-42 — 514-42 Floating Frame514-48 — 514-48 Floating Frame514-49 — 514-49 Floating Frame514-71 — 514-71 Floating Frame514-72 — 514-72 Floating Frame514-81 — 514-81 Wood Texture Floating Frame515-48 — 515-48 Charcoal Floating Frame613-50 — 613-50 Gold Floating Framefl-814-08 — Fl-814-08 Gold Antique Floating Framefl-814-18 — Fl-814-18 Walnut Floating Framefl-814-22 — Fl-814-22 Truffle Floating Framefl-814-51 — Fl-814-51 Pewter Floating Framefl-814-52 — Fl-814-52 Charcoal Floating Framefl-814-61 — Fl-814-61 Ebony Floating Framefl-814-66 — Fl-814-66 Champagne Floating Framefl-814-67 — Fl-814-67 Black Floating Framefl-814-711 — Fl-814-711 Silver Floating Framefl-814-722 — Fl-814-722 Gold Floating Framefl-816-908 — Fl-816-908 Antique Floating Framefl-816-922 — Fl-816-922 Truffle Floating Framefl-816-952 — Fl-816-952 Coal Floating Framefl-816-966 — Fl-816-966 Champagne Floating Frame240-71 — 240-71 Wood Box Picture Frame240-82 — 240-82 Natural Wood Box Picture Frame241-21 — 241-21 Espresso Picture Frame241-22 — 241-22 White Picture Frame241-29 — 241-29 Black Picture Frame2616-473 — 2616-473 True Silver Large Frame Box329-22 — 329-22 White Picture Frame329-29 — 329-29 Black Picture Frame330-128 — 330 Grey Woodgrain Box Picture Frame330-19 — 330 Black Wood Grain Box Picture Frame330-22 — 330-22 White Box Picture Frame330-29 — 330-29 Black Box Picture Frame330-73 — 330 Silver Box Picture Frame331-09 — 331-09 Black Shadow Box Frame331-22 — 331-22 White Picture Frame331-29 — 331-29 Black Picture Frame432-21 — 432-21 Espresso Picture Frame432-22 — 432-22 White Thin Picture Frame432-29 — 432-29 Black Thin Picture Frame608-61 — 608-61 Oak Woodgrain Thin Frame Box608-78 — 608-78 Charcoal Thin Frame Box608-79 — 608-79 Dark Brown Thin Frame Box608-81 — 608-81 Beige Barnwood Thin Frame Box724-12 — 724-12 Natural Picture Frame724-19 — 724-19 Black Picture Frame724-32 — 724-32 White Picture Frame800-966 — 800-966 Champagne Frame Box820-545 — 820-545 Black Lipped Frame Box820-888 — 820-888 Dark Brownframe Box832-711 — 832-711 Silver Picture Frame832-722 — 832-722 Gold Picture Frame832-733 — 832-733 Red Wood Picture Frame84005 — 84005 Natural Wood Thin Picture Framefl-816-967 — Fl-816-967 Black Floating Frame306-11 — 306-11 Bronze Floating Frame 0.75306-22 — 306-22 White Floating Frame 0.75306-29 — 306-29 Black Floating Frame 0.75306-90 — 306-90 Gold Floating Frame 0.75365-11 — 365-11 Espresso Floating Frame365-12 — 365-12 Natural Floating Frame365-18 — 365-18 Grey Floating Frame365-19 — 365-19 Black Floating Frame365-31 — 365-31 Walnut Floating Frame132-29 — 132-29 Black Picture Frame132-31 — 132-31 Espresso Picture Frame135-200 — 135-200 Verdigris With Black Lined Picture Frame141-10 — 141-10 Gold Picture Frame141-15 — 141-15 Bronze Picture Frame141-21 — 141-21 Espresso Picture Frame141-22 — 141-22 White Picture Frame141-29 — 141-29 Black Picture Frame145-21 — 145-21 Espresso Picture Frame145-22 — 145-22 White Picture Frame145-29 — 145-29 Black Picture Frame157-950 — 157-950 Light Gold Lipped Frame165-21 — 165-21 Light Walnut Picture Frame186-21 — 186-21 Redwood With Black Picture Frame186-24 — 186-24 Magogany With Black Picture Frame186-29 — 186-29 Black Picture Frame22-21 — 22-21 Metal Frame24-260 — 24-260 Gold Ornate Frame24-263 — 24-263 Silver Ornate Frame297-12 — 297-12 Natural Woodgrain Picture Frame297-19 — 297-19 Black Woodgrain Picture Frame297-32 — 297-32 White Woodgrain Picture Frame41-10 — 41-10 Gold Picture Frame41-15 — 41-15 Bronze Picture Frame41-21 — 41-21 Espresso Picture Frame41-22 — 41-22 White Picture Frame41-29 — 41-29 Black Picture Frame429-121 — 429-121 White-brown Barnwood Frame429-122 — 429-122 White-brown Barnwood Frame429-125 — 429-125 Dark Brown Barnwood Frame429-128 — 429-128 Grey Barnwood Frame429-131 — 429-131 Barnwood Frame429-138 — 429-138 Grey Thin Wood Frame430-121 — 430-122 Light Brown Wood Frame430-122 — 430-122 Brown-white Wood Frame430-125 — 430-125 Dark Brown Wood Frame430-128 — 430-128 Light Grey Wood Frame430-131 — 430-131 Brown Wood Frame430-138 — 430-138 Grey Wood Frame431-29 — 431-29 Black Picture Frame520-21 — 520-21 Red Wood Picture Frame58-10 — 58-10 Brushed Gold Classic Frame58-13 — 58-13 Brushed Silver Classic Frame58-20 — 58-20 Gold Classic Frame58-23 — 58-23 Silver Classic Frame59-10 — 59-10 Brushed Gold Large Classic Frame59-13 — 59-13 Brushed Silver Large Classic Frame59-20 — 59-20 Gold Large Classic Frame59-210 — 59-210 Gold Espresso Worn-out Frame59-213 — 59-213 Silver Espresso Worn-out Frame59-23 — 59-23 Silver Panel Frame595-68 — 595-68 Grey Barnwood Large Picture Frame595-72 — 595-72 Oak Barwood Large Picture Frame595-78 — 595-78 Brown Barnwood Large Picture Frame602-53 — 602-53 Silver Black Lipped Picture Frame602-59 — 602-59 Black Silver Lipped Picture Frame608-72 — 608-72 White Woodgrain Thin Frame Box629-102 — 629-102 White Lacquer Picture Frame629-49 — 629-49 Black Picture Frame629-50 — 629-50 Antique Gold Picture Frame631-109 — 631-109 Black Lacquer Picture Frame631-42 — 631-42 White Picture Frame631-473 — 631-473 Silver Picture Frame631-49 — 631-49 Black Picture Frame631-50 — 631-50 Gold Picture Frame631-58 — 631-58 Charcoal Picture Frame631-63 — 631-63 Warm Silver Picture Frame631-71 — 631-71 Walnut Woodgrain Picture Frame631-81 — 631-81 Dark Walnut Woodgrain Picture Frame631-82 — 631-82 Natural Woodgrain Picture Frame631-88 — 631-88 Charcoal Woodgrain Picture Frame631-91 — 631-91 Light Walnut Woodgrain Picture Frame632-42 — 632-42 White Picture Frame632-473 — 632-473 Silver Picture Frame632-48 — 632-48 Charcoal Picture Frame632-49 — 632-49 Black Picture Frame632-55 — 632-55 Bronze Picture Frame661-40 — 661-40 Bronze Silver Bamboo Stem Frame661-43 — 661-43 Silver Bamboo Stem Frame661-49 — 661-49 Espresso Bamboo Stem Frame701-403 — 701-403 Grey Thin Picture Frame701-410 — 701-410 Pink Thin Picture Frame701-415 — 701-415 Red Think Picture Frame701-416 — 701-046 Blue Think Picture Frame701-419 — 701-419 Pink Thin Picture Frame701-851 — 701-851 Champagne Picture Frame701-871 — 701-871 Silver Thin Picture Frame701-948 — 701-948 White Thin Picture Frame701-blk — 701-blk Black Thin Picture Frame702-001 — 702-001 Oak Large Picture Frame702-011 — 702-011 Silver Large Picture Frame702-014 — 702-014 Grey Large Picture Frame702-045 — 702-045 Black Large Picture Frame702-051 — 702-051 Brown Large Picture Frame702-062 — 702-062 Grain Black Large Picture Frame702-067 — 702-067 Grey Brown Large Picture Frame702-084 — 702-084 Red Brown Large Picture Frame702-851 — 702-851 Champagne Large Picture Frame702-948 — 702-948 White Large Picture Frame706-21 — 706-21 Red Wood Pictureframe707-21 — 707-21 Redwood Black Deco Picture Frame707-29 — 707-29 Black Deco Frame725-29 — 725-29762-20 — 762-20 Bronze Wood Frame782-22 — 782-22 White Picture Frame782-29 — 782-29 Black Picture Frame783-22 — 783-22 White Picture Frame783-29 — 783-29 Black Picture Frame78348 — 78348 Omega787-290 — 787-290 Gold Picture Frame787-293 — 787-293 Stainless Picture Frame787-393 — 787-393 Silver Picture Frame790-212 — 790-212 Ivory Curving Frame790-218 — 790-218 Brown Curving Frame790-221 — 790-221 Walnut Curving Frame790-229 — 790-229 Black Curving Frame790-231 — 790-231 Espresso Curving Frame800-967 — 800-967 Black Frame Box832-745 — 832-745 Black Picture Frame868-745 — 868-745 Black Lipped Picture Frame868-755 — 868-755 Black With Gold Lipped Picture Frame868-756 — 868-756 Expresso With Gold Lipped Picture Frame868-767 — Expresso With Gold Lip884-638 — 884-638 Scratched Platinium Large Picture Frame886-690 — 886-690 Red Wood Large Picture Frame886-740 — 886-740 Redwood Large Picture Frame892-1040 — 892-1040 Gold Lipped Picture Frame892-755 — 892-755 Gold Lipped With Black Picture Frame892-756 — 892-756 Gold Lipped With Espresso Picture Frame892-967 — 892-967 Black Lipped Picture Frame8947 — 8947 Gold Picture FrameProduct Codes
Every valid material|type combination. Use these two values as the second and third segments of your preordercode.
| Material | Type code | Product name | Min size | Max size | Lead time |
|---|---|---|---|---|---|
acrylic |
ac220 | Acrylic Print 1/4 ( 0.220 ) | 8″ | 96″ | 6 days |
acrylic |
da8 | Acrylic Print 1/8 | 8″ | 96″ | 6 days |
acrylic |
da16 | Acrylic Print 3/16 | 8″ | 96″ | 6 days |
acrylic |
ac4 | Acrylic Print 1/4 | 8″ | 96″ | 6 days |
acrylic |
a38 | Acrylic Print 3/8 | 8″ | 96″ | 6 days |
acrylic |
ng8 | Acrylic Print Non Glare 1/8 | 8″ | 95″ | 6 days |
canvas |
cnvr | Canvas Print | 8″ | 150″ | 4 days |
canvas |
cnvm | Canvas Print Matte Varnish | 8″ | 150″ | 4 days |
canvas |
cnvg | Canvas Print Semi-gloss | 8″ | 150″ | 4 days |
canvas |
cnvs | Canvas Print Silver | 8″ | 150″ | 4 days |
metal |
al | Brushed Metal Print | 8″ | 96″ | 6 days |
metal |
alw | Smooth White Metal Print | 8″ | 96″ | 6 days |
metal |
hd | Hd Sublimation Chromaluxe Metal Print | 8″ | 60″ | 6 days |
paper |
poster | Satin Photo Paper Print - Poster | 8″ | 150″ | 4 days |
paper |
glossphoto | Glossy Photo Print | 8″ | 150″ | 4 days |
paper |
art | Fine Art Matte Paper Print | 8″ | 150″ | 4 days |
paper |
vinyl | Vinyl Print - Poster | 8″ | 150″ | 4 days |
paper |
pearl | Pearlescent Photo Print | 8″ | 150″ | 4 days |
wood |
ru14 | Wood Print | 8″ | 96″ | 6 days |
wood |
ru58 | Russian Birch 5/8 | 8″ | 96″ | 6 days |
wood |
pineveneer | Pine Veneer Print | 8″ | 96″ | 6 days |
panel |
plsintra | Sintra Print | 8″ | 96″ | 7 days |
panel |
plgatorplast | Gatorplast Print | 8″ | 96″ | 6 days |
panel |
plfomecor | Foamcore Print | 8″ | 96″ | 6 days |
panel |
plpvc3 | Pvc 3mm Panel Print | 8″ | 96″ | 6 days |
panel |
plpvc6 | Pvc 6mm Panel Print | 8″ | 96″ | 6 days |
panel |
mdf12 | Mdf 1/2 13mm Panel Print | 8″ | 96″ | 6 days |
panel |
cor04 | Coroplast 4mm Panel Print | 8″ | 96″ | 7 days |
puzzle |
120pcs | Puzzle Print 11x8-120pcs | 11 × 8″ | — | 6 days |
puzzle |
315pcs | Puzzle Print 17x12-315pcs | 17 × 12″ | — | 6 days |
puzzle |
500pcs | Puzzle Print 21x16-500pcs | 21 × 16″ | — | 6 days |
puzzle |
1000pcs | Puzzle Print 27x17-1000pcs | 27 × 17″ | — | 6 days |
puzzle |
1500pcs | Puzzle Print 36x24-1500pcs | 36 × 24″ | — | 6 days |
mural |
regular | Wall Mural Self Adhesive Print | — | — | 4 days |
specialty |
guitar | Custom Acrylic Guitar Board 13 X 38 | 18 × 13″ | — | 7 days |
specialty |
skateboard | Custom Acrylic Skate Board 8 X 30 | 8 × 30″ | — | 7 days |
specialty |
snowboard | Custom Acrylic Snow Board 12 X 62 | 12 × 62″ | — | 7 days |
specialty |
surfboard | Custom Acrylic Surf Board 76 X 18 | 18 × 76″ | — | 7 days |
specialty |
12rd | Clock 12 Inches Round | 12 × 12″ | — | 7 days |
specialty |
12sq | Clock 12 Inches Square | 12 × 12″ | — | 7 days |
specialty |
16rd | Clock 16 Inches Round | 16 × 16″ | — | 7 days |
specialty |
16sq | Clock 16 Inches Square | 16 × 16″ | — | 7 days |
specialty |
24rd | Clock 24 Inches Round | 24 × 24″ | — | 7 days |
specialty |
24sq | Clock 24 Inches Square | 24 × 24″ | — | 7 days |
Option Codes
All valid values for the additional segments of the preordercode.
¹ Requires a specific material |
² Requires a specific prior additional |
³ Only available on some sizes or some frame
models — buildproductlist marks it
isDisabled when it cannot be used.
| Option code | Group | Name | Req. |
|---|---|---|---|
| regular | Canvas Type | Regular | ¹ |
| matte | Canvas Type | Canvas Matte Varnish | ¹ |
| semigloss | Canvas Type | Canvas Semi-Gloss Varnish | ¹ |
| silver | Canvas Type | Canvas Silver Finish | ¹ |
| bordercolor | Canvas Wrap | Border Color | ¹² |
| mirrorimage | Canvas Wrap | Mirror Image | ¹² |
| imagewrap | Canvas Wrap | Image Wrap | ¹² |
| textbordercolor | Canvas Border Color | Border Color Input | ¹² |
| roll | Canvas Thickness | Rolled / Unmounted | ¹ |
| c15 | Canvas Thickness | Stretched Canvas Mount 1.5 Inch | ¹ |
| c075 | Canvas Thickness | Stretched Canvas Mount 0.75 Inch | ¹ |
| none | White Border | None | ¹ |
| wb175 | White Border | Add 1.75" White Border | ¹ |
| wb25 | White Border | Add 2.5" White Border | ¹ |
| none | Mounting | None | ¹ |
| standoff | Mounting | Stand Off Posts | ¹ |
| gromet | Mounting | Grommets On Each Corner | ¹ |
| box | Mounting | Metal Box Shape 1.5 Inch | ¹ |
| float | Mounting | Back Frame Mount | ¹ |
| moulding | Mounting | Floating Frame | ¹ |
| moulding34 | Mounting | Floating Frame 3/4 | ¹² |
| frame | Mounting | Frames | ¹ |
| lam1 | Mounting | Lamination On 3/8 Plate | ¹ |
| sebbox | Mounting | Shadow Box Mounting | ¹ |
| lam2 | Mounting | Lamination Flushmount | ¹ |
| lam4c | Mounting | Lamination On Masonite | ¹ |
| drymount | Mounting | Giclee Paper Print Dry Mount | ¹ |
| kraft | Mounting | Back Kraft Paper | ¹ |
| sintraback | Mounting | Sintra Backing | ¹ |
| masoniteback | Mounting | Masonite Backing | ¹ |
| dryf | Mounting | Drymount On Foamcore | ¹ |
| dryxl | Mounting | Drymount On Foamcore XL | ¹ |
| dryg | Mounting | Drymount On GatorPlast | ¹ |
| none | Cutting Option | None | ¹ |
| circular | Cutting Option | Circular Cut | ¹ |
| roundedcorner | Cutting Option | Rounded Corner 1/4" Radius | ¹ |
| metalbox | Cutting Option | Metal Box 1.5" | ¹ |
| diecut | Cutting Option | Die-Cut Special Shape | ¹ |
| octogonal | Cutting Option | Octogonal Cut | ¹ |
| exactcut | Cutting Option | Exact Cut | ¹ |
| 175inchcut | Cutting Option | 1.75 Inch Extra White Border | ¹ |
| 25inchcut | Cutting Option | 2.5 Inch Extra White Border | ¹ |
| none | Graphic | None | |
| opt | Graphic | Optimization Service | |
| retouch | Graphic | Retouch Service | |
| none | Printing | None | ¹ |
| blackink | Printing | Black Ink | ¹ |
| 2intransparency | Printing | 2 Inch Transparency | ¹ |
| selectivetransparency | Printing | Selective Transparency | ¹ |
| frost | Printing | White Frost Effect | ¹ |
| backlit | Printing | Back Lit ( Back Lighting Transparency Effect ) | ¹ |
| autopen | Printing | Auto Pen Signature | ¹ |
| inborder | Printing | Inside White Border Print | ¹ |
| noir | Printing | Black Backing | ¹ |
| blanc | Printing | Selective Transparency | ¹ |
| none | Varnish | None | ¹ |
| knife | Varnish | Knife Artistic Varnish | ¹ |
| none | Mat Board | None | ² |
| mb01 | Mat Board | Matboard 1 Inch | ² |
| mb02 | Mat Board | Matboard 2 Inches | ² |
| mb03 | Mat Board | Matboard 3 Inches | ² |
| mb04 | Mat Board | Matboard 4 Inches | ² |
| mb05 | Mat Board | Matboard 5 Inches | ² |
| mb06 | Mat Board | Matboard 6 Inches | ² |
| mb07 | Mat Board | Matboard 7 Inches | ² |
| mb08 | Mat Board | Matboard 8 Inches | ² |
| mb09 | Mat Board | Matboard 9 Inches | ² |
| mb10 | Mat Board | Matboard 10 Inches | ² |
| ws01 | Mat Board | White Space 1 Inch | ² |
| ws02 | Mat Board | White Space 2 Inches | ² |
| ws03 | Mat Board | White Space 3 Inches | ² |
| ws04 | Mat Board | White Space 4 Inches | ² |
| ws05 | Mat Board | White Space 5 Inches | ² |
| ws06 | Mat Board | White Space 6 Inches | ² |
| ws07 | Mat Board | White Space 7 Inches | ² |
| ws08 | Mat Board | White Space 8 Inches | ² |
| ws09 | Mat Board | White Space 9 Inches | ² |
| ws10 | Mat Board | White Space 10 Inches | ² |
| plexiglass | Plexi Glass | Plexiglass | ² |
| plexiglassprint | Plexi Glass | Plexiglass With White Border | ² |
| glass | Plexi Glass | Glass | ² |
| none | Hanging | None | ² |
| wire | Hanging | Hanging Wire | ² |
| crochetf | Hanging | Drymount Metal Hook | ² |
| cleat | Hanging | French Metal Cleat | ² |
| security | Hanging | Security Hardware | ² |
| woodcleat | Hanging | French Wood Cleat | ² |
| sawtooth | Hanging | Sawtooth Hangers | ² |
| dring | Hanging | D-Ring Hangers | ² |
| none | Certificate | None | |
| cert | Certificate | Certificate Of Authenticity | |
| signature | Miscellaneous | Signature | ¹ |
| editioncount | Miscellaneous | Inscription Edition | ¹ |
| mirror | Miscellaneous | Mirror Edges For Canvas | ¹ |
| cfs15 | Cfs 15 | CFS-15 | ¹² |
Frame Models
All valid frame codes for the additional (frames) segment.
Decorative Moulding requires moulding in additionals.
Picture Frame requires frame in additionals.
| Frame code | Type | Name |
|---|---|---|
| 301-10 | Decorative Moulding | 301-10 Satin Gold Picture Frame |
| 301-11 | Decorative Moulding | 301-11 Bronze Picture Frame |
| 301-21 | Decorative Moulding | 301-21 Espresso Floating Frame |
| 301-22 | Decorative Moulding | 301-22 White Floating Frame |
| 301-29 | Decorative Moulding | 301-29 Black Floating Frame |
| 303-11 | Decorative Moulding | 303-11 Espresso Floating Frame |
| 303-12 | Decorative Moulding | 303-12 Natural Wood Floating Frame |
| 303-19 | Decorative Moulding | 303-19 Black Floating Frame |
| 317-11 | Decorative Moulding | 317-11 Bronze Floating Frame |
| 317-21 | Decorative Moulding | 317-21 Espresso Floating Frame |
| 317-22 | Decorative Moulding | 317-22 White Floating Frame |
| 317-29 | Decorative Moulding | 317-29 Black Floating Frame |
| 317-30 | Decorative Moulding | 317-30 Gold Floating Frame |
| 317-73 | Decorative Moulding | 317-73 Silver Floating Frame |
| 340-21 | Decorative Moulding | 340-21 Espresso Floating Frame |
| 340-29 | Decorative Moulding | 340-29 Black Floating Frame |
| 348-09 | Decorative Moulding | 348-09 Black Lacquer Picture Frame |
| 360-02 | Decorative Moulding | 360-02 White Lacquer Floating Frame |
| 360-09 | Decorative Moulding | 360-09 Black Lacquer Floating Frame |
| 360-108 | Decorative Moulding | 360-108 Grey Floating Frame |
| 360-11 | Decorative Moulding | 360-11 Bronze Floating Frame |
| 360-111 | Decorative Moulding | 360-111 Wallnut Floating Frame |
| 360-112 | Decorative Moulding | 360-112 Ivory Floating Frame |
| 360-118 | Decorative Moulding | 360-118 Brown Floating Frame |
| 360-18 | Decorative Moulding | 360-18 Charcoal Floating Frame |
| 360-22 | Decorative Moulding | 360-22 White Floating Frame |
| 360-23 | Decorative Moulding | 360-23 Warm Silver Floating Frame |
| 360-29 | Decorative Moulding | 360-29 Black Floating Frame |
| 360-30 | Decorative Moulding | 360-30 Gold Floating Frame |
| 360-71 | Decorative Moulding | 360-71 Brown Woodgrain Floating Frame |
| 360-72 | Decorative Moulding | 360-72 Off-white Woodgrain Floating Frame |
| 360-73 | Decorative Moulding | 360-73 Silver Floating Frame |
| 360-78 | Decorative Moulding | 360-78 Grey Woodgrain Floating Frame |
| 360-79 | Decorative Moulding | 360-79 Black Woodgrain Floating Frame |
| 360-81 | Decorative Moulding | 360-81 Dark Brown Woodgrain Floating Frame |
| 360-82 | Decorative Moulding | 360-82 Natural Woodgrain Floating Frame |
| 360-88 | Decorative Moulding | 360-88 Charcoal Woodgrain Floating Frame |
| 361-121 | Decorative Moulding | 361-121 Heavy Brown Floating Frame |
| 361-122 | Decorative Moulding | 361-122 White-brown Wood Floating Frame |
| 361-128 | Decorative Moulding | 361-128 Light Grey Wood Floating Frame |
| 361-131 | Decorative Moulding | 361-131 Brown Wood Floating Frame |
| 361-138 | Decorative Moulding | 361-138 Grey Wood Floating Frame |
| 514-42 | Decorative Moulding | 514-42 Floating Frame |
| 514-48 | Decorative Moulding | 514-48 Floating Frame |
| 514-49 | Decorative Moulding | 514-49 Floating Frame |
| 514-71 | Decorative Moulding | 514-71 Floating Frame |
| 514-72 | Decorative Moulding | 514-72 Floating Frame |
| 514-81 | Decorative Moulding | 514-81 Wood Texture Floating Frame |
| 515-48 | Decorative Moulding | 515-48 Charcoal Floating Frame |
| 613-50 | Decorative Moulding | 613-50 Gold Floating Frame |
| fl-814-08 | Decorative Moulding | Fl-814-08 Gold Antique Floating Frame |
| fl-814-18 | Decorative Moulding | Fl-814-18 Walnut Floating Frame |
| fl-814-22 | Decorative Moulding | Fl-814-22 Truffle Floating Frame |
| fl-814-51 | Decorative Moulding | Fl-814-51 Pewter Floating Frame |
| fl-814-52 | Decorative Moulding | Fl-814-52 Charcoal Floating Frame |
| fl-814-61 | Decorative Moulding | Fl-814-61 Ebony Floating Frame |
| fl-814-66 | Decorative Moulding | Fl-814-66 Champagne Floating Frame |
| fl-814-67 | Decorative Moulding | Fl-814-67 Black Floating Frame |
| fl-814-711 | Decorative Moulding | Fl-814-711 Silver Floating Frame |
| fl-814-722 | Decorative Moulding | Fl-814-722 Gold Floating Frame |
| fl-816-908 | Decorative Moulding | Fl-816-908 Antique Floating Frame |
| fl-816-922 | Decorative Moulding | Fl-816-922 Truffle Floating Frame |
| fl-816-952 | Decorative Moulding | Fl-816-952 Coal Floating Frame |
| fl-816-966 | Decorative Moulding | Fl-816-966 Champagne Floating Frame |
| 240-71 | Picture Frame | 240-71 Wood Box Picture Frame |
| 240-82 | Picture Frame | 240-82 Natural Wood Box Picture Frame |
| 241-21 | Picture Frame | 241-21 Espresso Picture Frame |
| 241-22 | Picture Frame | 241-22 White Picture Frame |
| 241-29 | Picture Frame | 241-29 Black Picture Frame |
| 2616-473 | Picture Frame | 2616-473 True Silver Large Frame Box |
| 329-22 | Picture Frame | 329-22 White Picture Frame |
| 329-29 | Picture Frame | 329-29 Black Picture Frame |
| 330-128 | Picture Frame | 330 Grey Woodgrain Box Picture Frame |
| 330-19 | Picture Frame | 330 Black Wood Grain Box Picture Frame |
| 330-22 | Picture Frame | 330-22 White Box Picture Frame |
| 330-29 | Picture Frame | 330-29 Black Box Picture Frame |
| 330-73 | Picture Frame | 330 Silver Box Picture Frame |
| 331-09 | Picture Frame | 331-09 Black Shadow Box Frame |
| 331-22 | Picture Frame | 331-22 White Picture Frame |
| 331-29 | Picture Frame | 331-29 Black Picture Frame |
| 432-21 | Picture Frame | 432-21 Espresso Picture Frame |
| 432-22 | Picture Frame | 432-22 White Thin Picture Frame |
| 432-29 | Picture Frame | 432-29 Black Thin Picture Frame |
| 608-61 | Picture Frame | 608-61 Oak Woodgrain Thin Frame Box |
| 608-78 | Picture Frame | 608-78 Charcoal Thin Frame Box |
| 608-79 | Picture Frame | 608-79 Dark Brown Thin Frame Box |
| 608-81 | Picture Frame | 608-81 Beige Barnwood Thin Frame Box |
| 724-12 | Picture Frame | 724-12 Natural Picture Frame |
| 724-19 | Picture Frame | 724-19 Black Picture Frame |
| 724-32 | Picture Frame | 724-32 White Picture Frame |
| 800-966 | Picture Frame | 800-966 Champagne Frame Box |
| 820-545 | Picture Frame | 820-545 Black Lipped Frame Box |
| 820-888 | Picture Frame | 820-888 Dark Brownframe Box |
| 832-711 | Picture Frame | 832-711 Silver Picture Frame |
| 832-722 | Picture Frame | 832-722 Gold Picture Frame |
| 832-733 | Picture Frame | 832-733 Red Wood Picture Frame |
| 84005 | Picture Frame | 84005 Natural Wood Thin Picture Frame |
| fl-816-967 | Picture Frame | Fl-816-967 Black Floating Frame |
| 306-11 | Picture Frame | 306-11 Bronze Floating Frame 0.75 |
| 306-22 | Picture Frame | 306-22 White Floating Frame 0.75 |
| 306-29 | Picture Frame | 306-29 Black Floating Frame 0.75 |
| 306-90 | Picture Frame | 306-90 Gold Floating Frame 0.75 |
| 365-11 | Picture Frame | 365-11 Espresso Floating Frame |
| 365-12 | Picture Frame | 365-12 Natural Floating Frame |
| 365-18 | Picture Frame | 365-18 Grey Floating Frame |
| 365-19 | Picture Frame | 365-19 Black Floating Frame |
| 365-31 | Picture Frame | 365-31 Walnut Floating Frame |
| 132-29 | Picture Frame | 132-29 Black Picture Frame |
| 132-31 | Picture Frame | 132-31 Espresso Picture Frame |
| 135-200 | Picture Frame | 135-200 Verdigris With Black Lined Picture Frame |
| 141-10 | Picture Frame | 141-10 Gold Picture Frame |
| 141-15 | Picture Frame | 141-15 Bronze Picture Frame |
| 141-21 | Picture Frame | 141-21 Espresso Picture Frame |
| 141-22 | Picture Frame | 141-22 White Picture Frame |
| 141-29 | Picture Frame | 141-29 Black Picture Frame |
| 145-21 | Picture Frame | 145-21 Espresso Picture Frame |
| 145-22 | Picture Frame | 145-22 White Picture Frame |
| 145-29 | Picture Frame | 145-29 Black Picture Frame |
| 157-950 | Picture Frame | 157-950 Light Gold Lipped Frame |
| 165-21 | Picture Frame | 165-21 Light Walnut Picture Frame |
| 186-21 | Picture Frame | 186-21 Redwood With Black Picture Frame |
| 186-24 | Picture Frame | 186-24 Magogany With Black Picture Frame |
| 186-29 | Picture Frame | 186-29 Black Picture Frame |
| 22-21 | Picture Frame | 22-21 Metal Frame |
| 24-260 | Picture Frame | 24-260 Gold Ornate Frame |
| 24-263 | Picture Frame | 24-263 Silver Ornate Frame |
| 297-12 | Picture Frame | 297-12 Natural Woodgrain Picture Frame |
| 297-19 | Picture Frame | 297-19 Black Woodgrain Picture Frame |
| 297-32 | Picture Frame | 297-32 White Woodgrain Picture Frame |
| 41-10 | Picture Frame | 41-10 Gold Picture Frame |
| 41-15 | Picture Frame | 41-15 Bronze Picture Frame |
| 41-21 | Picture Frame | 41-21 Espresso Picture Frame |
| 41-22 | Picture Frame | 41-22 White Picture Frame |
| 41-29 | Picture Frame | 41-29 Black Picture Frame |
| 429-121 | Picture Frame | 429-121 White-brown Barnwood Frame |
| 429-122 | Picture Frame | 429-122 White-brown Barnwood Frame |
| 429-125 | Picture Frame | 429-125 Dark Brown Barnwood Frame |
| 429-128 | Picture Frame | 429-128 Grey Barnwood Frame |
| 429-131 | Picture Frame | 429-131 Barnwood Frame |
| 429-138 | Picture Frame | 429-138 Grey Thin Wood Frame |
| 430-121 | Picture Frame | 430-122 Light Brown Wood Frame |
| 430-122 | Picture Frame | 430-122 Brown-white Wood Frame |
| 430-125 | Picture Frame | 430-125 Dark Brown Wood Frame |
| 430-128 | Picture Frame | 430-128 Light Grey Wood Frame |
| 430-131 | Picture Frame | 430-131 Brown Wood Frame |
| 430-138 | Picture Frame | 430-138 Grey Wood Frame |
| 431-29 | Picture Frame | 431-29 Black Picture Frame |
| 520-21 | Picture Frame | 520-21 Red Wood Picture Frame |
| 58-10 | Picture Frame | 58-10 Brushed Gold Classic Frame |
| 58-13 | Picture Frame | 58-13 Brushed Silver Classic Frame |
| 58-20 | Picture Frame | 58-20 Gold Classic Frame |
| 58-23 | Picture Frame | 58-23 Silver Classic Frame |
| 59-10 | Picture Frame | 59-10 Brushed Gold Large Classic Frame |
| 59-13 | Picture Frame | 59-13 Brushed Silver Large Classic Frame |
| 59-20 | Picture Frame | 59-20 Gold Large Classic Frame |
| 59-210 | Picture Frame | 59-210 Gold Espresso Worn-out Frame |
| 59-213 | Picture Frame | 59-213 Silver Espresso Worn-out Frame |
| 59-23 | Picture Frame | 59-23 Silver Panel Frame |
| 595-68 | Picture Frame | 595-68 Grey Barnwood Large Picture Frame |
| 595-72 | Picture Frame | 595-72 Oak Barwood Large Picture Frame |
| 595-78 | Picture Frame | 595-78 Brown Barnwood Large Picture Frame |
| 602-53 | Picture Frame | 602-53 Silver Black Lipped Picture Frame |
| 602-59 | Picture Frame | 602-59 Black Silver Lipped Picture Frame |
| 608-72 | Picture Frame | 608-72 White Woodgrain Thin Frame Box |
| 629-102 | Picture Frame | 629-102 White Lacquer Picture Frame |
| 629-49 | Picture Frame | 629-49 Black Picture Frame |
| 629-50 | Picture Frame | 629-50 Antique Gold Picture Frame |
| 631-109 | Picture Frame | 631-109 Black Lacquer Picture Frame |
| 631-42 | Picture Frame | 631-42 White Picture Frame |
| 631-473 | Picture Frame | 631-473 Silver Picture Frame |
| 631-49 | Picture Frame | 631-49 Black Picture Frame |
| 631-50 | Picture Frame | 631-50 Gold Picture Frame |
| 631-58 | Picture Frame | 631-58 Charcoal Picture Frame |
| 631-63 | Picture Frame | 631-63 Warm Silver Picture Frame |
| 631-71 | Picture Frame | 631-71 Walnut Woodgrain Picture Frame |
| 631-81 | Picture Frame | 631-81 Dark Walnut Woodgrain Picture Frame |
| 631-82 | Picture Frame | 631-82 Natural Woodgrain Picture Frame |
| 631-88 | Picture Frame | 631-88 Charcoal Woodgrain Picture Frame |
| 631-91 | Picture Frame | 631-91 Light Walnut Woodgrain Picture Frame |
| 632-42 | Picture Frame | 632-42 White Picture Frame |
| 632-473 | Picture Frame | 632-473 Silver Picture Frame |
| 632-48 | Picture Frame | 632-48 Charcoal Picture Frame |
| 632-49 | Picture Frame | 632-49 Black Picture Frame |
| 632-55 | Picture Frame | 632-55 Bronze Picture Frame |
| 661-40 | Picture Frame | 661-40 Bronze Silver Bamboo Stem Frame |
| 661-43 | Picture Frame | 661-43 Silver Bamboo Stem Frame |
| 661-49 | Picture Frame | 661-49 Espresso Bamboo Stem Frame |
| 701-403 | Picture Frame | 701-403 Grey Thin Picture Frame |
| 701-410 | Picture Frame | 701-410 Pink Thin Picture Frame |
| 701-415 | Picture Frame | 701-415 Red Think Picture Frame |
| 701-416 | Picture Frame | 701-046 Blue Think Picture Frame |
| 701-419 | Picture Frame | 701-419 Pink Thin Picture Frame |
| 701-851 | Picture Frame | 701-851 Champagne Picture Frame |
| 701-871 | Picture Frame | 701-871 Silver Thin Picture Frame |
| 701-948 | Picture Frame | 701-948 White Thin Picture Frame |
| 701-blk | Picture Frame | 701-blk Black Thin Picture Frame |
| 702-001 | Picture Frame | 702-001 Oak Large Picture Frame |
| 702-011 | Picture Frame | 702-011 Silver Large Picture Frame |
| 702-014 | Picture Frame | 702-014 Grey Large Picture Frame |
| 702-045 | Picture Frame | 702-045 Black Large Picture Frame |
| 702-051 | Picture Frame | 702-051 Brown Large Picture Frame |
| 702-062 | Picture Frame | 702-062 Grain Black Large Picture Frame |
| 702-067 | Picture Frame | 702-067 Grey Brown Large Picture Frame |
| 702-084 | Picture Frame | 702-084 Red Brown Large Picture Frame |
| 702-851 | Picture Frame | 702-851 Champagne Large Picture Frame |
| 702-948 | Picture Frame | 702-948 White Large Picture Frame |
| 706-21 | Picture Frame | 706-21 Red Wood Pictureframe |
| 707-21 | Picture Frame | 707-21 Redwood Black Deco Picture Frame |
| 707-29 | Picture Frame | 707-29 Black Deco Frame |
| 725-29 | Picture Frame | 725-29 |
| 762-20 | Picture Frame | 762-20 Bronze Wood Frame |
| 782-22 | Picture Frame | 782-22 White Picture Frame |
| 782-29 | Picture Frame | 782-29 Black Picture Frame |
| 783-22 | Picture Frame | 783-22 White Picture Frame |
| 783-29 | Picture Frame | 783-29 Black Picture Frame |
| 78348 | Picture Frame | 78348 Omega |
| 787-290 | Picture Frame | 787-290 Gold Picture Frame |
| 787-293 | Picture Frame | 787-293 Stainless Picture Frame |
| 787-393 | Picture Frame | 787-393 Silver Picture Frame |
| 790-212 | Picture Frame | 790-212 Ivory Curving Frame |
| 790-218 | Picture Frame | 790-218 Brown Curving Frame |
| 790-221 | Picture Frame | 790-221 Walnut Curving Frame |
| 790-229 | Picture Frame | 790-229 Black Curving Frame |
| 790-231 | Picture Frame | 790-231 Espresso Curving Frame |
| 800-967 | Picture Frame | 800-967 Black Frame Box |
| 832-745 | Picture Frame | 832-745 Black Picture Frame |
| 868-745 | Picture Frame | 868-745 Black Lipped Picture Frame |
| 868-755 | Picture Frame | 868-755 Black With Gold Lipped Picture Frame |
| 868-756 | Picture Frame | 868-756 Expresso With Gold Lipped Picture Frame |
| 868-767 | Picture Frame | Expresso With Gold Lip |
| 884-638 | Picture Frame | 884-638 Scratched Platinium Large Picture Frame |
| 886-690 | Picture Frame | 886-690 Red Wood Large Picture Frame |
| 886-740 | Picture Frame | 886-740 Redwood Large Picture Frame |
| 892-1040 | Picture Frame | 892-1040 Gold Lipped Picture Frame |
| 892-755 | Picture Frame | 892-755 Gold Lipped With Black Picture Frame |
| 892-756 | Picture Frame | 892-756 Gold Lipped With Espresso Picture Frame |
| 892-967 | Picture Frame | 892-967 Black Lipped Picture Frame |
| 8947 | Picture Frame | 8947 Gold Picture Frame |