Reports
Run sales, order, customer, product, shipping, tax, and other business reports via the Enterprise API.
The Reports endpoints let you programmatically run the same business reports available in the Unified Admin. All 14 report types share a common set of parameters and return structured JSON data for integration with external analytics, dashboards, and business intelligence tools.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
GET | /api/v2/report/sales | Sales summary by storefront |
GET | /api/v2/report/tax | Tax details per order |
GET | /api/v2/report/order | Order counts by time period |
GET | /api/v2/report/order_details | Detailed order-level data |
GET | /api/v2/report/order_item_details | Line item-level order data |
GET | /api/v2/report/product_sales | Sales by product |
GET | /api/v2/report/promotion_code | Promotion code usage |
GET | /api/v2/report/customer_list | Customer list with order summaries |
GET | /api/v2/report/customer_sales | Sales by customer |
GET | /api/v2/report/shipping | Shipping costs by provider |
GET | /api/v2/report/sales_rep | Sales by representative |
GET | /api/v2/report/saved_projects | Saved projects by customer |
GET | /api/v2/report/conversion_rate | Storefront conversion funnel |
GET | /api/v2/report/affiliates | Affiliate performance |
Shared Parameters
All report endpoints accept the same base parameters:
| Name | Type | Location | Required | Description |
|---|---|---|---|---|
storefrontId | integer | query | Yes | Target storefront ID. Use 0 to aggregate across all storefronts under your license. |
fromDate | date | query | Yes | Start date (inclusive). Format: YYYY-MM-DD. |
toDate | date | query | Yes | End date (inclusive). Format: YYYY-MM-DD. If fromDate is after toDate, they are automatically swapped. |
Example Request
curl -X GET "https://api.printnow.com/api/v2/report/sales?storefrontId=0&fromDate=2026-01-01&toDate=2026-01-31" \
-u "YOUR_TOKEN:YOUR_KEY"If a non-zero storefrontId does not match an active storefront, the report returns empty results (it internally uses an invalid ID of -1 to ensure no data matches).
Sales Report
Summary of users, orders, and revenue by storefront.
GET /api/v2/report/salesExample Response
[
{
"storefront": "Retail Print Site",
"user_count": 247,
"order_count": 1053,
"order_average": 45.82,
"order_total": 48248.46
}
]| Field | Type | Description |
|---|---|---|
storefront | string | Storefront name. |
user_count | integer | Number of unique customers who ordered. |
order_count | integer | Total number of orders. |
order_average | decimal | Average order value. |
order_total | decimal | Total revenue. |
Tax Report
Tax breakdown per order with geographic grouping.
GET /api/v2/report/taxExample Response
[
{
"order_id": 5001,
"order_date": "2026-01-15",
"country": "US",
"state": "NY",
"sub_total": 49.99,
"shipping_total": 5.00,
"promotion_total": 0.00,
"tax_total": 4.37,
"grand_total": 59.36,
"group_by_key": "US"
}
]| Field | Type | Description |
|---|---|---|
order_id | integer | Order ID. |
order_date | date | Date the order was placed. |
country | string | Shipping country. |
state | string | Shipping state/province. |
sub_total | decimal | Order subtotal. |
shipping_total | decimal | Shipping cost. |
promotion_total | decimal | Promotion discount. |
tax_total | decimal | Tax amount. |
grand_total | decimal | Grand total (subtotal + shipping + tax - promotions). |
group_by_key | string | Country grouping key for aggregation. |
Order Report
Order and item counts aggregated by time period.
GET /api/v2/report/orderExample Response
[
{
"period": "2026-01-15",
"order_count": 12,
"item_count": 34,
"order_total": 548.70,
"tax_total": 43.90,
"shipping_total": 36.00
}
]Additional parameter:
| Name | Type | Location | Description |
|---|---|---|---|
viewBy | string | query | Aggregation period: day (default), month, or year. |
| Field | Type | Description |
|---|---|---|
period | string | Time period label (date, month, or year depending on viewBy). |
order_count | integer | Number of orders in the period. |
item_count | integer | Number of line items in the period. |
order_total | decimal | Total revenue for the period. |
tax_total | decimal | Total tax for the period. |
shipping_total | decimal | Total shipping for the period. |
Order Details Report
Comprehensive order-level data including addresses, payment, and fulfillment.
GET /api/v2/report/order_detailsExample Response
[
{
"order_id": 5001,
"customer_email": "jane@example.com",
"billing_address": "123 Main St, New York, NY 10001",
"shipping_address": "123 Main St, New York, NY 10001",
"order_date": "2026-01-15",
"store_url": "www.retailprintsite.com",
"sales_rep": "John Doe",
"sub_total": 49.99,
"shipping_total": 5.00,
"promotion_total": 0.00,
"tax_total": 4.37,
"grand_total": 59.36,
"promotion_code": "",
"shipping_provider": "UPS",
"shipping_method": "Ground",
"tracking_numbers": "1Z999AA10123456784",
"invoice_number": "",
"order_status": "Shipped",
"company": "Acme Corp",
"user_group": "Wholesale"
}
]| Field | Type | Description |
|---|---|---|
order_id | integer | Order ID. |
customer_email | string | Customer email address. |
billing_address | string | Formatted billing address. |
shipping_address | string | Formatted shipping address. |
order_date | date | Date the order was placed. |
store_url | string | Storefront URL. |
sales_rep | string | Assigned sales representative name. |
sub_total | decimal | Order subtotal. |
shipping_total | decimal | Shipping cost. |
promotion_total | decimal | Promotion discount amount. |
tax_total | decimal | Tax amount. |
grand_total | decimal | Grand total. |
promotion_code | string | Promotion code used, if any. |
shipping_provider | string | Shipping carrier name. |
shipping_method | string | Shipping service level. |
tracking_numbers | string | Tracking numbers (comma-separated). |
invoice_number | string | Invoice number. |
order_status | string | Current order status. |
company | string | Customer company name. |
user_group | string | Customer user group. |
Order Item Details Report
Line item-level data with shipping and fulfillment details per item.
GET /api/v2/report/order_item_detailsExample Response
[
{
"order_id": 5001,
"order_date": "2026-01-15",
"customer_company": "Acme Corp",
"customer_name": "Jane Smith",
"customer_username": "janesmith",
"item_id": 8001,
"item_status": "Shipped",
"product_name": "Business Cards",
"product_item_number": "BC-001",
"product_model_number": "",
"quantity": 500,
"item_total": 49.99,
"shipping_address_line_1": "123 Main St",
"shipping_address_line_2": "",
"shipping_address_line_3": "",
"shipping_address_line_4": "",
"shipping_address_city": "New York",
"shipping_address_state": "NY",
"shipping_address_postal_code": "10001",
"shipping_method": "Ground",
"shipping_provider": "UPS",
"shipped_on": "2026-01-18",
"tracking_numbers": "1Z999AA10123456784",
"shipping_total": 5.00,
"customer_user_groups": "Wholesale"
}
]| Field | Type | Description |
|---|---|---|
order_id | integer | Parent order ID. |
order_date | string | Date the order was placed. |
customer_company | string | Customer company name. |
customer_name | string | Customer full name. |
customer_username | string | Customer username. |
item_id | integer | Line item ID. |
item_status | string | Current item status. |
product_name | string | Product name. |
product_item_number | string | Product item/SKU number. |
product_model_number | string | Product model number. |
quantity | integer | Ordered quantity. |
item_total | decimal | Line item total. |
shipping_address_line_1 | string | Shipping address line 1. |
shipping_address_line_2 | string | Shipping address line 2. |
shipping_address_line_3 | string | Shipping address line 3. |
shipping_address_line_4 | string | Shipping address line 4. |
shipping_address_city | string | Shipping city. |
shipping_address_state | string | Shipping state/province. |
shipping_address_postal_code | string | Shipping postal/ZIP code. |
shipping_method | string | Shipping service level. |
shipping_provider | string | Shipping carrier name. |
shipped_on | date | Ship date (null if not shipped). |
tracking_numbers | string | Tracking numbers. |
shipping_total | decimal | Shipping cost for this item. |
customer_user_groups | string | Customer user group. |
Product Sales Report
Sales aggregated by product.
GET /api/v2/report/product_salesExample Response
[
{
"storefront_id": 1,
"storefront": "Retail Print Site",
"product_id": 42,
"category_name": "Business Cards",
"product_name": "Standard Business Cards",
"quantity": 25000,
"order_count": 87,
"sales_total": 4350.00
}
]| Field | Type | Description |
|---|---|---|
storefront_id | integer | Storefront ID. |
storefront | string | Storefront name. |
product_id | integer | Product ID. |
category_name | string | Product category. |
product_name | string | Product name. |
quantity | integer | Total units ordered. |
order_count | integer | Number of orders containing this product. |
sales_total | decimal | Total revenue from this product. |
Promotion Code Report
Promotion code usage and discount totals.
GET /api/v2/report/promotion_codeExample Response
[
{
"code": "SUMMER2026",
"storefront_id": 1,
"storefront": "Retail Print Site",
"description": "Summer Sale 15% Off",
"expiration": "2026-09-01",
"order_count": 34,
"discount_total": 512.40
}
]| Field | Type | Description |
|---|---|---|
code | string | Promotion code. |
storefront_id | integer | Storefront ID. |
storefront | string | Storefront name. |
description | string | Promotion description. |
expiration | string | Expiration date. |
order_count | integer | Number of orders using this code. |
discount_total | decimal | Total discount amount applied. |
Customer List Report
Customer list with order and sales summaries. Includes marketing opt-in status.
GET /api/v2/report/customer_listExample Response
[
{
"storefront_id": 1,
"storefront": "Retail Print Site",
"customer_id": 12345,
"customer_company": "Acme Corp",
"customer_first_name": "Jane",
"customer_last_name": "Smith",
"customer_email": "jane@example.com",
"customer_username": "janesmith",
"customer_last_login_on": "2026-01-15",
"customer_created_on": "2025-06-01",
"order_count": 12,
"sales_total": 548.70,
"customer_marketing_emails": true
}
]| Field | Type | Description |
|---|---|---|
storefront_id | integer | Storefront ID. |
storefront | string | Storefront name. |
customer_id | integer | Customer ID. |
customer_company | string | Customer company name. |
customer_first_name | string | First name. |
customer_last_name | string | Last name. |
customer_email | string | Email address. |
customer_username | string | Username. |
customer_last_login_on | date | Last login date. |
customer_created_on | date | Account creation date. |
order_count | integer | Total orders placed in the date range. |
sales_total | decimal | Total sales amount. |
customer_marketing_emails | boolean | Whether the customer opted in to marketing emails. |
Customer Sales Report
Sales breakdown by customer with contact details.
GET /api/v2/report/customer_salesExample Response
[
{
"storefront_id": 1,
"storefront": "Retail Print Site",
"customer_id": 12345,
"customer_company": "Acme Corp",
"customer_first_name": "Jane",
"customer_last_name": "Smith",
"customer_email": "jane@example.com",
"customer_username": "janesmith",
"customer_last_login_on": "2026-01-15",
"customer_created_on": "2025-06-01",
"order_count": 12,
"sales_total": 548.70
}
]| Field | Type | Description |
|---|---|---|
storefront_id | integer | Storefront ID. |
storefront | string | Storefront name. |
customer_id | integer | Customer ID. |
customer_company | string | Customer company name. |
customer_first_name | string | First name. |
customer_last_name | string | Last name. |
customer_email | string | Email address. |
customer_username | string | Username. |
customer_last_login_on | string | Last login date. |
customer_created_on | string | Account creation date. |
order_count | integer | Number of orders. |
sales_total | decimal | Total sales amount. |
Shipping Report
Shipping costs aggregated by carrier and service level.
GET /api/v2/report/shippingExample Response
[
{
"storefront_id": 1,
"storefront": "Retail Print Site",
"provider": "UPS",
"description": "Ground",
"shipping_total": 1250.00,
"order_count": 312
}
]| Field | Type | Description |
|---|---|---|
storefront_id | integer | Storefront ID. |
storefront | string | Storefront name. |
provider | string | Shipping carrier name. |
description | string | Shipping service description. |
shipping_total | decimal | Total shipping charges. |
order_count | integer | Number of orders using this shipping method. |
Sales Rep Report
Sales performance by representative.
GET /api/v2/report/sales_repExample Response
[
{
"storefront_id": 1,
"storefront": "Retail Print Site",
"sales_rep_id": 100,
"sales_rep_name": "John Doe",
"order_count": 45,
"order_average": 62.30,
"order_total": 2803.50
}
]| Field | Type | Description |
|---|---|---|
storefront_id | integer | Storefront ID. |
storefront | string | Storefront name. |
sales_rep_id | integer | Sales rep customer ID. |
sales_rep_name | string | Sales rep display name. |
order_count | integer | Number of orders assigned to this rep. |
order_average | decimal | Average order value for this rep. |
order_total | decimal | Total revenue for this rep. |
Saved Projects Report
Customers with saved projects (designs not yet ordered).
GET /api/v2/report/saved_projectsExample Response
[
{
"storefront_id": 1,
"storefront": "Retail Print Site",
"customer_id": 12345,
"customer_company": "Acme Corp",
"customer_first_name": "Jane",
"customer_last_name": "Smith",
"customer_email": "jane@example.com",
"customer_username": "janesmith",
"project_count": 3
}
]| Field | Type | Description |
|---|---|---|
storefront_id | integer | Storefront ID. |
storefront | string | Storefront name. |
customer_id | integer | Customer ID. |
customer_company | string | Customer company name. |
customer_first_name | string | First name. |
customer_last_name | string | Last name. |
customer_email | string | Email address. |
customer_username | string | Username. |
project_count | integer | Number of saved projects. |
Conversion Rate Report
Storefront conversion funnel metrics.
GET /api/v2/report/conversion_rateExample Response
[
{
"storefront": "Retail Print Site",
"total_sessions": 5200,
"added_to_cart": 1040,
"reached_checkout": 520,
"converted": 312
}
]| Field | Type | Description |
|---|---|---|
storefront | string | Storefront name. |
total_sessions | integer | Total visitor sessions. |
added_to_cart | integer | Sessions where items were added to cart. |
reached_checkout | integer | Sessions that reached the checkout page. |
converted | integer | Sessions that completed a purchase. |
Affiliates Report
Affiliate referral performance.
GET /api/v2/report/affiliatesExample Response
[
{
"affiliate_id": 50,
"company": "Print Partners Inc",
"affiliate_code": "PARTNER50",
"first_name": "Bob",
"last_name": "Johnson",
"email": "bob@printpartners.com",
"order_count": 28,
"order_total": 1890.00,
"affiliate_total": 189.00
}
]| Field | Type | Description |
|---|---|---|
affiliate_id | integer | Affiliate ID. |
company | string | Affiliate company name. |
affiliate_code | string | Affiliate referral code. |
first_name | string | Affiliate first name. |
last_name | string | Affiliate last name. |
email | string | Affiliate email. |
order_count | integer | Number of referred orders. |
order_total | decimal | Total revenue from referred orders. |
affiliate_total | decimal | Total commission earned. |
Related Pages
- Reports — run the same reports interactively in the admin UI
- Storefronts — discover storefront IDs required by all report endpoints