Integrations

n8n

The NUWAY node connects your n8n workflows to your NUWAY AI workers through the NUWAY API. With it you can:

  • Chat: send a customer's message to your AI workers and get the reply, continuing the same conversation across messages.
  • Conversations: list conversations, and read one with its messages.
  • Leads: list scored leads, and read one lead.
  • Team members and meetings: list team members and meetings, check free time slots, cancel a meeting.
  • Knowledge: list training resources, upload documents, and add, update or delete FAQs. New content is trained automatically.

Source code: github.com/nuwayco/nuway-n8n-node

Before you start

  • A self-hosted n8n where you can install community nodes (local, npm or Docker).
  • The Node.js version your n8n release requires: Node.js 24 for n8n 2.36 and later, Node.js 22 for n8n 2.30 to 2.35, and Node.js 20.19 or newer for n8n 1.123.
  • git, on the machine where you install the node.
  • Your NUWAY API key. See Authentication and API keys.

The node has been tested with n8n 1.123 and n8n 2.43.

Install on n8n installed with npm

  1. Install the node into n8n's nodes folder:
mkdir -p ~/.n8n/nodes
cd ~/.n8n/nodes
npm install github:nuwayco/nuway-n8n-node

On Windows, use %USERPROFILE%\.n8n\nodes instead of ~/.n8n/nodes. The package builds itself during install.

  1. Restart n8n:
n8n start

The NUWAY node now appears in the n8n editor.

Install on Docker

  1. Build the node next to your docker-compose.yml:
git clone https://github.com/nuwayco/nuway-n8n-node
cd nuway-n8n-node
npm install
cd ..
  1. Mount it into n8n with N8N_CUSTOM_EXTENSIONS:
services:
  n8n:
    image: n8nio/n8n
    environment:
      - N8N_CUSTOM_EXTENSIONS=/custom/nuway-n8n-node
    volumes:
      - ./nuway-n8n-node:/custom/nuway-n8n-node
      - n8n_data:/home/node/.n8n
    ports:
      - "5678:5678"
volumes:
  n8n_data:
  1. Start the stack:
docker compose up -d

Node name with N8N_CUSTOM_EXTENSIONS

n8n names nodes loaded this way CUSTOM.nuway instead of n8n-nodes-nuway.nuway. Before importing the example workflows on such an install, replace n8n-nodes-nuway.nuway with CUSTOM.nuway in the file.

Connect your NUWAY account

  1. In n8n, open Credentials → Add credential and choose NUWAY API.
  2. Fill in the fields:
FieldValue
API KeyYour NUWAY API key (starts with nwk_).
Base URLhttps://ai.nuway.co (leave the default).
  1. Click Save. n8n tests the key straight away by listing your team members, and shows Connection successful when it works.

Store the key only in this credential, never in node parameters, expressions or Code nodes.

Operations

ResourceOperationMain fieldsOutput
ChatSend MessageMessage; Session ID (empty for a new conversation); Options: AI Worker (Automatic, Sales, Scheduler, Support), Customer Email, Customer First Name, Customer Last NameOne item: the reply with session_id, reply, agent, answer_type, ask_email
ConversationGet ManyReturn All or Limit (1–200, default 50); Filters: Channel (Phone, Text, Web Voice), Status, Tag, From, ToOne item per conversation
ConversationGetSession IDOne item: the conversation with its messages
ConversationGet MessagesSession ID; Filters: Role (Customer, AI Worker), Answer TypeOne item per message
LeadGet ManyReturn All or Limit (1–200, default 50); Filters: Rank, Search, Needs Attention, Highlighted Only, Sort (Intent, Priority, Recent)One item per lead
LeadGetLead IDOne item: the lead in detail
Team MemberGet ManynoneOne item per team member
MeetingGet ManyFilters: Start Date, End Date, Status, Platform, Team Member Emails (comma-separated)One item per meeting
MeetingGet AvailabilityTeam Member Email, Date, Timezone; Options: Duration (Minutes), Earliest Time, Latest TimeOne item with an available_slots list
MeetingCancelMeeting ID, ReasonOne item: the result
KnowledgeGet ManyReturn All or Limit (1–200, default 50); Filters: Type (Audio, Excel, FAQ, File, Picture, Website)One item per training resource
KnowledgeUpload DocumentInput Binary Field (default data): a pdf, docx, txt, csv, xlsx, image or audio file from an earlier nodeOne item: the uploaded resource
KnowledgeAdd FAQQuestion, AnswerOne item: the new FAQ
KnowledgeUpdate FAQResource ID, Question, AnswerOne item: the updated FAQ
KnowledgeDeleteResource ID (from Knowledge → Get Many)One item: the result

