Skip to main content
Printful is Droplinked’s print-on-demand production and fulfillment service. The integration covers catalog browsing, embedded design workflows, mockup generation, shipping rate calculation, and order creation. This integration powers the POD (Print-on-Demand) subsystem.

Configuration

PRINTFUL_API_KEY=...
PRINTFUL_STORE_ID=...
VarWhere to get it
PRINTFUL_API_KEYPrintful admin dashboard → Settings → API
PRINTFUL_STORE_IDPrintful stores section
These values are loaded server-side only. Never expose them to the frontend.

Client initialization

The Printful client is initialized with PRINTFUL_API_KEY attached as a Bearer token, shared across all Printful service modules.

Reference docs

API surface

Catalog

InternalPrintfulNotes
GET /printful/categoriesGET /categoriesid, parent_id, image_url, catalog_id, title
GET /printful/products?categoryId=...GET /categories/{id}id, variants, title, brand
GET /pod/product/{id}GET /products/{id}product, variants, files, options, techniques
GET /printful/shipping/{id}GET /v2/catalog-products/{id}/availability?selling_region_name=allavailability, regions, warehouse_locations

Designer

InternalPrintfulNotes
POST /printful/noncePOST /embedded-designer/noncesReturns nonce + expires_at. Outgoing: template_id (optional), scope
GET /pod/available-variants/{provider}/{productId}/{templateId}GET /products/{id}Used after the designer creates a template

Mockups

InternalPrintful
POST /printful/generate/mockupPOST /mockup-generator/create-task/{id}
Returns task_key, result_url, status.

Orders

  • Printful endpoint: POST /orders
  • Sent: recipient, items[], variant_id, files[] (artwork URLs, positions, template references), external_id, shipping, store_id

Shipping rates

  • Printful endpoint: POST /shipping/rates
  • Sent: recipient.address, items[].quantity, items[].variant_id
  • Returned: rate, carrier, service, minDeliveryDays / maxDeliveryDays

What we store (POD object)

type ProductPodV2 = {
  artwork: string | null
  artwork2: string | null
  artwork_position: string | null
  artwork2_position: string | null
  printful_template_id: number | null
  pod_blank_product_id: number | null
  prodviderID: string | null
  m2m_positions_options: ProductsM2MPositions[]
  m2m_positions: string[]
  m2m_services: string[]
  custome_external_id: string | null
  printful_option_data: PrintfulOptionData[]
  positions: ProductPodPositions | null
  technique: string | null
}
Why we store it:
  • artwork / artwork positions — needed during Printful file upload at order creation
  • printful_template_id — required to retrieve variant-specific print files
  • pod_blank_product_id — core product ID for Printful orders
  • option/position data — required for mockup generation + order fulfillment
  • technique — printing method (DTG, sublimation, embroidery, etc.)

Flow diagram

  • Order lifecycle — where Printful slots into product processing.
  • EasyPost — the parallel path for non-POD physical goods.