Skip to content

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.

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.

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.

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.

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.

  • 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 id and path; 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).

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.

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

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.

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.

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.

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.

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:

  1. Add the Nadia credential

    The API key, and the host https://app.usenadia.com/api.

  2. Pick your channel

    Open the Nadia node and choose the channel from the list; its settings load right after.

  3. Add the other credentials

    Slack, Google, the model — whatever the workflow uses.

  4. Activate it last

    A workflow built on Nadia Trigger registers its webhook on activation.

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.

  • 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.