Every field maps to the API parameter of the same name; see the API reference for allowed values and response fields.

  • Return All pages through every result, 200 at a time. With it off, the node makes one request and returns up to Limit items.
  • A list with no results returns no items, which stops the workflow there. Turn on the node's Always Output Data setting if later nodes must run anyway.
  • n8n adds a Custom API Call operation to every resource. The NUWAY node doesn't support it; use the operations above, or an HTTP Request node with the NUWAY API credential.

Meetings are booked through chat: send the customer's request to the Scheduler worker (or Automatic) and it finds a slot and collects the customer's name and email. NUWAY then emails the customer a verification code; send the code they type as the next message, and the meeting is booked on your calendar.

The reply of Send Message looks like this:

{
  "session_id": "api_3f2c...",
  "reply": "Hi! Our opening hours are 9am to 5pm.",
  "agent": "support",
  "answer_type": "ANSWER",
  "ask_email": false,
  "message_id": 1234,
  "execution_time_ms": 2100
}

answer_type is NO_ANSWER when the AI could not answer from your knowledge; ask_email is true when it is a good moment to ask the customer for their email.

Example workflows

Each workflow below is ready to import: save the JSON as a .json file and import it in n8n. Then select your NUWAY API credential in every NUWAY node and replace the placeholder URLs. Each workflow includes a sticky note with its setup steps.

Send hot leads to your CRM

