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 →
{
"createdAt": "2025-10-22T08:50:19.845Z",
"updatedAt": "2025-10-26T08:23:56.000Z",
"id": "9l6gg6HzfpfV9bIj",
"name": "Orders",
"active": true,
"isArchived": false,
"nodes": [
{
"parameters": {
"path": "api/orders",
"responseMode": "responseNode",
"options": {
"responseHeaders": {
"entries": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
}
},
"name": "Orders List Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-96,
-16
],
"id": "2e52da24-31a6-4845-b0ef-7d4f59d4e4cb"
},
{
"parameters": {
"operation": "executeQuery",
"query": "SELECT \n o.order_id,\n o.vendor_id,\n o.order_date,\n o.total_cost,\n o.delivery_date,\n o.status,\n v.vendor_name,\n v.contact_email,\n v.phone_number,\n v.vendor_icon_content,\n v.vendor_icon_type,\n v.vendor_icon_name,\n COUNT(DISTINCT op.component_id) as item_count,\n COALESCE(SUM(op.quantity_ordered * op.unit_cost), 0) as total_value\nFROM orders o\nLEFT JOIN vendors v ON v.vendor_id = o.vendor_id\nLEFT JOIN order_parts op ON op.order_id = o.order_id\nGROUP BY \n o.order_id, \n o.vendor_id, \n o.order_date, \n o.total_cost, \n o.delivery_date, \n o.status, \n v.vendor_name, \n v.contact_email,\n v.phone_number,\n v.vendor_icon_content,\n v.vendor_icon_type,\n v.vendor_icon_name\nORDER BY o.order_date DESC;\n",
"options": {}
},
"name": "Get Orders Query",
"type": "n8n-nodes-base.postgres",
"typeVersion": 2.6,
"position": [
128,
-16
],
"id": "8a3e664b-4dfb-4506-8bbd-675a72bddfaf",
"credentials": {
"postgres": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"path": "api/orders/detail",
"responseMode": "responseNode",
"options": {
"responseHeaders": {
"entries": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
}
},
"name": "Order Detail Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-96,
208
],
"id": "3579911e-8f50-49e0-a1bd-287097524911"
},
{
"parameters": {
"jsCode": "return [{ json: { order_id: $json.query.order_id } }];"
},
"name": "Extract Order ID",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
128,
208
],
"id": "0913143b-3d4e-4a2b-8de4-8d193bcbb5dc"
},
{
"parameters": {
"operation": "executeQuery",
"query": "SELECT \n o.order_id,\n o.vendor_id,\n o.order_date,\n o.total_cost,\n o.delivery_date,\n o.status,\n v.vendor_name,\n v.contact_email,\n v.phone_number,\n v.vendor_icon_content,\n v.vendor_icon_type,\n v.vendor_icon_name,\n (\n SELECT json_agg(\n json_build_object(\n 'order_part_id', op.order_part_id,\n 'component_id', op.component_id,\n 'component_name', c.name,\n 'file_name', \n 'http://192.168.0.7:5678/webhook/image?filename=component_' || op.component_id || '.' || COALESCE(c.image_type, 'jpeg'),\n 'category_name', cat.category_name,\n 'quantity_ordered', op.quantity_ordered,\n 'unit_cost', op.unit_cost,\n 'url', op.url,\n 'total', op.quantity_ordered * op.unit_cost\n )\n )\n FROM order_parts op\n LEFT JOIN components c ON c.component_id = op.component_id\n LEFT JOIN categories cat ON cat.category_id = c.category_id\n WHERE op.order_id = o.order_id\n ) AS order_items\nFROM orders o\nLEFT JOIN vendors v ON v.vendor_id = o.vendor_id\nWHERE o.order_id = {{ $json.order_id }};",
"options": {}
},
"name": "Get Order Detail Query",
"type": "n8n-nodes-base.postgres",
"typeVersion": 2.6,
"position": [
352,
208
],
"id": "d77a1554-5d5f-4056-89d9-8cdafbbb5039",
"credentials": {
"postgres": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"respondWith": "allIncomingItems",
"options": {}
},
"name": "Respond1",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.4,
"position": [
800,
208
],
"id": "c8aa440f-40e5-48e5-a442-669785be1419"
},
{
"parameters": {
"httpMethod": "POST",
"path": "api/orders/create",
"responseMode": "responseNode",
"options": {
"responseHeaders": {
"entries": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
}
},
"name": "Create Order Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-96,
-240
],
"id": "bf1ef991-6de7-4ec4-999c-0084b9a32299"
},
{
"parameters": {
"jsCode": "const body = $json.body;\nconst totalCost = body.items.reduce((sum, item) => sum + (item.quantity * item.unit_cost), 0);\n\nreturn [{\n json: {\n vendor_id: body.vendor_id,\n order_date: body.order_date,\n total_cost: totalCost,\n status: 'Pending',\n items: body.items\n }\n}];"
},
"name": "Prepare Order Data",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
128,
-240
],
"id": "d8322b35-7194-4347-82fd-ccccbd2f7edb"
},
{
"parameters": {
"operation": "executeQuery",
"query": "INSERT INTO orders (vendor_id, order_date, total_cost, status)\nVALUES ({{ $json.vendor_id }}, '{{ $json.order_date }}', {{ $json.total_cost }}, '{{ $json.status }}')\nRETURNING order_id, vendor_id, order_date, total_cost, status;",
"options": {}
},
"name": "Insert Order",
"type": "n8n-nodes-base.postgres",
"typeVersion": 2.6,
"position": [
352,
-240
],
"id": "e5e5cbb6-2b8a-4164-a621-ba58f0cad202",
"credentials": {
"postgres": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "const orderId = $input.first().json.order_id;\nconst items = $('Prepare Order Data').first().json.items;\n\nreturn items.map(item => ({\n json: {\n order_id: orderId,\n component_id: item.component_id,\n quantity_ordered: item.quantity,\n unit_cost: item.unit_cost,\n url: item.url || ''\n }\n}));"
},
"name": "Prepare Order Parts",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
576,
-240
],
"id": "c3ba2324-ce12-473e-a891-8bab84e42a47"
},
{
"parameters": {
"operation": "executeQuery",
"query": "INSERT INTO order_parts (order_id, component_id, quantity_ordered, unit_cost, url)\nVALUES ({{ $json.order_id }}, {{ $json.component_id }}, {{ $json.quantity_ordered }}, {{ $json.unit_cost }}, '{{ $json.url }}');",
"options": {}
},
"name": "Insert Order Parts",
"type": "n8n-nodes-base.postgres",
"typeVersion": 2.6,
"position": [
800,
-240
],
"id": "720eba00-8625-46b2-bafa-349709397a2e",
"credentials": {
"postgres": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "const orderId = $('Insert Order').first().json.order_id;\nreturn [{ json: { success: true, message: 'Order created successfully', order_id: orderId } }];"
},
"name": "Format Response",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1024,
-240
],
"id": "5b54b763-0e02-4ac0-b4e9-7f6fddcdb807"
},
{
"parameters": {
"respondWith": "allIncomingItems",
"options": {}
},
"name": "Respond2",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.4,
"position": [
1248,
-240
],
"id": "3e90a4cc-1f67-4325-92be-ded008878c01"
},
{
"parameters": {
"httpMethod": "POST",
"path": "api/orders/delete",
"responseMode": "responseNode",
"options": {
"responseHeaders": {
"entries": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
}
},
"name": "Delete Order Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-96,
432
],
"id": "d7a7cda9-2f85-481e-93ee-b65bead4e011"
},
{
"parameters": {
"operation": "executeQuery",
"query": "DELETE FROM order_parts WHERE order_id = {{ $json.order_id }};",
"options": {}
},
"name": "Delete Order Parts",
"type": "n8n-nodes-base.postgres",
"typeVersion": 2.6,
"position": [
352,
432
],
"id": "da00122b-f27c-4a71-8fd3-a6b5786016cb",
"credentials": {
"postgres": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "executeQuery",
"query": "DELETE FROM orders WHERE order_id = {{$('Extract Order ID1').item.json.order_id }};",
"options": {}
},
"name": "Delete Order",
"type": "n8n-nodes-base.postgres",
"typeVersion": 2.6,
"position": [
576,
432
],
"id": "fee2885a-5f9d-42a6-9dfb-c668c5129a7f",
"credentials": {
"postgres": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "return [{ json: { success: true, message: 'Order deleted successfully' } }];"
},
"name": "Format Delete Response",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
800,
432
],
"id": "1b238be4-1703-45b0-9905-8ab93422527f"
},
{
"parameters": {
"jsCode": "return [{ json: { order_id: $json.body.order_id } }];"
},
"name": "Extract Order ID1",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
128,
432
],
"id": "036fc5ef-bb35-495b-9b0d-82eb9b2445b5"
},
{
"parameters": {
"respondWith": "allIncomingItems",
"options": {}
},
"name": "Respond3",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.4,
"position": [
1024,
432
],
"id": "85a2bcda-a48e-405d-84ee-7cad7a1ab0c6"
},
{
"parameters": {
"path": "api/orders/metadata",
"responseMode": "responseNode",
"options": {
"responseHeaders": {
"entries": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Access-Control-Allow-Origin",
"value": "*"
}
]
}
}
},
"name": "Orders Metadata Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-96,
656
],
"id": "114236b6-0c0d-455e-bdf4-3818e0eb8b7b"
},
{
"parameters": {
"operation": "executeQuery",
"query": "SELECT \n (SELECT COUNT(*) FROM orders) as total_orders,\n (SELECT COUNT(*) FROM orders WHERE status = 'Pending') as pending_orders,\n (SELECT COUNT(*) FROM orders WHERE status = 'Delivered') as delivered_orders,\n (SELECT COALESCE(SUM(total_cost), 0) FROM orders) as total_spent;",
"options": {}
},
"name": "Get Stats Metadata",
"type": "n8n-nodes-base.postgres",
"typeVersion": 2.6,
"position": [
128,
656
],
"id": "26b02ac1-8afe-4279-bdd5-863c58bcb16b",
"credentials": {
"postgres": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"respondWith": "allIncomingItems",
"options": {}
},
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.4,
"position": [
576,
656
],
"id": "6b443d92-fb4f-4f35-aeb8-e0c7679db46f"
},
{
"parameters": {
"jsCode": "const metadata =$input.first().json;\nconst response = {\n success: true,\n metadata: {\n totalOrders: parseInt(metadata.total_orders || 0),\n pendingOrders: parseInt(metadata.pending_orders || 0),\n deliveredOrders: parseInt(metadata.delivered_orders || 0),\n totalSpent: parseFloat(metadata.total_spent || 0)\n }\n};\n\nreturn [{ json: response }];"
},
"name": "Format Response1",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
352,
656
],
"id": "0787c8be-c33e-484a-86ea-b1c88e54bba2"
},
{
"parameters": {
"jsCode": "const keysToRemove = ['vendor_icon_content', 'vendor_icon_type'];\n\nreturn $input.all().map(item => {\n const json = {...item.json};\n keysToRemove.forEach(k => delete json[k]);\n \n // Optionally recalculate or add the filename from existing properties\n json.filename = `http://192.168.0.7:5678/webhook/image?filename=vendor_${item.json.vendor_id}.${item.json.vendor_icon_type || 'jpeg'}`;\n\n return { json };\n});"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
352,
-16
],
"id": "bbb9f34e-2394-4d20-8a16-f7992c30380f",
"name": "Remove Image Info"
},
{
"parameters": {
"respondWith": "allIncomingItems",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.4,
"position": [
576,
-16
],
"id": "dfd02fa7-ac50-4ad3-9b3a-3b07dd2d18bf",
"name": "Respond to Webhook1"
},
{
"parameters": {
"jsCode": "const keysToRemove = ['vendor_icon_content', 'vendor_icon_type'];\n\nreturn $input.all().map(item => {\n const json = {...item.json};\n keysToRemove.forEach(k => delete json[k]);\n \n // Optionally recalculate or add the filename from existing properties\n json.filename = `http://192.168.0.7:5678/webhook/image?filename=vendor_${item.json.vendor_id}.${item.json.vendor_icon_type || 'jpeg'}`;\n\n return { json };\n});"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
576,
208
],
"id": "4adf8e26-a8b2-4202-a771-34b2ffb1cc61",
"name": "Remove Image Info1"
}
],
"connections": {
"Orders List Webhook": {
"main": [
[
{
"node": "Get Orders Query",
"type": "main",
"index": 0
}
]
]
},
"Get Orders Query": {
"main": [
[
{
"node": "Remove Image Info",
"type": "main",
"index": 0
}
]
]
},
"Order Detail Webhook": {
"main": [
[
{
"node": "Extract Order ID",
"type": "main",
"index": 0
}
]
]
},
"Extract Order ID": {
"main": [
[
{
"node": "Get Order Detail Query",
"type": "main",
"index": 0
}
]
]
},
"Get Order Detail Query": {
"main": [
[
{
"node": "Remove Image Info1",
"type": "main",
"index": 0
}
]
]
},
"Create Order Webhook": {
"main": [
[
{
"node": "Prepare Order Data",
"type": "main",
"index": 0
}
]
]
},
"Prepare Order Data": {
"main": [
[
{
"node": "Insert Order",
"type": "main",
"index": 0
}
]
]
},
"Insert Order": {
"main": [
[
{
"node": "Prepare Order Parts",
"type": "main",
"index": 0
}
]
]
},
"Prepare Order Parts": {
"main": [
[
{
"node": "Insert Order Parts",
"type": "main",
"index": 0
}
]
]
},
"Insert Order Parts": {
"main": [
[
{
"node": "Format Response",
"type": "main",
"index": 0
}
]
]
},
"Format Response": {
"main": [
[
{
"node": "Respond2",
"type": "main",
"index": 0
}
]
]
},
"Delete Order Webhook": {
"main": [
[
{
"node": "Extract Order ID1",
"type": "main",
"index": 0
}
]
]
},
"Delete Order Parts": {
"main": [
[
{
"node": "Delete Order",
"type": "main",
"index": 0
}
]
]
},
"Delete Order": {
"main": [
[
{
"node": "Format Delete Response",
"type": "main",
"index": 0
}
]
]
},
"Format Delete Response": {
"main": [
[
{
"node": "Respond3",
"type": "main",
"index": 0
}
]
]
},
"Extract Order ID1": {
"main": [
[
{
"node": "Delete Order Parts",
"type": "main",
"index": 0
}
]
]
},
"Orders Metadata Webhook": {
"main": [
[
{
"node": "Get Stats Metadata",
"type": "main",
"index": 0
}
]
]
},
"Get Stats Metadata": {
"main": [
[
{
"node": "Format Response1",
"type": "main",
"index": 0
}
]
]
},
"Format Response1": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
},
"Remove Image Info": {
"main": [
[
{
"node": "Respond to Webhook1",
"type": "main",
"index": 0
}
]
]
},
"Remove Image Info1": {
"main": [
[
{
"node": "Respond1",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1"
},
"staticData": null,
"meta": {
"templateCredsSetupCompleted": true
},
"versionId": "95e46765-b8a5-446a-a40f-0d859ca3fa7d",
"triggerCount": 5,
"tags": [],
"shared": [
{
"createdAt": "2025-10-22T08:50:19.851Z",
"updatedAt": "2025-10-22T08:50:19.851Z",
"role": "workflow:owner",
"workflowId": "9l6gg6HzfpfV9bIj",
"projectId": "0tBJbgcFWwxEMKPn",
"project": {
"createdAt": "2025-10-05T16:55:31.619Z",
"updatedAt": "2025-10-05T16:55:58.616Z",
"id": "0tBJbgcFWwxEMKPn",
"name": "Bikash Panda <oksbwn@gmail.com>",
"type": "personal",
"icon": null,
"description": null
}
}
]
}
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.
postgres
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Orders. Uses postgres. Webhook trigger; 26 nodes.
Source: https://github.com/oksbwn/Inventory-Management-System/blob/7f26462a83a574049df178775808226e970cd4f8/n8n/9l6gg6HzfpfV9bIj.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.
Scraping. Uses httpRequest, postgres, @apify/n8n-nodes-apify, respondToWebhook. Webhook trigger; 61 nodes.
Workflow B — AI Listing Engine. Uses httpRequest, postgres, errorTrigger. Webhook trigger; 47 nodes.
This workflow automates data maturity evaluation to measure how well an organization uses data to create value by capturing assessment data through forms or APIs, processing and scoring responses usin
Mercanta — WA Bot. Uses postgres, httpRequest. Webhook trigger; 24 nodes.