LUCKY DEALSCORP. / PRINT PRODUCTION

PARTNER DOCUMENTATION / V1

Order Intake API

API access is being rolled out to partners; CSV and email order intake are available today.

A straightforward order workflow for your print-on-demand network.

Base URL: https://api.luckydeals-corp.com/v1

Sandbox credentials on request. Contact our team for access.

Authenticate requests with your API key in the X-API-Key header. JSON requests use Content-Type: application/json. All examples below are illustrative.

POST /orders

Create an order. Image URLs must point to JPG, PNG or TIFF files at a minimum of 150 DPI at print size. Use tier standard or premium, and shipping method standard or express.

Example request

POST /v1/orders · X-API-Key: YOUR_SANDBOX_KEY

{
  "external_order_id": "partner-1001",
  "shipping": {
    "name": "Alex Morgan",
    "address1": "100 Example Street",
    "address2": "Unit 2",
    "city": "Toronto",
    "province": "ON",
    "postal_code": "M5V 2T6",
    "country": "CA",
    "phone": "+1 416-555-0100",
    "email": "alex@example.com"
  },
  "items": [
    {
      "sku": "CANVAS-STD-16x20-125",
      "quantity": 1,
      "image_url": "https://example.com/artwork.jpg",
      "tier": "standard"
    }
  ],
  "shipping_method": "standard"
}

Example response

{
  "order_id": "ord_1001",
  "status": "received"
}

GET /orders/{order_id}

Retrieve an order. Status is one of received, in_production, shipped or cancelled. Tracking is available when shipped.

Example request

GET /v1/orders/ord_1001 · X-API-Key: YOUR_SANDBOX_KEY

No request body.

Example response

{
  "order_id": "ord_1001",
  "status": "shipped",
  "tracking": {
    "carrier": "UPS",
    "tracking_number": "EXAMPLE-TRACKING-001",
    "url": "https://www.ups.com/track?tracknum=EXAMPLE-TRACKING-001"
  }
}

POST /orders/{order_id}/cancel

Cancellation is allowed only before in_production. Otherwise the API returns HTTP 409 Conflict.

Example request

POST /v1/orders/ord_1001/cancel · X-API-Key: YOUR_SANDBOX_KEY

{}

Example response

{
  "order_id": "ord_1001",
  "status": "cancelled"
}

Example HTTP 409 response:

{
  "error": "conflict",
  "message": "Order can no longer be cancelled."
}

Status-change webhook

We POST to your partner URL on every status change. Payloads are signed with HMAC-SHA256 in the X-Signature header. Confirm signing-secret provisioning and signature encoding with our team during onboarding.

Example request to your endpoint

POST https://partner.example.com/webhooks/orders

Content-Type: application/json
X-Signature: <HMAC-SHA256 signature>

{
  "order_id": "ord_1001",
  "external_order_id": "partner-1001",
  "status": "shipped",
  "tracking": {
    "carrier": "UPS",
    "tracking_number": "EXAMPLE-TRACKING-001",
    "url": "https://www.ups.com/track?tracknum=EXAMPLE-TRACKING-001"
  },
  "timestamp": "2026-01-15T15:30:00Z"
}

Example partner acknowledgment

Illustrative HTTP 200 JSON response from your endpoint:

{
  "received": true
}

SKU reference

Format: PRODUCT-TIER-SIZE-DEPTH. Canvas depth codes use hundredths of an inch: 125 = 1.25", 150 = 1.5". Framed SKUs use a finish suffix; paper print SKUs omit depth.

STD = Standard; PRM = Premium Giclée; BLK = black floater frame.

Error codes

HTTP codeMeaning
400Bad request — invalid or missing request fields.
401Unauthorized — missing or invalid API key.
404Not found — the requested order does not exist.
409Conflict — the order cannot be cancelled in its current state.
429Too many requests — rate limit reached; retry later.

Prefer a batch workflow?

CSV batch upload and SFTP are available on request. CSV and email order intake are available today.

Discuss your integration