---
title: "List comment-to-DM automations"
method: GET
path: "/v1/comment-automations"
tags: ["Comment Automations"]
---

# List comment-to-DM automations

`GET /v1/comment-automations`

List all comment-to-DM automations for a profile. Returns automations with their stats.

## Query parameters

- `profileId` string

## Response `200`

Automations list

- object
  - `success` boolean
  - `automations` object[]
    - `id` string
    - `name` string
    - `platform` 'instagram' | 'facebook'
    - `trigger` 'comment' | 'story_reply'
    - `accountId` string
    - `platformPostId` string
    - `postTitle` string
    - `keywords` string[]
    - `matchMode` 'exact' | 'contains' | 'word' — How a keyword is compared with the comment. 'contains' (default) matches anywhere, even inside another word (keyword 'app' fires on 'happy'). 'word' matches the keyword only as a standalone word. 'exact' requires the whole comment to be exactly the keyword.
    - `excludeKeywords` string[] — Comments containing one of these never trigger the automation, even when a trigger keyword also matches. Compared using the same matchMode.
    - `typoTolerance` boolean — Only with matchMode=word: also fire on close misspellings of a keyword (one edit for 4-7 character keywords, two from 8 up). Keywords shorter than 4 characters are never fuzzy-matched.
    - `dmMessage` string
    - `buttons` DmButton[] — Inline DM buttons (up to 3). Omitted when none are set.
      - `type` 'url' | 'postback' | 'phone', required
      - `title` string, required — Button label (20 chars max)
      - `url` string, uri — Target URL (required when type is url)
      - `payload` string — Postback payload delivered via the messaging_postbacks webhook (required when type is postback)
      - `phone` string — Phone number, e.g. +14155551234 (required when type is phone; Facebook only)
    - `template` CommentAutomationTemplate — A Meta generic template (product card) sent as the automation's first DM. It REPLACES the plain `dmMessage` bubble: a Meta message carries one body shape, and a comment gets exactly one private reply, so the card and the text cannot both be delivered. Put your selling copy in `subtitle`. Mutually exclusive with `buttons` (sending both is a 400). Works on both the `comment` and `story_reply` triggers. Up to 10 elements, rendered as a horizontally swipeable carousel. Rendering confirmed on the Instagram and Messenger mobile apps.
      - `type` 'generic', required
      - `elements` CommentAutomationTemplateElement[], required
        - `title` string, required — Card headline (80 chars max). Also used as the Inbox preview for the sent DM.
        - `subtitle` string — Card description, e.g. the price or a short pitch (80 chars max).
        - `imageUrl` string, uri — Publicly reachable http(s) image rendered large above the card.
        - `buttons` object[] — Up to 3 card buttons. A generic template has NO phone button, on either platform. `url` buttons are click-tracked when linkTracking is on.
          - `type` 'url' | 'postback', required
          - `title` string, required
          - `url` string, uri — Target URL (required when type is url)
          - `payload` string — Postback payload delivered via the messaging_postbacks webhook (required when type is postback)
    - `commentReply` string
    - `dmMessageVariations` string[] — Alternate DM texts rotated at random with dmMessage. Omitted when none.
    - `commentReplyVariations` string[] — Alternate public replies rotated at random with commentReply. Omitted when none.
    - `linkTracking` boolean — Whether link buttons in the DM are wrapped in a tracked redirect to count clicks.
    - `clickTag` string — Tag applied to a contact when they click a tracked link.
    - `dmDelaySeconds` integer — Seconds waited after the trigger before the DM is sent. Absent when the DM goes out immediately.
    - `commentReplyDelaySeconds` integer — Seconds waited before the public reply is posted. Absent when it follows the DM immediately.
    - `alsoMatchInDms` boolean — Whether these keywords also fire on a plain inbound DM.
    - `isActive` boolean
    - `stats` object
      - `triggered` integer
      - `dmsSent` integer
      - `dmsFailed` integer
      - `uniqueContacts` integer
      - `trackedSends` integer — DMs sent with a trackable (wrapped) link. CTR denominator: divide clicks by this, not dmsSent. Lags dmsSent for campaigns that predate click tracking.
      - `linkClicks` integer — Total clicks on tracked links (bots/prefetch excluded).
      - `uniqueClicks` integer — Distinct people who clicked a tracked link.
      - `delivered` integer — DMs confirmed delivered (Messenger; IG emits no delivery receipt).
      - `read` integer — DMs confirmed read (IG messaging_seen / Messenger message_reads).
    - `createdAt` string, date-time

## Other responses

- `400` — Invalid request
- `401` — Unauthorized

---

[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/revisions/f81ca70ea6b9/schema)
