Skip to content
Developer docs Event catalogue

Webhook events

Every event CommentGate can send, with an example body. Webhooks added in Settings, then Alerts, can take any of them; REST hooks (and so Zapier and Make) can subscribe to the ones marked. The examples are built by the same code that builds real deliveries.

Updated September 26, 2026

All events

EventSent whenREST hooks
comment.receivedEvery new commentYes
comment.hiddenA comment was hiddenYes
comment.reviewA comment needs reviewYes
comment.needs_replyA comment needs a replyYes
message.receivedA new direct messageYes
lead.capturedA buyer lead came inYes
contact.updatedA person's details changedYes
rule.matchedA rule matchedSettings only
spikeA sudden rush of harmful commentsSettings only
connection.needs_reauthAn account needs reconnectingSettings only
digest.dailyDaily digestSettings only
ad.healthAn ad draws unusually many harmful or negative commentsSettings only
insights.weeklyWeekly summarySettings only

comment.received

Every new comment, once it has been decided. comment.status says what happened: visible, hidden, deleted or review, the same names as the REST API. The old legacy_status field (with allowed for a visible comment) stays until the next release.

Webhooks in Settings, REST hooks, Zapier and Make.

Example body
{
  "id": "sample_comment.received",
  "event": "comment.received",
  "created_at": "2026-09-22T18:22:30Z",
  "workspace_id": "a5bf2b64-1c0e-4f8a-9d3b-2e7c6f5a4b19",
  "url": "https://commentgate.com/app/inbox",
  "comment": {
    "id": "sample-comment",
    "platform": "instagram",
    "surface": "ad",
    "status": "visible",
    "legacy_status": "allowed",
    "text": "Do these come in wide sizes?",
    "author_name": "Maya Thompson",
    "author_handle": "mayahikes",
    "ad_name": "Alder Trail Boot, fall launch, video 15s",
    "account_name": "Wildermere",
    "reason": null,
    "rule_name": null,
    "created_at": "2026-09-22T18:22:30Z"
  }
}

comment.hidden

A comment was hidden or deleted, by the autopilot, a rule or a person.

Webhooks in Settings, REST hooks, Zapier and Make.

Example body
{
  "id": "sample_comment.hidden",
  "event": "comment.hidden",
  "created_at": "2026-09-22T18:22:30Z",
  "workspace_id": "a5bf2b64-1c0e-4f8a-9d3b-2e7c6f5a4b19",
  "url": "https://commentgate.com/app/inbox",
  "comment": {
    "id": "sample-comment",
    "platform": "instagram",
    "surface": "ad",
    "status": "hidden",
    "legacy_status": "hidden",
    "text": "Congratulations! You were picked as our giveaway winner. DM me to claim",
    "author_name": "Giveaway Team",
    "author_handle": "giveaway.team.official",
    "ad_name": "Alder Trail Boot, fall launch, video 15s",
    "account_name": "Wildermere",
    "reason": "scam 0.99",
    "rule_name": "Hide scams",
    "created_at": "2026-09-22T18:22:30Z"
  }
}

comment.review

A comment is waiting for a person (Needs you).

Webhooks in Settings, REST hooks, Zapier and Make.

Example body
{
  "id": "sample_comment.review",
  "event": "comment.review",
  "created_at": "2026-09-22T18:22:30Z",
  "workspace_id": "a5bf2b64-1c0e-4f8a-9d3b-2e7c6f5a4b19",
  "url": "https://commentgate.com/app/inbox",
  "comment": {
    "id": "sample-comment",
    "platform": "instagram",
    "surface": "ad",
    "status": "review",
    "legacy_status": "review",
    "text": "Mine fell apart after two weeks. Not impressed.",
    "author_name": "Maya Thompson",
    "author_handle": "mayahikes",
    "ad_name": "Alder Trail Boot, fall launch, video 15s",
    "account_name": "Wildermere",
    "reason": "negative 0.62",
    "rule_name": null,
    "created_at": "2026-09-22T18:22:30Z"
  }
}

comment.needs_reply

A comment asks something the brand should answer.

Webhooks in Settings, REST hooks, Zapier and Make.

Example body
{
  "id": "sample_comment.needs_reply",
  "event": "comment.needs_reply",
  "created_at": "2026-09-22T18:22:30Z",
  "workspace_id": "a5bf2b64-1c0e-4f8a-9d3b-2e7c6f5a4b19",
  "url": "https://commentgate.com/app/inbox",
  "comment": {
    "id": "sample-comment",
    "platform": "instagram",
    "surface": "ad",
    "status": "visible",
    "legacy_status": "allowed",
    "text": "Do these come in wide sizes?",
    "author_name": "Maya Thompson",
    "author_handle": "mayahikes",
    "ad_name": "Alder Trail Boot, fall launch, video 15s",
    "account_name": "Wildermere",
    "reason": null,
    "rule_name": null,
    "created_at": "2026-09-22T18:22:30Z"
  }
}

message.received

A new direct message, at most one delivery per conversation every 10 minutes. message.unread counts their messages nobody has read yet.

Webhooks in Settings, REST hooks, Zapier and Make.

