AutomationFlowsGeneral › Webhook Inbox Backend Handler

Webhook Inbox Backend Handler

Original n8n title: Inbox Backend

Inbox-Backend. Uses splitOut, httpRequest, respondToWebhook, stickyNote. Webhook trigger; 14 nodes.

Webhook trigger★★★★☆ complexity14 nodesHTTP Request
General Trigger: Webhook Nodes: 14 Complexity: ★★★★☆ Added:

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 →

Download .json
{
  "nodes": [
    {
      "parameters": {
        "fieldToSplitOut": "items",
        "options": {}
      },
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        -140,
        380
      ],
      "id": "21d3dc85-3cb1-4743-a4c2-952bbb70b344",
      "name": "Split Out"
    },
    {
      "parameters": {
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "inbox",
        "options": {}
      },
      "type": "n8n-nodes-base.aggregate",
      "typeVersion": 1,
      "position": [
        240,
        380
      ],
      "id": "9a515796-9d14-4db9-80ad-9f0d63c33c37",
      "name": "Aggregate"
    },
    {
      "parameters": {
        "path": "linkout_messages",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        -1000,
        520
      ],
      "id": "51a02f2e-71bc-493d-a542-a9b8d4094495",
      "name": "Webhook"
    },
    {
      "parameters": {
        "url": "=****POCKETBASE_BASE_URL****/api/collections/people/records?expand=messages",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "={{ $json.headers.authorization }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        -700,
        520
      ],
      "id": "bce44008-5850-4c4c-bb19-27577022c8a3",
      "name": "get users",
      "onError": "continueErrorOutput",
      "notes": "## Fetch Users with Messages\nRetrieves all users and their associated messages from PocketBase.\n\n\u26a0\ufe0f Configuration Required:\n1. Set POCKET_BASE_URL in environment\n2. Ensure messages relation exists"
    },
    {
      "parameters": {
        "respondWith": "text",
        "responseBody": "Unauthorized access",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        220,
        840
      ],
      "id": "7b9efe85-5fab-46dc-ada7-e67db0028e48",
      "name": "Respond with error"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ $('Aggregate').item.json.inbox }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        420,
        380
      ],
      "id": "80b10132-1477-4d53-b0d0-80f6f88318e2",
      "name": "Respond success"
    },
    {
      "parameters": {
        "content": "## 1. Frontend Request Handler\n[Learn more about Webhook nodes](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/)\n\nReceives requests from the frontend to fetch user messages:\n- Validates PocketBase authentication token\n- Handles error responses\n- Routes to data fetching",
        "height": 220,
        "width": 490,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1320,
        240
      ],
      "id": "ce060966-4429-4a42-a239-732e894e8558",
      "name": "Section 1 - Request Handler",
      "typeVersion": 1
    },
    {
      "parameters": {
        "content": "## 2. Data Processing\n[Learn more about Data Transformation](https://docs.n8n.io/data/transforming-data/)\n\nTransforms raw PocketBase data into frontend format:\n- Splits user records\n- Formats user profiles\n- Combines messages\n- Prepares response payload",
        "height": 220,
        "width": 490,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -680,
        80
      ],
      "id": "a105c5a3-e260-4873-8b03-f944318b84a5",
      "name": "Section 2 - Data Processing",
      "typeVersion": 1
    },
    {
      "parameters": {
        "content": "## Response Format\n\nSuccess: JSON array of users with:\n- Author name and avatar\n- Latest message and category\n- Chat ID and timestamps\n\nError: Error message with status code",
        "height": 220,
        "width": 490,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        500,
        520
      ],
      "name": "Response Format",
      "id": "d5eb7f51-3e52-4833-97f3-7c9709373188",
      "typeVersion": 1
    },
    {
      "parameters": {
        "content": "## Data Transformation\nTransforms user data for frontend display:\n\n1. User Profile:\n- Combines firstName + lastName \u2192 author\n- Formats avatar URL\n- Extracts chatId\n\n2. Messages:\n- Gets latest message content\n- Includes message category\n- Formats timestamps",
        "height": 280,
        "width": 400,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "name": "Data Transformation Details",
      "id": "fd990b54-a2ce-47ef-99ed-5276c6ec9cd4",
      "typeVersion": 1
    },
    {
      "parameters": {
        "content": "## Response Handling\n\nSuccess Response:\n- JSON array of formatted user data\n- Includes messages and profile info\n\nError Response:\n- Returns error message\n- Handles unauthorized access\n- Manages failed requests",
        "height": 220,
        "width": 400,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        500,
        220
      ],
      "name": "Response Documentation",
      "id": "f7a5e528-bce4-4f3b-b270-72d9ca888472",
      "typeVersion": 1
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "34ea30e5-5515-4423-8913-dba9491cadc0",
              "name": "author",
              "value": "={{ $json.firstName }} {{ $json.lastName }}",
              "type": "string"
            },
            {
              "id": "1deb7874-79ef-46c4-bc62-07f9f3036fa1",
              "name": "content",
              "value": "={{ $json.expand.messages?.last().message}}",
              "type": "string"
            },
            {
              "id": "e97048f2-3a84-4e16-9925-f2e2f07c39b2",
              "name": "category",
              "value": "={{ $json.expand.messages[0].category }}",
              "type": "string"
            },
            {
              "id": "140e2a80-617b-46d8-bbd9-0009d3934391",
              "name": "lastUpdated",
              "value": "={{ $json.updated }}",
              "type": "string"
            },
            {
              "id": "4b4cba2d-6853-4492-8f42-2e0c73d5ea25",
              "name": "id",
              "value": "={{ $json.id }}",
              "type": "string"
            },
            {
              "id": "cb994bac-de9d-42d2-b788-94118fd85a1c",
              "name": "avatar",
              "value": "={{ $json.avatar }}",
              "type": "string"
            },
            {
              "id": "7954ead4-c736-42f3-bee4-a3d52f282111",
              "name": "chatId",
              "value": "={{ $json.expand.messages[0].chatId }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        60,
        380
      ],
      "id": "d64ac2de-2d94-4226-a234-c122d2d294bb",
      "name": "Edit Fields"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "744b4ac7-6edb-45a4-ada4-59914a75158e",
              "leftValue": "={{ $json.items }}",
              "rightValue": "",
              "operator": {
                "type": "array",
                "operation": "notEmpty",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        -480,
        420
      ],
      "id": "a67b7be9-dceb-4ad0-bd63-5a5a4e452be7",
      "name": "If"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "{\n  \"inbox\": []\n}",
        "options": {
          "responseCode": 200
        }
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        220,
        660
      ],
      "id": "b7a50cf9-6b17-4678-b23f-d39bc56cfd81",
      "name": "Respond with 'no messages'"
    }
  ],
  "connections": {
    "Split Out": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "Respond success",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook": {
      "main": [
        [
          {
            "node": "get users",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "get users": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Respond with error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Respond with 'no messages'",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

How this works

This workflow streamlines backend processing for incoming webhooks, automatically handling user data retrieval and validation to ensure seamless integration with your applications. It's ideal for developers building API endpoints or automation systems that need reliable error handling and response generation without manual intervention. The key step involves using HTTP Request to fetch user details from an external service, followed by aggregation and tailored webhook responses for success or failure scenarios.

Use this workflow when setting up a robust inbox backend for real-time data processing, such as validating incoming requests in customer support tools or e-commerce platforms. Avoid it for simple static responses or when no external API calls are required, as it adds unnecessary complexity. Common variations include adding authentication layers or integrating with databases for persistent storage.

About this workflow

Inbox-Backend. Uses splitOut, httpRequest, respondToWebhook, stickyNote. Webhook trigger; 14 nodes.

Source: https://github.com/maxt-n8n/linkedout/blob/c163906f3b1e84d687d94863a88e942edbacc58f/n8n-workflows/inbox-backend.json — original creator credit. Request a take-down →

More General workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

General

Portfolio Orchestrator. Uses httpRequest. Webhook trigger; 59 nodes.

HTTP Request
General

jump-section: Comment Fix Pipeline. Uses httpRequest. Webhook trigger; 24 nodes.

HTTP Request
General

GitHub Issues Router (Linear / Jira / ClickUp). Uses stickyNote, httpRequest, respondToWebhook. Webhook trigger; 23 nodes.

HTTP Request
General

Form to CRM Lead Router (Pipedrive / HubSpot / Salesforce). Uses stickyNote, httpRequest, respondToWebhook. Webhook trigger; 22 nodes.

HTTP Request
General

Calendly to CRM Sync (Pipedrive / HubSpot / Salesforce). Uses stickyNote, httpRequest, respondToWebhook. Webhook trigger; 22 nodes.

HTTP Request