Webhooks
Where: Settings, Webhooks
A webhook is an HTTP callback UseNadia fires when something happens: a post publishes, a comment or a message arrives, an automation collects an email. Use it to mirror content into Slack, log posts into a spreadsheet, trigger a Zapier or n8n workflow, or update your own system.
Adding one
Section titled “Adding one”Name it
For your own reference in the list.
Give it a URL
Where UseNadia should POST.
Choose the scope
All integrations, or a specific set of channels. Scoping by channel is how you route a client’s posts to that client’s system.
Send Test
Fires a test call immediately, so you can confirm the endpoint is reachable and see the payload shape before anything real depends on it.
Save
The tab’s header counts your webhooks against a quota of 10,000, which you will not reach.
Events
Section titled “Events”Every delivery is an envelope { id, event, occurredAt, organizationId, data },
signed in the X-Nadia-Signature header. A webhook created from Settings
receives every event; through the Public API (or the
n8n trigger node) it can pick
some.
| 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 |
automation.email_captured is how a comment → DM automation
hands the emails it collects
to a tool other than Brevo: a newsletter,
a CRM, a spreadsheet. Its 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"}personId is the id to message the person with (null until known), pose is
where the template is posed (a post or a story), and postId is the UseNadia
post when there is one.
comment.received fires for every comment someone else writes under a
publication of a connected Instagram channel, replies included. The
account’s own comments never fire it. Its data:
{ "integrationId": "…", "mediaId": "18000000000000000", "postId": "…", "commenter": { "id": "17841400000000000", "username": "marie" }, "comment": { "id": "18100000000000000", "text": "LIEN", "parentId": null }, "receivedAt": "2026-10-21T09:30:00.000Z"}postId is the UseNadia post the publication came from (null for one
published elsewhere), parentId the comment a reply answers.
dm.received fires for every direct message someone else sends to a
connected Instagram channel: text, story replies, media. Your own messages,
read receipts and reactions never fire it, nor does a tap on an automation’s
button (that is automation.*). Its data:
{ "integrationId": "…", "sender": { "id": "1234567890123456", "username": "marie" }, "message": { "id": "aWdfZAG1…", "text": "Is the guide still available?", "storyId": null }, "conversationId": "aWdfZAG06…", "receivedAt": "2026-10-21T09:30:00.000Z"}sender.id is the id to answer the person with. sender.username and
conversationId are null until the inbox has synced that conversation once;
storyId is the story a reply answers.
Building the receiver
Section titled “Building the receiver”Always Send Test first and capture the body: that is the contract, and it is more reliable than any description here.
Two habits worth having:
- Return 2xx quickly, then do the work asynchronously. A slow endpoint is indistinguishable from a broken one.
- Be idempotent. Treat a repeated delivery as a no-op rather than posting twice.
When a webhook stops firing
Section titled “When a webhook stops firing”The endpoint is not publicly reachable
UseNadia calls from its servers, so localhost and private network addresses will not work. Use a tunnel while developing.
The endpoint is returning an error
Check your own logs first, then use Send Test to reproduce.
The webhook is scoped to the wrong channels
A webhook scoped to specific integrations stays silent for everything else. Re-check the scope.
The post never published
A webhook fires on a successful publish. A post that errored, or that was sent but never confirmed by the platform, produces no call. Check the post on the calendar first.
Related
Section titled “Related”Webhooks tell you when UseNadia acted. To make UseNadia act, use the Public API, the CLI, or MCP.