Example body
{
  "id": "sample_message.received",
  "event": "message.received",
  "created_at": "2026-09-22T18:22:30Z",
  "workspace_id": "a5bf2b64-1c0e-4f8a-9d3b-2e7c6f5a4b19",
  "url": "https://commentgate.com/app/messages",
  "message": {
    "conversation_id": "sample-conversation",
    "platform": "instagram",
    "text": "Hi! Is the Alder Trail Boot true to size?",
    "participant_name": "Maya Thompson",
    "participant_handle": "mayahikes",
    "account_name": "Wildermere",
    "unread": 1,
    "sent_at": "2026-09-22T18:22:30Z"
  }
}

lead.captured

A comment showed purchase intent and was captured as a lead. comment is the comment; lead.score is the purchase-intent confidence (0 to 1, or null) and lead.link_url the tracked link sent in a private message, if any.

Webhooks in Settings, REST hooks, Zapier and Make.

Example body
{
  "id": "sample_lead.captured",
  "event": "lead.captured",
  "created_at": "2026-09-22T18:22:30Z",
  "workspace_id": "a5bf2b64-1c0e-4f8a-9d3b-2e7c6f5a4b19",
  "url": "https://commentgate.com/app/inbox",
  "comment": {
    "id": "sample-comment",
    "platform": "instagram",
    "surface": "ad",
    "status": "visible",
    "legacy_status": "allowed",
    "text": "How much are these? I need a pair before my trip",
    "author_name": "Maya Thompson",
    "author_handle": "mayahikes",
    "ad_name": "Alder Trail Boot, fall launch, video 15s",
    "account_name": "Wildermere",
    "reason": null,
    "rule_name": null,
    "created_at": "2026-09-22T18:22:30Z"
  },
  "lead": {
    "score": 0.91,
    "link_url": "https://commentgate.com/r/k7Qm2x",
    "private_reply_sent": true
  }
}

contact.updated

A contact's email, phone, tags or fields changed (a DM capture, a campaign, a person, or the API). There is no comment: the body carries contact and changed, which lists email, phone, tags, fields, name or merged.

Webhooks in Settings, REST hooks, Zapier and Make.

Example body
{
  "id": "sample_contact.updated",
  "event": "contact.updated",
  "created_at": "2026-09-22T18:22:30Z",
  "workspace_id": "a5bf2b64-1c0e-4f8a-9d3b-2e7c6f5a4b19",
  "url": "https://commentgate.com/app/campaigns/people?person=3c1f7a52-8e0b-4d59-a2b7-6f4e1d9c0a18",
  "changed": [
    "email"
  ],
  "contact": {
    "id": "3c1f7a52-8e0b-4d59-a2b7-6f4e1d9c0a18",
    "platform": "instagram",
    "account_id": "cf2d0cac-6c2e-4510-8d91-4ce6545d7202",
    "account_name": "Wildermere",
    "name": "Maya Thompson",
    "handle": "mayahikes",
    "email": "<their email>",
    "phone": "+15125550142",
    "tags": [
      "restock",
      "vip"
    ],
    "fields": {
      "shoe size": "9"
    },
    "follows_you": true,
    "last_message_at": "2026-09-24T21:02:11.000Z",
    "created_at": "2026-09-20T15:40:03.000Z",
    "updated_at": "2026-09-24T21:05:40.000Z"
  }
}

rule.matched

A rule set to notify this webhook matched a comment. comment.rule_name names the rule.

Webhooks in Settings, then Alerts.

Example body
{
  "id": "sample_rule.matched",
  "event": "rule.matched",
  "created_at": "2026-09-22T18:22:30Z",
  "workspace_id": "a5bf2b64-1c0e-4f8a-9d3b-2e7c6f5a4b19",
  "url": "https://commentgate.com/app/inbox?c=sample-comment",
  "comment": {
    "id": "sample-comment",
    "platform": "instagram",
    "surface": "ad",
    "status": "hidden",
    "legacy_status": "hidden",
    "text": "Use code FREEBOOTS at my shop for 90% off, link in bio",
    "author_name": "Deals Daily",
    "author_handle": "deals.daily.shop",
    "ad_name": "Alder Trail Boot, fall launch, video 15s",
    "account_name": "Wildermere",
    "reason": "spam 0.97",
    "rule_name": "Hide discount code spam",
    "created_at": "2026-09-22T18:22:30Z"
  }
}

spike

Hidden comments spiked. spike.hidden_last_15_minutes is the last 15 minutes, spike.hourly_average the average per 15 minutes over the previous 24 hours.

Webhooks in Settings, then Alerts.

Example body
{
  "id": "sample_spike",
  "event": "spike",
  "created_at": "2026-09-22T18:22:30Z",
  "workspace_id": "a5bf2b64-1c0e-4f8a-9d3b-2e7c6f5a4b19",
  "url": "https://commentgate.com/app/inbox?view=hidden",
  "spike": {
    "hidden_last_15_minutes": 38,
    "hourly_average": 3
  }
}

connection.needs_reauth

A connected account stopped working and someone has to sign in again. connection.name is the account, connection.reason why, in words.