Every hour, Lead → Get Many fetches hot leads that need attention, highest buying intent first, and an HTTP Request node posts each one to your CRM (https://example.com/your-crm-endpoint is a placeholder). Use lead_id in your CRM to avoid creating the same lead twice.

Workflow JSON: nuway-hot-leads-to-crm.json
{
  "name": "NUWAY: send hot leads to your CRM",
  "nodes": [
    {
      "parameters": {
        "content": "## Send hot leads to your CRM\nEvery hour, reads the hot NUWAY leads that are waiting on a follow-up (highest buying intent first) and POSTs each one to your CRM.\n\n1. Pick your **NUWAY API** credential in **Get hot leads**.\n2. Replace the URL in **Send to CRM** and map the fields your CRM expects.\n\nEach run sends every lead that still needs attention, so the same lead can be sent again until your team follows up. Make your CRM endpoint ignore duplicates by `lead_id`.",
        "height": 260,
        "width": 520
      },
      "id": "37bdb0e6-0ece-51f2-a314-d4787b0b7e2a",
      "name": "Note",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -80,
        -260
      ]
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 1
            }
          ]
        }
      },
      "id": "cdd61e13-c1e6-55f3-96f4-5b706e7a2b1a",
      "name": "Every hour",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        0,
        60
      ]
    },
    {
      "parameters": {
        "resource": "lead",
        "operation": "getAll",
        "limit": 50,
        "filters": {
          "rank": "hot",
          "needs_attention": true,
          "sort": "intent"
        }
      },
      "id": "65ddc7d9-6fe5-586b-b2c5-239a473c6ffe",
      "name": "Get hot leads",
      "type": "n8n-nodes-nuway.nuway",
      "typeVersion": 1,
      "position": [
        240,
        60
      ],
      "credentials": {
        "nuwayApi": {
          "id": "REPLACE_ME",
          "name": "NUWAY API account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://example.com/your-crm-endpoint",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "external_id",
              "value": "={{ $json.lead_id }}"
            },
            {
              "name": "name",
              "value": "={{ $json.name }}"
            },
            {
              "name": "email",
              "value": "={{ $json.email }}"
            },
            {
              "name": "phone",
              "value": "={{ $json.phone }}"
            },
            {
              "name": "country",
              "value": "={{ $json.country }}"
            },
            {
              "name": "product",
              "value": "={{ $json.product_name }}"
            },
            {
              "name": "rank",
              "value": "={{ $json.rank_label }}"
            },
            {
              "name": "score",
              "value": "={{ $json.score }}"
            },
            {
              "name": "last_seen",
              "value": "={{ $json.last_session_at }}"
            },
            {
              "name": "note",
              "value": "={{ $json.attention_reason }}"
            }
          ]
        },
        "options": {}
      },
      "id": "5acba81b-216b-5d32-9ec2-9043b1f4a14b",
      "name": "Send to CRM",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        480,
        60
      ]
    }
  ],
  "connections": {
    "Every hour": {
      "main": [
        [
          {
            "node": "Get hot leads",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get hot leads": {
      "main": [
        [
          {
            "node": "Send to CRM",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "tags": []
}

Answer messages from your own channel

A Webhook receives {"message": "...", "session_id": "..."} from your app, Chat → Send Message asks NUWAY, and the workflow answers with reply, session_id and ask_email. Leave session_id out for the first message, then send back the one you received.

Protect the webhook

Anyone who knows a webhook URL can call it, and every chat reply is billed. Turn on the Webhook node's Authentication before you activate the workflow.

Workflow JSON: nuway-chat-webhook.json
{
  "name": "NUWAY: answer messages from your own channel",
  "nodes": [
    {
      "parameters": {
        "content": "## Answer messages from your own channel\nPOST `{\"message\": \"...\", \"session_id\": \"...\"}` to this webhook. The reply comes back as `{\"reply\", \"session_id\", \"ask_email\"}`.\n\nLeave `session_id` out for the first message, then send back the one you received to continue the same conversation. Show an email field when `ask_email` is true.",
        "height": 220,
        "width": 520
      },
      "id": "00a04ed4-15b5-5aeb-8bf2-b0b0d4c2f9fc",
      "name": "Note",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -80,
        -240
      ]
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "nuway-chat",
        "responseMode": "responseNode",
        "options": {}
      },
      "id": "5dfa573c-bbbf-5da9-b129-e875cff597d6",
      "name": "Incoming message",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        0,
        60
      ],
      "webhookId": "201f3b74-d0db-5b7b-ae8a-84427f5e3e73"
    },
    {
      "parameters": {
        "resource": "chat",
        "operation": "send",
        "message": "={{ $json.body.message }}",
        "sessionId": "={{ $json.body.session_id || '' }}",
        "options": {
          "email": "={{ $json.body.email || '' }}"
        }
      },
      "id": "46ec44c6-3c05-5ba7-a360-8dff610d66ed",
      "name": "Ask NUWAY",
      "type": "n8n-nodes-nuway.nuway",
      "typeVersion": 1,
      "position": [
        240,
        60
      ],
      "credentials": {
        "nuwayApi": {
          "id": "REPLACE_ME",
          "name": "NUWAY API account"
        }
      }
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify({ reply: $json.reply, session_id: $json.session_id, ask_email: $json.ask_email }) }}",
        "options": {}
      },
      "id": "6b28af8b-cfeb-5c2a-b7a0-4d614ac8f134",
      "name": "Reply",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        480,
        60
      ]
    }
  ],
  "connections": {
    "Incoming message": {
      "main": [
        [
          {
            "node": "Ask NUWAY",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Ask NUWAY": {
      "main": [
        [
          {
            "node": "Reply",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "tags": []
}

Daily meetings digest

Every morning, Meeting → Get Many lists today's meetings, a Code node writes a short digest (skipping cancelled meetings), and an HTTP Request node posts it to a chat or email webhook of your choice. It also sends "No meetings today." on empty days.

Workflow JSON: nuway-daily-meetings-digest.json
{
  "name": "NUWAY: daily meetings digest",
  "nodes": [
    {
      "parameters": {
        "content": "## Daily meetings digest\nEvery morning at 07:00 (the workflow's time zone), lists today's meetings booked through NUWAY, leaves out cancelled ones and posts one summary to your webhook (Slack, Teams, email service...).\n\nReplace the URL in **Post digest**.",
        "height": 220,
        "width": 520
      },
      "id": "a88529bc-371a-50d0-8a8d-9859329a655e",
      "name": "Note",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -80,
        -240
      ]
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 7
            }
          ]
        }
      },
      "id": "61e4e19d-ad9c-5e13-86c4-ceb03a3de567",
      "name": "Every morning",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        0,
        60
      ]
    },
    {
      "parameters": {
        "resource": "meeting",
        "operation": "getAll",
        "filters": {
          "start_date": "={{ $today.toISODate() }}",
          "end_date": "={{ $today.toISODate() }}"
        }
      },
      "id": "217b32c5-ce4c-59f3-acc5-a28456125664",
      "name": "Get today's meetings",
      "type": "n8n-nodes-nuway.nuway",
      "typeVersion": 1,
      "position": [
        240,
        60
      ],
      "credentials": {
        "nuwayApi": {
          "id": "REPLACE_ME",
          "name": "NUWAY API account"
        }
      },
      "alwaysOutputData": true
    },
    {
      "parameters": {
        "jsCode": "// One summary item for today's meetings. The NUWAY node has \"Always Output Data\"\n// switched on, so on a day without meetings this runs with one empty item.\nconst meetings = $input.all()\n  .map((item) => item.json)\n  .filter((m) => m.meeting_id && m.status !== 'cancelled')\n  .sort((a, b) => String(a.scheduled_time).localeCompare(String(b.scheduled_time)));\n\nconst lines = meetings.map((m) =>\n  `${String(m.scheduled_time).slice(0, 5)} (${m.scheduled_timezone}) ${m.meeting_title}: ` +\n  `${m.attendee_name || 'Unknown'} <${m.attendee_email || '-'}> with ${m.host_name || m.host_email} ${m.preferred_address || ''}`.trim()\n);\n\nreturn [{\n  json: {\n    date: $today.toISODate(),\n    count: meetings.length,\n    text: meetings.length ? lines.join('\\n') : 'No meetings today.',\n    meetings,\n  },\n}];"
      },
      "id": "4259329c-b056-520c-9ca7-1dc7ebda9a67",
      "name": "Build digest",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        480,
        60
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://example.com/your-digest-webhook",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "text",
              "value": "={{ 'Meetings on ' + $json.date + ' (' + $json.count + ')\\n' + $json.text }}"
            }
          ]
        },
        "options": {}
      },
      "id": "5d9389c6-4d39-54e1-ba0d-cb7e6250446d",
      "name": "Post digest",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        720,
        60
      ]
    }
  ],
  "connections": {
    "Every morning": {
      "main": [
        [
          {
            "node": "Get today's meetings",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get today's meetings": {
      "main": [
        [
          {
            "node": "Build digest",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build digest": {
      "main": [
        [
          {
            "node": "Post digest",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "tags": []
}

Keep a training document in sync

Every Monday, the workflow downloads a document from your own systems, uploads it with Knowledge → Upload Document, and then deletes older copies with the same file name (Knowledge → Get Many and Delete), so your AI workers always learn the current version. Uploads and training are billed; see Usage limits and billing.

Workflow JSON: nuway-knowledge-document-sync.json
{
  "name": "NUWAY: keep a training document in sync",
  "nodes": [
    {
      "parameters": {
        "content": "## Keep a training document in sync\nEvery Monday at 06:00, downloads your document (for example a price list), uploads it to NUWAY Knowledge (trained automatically, billed as training) and then deletes the older copies with the same file name.\n\n1. Replace the URL in **Download document** (pdf, docx, txt, csv, xlsx, image or audio, up to 100 MB).\n2. Pick your **NUWAY API** credential in the three NUWAY nodes.",
        "height": 260,
        "width": 560
      },
      "id": "8cb2942b-9975-5995-bf1f-9c5d45d12506",
      "name": "Note",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -80,
        -260
      ]
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks",
              "triggerAtDay": [
                1
              ],
              "triggerAtHour": 6
            }
          ]
        }
      },
      "id": "4a024950-64d4-5ceb-a61d-b20fae043a88",
      "name": "Every Monday",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        0,
        60
      ]
    },
    {
      "parameters": {
        "url": "https://example.com/files/price-list.pdf",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file",
              "outputPropertyName": "data"
            }
          }
        }
      },
      "id": "cf727b90-b27d-53f8-a535-bea4c6d8f491",
      "name": "Download document",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        220,
        60
      ]
    },
    {
      "parameters": {
        "resource": "knowledge",
        "operation": "uploadDocument",
        "binaryPropertyName": "data"
      },
      "id": "016fe299-0760-542c-9aeb-d067a6cb886a",
      "name": "Upload to NUWAY",
      "type": "n8n-nodes-nuway.nuway",
      "typeVersion": 1,
      "position": [
        440,
        60
      ],
      "credentials": {
        "nuwayApi": {
          "id": "REPLACE_ME",
          "name": "NUWAY API account"
        }
      }
    },
    {
      "parameters": {
        "resource": "knowledge",
        "operation": "getAll",
        "returnAll": true,
        "filters": {
          "type": "FILE"
        }
      },
      "id": "39e8c417-ec05-54c3-a85e-d36d9a76cf7c",
      "name": "List documents",
      "type": "n8n-nodes-nuway.nuway",
      "typeVersion": 1,
      "position": [
        660,
        60
      ],
      "credentials": {
        "nuwayApi": {
          "id": "REPLACE_ME",
          "name": "NUWAY API account"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "// Earlier uploads of the same file, so they can be deleted. The new upload is kept.\nconst uploaded = $('Upload to NUWAY').first().json;\nreturn $input.all().filter((item) =>\n  item.json.fileName === uploaded.fileName && item.json.id !== uploaded.id\n);"
      },
      "id": "dacece89-0836-5cd8-b61a-ff3b8c7567a6",
      "name": "Older copies",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        880,
        60
      ]
    },
    {
      "parameters": {
        "resource": "knowledge",
        "operation": "delete",
        "resourceId": "={{ $json.id }}"
      },
      "id": "fe69f9d5-cd01-5a83-8e70-541c746f812b",
      "name": "Delete older copy",
      "type": "n8n-nodes-nuway.nuway",
      "typeVersion": 1,
      "position": [
        1100,
        60
      ],
      "credentials": {
        "nuwayApi": {
          "id": "REPLACE_ME",
          "name": "NUWAY API account"
        }
      }
    }
  ],
  "connections": {
    "Every Monday": {
      "main": [
        [
          {
            "node": "Download document",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download document": {
      "main": [
        [
          {
            "node": "Upload to NUWAY",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload to NUWAY": {
      "main": [
        [
          {
            "node": "List documents",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "List documents": {
      "main": [
        [
          {
            "node": "Older copies",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Older copies": {
      "main": [
        [
          {
            "node": "Delete older copy",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "tags": []
}

Add an FAQ from another tool

A Webhook receives {"question": "...", "answer": "..."} and Knowledge → Add FAQ adds it. It is trained automatically.

Workflow JSON: nuway-add-faq-webhook.json
{
  "name": "NUWAY: add an FAQ from a webhook",
  "nodes": [
    {
      "parameters": {
        "content": "## Add an FAQ from another system\nPOST `{\"question\": \"...\", \"answer\": \"...\"}` to this webhook (for example from a help desk when an agent marks an answer as reusable). NUWAY trains it automatically (billed as training) and the new FAQ comes back as the response.",
        "height": 220,
        "width": 520
      },
      "id": "e114254b-6f13-5f9c-83d4-7264b5d14582",
      "name": "Note",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -80,
        -240
      ]
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "nuway-faq",
        "responseMode": "responseNode",
        "options": {}
      },
      "id": "19fbb6d7-e2e6-56fd-a6d8-3281a4c61e6f",
      "name": "New FAQ",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        0,
        60
      ],
      "webhookId": "c20fddca-b85b-5f65-8329-c2b0d89efa60"
    },
    {
      "parameters": {
        "resource": "knowledge",
        "operation": "addFaq",
        "question": "={{ $json.body.question }}",
        "answer": "={{ $json.body.answer }}"
      },
      "id": "e84cfe78-02f1-51b1-8e91-74defd896b48",
      "name": "Add FAQ",
      "type": "n8n-nodes-nuway.nuway",
      "typeVersion": 1,
      "position": [
        240,
        60
      ],
      "credentials": {
        "nuwayApi": {
          "id": "REPLACE_ME",
          "name": "NUWAY API account"
        }
      }
    },
    {
      "parameters": {
        "respondWith": "firstIncomingItem",
        "options": {}
      },
      "id": "1a2acebd-09e3-5bc0-aef5-a5909b27552b",
      "name": "Respond",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        480,
        60
      ]
    }
  ],
  "connections": {
    "New FAQ": {
      "main": [
        [
          {
            "node": "Add FAQ",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add FAQ": {
      "main": [
        [
          {
            "node": "Respond",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "tags": []
}

Errors

The node shows the NUWAY API's error message in n8n's error panel. For example, for invalid input you see which field failed, and when you are out of chat credit you see the customer-friendly message from the API. See Errors and rate limits for every status code.

  • The node does not retry on its own. For 429 (rate limit) and 502 (the AI couldn't reply), use the node's Retry On Fail setting.
  • With Continue On Fail on, a failed item is passed on with its error and description, and the other items keep running.

Troubleshooting

IssueSolution
Node does not appear in n8nRestart n8n. For Docker, check N8N_CUSTOM_EXTENSIONS points to the folder that holds the node's package.json, and that npm install created its dist folder.
n8n does not start after an upgradeCheck that your Node.js version is the one your n8n release requires.
An imported workflow shows an unknown nodeOn a Docker install with N8N_CUSTOM_EXTENSIONS, replace n8n-nodes-nuway.nuway with CUSTOM.nuway in the workflow file.
Credential test failsThe API key is wrong or was regenerated; copy the current key from your NUWAY settings.
402 Payment RequiredYour plan's messages and wallet balance are used up; top up in NUWAY billing.
429 Too Many RequestsOver the per-minute limit; slow down, add Retry On Fail, or request a higher limit.
404 on a Session IDThe session belongs to another company or does not exist; leave Session ID empty to start a new conversation.
"The operation … is not supported"You selected Custom API Call, which the NUWAY node doesn't support.

Security

  • Keep the API key in the NUWAY API credential only. n8n stores credentials encrypted.
  • Protect webhooks that call NUWAY with the Webhook node's Authentication, so strangers can't use your chat credit or change your training data.
  • Workflows that read conversations and leads handle customer data: send it only to systems you trust.

Update the node

Installed with npm:

cd ~/.n8n/nodes
npm install github:nuwayco/nuway-n8n-node

Docker:

cd nuway-n8n-node
git pull
npm install
cd ..
docker compose restart n8n

Then restart n8n. The node is MIT licensed and maintained by NUWAY.