Introduction
Welcome to the GW Prints Print-on-Demand API. This API allows you to integrate your e-commerce store with our premium custom metal wall art supply chain. Automate product mockups, order creation, shipment tracking, and fulfillment.
https://gwprints.com/api/v1
All API requests must be made over HTTPS. Calls made over HTTP will be rejected. The API uses RESTful conventions and returns JSON-encoded responses with standard HTTP response codes.
200 for success, 400 for bad requests, 401 for unauthorized, 404 for not found, and 429 for rate limiting.
Authentication
All API requests require an API key passed in the request header. You can obtain your API key from the Client Dashboard.
Rate Limits
To ensure fair usage, we enforce the following rate limits per API key:
| Plan | Requests/Minute | Requests/Day | Concurrent |
|---|---|---|---|
| Free / Sandbox | 30 | 1,000 | 5 |
| Standard | 120 | 10,000 | 20 |
| Enterprise | 600 | 100,000 | 50 |
Rate limit headers are included in every response:
Error Handling
The API uses standard HTTP status codes and returns error details in JSON format:
| Code | Meaning |
|---|---|
200 | Success |
201 | Created (order submitted successfully) |
400 | Bad Request — invalid parameters |
401 | Unauthorized — invalid or missing API key |
403 | Forbidden — insufficient permissions |
404 | Not Found — resource doesn't exist |
429 | Too Many Requests — rate limit exceeded |
500 | Internal Server Error |
Products
List Categories
List Products / Product Detail
Orders
Create Order
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| external_order_id | string | Required | Your store's order reference ID |
| shipping_method | string | Optional | standard, expedited (default: standard) |
| recipient | object | Required | Shipping address object |
| recipient.name | string | Required | Recipient full name |
| recipient.phone | string | Required | Phone number with country code |
| recipient.address_line1 | string | Required | Street address |
| recipient.city | string | Required | City |
| recipient.state | string | Optional | State/Province |
| recipient.zip_code | string | Required | Postal code |
| recipient.country_code | string | Required | ISO 3166-1 alpha-2 code (e.g. US, GB) |
| items | array | Required | Array of order items |
| items[].image_url | string | Required | URL to your custom design image |
| items[].size | string | Optional | Specific size variant (e.g. M, L) |
| items[].quantity | integer | Required | Quantity (min: 1) |
| packing_slip | object | Optional | Custom white-label packing slip |
Get Order / List Orders
Pricing
Inventory & Shipping
Webhooks
Subscribe to real-time event notifications. When an event occurs (e.g., order shipped), we'll send an HTTP POST to your registered URL.
Supported Events
| Event | Trigger | Payload |
|---|---|---|
order.confirmed | Order accepted for production | Order ID, estimated time |
order.in_production | Production started | Order ID |
order.shipped | Package dispatched | Order ID, tracking number, carrier |
order.delivered | Package delivered | Order ID, delivery timestamp |
order.cancelled | Order cancelled | Order ID, reason |
inventory.low_stock | Stock below threshold | SKU, remaining quantity |
