Pixelmade Public API (1.0.0)

Download OpenAPI specification:

Programmatic access to Pixelmade — the print-on-demand supplier for custom diamond-painting and craft kits. Register kit designs as templates, look up products and DMC colors, place orders, and receive webhook notifications — from your own tools or an AI coding agent (Claude Code, ChatGPT, Codex).

Authentication. Every request needs a bearer token, scoped to your brand. Create and rotate tokens yourself in the brand portal under Developer (an admin grants API access first). Send it as Authorization: Bearer <token>.

Rate limit. 60 requests/minute per user by default; 429 with a Retry-After header when exceeded.

Orders and payment. For standard accounts, POST /orders creates a payable order in your brand portal (pending_payment) — paying it there is what sends it to production. The API never charges you or bypasses payment. Accounts on invoice terms submit straight to production and are billed by invoice.

Products

The catalog of kit products you can order and design against.

List products

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get a product

Authorizations:
bearerAuth
path Parameters
id
required
integer
Example: 1

Responses

Response samples

Content type
application/json
{
  • "id": 1,
  • "name": "30x40cm Round Diamond Painting Kit",
  • "category_name": "Diamond Painting",
  • "style_name": "Round",
  • "size_name": "30x40cm"
}

DMC Colors

The supported DMC color palette, for cross-referencing artwork.

List DMC colors

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Product Templates

Register a pre-designed kit so a storefront variant becomes orderable.

List / look up templates

Authorizations:
bearerAuth
query Parameters
slug
string

Filter to a single template by its slug (for idempotent lookups).

Responses

Response samples

Content type
application/json
{
  • "product_templates": [
    ]
}

Register or update a template (upsert by slug)

Registers a pre-designed kit and returns the pmt_ SKU that makes a storefront variant orderable. Re-posting the same slug updates it in place and keeps the SKU stable. The uploaded dithered_image is the production print file (1 pixel per drill cell, PNG or BMP).

Authorizations:
bearerAuth
Request Body schema: multipart/form-data
required
name
required
string
slug
required
string^[a-z0-9]+(?:-[a-z0-9]+)*$
catalog_product_id
required
integer
dithered_image
required
string <binary>

Production print file — image/png or image/bmp, ≤ 10 MB.

presentation_image
string <binary>

Hero/mockup image (png/jpeg/webp), ≤ 5 MB.

original_image
string <binary>

Pre-dither source image (png/jpeg/webp), ≤ 5 MB.

active
boolean
Default: true

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "uid": "string",
  • "external_sku": "pmt_a1b2c3",
  • "slug": "string",
  • "name": "string",
  • "active": true,
  • "catalog_product_id": 0,
  • "chart_sha256": "string",
  • "dithered_image_attached": true
}

Orders

Place and manage orders. Standard accounts pay in the brand portal.

Create an order

Standard accounts: the order lands in your brand portal's Orders section as pending_payment with a portal_url — paying it there sends it to production. Invoice-term accounts submit straight to production.

Authorizations:
bearerAuth
Request Body schema: application/json
required
reference_number
required
string

Your internal id; unique per brand.

required
object (CustomerInfo)
required
Array of objects non-empty

Responses

Request samples

Content type
application/json
{
  • "reference_number": "my_order_001",
  • "customer_info": {
    },
  • "lines": []
}

Response samples

Content type
application/json
{
  • "id": 100,
  • "reference_number": "my_order_001",
  • "state": "pending_payment",
  • "payment_status": "pending_payment",
  • "created_at": "2019-08-24T14:15:22Z",
  • "customer_info": {
    },
  • "lines": [
    ],
  • "tracking_info": [
    ],
  • "allow_cancel": true,
  • "cancel_type": "no_cost"
}

Estimate production time + shipping

Quote production/shipping days for a destination and set of line quantities.

Authorizations:
bearerAuth
Request Body schema: application/json
required
object
Array of objects

Responses

Request samples

Content type
application/json
{
  • "customer_info": {
    },
  • "lines": [
    ]
}

Response samples

Content type
application/json
{
  • "total_pieces": 2,
  • "estimated_production_days_min": 7,
  • "estimated_production_days_max": 10,
  • "shipping_info": [
    ]
}

Get an order

Authorizations:
bearerAuth
path Parameters
id
required
integer
Example: 100

Responses

Response samples

Content type
application/json
{
  • "id": 100,
  • "reference_number": "my_order_001",
  • "state": "pending_payment",
  • "payment_status": "pending_payment",
  • "created_at": "2019-08-24T14:15:22Z",
  • "customer_info": {
    },
  • "lines": [
    ],
  • "tracking_info": [
    ],
  • "allow_cancel": true,
  • "cancel_type": "no_cost"
}

Cancel an order

Cancellation is only possible up to a point — check allow_cancel. If the order is already in production, cancel_type is production_cost; if too far along, returns 422.

Authorizations:
bearerAuth
path Parameters
id
required
integer
Example: 100

Responses

Response samples

Content type
application/json
{
  • "id": 100,
  • "reference_number": "my_order_001",
  • "state": "pending_payment",
  • "payment_status": "pending_payment",
  • "created_at": "2019-08-24T14:15:22Z",
  • "customer_info": {
    },
  • "lines": [
    ],
  • "tracking_info": [
    ],
  • "allow_cancel": true,
  • "cancel_type": "no_cost"
}

Webhooks

Get notified when order events happen (e.g. shipped).

List webhooks

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
[]

Register a webhook

Register up to 5 webhooks per brand. We POST order events to your address.

Authorizations:
bearerAuth
Request Body schema: application/json
required
address
required
string <uri>
event
required
string
secret
string

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Get a webhook

Authorizations:
bearerAuth
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{}

Delete a webhook

Authorizations:
bearerAuth
path Parameters
id
required
integer

Responses

Response samples

Content type
application/json
{
  • "errors": [
    ]
}