The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"schemaVersion": 1,
"trigger": {
"id": "t_shop_order",
"type": "webhook",
"graphCoordinates": {
"x": 0,
"y": 0
},
"appEvent": "shopify.order.created",
"options": {
"path": "/webhooks/shopify-pod-order",
"method": "POST",
"enabled": true
}
},
"nodes": [
{
"id": "n_webhook",
"name": "Shopify Order Created",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"position": [
0,
0
],
"parameters": {
"httpMethod": "POST",
"path": "shopify-pod-order",
"responseMode": "onReceived"
}
},
{
"id": "n_extract",
"name": "Extract Order",
"type": "n8n-nodes-base.set",
"typeVersion": 1,
"position": [
240,
0
],
"parameters": {
"values": {
"string": [
{
"name": "orderId",
"value": "={{ $json.id }}"
},
{
"name": "isPod",
"value": "={{ String(($json.line_items || []).some(li => li.vendor === 'Printful')) }}"
}
]
}
}
},
{
"id": "n_if_pod",
"name": "Is POD?",
"type": "n8n-nodes-base.if",
"typeVersion": 2,
"position": [
480,
0
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.isPod }}",
"operation": "equal",
"value2": "true"
}
]
}
}
},
{
"id": "n_printful_create",
"name": "Printful Order",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [
720,
-120
],
"parameters": {
"method": "POST",
"url": "https://api.printful.com/orders",
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "external_id",
"value": "={{ $json.orderId }}"
},
{
"name": "shipping",
"value": "STANDARD"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"id": "n_wait_fulfilled",
"name": "Wait for Fulfilment",
"type": "n8n-nodes-base.wait",
"typeVersion": 1,
"position": [
960,
-120
],
"parameters": {
"resume": "webhook",
"options": {
"webhookSuffix": "printful-fulfilled"
}
}
},
{
"id": "n_shopify_update",
"name": "Patch Shopify Tracking",
"type": "n8n-nodes-base.shopify",
"typeVersion": 1,
"position": [
1200,
-120
],
"parameters": {
"resource": "order",
"operation": "update",
"orderId": "={{ $node['Extract Order'].json.orderId }}",
"updateFields": {
"fulfillmentStatus": "fulfilled",
"trackingCompany": "={{ $json.carrier }}",
"trackingNumber": "={{ $json.tracking_number }}"
}
},
"credentials": {
"shopifyApi": {
"name": "<your credential>"
}
}
},
{
"id": "n_noop",
"name": "Non-POD Order",
"type": "n8n-nodes-base.noOp",
"typeVersion": 1,
"position": [
720,
120
],
"parameters": {}
}
],
"connections": {
"n_webhook": {
"main": [
[
{
"node": "n_extract",
"type": "main",
"index": 0
}
]
]
},
"n_extract": {
"main": [
[
{
"node": "n_if_pod",
"type": "main",
"index": 0
}
]
]
},
"n_if_pod": {
"true": [
[
{
"node": "n_printful_create",
"type": "main",
"index": 0
}
]
],
"false": [
[
{
"node": "n_noop",
"type": "main",
"index": 0
}
]
]
},
"n_printful_create": {
"main": [
[
{
"node": "n_wait_fulfilled",
"type": "main",
"index": 0
}
]
]
},
"n_wait_fulfilled": {
"main": [
[
{
"node": "n_shopify_update",
"type": "main",
"index": 0
}
]
]
}
},
"groups": [
{
"id": "g_main",
"title": "Main",
"graphCoordinates": {
"x": 0,
"y": 0
},
"blockIds": [
"n_webhook",
"n_extract",
"n_if_pod",
"n_printful_create",
"n_wait_fulfilled",
"n_shopify_update",
"n_noop"
]
}
],
"variables": [],
"events": [],
"settings": {
"executionOrder": "v1"
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
httpHeaderAuthshopifyApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Flow. Uses httpRequest, shopify. Webhook trigger; 7 nodes.
Source: https://github.com/shaktisingh204/wachat/blob/b8e2faf654de7b4567d54c9356576754107c78fd/templates/printful-print-on-demand/flow.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
03.01 Predictive Inventory PO Generation. Uses shopify, httpRequest. Webhook trigger; 5 nodes.
01.05 Omnichannel Sales Aggregation & Data Warehousing. Uses shopify, httpRequest, snowflake. Webhook trigger; 7 nodes.
This template is designed for developers, businesses, and service providers who need to programmatically check Calendly availability. It's perfect for: Web developers building custom booking interface
Never lose a prospect to a missed call again. This workflow sends an automatic "sorry we missed you" SMS within seconds, follows up 2 hours later if there's no reply, and enrolls unresponsive contacts
Manualtrigger Workflow. Uses httpRequest, shopify. Event-driven trigger; 13 nodes.