Skip to content

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.

  1. Name it

    For your own reference in the list.

  2. Give it a URL

    Where UseNadia should POST.

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

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

  5. Save

    The tab’s header counts your webhooks against a quota of 10,000, which you will not reach.

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.

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

Webhooks tell you when UseNadia acted. To make UseNadia act, use the Public API, the CLI, or MCP.