Complete "Lesson 3: Triggers and the Execution Model" first to unlock this lesson.Go to previous lesson

Introduction

Nodes are the building blocks of every n8n workflow. Each node represents a single action: fetching data from an API, sending an email, transforming a value, or triggering a flow based on a schedule. When you connect nodes together, you get an automated pipeline that replaces manual work.

This lesson walks you through the node library, shows you how to configure real integrations, and explains how n8n handles credentials so your API keys and passwords stay secure.

The Node Library

n8n ships with over 400 built-in nodes covering common services like Slack, Google Sheets, GitHub, PostgreSQL, HTTP APIs, and more. You access them by clicking the + button inside the canvas, which opens a searchable panel.

Nodes fall into two broad categories. Trigger nodes start a workflow — they listen for an event (a webhook call, a cron schedule, a new row in a database). Action nodes do work inside the workflow — they read, write, transform, or send data.

A few nodes you will use constantly:

The HTTP Request node calls any REST API that does not have a dedicated node. It handles GET, POST, PUT, DELETE, and lets you set headers, query params, and a request body.

The Code node runs JavaScript or Python inline, useful when built-in transformations are not enough.

The Set node reshapes the data object passing through the workflow — add a field, rename a key, remove noise you do not need downstream.

diagram showing node categories: Trigger nodes on the left feeding into Action nodes (HTTP Request, Code, Set, Service nodes) on the right, connected by arrows left to right

Configuring a Real Integration

Let us wire up a practical example: every time a form is submitted, post a message to a Slack channel with the submitter's name and email.

First, add a Webhook trigger node. Set the HTTP method to POST and copy the generated URL — this is the endpoint your form will call. Switch the workflow to active so n8n starts listening.

Next, add a Slack node after the webhook. Choose the action "Send a Message". At this point n8n will ask you to select or create a Slack credential — we will cover that in the next section.

Once the credential is set, configure the node like this:

json
{
"channel": "#new-leads",
"text": "New submission from {{ $json.name }} — {{ $json.email }}"
}

The double-curly syntax is n8n's expression language. It reads data from the incoming JSON body at runtime. If your webhook receives a payload with a name field and an email field, those values are substituted automatically.

Send a test POST request to verify the full flow:

bash
curl -X POST https://your-n8n-instance.com/webhook/your-path \
-H "Content-Type: application/json" \
-d '{"name": "Linh", "email": "linh@example.com"}'

If everything is connected correctly, the Slack channel receives the message within seconds.

Credentials Management

n8n stores credentials separately from workflows. This design means you create a credential once, reuse it across many workflows, and never embed a raw API key inside a node configuration.

To add a credential, go to Settings > Credentials > Add Credential, or let n8n prompt you when you configure a node that needs authentication. You select the service, fill in the required fields (API key, OAuth tokens, username/password), and save. n8n encrypts the stored values using the encryption key set in your instance configuration.

For OAuth2 services like Google or Slack, n8n handles the authorization flow for you. You click "Connect", authenticate in the browser popup, and n8n stores the resulting access and refresh tokens automatically.

One important practice: use separate credentials per environment. Your staging workflow should use a test Slack workspace or a sandbox API key, not the production one. You can duplicate a credential and change only the secret value, leaving the name clearly labeled ("Slack - Production" vs "Slack - Staging").

Credentials are also scoped by owner in multi-user setups — a credential created under one user account is not visible to others unless explicitly shared. This prevents accidental exposure across teams.

flowchart showing credential creation flow: Add Credential → Select Service → Enter API Key or OAuth → Encrypted Storage → Referenced by Node in Workflow

Common Mistakes

Expression syntax errors are the most frequent issue. If a field reference like {{ $json.email }} returns undefined, check that the previous node is actually outputting that key. Use the "Input" panel on the right side of the canvas to inspect exactly what data is flowing into each node.

Another common mistake is forgetting to activate the workflow after saving. A webhook trigger does not listen while the workflow is inactive — the toggle at the top of the canvas must be on.

For HTTP Request nodes calling external APIs, watch for authentication mismatches. Some APIs expect the key in a header (Authorization: Bearer ...), others in a query parameter. Read the API docs and match the format exactly, then use the credential system to inject the value rather than hardcoding it in the URL.

Summary

The node library gives you a ready-made toolkit for connecting services without writing boilerplate integration code. Trigger nodes start workflows, action nodes do the work, and expressions wire data between them dynamically. Credentials are managed centrally, encrypted at rest, and reusable across workflows — keep them environment-specific and let n8n handle the OAuth dance for you. With these fundamentals in place you can build reliable, readable pipelines that connect real apps.

Lesson practice

Lesson Checkpoint

Review what you learned and get feedback on your work.

0/1
Answered · 0/1