Webhooks in Settings, then Alerts.

Example body
{
  "id": "sample_connection.needs_reauth",
  "event": "connection.needs_reauth",
  "created_at": "2026-09-22T18:22:30Z",
  "workspace_id": "a5bf2b64-1c0e-4f8a-9d3b-2e7c6f5a4b19",
  "url": "https://commentgate.com/app/accounts",
  "connection": {
    "name": "Wildermere (Instagram)",
    "reason": "The login expired. Sign in again to keep moderating."
  }
}

digest.daily

The day's totals, once a day: comments received, hidden, replies sent, and how many are waiting.

Webhooks in Settings, then Alerts.

Example body
{
  "id": "sample_digest.daily",
  "event": "digest.daily",
  "created_at": "2026-09-22T18:22:30Z",
  "workspace_id": "a5bf2b64-1c0e-4f8a-9d3b-2e7c6f5a4b19",
  "url": "https://commentgate.com/app/inbox?view=review",
  "digest": {
    "date_label": "Tuesday, September 22",
    "received": 212,
    "hidden": 17,
    "replies_sent": 9,
    "waiting": 4
  }
}

ad.health

An ad's harmful or negative share jumped against its own previous 7 days. Checked hourly, at most once a day per ad. ad_health.rate and baseline_rate are 0 to 1.

Webhooks in Settings, then Alerts.

Example body
{
  "id": "sample_ad.health",
  "event": "ad.health",
  "created_at": "2026-09-22T18:22:30Z",
  "workspace_id": "a5bf2b64-1c0e-4f8a-9d3b-2e7c6f5a4b19",
  "url": "https://commentgate.com/app/reports/ads/6f1d2c3b-4a5e-4f60-8b7a-9c0d1e2f3a4b",
  "ad_health": {
    "ad_name": "Alder Trail Boot, fall launch, video 15s",
    "platform": "facebook",
    "account_name": "Wildermere US",
    "metric": "negative",
    "comments": 64,
    "matching": 21,
    "rate": 0.328,
    "baseline_rate": 0.06,
    "window_hours": 6,
    "ads_manager_url": null
  }
}

insights.weekly

Monday's summary of the week's comments: questions, complaints and praise, with the biggest theme of each.

Webhooks in Settings, then Alerts.

Example body
{
  "id": "sample_insights.weekly",
  "event": "insights.weekly",
  "created_at": "2026-09-22T18:22:30Z",
  "workspace_id": "a5bf2b64-1c0e-4f8a-9d3b-2e7c6f5a4b19",
  "url": "https://commentgate.com/app/reports/insights?week=2026-09-14",
  "insights": {
    "week_label": "Sep 14 to Sep 20",
    "comments": 1204,
    "questions": 188,
    "complaints": 41,
    "praise": 312,
    "top": [
      {
        "kind": "question",
        "label": "Wide sizes",
        "count": 46
      },
      {
        "kind": "complaint",
        "label": "Shipping to Canada",
        "count": 12
      },
      {
        "kind": "praise",
        "label": "Comfort on long hikes",
        "count": 57
      }
    ]
  }
}

campaign.step

A campaign step "Send to Zapier or a webhook" sends the person to one of the workspace's webhooks or REST hooks. It is signed and retried like every delivery. The id is the run and the step, and stays the same when a step is retried, so you can deduplicate on it.

Example body
{
  "id": "9b8a7c6d-5e4f-4a3b-2c1d-0e9f8a7b6c5d:step_2",
  "event": "campaign.step",
  "created_at": "2026-09-22T19:04:00.000Z",
  "workspace_id": "a5bf2b64-1c0e-4f8a-9d3b-2e7c6f5a4b19",
  "campaign_id": "5c1d2e3f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
  "run_id": "9b8a7c6d-5e4f-4a3b-2c1d-0e9f8a7b6c5d",
  "contact": {
    "id": "3c1f7a52-8e0b-4d59-a2b7-6f4e1d9c0a18",
    "platform": "instagram",
    "account_id": "cf2d0cac-6c2e-4510-8d91-4ce6545d7202",
    "account_name": "Wildermere",
    "name": "Maya Thompson",
    "handle": "mayahikes",
    "email": "<their email>",
    "phone": "+15125550142",
    "tags": [
      "restock",
      "vip"
    ],
    "fields": {
      "shoe size": "9"
    },
    "follows_you": true,
    "last_message_at": "2026-09-24T21:02:11.000Z",
    "created_at": "2026-09-20T15:40:03.000Z",
    "updated_at": "2026-09-24T21:05:40.000Z"
  }
}

In the help center

  • Get alerts in Slack, Discord or email

    Choose where CommentGate tells you about comments that need you, a sudden rush of harmful comments, new leads and more, and exactly which events each place hears about.

  • Connect Zapier and Make

    Start a Zap or a Make scenario when a comment arrives, is hidden, needs you or turns into a lead, and hide, reply or record a sale from any other app.

  • Every step, and where it works

    What each campaign step does, and which of Facebook, Instagram, TikTok, YouTube, Threads and WhatsApp allow it, with the reason when one does not.