n8n node
n8n-nodes-nadia is
UseNadia’s community node for n8n. The package holds two
nodes:
| Node | What it does |
|---|---|
| Nadia | Actions: create posts, upload media, list channels and brands, read analytics, manage the content board. Also available to an AI Agent as a tool. |
| Nadia Trigger | Starts a workflow on post.published, comment.received, dm.received, automation.triggered or automation.email_captured. It registers its own webhook: nothing to set up in the app. |
Both wrap the Public API. Anything the node does, a plain HTTP Request node can do too; the node saves you the headers, the channel IDs and the per-platform settings.
Installation
Section titled “Installation”In n8n, Settings → Community Nodes → Install, then type
n8n-nodes-nadia and confirm. The Nadia and Nadia Trigger nodes then
show up in the node panel.
Requirements:
- A self-hosted n8n with community nodes enabled (the default). On n8n Cloud, only community nodes verified by n8n can be installed; the verification of this one is not done yet.
- To let an AI Agent use the Nadia node as a tool, start n8n with
N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true. Without it, community nodes are not offered as tools.
The package has no runtime dependency.
The credential
Section titled “The credential”Create a Nadia API credential:
| Field | Value |
|---|---|
| API Key | Your key, from Settings → Developers in UseNadia. An OAuth token (pos_…) works too. |
| Host | https://app.usenadia.com/api |
Saving the credential tests it: n8n calls GET /public/v1/is-connected with
the key. A failure there means a wrong key or a host without /api.
The key is sent raw in the Authorization header, not as a Bearer token —
it matters only if you call the API yourself next to the node. Rotating the
key in Settings → Developers invalidates the old one at once: update the
credential at the same time.
The Nadia node
Section titled “The Nadia node”One node, one Operation list:
| Area | Operation | What it does | Endpoint |
|---|---|---|---|
| Posts | Create Post | Schedule a post, publish it now, or save it as a draft | POST /posts |
| Get Posts | Posts in a date window (default: the last 30 days), optionally for one channel | GET /posts |
|
| Delete Post | Delete a post by ID | DELETE /posts/:id |
|
| Find Free Slot | The next free time slot of a channel | GET /find-slot/:id |
|
| Media | Upload File | Upload a binary from a previous node (field data by default) |
POST /upload |
| Upload File From URL | Have UseNadia fetch and store a public URL | POST /upload-from-url |
|
| Channels | Get Channels | Your connected channels | GET /integrations |
| Get Brands | Your brands | GET /groups |
|
| Get Channel Settings | The settings a channel’s platform expects | GET /integration-settings/:id |
|
| Analytics | Get Analytics | A channel’s numbers over the last N days (default 30) | GET /analytics/:id |
| Content board | Create Card | Add a card to a column (default Idea) | POST /contents |
| Get Cards | The cards, optionally one column only | GET /contents |
|
| Move Card | Move a card to another column | PUT /contents/:id/move |
|
| Update Card | Change a card’s title, hook, script, notes, planned date or target channels | PUT /contents/:id |
Endpoints are relative to <Host>/public/v1. The board’s columns are
Idea, Script, Approved, To Shoot, To Edit,
To Schedule and Published — see
Contents.
Channels and brands are lists
Section titled “Channels and brands are lists”You never paste an ID. Channel is loaded from your account; picking a Brand first narrows it to that brand’s channels. An expression still works where a workflow computes the ID.
Creating a post
Section titled “Creating a post”- Type: Schedule (at Date), Now, or Draft. With Schedule, Use Next Free Slot replaces the date with the channel’s next free slot.
- Content: plain text is wrapped in paragraphs; HTML is passed through and sanitized by the server.
- Media: the output of an Upload File or Upload File From URL
node. Each entry needs both
idandpath; the node refuses ids alone rather than schedule a post without its image. - Channel Settings: what the platform requires (TikTok alone has eight mandatory settings). The node reads them from the API for the chosen channel and shows them as fields, so they follow the app without a new release of the node. Per-platform detail: Instagram, TikTok.
- Additional Fields: Group (the same content on several channels), Shorten Links, Tags (comma-separated).
As a tool of an AI Agent
Section titled “As a tool of an AI Agent”The node is declared usable as a tool: connect it to the Tools input of an AI Agent node and the agent can pick the operation itself. This needs the environment variable from Installation.
The Nadia Trigger node
Section titled “The Nadia Trigger node”Pick the Events, and optionally the Channels (empty means all of them):
| Event | When |
|---|---|
post.published |
A post was published on a channel |
comment.received |
A comment arrived on a post of a connected channel |
dm.received |
A direct message arrived on a connected channel |
automation.triggered |
A comment matched an automation and the reply was sent |
automation.email_captured |
An automation recorded the email address of the person it is talking to |
Registration is automatic
Section titled “Registration is automatic”When the workflow is activated, the trigger registers a webhook on your
account (POST /public/v1/webhooks, named n8n — <workflow name>) and stores
the signing secret UseNadia returns. When the workflow is deactivated, it
deletes the webhook. A webhook deleted by hand in Settings → Webhooks is
registered again the next time the workflow is activated.
The signature
Section titled “The signature”Every delivery carries four headers:
| Header | Content |
|---|---|
X-Nadia-Event |
The event name |
X-Nadia-Delivery |
The delivery ID, to deduplicate |
X-Nadia-Timestamp |
Unix seconds at sending time |
X-Nadia-Signature |
sha256= followed by the hex HMAC-SHA256 of <timestamp>.<raw body>, keyed with the secret |
The trigger checks it by default and rejects a delivery that does not match. Turn Verify Signature off only if something in front of n8n rewrites the body. Signing the timestamp together with the body is what stops a captured delivery from being replayed.
The payload
Section titled “The payload”Every delivery is the same envelope; the event’s content is under data:
{ "id": "0f5b2c1e-7d3a-4c2b-9e8f-123456789abc", "event": "automation.email_captured", "occurredAt": "2026-10-13T09:30:00.000Z", "organizationId": "…", "data": { "email": "marie@gmail.com", "keyword": "LIEN", "username": "marie", "commenterId": "17841400000000000", "personId": "1234567890123456", "automation": { "id": "…", "name": "AWS kit" }, "pose": { "id": "…" }, "runId": "…", "postId": "…", "mediaId": "18000000000000000", "integrationId": "…", "capturedAt": "2026-10-13T09:30:00.000Z" }}In an expression, read {{ $json.data.email }}, not {{ $json.email }}. For
post.published, data carries the post: its id, content,
publishDate, releaseURL (the link on the platform), state and its
integration (id, name, providerIdentifier, picture).
A delivery is retried up to three times, except when the receiver answers a
4xx other than 429.
Testing a webhook
Section titled “Testing a webhook”Settings → Webhooks has a Send Test button. From the next release on, the
API should offer the same through POST /public/v1/webhooks/:id/test, which
sends a test delivery to a registered webhook. With n8n, the simplest test
remains a real event while the trigger node is listening for a test event.
Workflow templates
Section titled “Workflow templates”Four ready-to-import workflows are kept with the node’s source:
| Workflow | What it does |
|---|---|
| RSS to scheduled post | Reads a feed every hour, writes a caption with a model, schedules the post in the channel’s next free slot |
| Published post to Slack | Nadia Trigger on post.published → one Slack message per publication |
| DM to Google Sheets | Nadia Trigger on dm.received → one row per inbound DM |
| TemplateFox image to post | A sheet row → a TemplateFox image render → upload → scheduled post |
To use one, in n8n: Workflows → Import from File, pick the .json, then:
Add the Nadia credential
The API key, and the host
https://app.usenadia.com/api.Pick your channel
Open the Nadia node and choose the channel from the list; its settings load right after.
Add the other credentials
Slack, Google, the model — whatever the workflow uses.
Activate it last
A workflow built on Nadia Trigger registers its webhook on activation.
Self-hosting UseNadia
Section titled “Self-hosting UseNadia”Host is a credential field, not a constant: point it at your own server,
keeping the /api suffix — https://social.example.com/api, not
https://social.example.com. The trigger works the same way, provided your
UseNadia server can reach your n8n.
Related
Section titled “Related”- Webhooks — the same deliveries, created by hand in Settings.
- Webhooks API — the routes the trigger calls.
- MCP — the other way to let an agent drive UseNadia.