API Documentation
The EGFULFILL API lets you programmatically create and manage print-on-demand orders, retrieve product catalogs, and receive real-time fulfillment events via webhooks. All requests and responses use JSON.
api.egfulfill.comv1JSONBearer tokenAuthentication
All API requests must include your secret key in the Authorization header using Bearer token format. You can generate and manage API keys from Settings → API Keys.
Base URL & versioning
Prefix all endpoints with the versioned base URL. We use path-based versioning to ensure backward compatibility — breaking changes are always released as new versions.
Errors
EGFULFILL uses standard HTTP status codes. All error responses return a JSON body with a code and a human-readable message.
| Status | Meaning |
|---|---|
200 | OK — request succeeded |
201 | Created — resource was created |
400 | Bad request — invalid or missing parameters |
401 | Unauthorized — missing or invalid API key |
404 | Not found — resource doesn't exist |
422 | Unprocessable — validation failed |
429 | Rate limited — too many requests |
500 | Server error — try again later |
Rate limits
Requests are limited to 120 per minute per API key. Your current usage is returned in every response via the headers below. When limited, wait until the X-RateLimit-Reset Unix timestamp before retrying.
Products
Retrieve products from the EGFULFILL catalog, including variants, pricing, and available print areas.
Returns a paginated list of all available print-on-demand products.
| Name | Type | Description | |
|---|---|---|---|
| limit | integer | optional | Results per page (default: 20, max: 100) |
| page | integer | optional | Page number (default: 1) |
| category | string | optional | Filter by category slug, e.g. apparel |
Returns a single product with all variants, print areas, and available colors/sizes.
Orders
Create and manage fulfillment orders. Once submitted, orders are automatically routed to production.
Submits a new order for fulfillment. The order is immediately queued for production upon creation.
| Name | Type | Description | |
|---|---|---|---|
| external_id | string | required | Your store's order ID for reference |
| shipping | object | required | Recipient address object |
| items | array | required | Array of line item objects |
| items[].variant_id | string | required | Product variant ID |
| items[].design_url | string | required | Public URL to print file (PNG or SVG) |
| items[].quantity | integer | required | Quantity (min: 1) |
| items[].print_area | string | optional | front, back, or sleeve (default: front) |
Returns current status and tracking info for a specific order.
| Name | Type | Description | |
|---|---|---|---|
| status | string | optional | Filter: pending in_production shipped delivered |
| from | string | optional | ISO 8601 date — returns orders after this date |
| limit | integer | optional | Default: 20, max: 100 |
Cancels an order. Only possible while the status is pending.
in_production, it can no longer be cancelled via the API.
Webhooks
EGFULFILL pushes real-time events to your server so you don't have to poll. Configure your webhook endpoint URL in Settings → Webhooks.
| Event | Description |
|---|---|
order.created | A new order was received |
order.in_production | Order moved into production |
order.shipped | Order dispatched — includes tracking number |
order.delivered | Carrier confirmed delivery |
order.cancelled | Order was cancelled |
Signature verification
Verify every incoming webhook by checking the X-EGFULFILL-Signature header — an HMAC-SHA256 of the raw request body signed with your webhook secret. Your secret is in Settings → Webhooks.