Orders
Retrieve order details, download print-ready files, and update order/item statuses via the Enterprise API.
The Orders endpoints let you retrieve full order details including line items, addresses, and payment information. You can download print-ready files as ZIP archives, mark orders or individual items as shipped with tracking numbers, and update order statuses with comments and notification controls.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
GET | /api/v2/order/{orderId} | Retrieve an order |
GET | /api/v2/order/{orderId}/download | Download all order files as ZIP |
GET | /api/v2/order/{orderId}/download/{itemId} | Download a single item's files as ZIP |
GET | /api/v2/order/{orderId}/assets/{itemId} | Download an item's source assets as ZIP |
PATCH | /api/v2/order/{orderId}/shipped | Mark entire order as shipped |
PATCH | /api/v2/order/{orderId}/shipped/{itemId} | Mark a single item as shipped |
PATCH | /api/v2/order/{orderId}/status | Update status for entire order |
PATCH | /api/v2/order/{orderId}/status/{itemId} | Update status for a single item |
Get Order
Retrieve full order details including customer, addresses, payment, line items with options, and checkout fields.
GET /api/v2/order/{orderId}Example Request
curl -X GET https://api.printnow.com/api/v2/order/5001 \
-u "YOUR_TOKEN:YOUR_KEY"Example Response
{
"storefront": "My Print Store",
"id": 5001,
"is_archived": false,
"is_deleted": false,
"integration_id": "EXT-12345",
"status": "New Order",
"customer": {
"id": 12345,
"first_name": "Jane",
"last_name": "Smith",
"email": "jane@example.com",
"username": "janesmith"
},
"shipping_address": {
"id": 100,
"name": "Office",
"first_name": "Jane",
"last_name": "Smith",
"line_1": "123 Main St",
"city": "New York",
"state": "NY",
"postal_code": "10001",
"country_code": "US",
"is_residential": false
},
"billing_address": { },
"payment_creditcard": true,
"payment_check": false,
"payment_cod": false,
"payment_po": false,
"payment_invoice": false,
"payment_paypal": false,
"payment_reference": "ch_abc123",
"payment_avscode": "Y",
"payment_cvcode": "M",
"card_type": "Visa",
"card_number": "4242",
"tax_total": 8.75,
"shipping_total": 12.50,
"sub_total": 125.00,
"promotion_total": 10.00,
"promotion_code": "SAVE10",
"created_on": "2026-01-20T09:15:00Z",
"shipped_on": null,
"shipping_provider": "UPS",
"shipping_service": "Ground",
"items": [
{
"id": 8001,
"product_id": 42,
"name": "Business Cards",
"status": "New Order",
"quantity": 500,
"sub_total": 125.00,
"base_price": 100.00,
"options_price": 25.00,
"markup_price": 0.00,
"image_fee": 0.00,
"download_fee": 0.00,
"weight": 1.5,
"created_on": "2026-01-20T09:15:00Z",
"due_on": "2026-01-25T00:00:00Z",
"item_number": "BC-001",
"model_number": "STD-BC",
"integration_id": "SKU-BC-500",
"vendor": "Print Vendor Inc",
"notes": "Please use matte finish",
"reorder_ref": "REF-123",
"options": [
{ "name": "Paper Stock", "value": "14pt Matte", "option_integration_id": "OPT-1", "value_integration_id": "VAL-1" }
],
"parametric": null
}
],
"checkout_fields": [
{ "name": "PO Number", "value": "PO-2026-001" }
]
}Order Response Fields
| Field | Type | Description |
|---|---|---|
storefront | string | Name of the storefront where the order was placed. |
id | integer | Unique order ID. |
is_archived | boolean | Whether the order has been archived in the admin. |
is_deleted | boolean | Whether the order has been deleted in the admin. |
integration_id | string | External integration identifier, if the order was created via an external system. |
status | string | Current order status label (e.g., "New Order", "In Production", "Shipped"). |
customer | object | Full Customer object for the buyer. |
shipping_address | object | Shipping Address object. |
billing_address | object | Billing Address object. |
payment_creditcard | boolean | Paid by credit card. |
payment_check | boolean | Paid by check. |
payment_cod | boolean | Paid cash on delivery. |
payment_po | boolean | Paid by purchase order. |
payment_invoice | boolean | Paid by invoice. |
payment_paypal | boolean | Inferred: true when none of the other payment flags are set. This is not stored explicitly but calculated -- if no other payment method was recorded, PayPal is assumed. |
payment_reference | string | Payment gateway transaction reference (e.g., Stripe charge ID). |
payment_avscode | string | Address Verification System response code from the payment gateway. |
payment_cvcode | string | Card Verification response code from the payment gateway. |
card_type | string | Credit card brand (Visa, Mastercard, etc.). Only present for credit card payments. |
card_number | string | Last 4 digits of the credit card. Only present for credit card payments. |
check_number | string | Check number. Only present for check payments. |
po_number | string | Purchase order number. |
invoice_number | string | Invoice number. |
tax_total | decimal | Total tax amount. |
shipping_total | decimal | Total shipping cost. |
sub_total | decimal | Order subtotal (sum of line item totals). |
promotion_total | decimal | Total discount amount from promotions. |
promotion_code | string | Promotion code applied to the order, if any. |
created_on | datetime | UTC timestamp when the order was placed. |
shipped_on | datetime | UTC timestamp when the order was marked as shipped. Null if not yet shipped. |
shipping_provider | string | Shipping carrier name (e.g., "UPS", "FedEx"). |
shipping_service | string | Shipping service level (e.g., "Ground", "2-Day"). |
items | array | Array of Order Item objects. |
checkout_fields | array | Array of custom checkout field name/value pairs configured in the storefront. |
Order Item Fields
| Field | Type | Description |
|---|---|---|
id | integer | Unique line item ID. |
product_id | integer | ID of the ordered product. |
name | string | Product name. |
status | string | Current status of this line item (items can have different statuses within the same order). |
quantity | integer | Ordered quantity. |
sub_total | decimal | Line item total price. |
base_price | decimal | Base product price before options and markups. |
options_price | decimal | Total price of selected options. |
markup_price | decimal | Service markup amount. |
image_fee | decimal | Fee for stock images used in the design. |
download_fee | decimal | Fee for downloadable content. |
weight | decimal | Item weight for shipping calculations. |
created_on | datetime | UTC timestamp when the item was created. |
due_on | datetime | Due date for the item, if set. |
item_number | string | Product item/SKU number. Pulled from the original product template if this is a customized copy. |
model_number | string | Product model number. Pulled from the original product template if this is a customized copy. |
integration_id | string | External integration identifier. Pulled from the original product template if this is a customized copy. |
vendor | string | Assigned vendor name. |
notes | string | Combined product and order item comments. |
reorder_ref | string | Reference for reorder tracking. |
options | array | Array of selected Option Item objects. |
parametric | array | Array of Parametric Property objects for Print CAD products. Null for non-parametric products. |
Option Item Fields
| Field | Type | Description |
|---|---|---|
name | string | Option name (e.g., "Paper Stock", "Finish"). |
value | string | Selected option value (e.g., "14pt Matte"). |
option_integration_id | string | External integration ID for the option, if configured. |
value_integration_id | string | External integration ID for the selected value, if configured. |
Parametric Property Fields
For products designed with Print CAD, parametric dimensions and configuration are included.
| Field | Type | Description |
|---|---|---|
name | string | Property name (e.g., "blankWidth", "blankHeight", "standard", or custom variable names). |
value | string | Property value. Dimensions are converted from mm to the product's configured unit system. |
Address Object
| Field | Type | Description |
|---|---|---|
id | integer | Address ID. |
name | string | Address label (e.g., "Home", "Office"). |
company | string | Company name. |
first_name | string | Recipient first name. |
last_name | string | Recipient last name. |
line_1 | string | Address line 1. |
line_2 | string | Address line 2. |
line_3 | string | Address line 3. |
line_4 | string | Address line 4. |
city | string | City. |
state | string | State or province. |
postal_code | string | Postal/ZIP code. |
phone | string | Phone number. |
email | string | Email address. |
country_code | string | Country code. |
is_residential | boolean | Whether the address is residential (affects shipping rates). |
Download Order
Download all print-ready files for an order as a ZIP archive. All items in the order must have completed the file merge process before download is available.
GET /api/v2/order/{orderId}/downloadReturns a application/zip file stream with filename order-{orderId}.zip.
If any items have not completed the merge process, returns 409 Conflict with a Retry-After: 60 header. Poll again after the suggested interval.
Download Item
Download print-ready files for a single order item as a ZIP archive.
GET /api/v2/order/{orderId}/download/{itemId}Returns a application/zip file stream with filename item-{itemId}.zip.
If the item has not completed the merge process, returns 409 Conflict with a Retry-After: 30 header.
Download Item Assets
Download source design assets for an order item as a ZIP archive. For custom-design products, this returns the uploaded design files. For editor-designed products, this returns the high-resolution images used in the design.
GET /api/v2/order/{orderId}/assets/{itemId}Returns a application/zip file stream with filename item-assets-{itemId}.zip.
Mark Order Shipped
Mark all items in an order as shipped. This sets the shipped date, updates all item statuses to the "Order Shipped" status, triggers the order_updated webhook, and sends the "Order Shipped" email notification to the customer.
PATCH /api/v2/order/{orderId}/shippedRequest Body (Optional)
{
"tracking_number": "1Z999AA10123456784"
}Tracking numbers are appended to any existing tracking numbers on the order (duplicates are ignored). Returns 204 No Content on success.
If the storefront does not have an "Order Shipped" status configured, returns 400 Bad Request.
Mark Item Shipped
Mark a single order item as shipped while leaving other items unchanged.
PATCH /api/v2/order/{orderId}/shipped/{itemId}Same request body and behavior as Mark Order Shipped, but only updates the specified item's status.
Update Order Status
Update all items in an order to a specific status. This is more flexible than the shipped endpoints -- you can set any status configured in the storefront, add comments, include tracking numbers, and control who gets notified.
PATCH /api/v2/order/{orderId}/statusRequest Body
| Field | Type | Required | Description |
|---|---|---|---|
order_status | string | Yes | Target status name. Must match an existing status on the storefront (case-insensitive). Use the Get Status List endpoint to discover available statuses. |
comments | string | No | Comments to include in the order history entry. Supports multiple lines. |
tracking_number | string | No | Tracking number to append to the order. |
user_initials | string | No | Initials to record in the order history (identifies who made the change). |
notify_customer | boolean | No | Whether to send the status change email to the customer. Defaults to false. |
notify_vendor | boolean | No | Whether to send vendor purchase order emails to all vendors on the order. Defaults to false. |
Example Request
curl -X PATCH https://api.printnow.com/api/v2/order/5001/status \
-u "YOUR_TOKEN:YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"order_status": "In Production",
"comments": "Sent to press",
"user_initials": "JS",
"notify_customer": true,
"notify_vendor": false
}'Returns 204 No Content on success. The status change is recorded in the order history with an "Updated via API" note. If the target status is a shipping status (associated with the "Order Shipped" email template), the order's shipped date is also set. Triggers the order_updated webhook.
Update Item Status
Update a single item's status within an order.
PATCH /api/v2/order/{orderId}/status/{itemId}Same request body and behavior as Update Order Status, but only affects the specified item.
Error Responses
| Code | Message | Cause |
|---|---|---|
404 | Order not found. | No order with this ID exists under your license. |
404 | Item not found. | No order item with this ID exists within the specified order. |
409 | All items have not completed merge process. | Download requested before print-ready files are generated. Retry after the Retry-After header duration. |
409 | Item has not completed merge process. | Single-item download requested before that item's files are ready. |
400 | Bad Request | Mark Shipped called on a storefront without an "Order Shipped" status configured. |
Related Pages
- Storefronts — retrieve order statuses and search orders across storefronts
- Webhooks — receive order_created and order_updated event notifications
- Orders — manage orders and update statuses in the admin UI