---
title: "Comment received event"
method: POST
path: "comment.received"
tags: ["Webhook Events"]
---

# Comment received event

`POST comment.received` (webhook)

Fired when a new comment is received on a tracked post.

## Payload

- WebhookPayloadComment — Webhook payload for comment received events (Instagram, Facebook, Twitter/X, YouTube, LinkedIn, Bluesky, Reddit)
  - `id` string, required — Stable webhook event ID
  - `event` 'comment.received', required
  - `comment` object, required
    - `id` string, required — Platform comment ID
    - `postId` string, nullable, required — Internal post ID (null for posts not published through Zernio)
    - `platformPostId` string, required — Platform's post ID
    - `platform` 'instagram' | 'facebook' | 'twitter' | 'youtube' | 'linkedin' | 'bluesky' | 'reddit', required
    - `text` string, required — Comment text content
    - `author` object, required
      - `id` string, required — Author's platform ID
      - `username` string
      - `name` string
      - `picture` string, nullable
      - `instagramProfile` object — Instagram only, best-effort. Present ONLY for commenters who have messaged the account before: Meta gates the follow relationship behind messaging consent, and commenting does not grant it. Absent otherwise - treat a missing object as "unknown", never as "not a follower". To check on demand, call GET /v1/accounts/{accountId}/follow-status/{userId}.
        - `isFollower` boolean, nullable — The commenter follows this account.
        - `isFollowing` boolean, nullable — This account follows the commenter.
        - `followerCount` integer, nullable
        - `isVerified` boolean, nullable
    - `createdAt` string, date-time, required
    - `isReply` boolean, required — Whether this is a reply to another comment
    - `parentCommentId` string, nullable, required — Parent comment ID if this is a reply
    - `ad` object — Ad context. Present only when the comment was made on paid content. Instagram: populated from the webhook payload's value.media.ad_id and value.media.ad_title. Facebook: populated via a Graph API lookup of the parent post's promotion_status. Absent for comments on organic posts that are not currently promoted.
      - `id` string — Meta ad ID (Instagram only).
      - `title` string — Ad creative title (Instagram only).
      - `promotionStatus` string — Facebook promotion status returned by Graph API. Common values: "active" (organic post currently boosted), "ineligible" (dark post or ad creative, not promotable because it already is an ad).
    - `attachment` object — Facebook only. Present on graphic-only comments (sticker, GIF, photo) that carry no text. URLs are ephemeral and may expire for Meta platforms (oe= expiry), so fetch promptly. Instagram comments do not support attachments.
      - `type` string, required — Attachment type: sticker, animated_image_share, or photo.
      - `imageUrl` string — Rendered image/preview URL (from attachment.media.image.src).
      - `url` string — Source URL (from attachment.url). For GIFs this is an l.facebook.com redirect.
  - `post` object, required
    - `id` string, nullable, required — Internal post ID (null for posts not published through Zernio)
    - `platformPostId` string, required — Platform's post ID
  - `account` object, required
    - `id` string, required — Social account ID
    - `accountId` string — Social account ID (same as id); canonical field for account filtering.
    - `platform` string, required
    - `username` string, required
  - `timestamp` string, date-time, required

## Acknowledgement `200`

Webhook received successfully

---

[API](https://skmtc.net/zernio/apis/zernio-api.md) · [All operations](https://skmtc.net/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/zernio/zernio-api/versions/51932b099b2f/schema)
