rizamodocs
Comment automations

Create a comment automation

POST
/comment-automations

A comment that matches a keyword, on one post or on any post of an Instagram account or Facebook Page, gets a private reply with the message and its link behind a button, once per person by default. Optionally one of up to 5 public replies is posted under it afterwards, and its thread is marked done. On Instagram a follow gate can ask them to follow and reply first, with a button that replies for them. Only top-level comments from others count, made after the automation starts; Rizamo reads comments every few minutes, so answers go out within minutes. Meta takes one private reply per comment, within 7 days of it. An account sends a set number of automated messages a day at most (dailyCap in the numbers), paced well under Meta's limits. Not on TikTok: automations answer by private message, and TikTok does not offer its messaging API to accounts in the EEA, Switzerland or the UK, so a TikTok account is refused with that reason.

Authorization

apiKey
headerAuthorizationBearer <token>

An API key from the web app, under Developers. It starts with rz_live_.

Header Parameters

Idempotency-Key?string

1 to 255 printable characters, new for each request (a UUID); the body up to 1 MB. For 24 hours a repeat with the same key, path and body gets the first answer, with Idempotent-Replayed: true, instead of running again; 5xx, 409 and 429 answers are not kept. Errors, Retries, has the rest.

Length1 <= length <= 255

Request Body

application/json
  1. body
name*string

For people: "Guide on the October reel".

Length1 <= length <= 80
keywords?array<>

Any of them triggers it, in any case and with or without accents. Empty: every comment.

Itemsitems <= 20
Default[]
match?string

contains: the keyword anywhere, even inside a longer word. word (the default): as a whole word or phrase. exact: the whole comment is the keyword, give or take punctuation and spaces. Always in any case and with or without accents.

Default"word"
Value in"contains""word""exact"
exclude?array<>

A comment with any of these, as whole words, never triggers it.

Itemsitems <= 20
Default[]
message*

The private reply: its text, and the link behind a button.

publicReplies?array<>

Up to 5. After the private reply goes out, one is posted under the comment, picked at random, so the replies do not all read the same.

Itemsitems <= 5
Default[]
markDone?boolean

Mark the comment's thread done once the private reply went out. Off when left out.

Defaultfalse
followGate?|

Instagram only. The private reply asks them to follow and reply, with a button that replies for them; their reply gets the message if they follow, or the reminder once.

Defaultnull
oncePerPerson?boolean

One message per person, however many times they comment. On when left out.

Defaulttrue
utm?|

UTM tags added to every address in the message, so your own analytics (Google Analytics and the like) see which network and automation brought each visitor; the Rizamo links send people to the tagged address. A tag left out takes its default: source the network (instagram or facebook), medium social, campaign the name as a slug ("Guide on the October reel" is guide-on-the-october-reel). An empty one adds none, and a tag already in an address stays as it is. Null: none. Changing the tags, or the name while the campaign is its slug, makes new links for the new addresses; the automation's link clicks add up across them. Left out on a new automation: on, with every default.

Default{}
status?string

active (the default) answers comments made from now on; paused saves it without answering.

Default"active"
Value in"active""paused"
accountId*string

The Instagram account or Facebook Page (acc_) whose comments it answers (not TikTok: see Create a comment automation). It cannot change.

Lengthlength <= 100
networkPostId?|

One post on the network (npost_, from List posts on the networks). It cannot change.

Defaultnull
postId?|

Or one Rizamo post (post_) with a target on the account, scheduled or live: it starts once the post is live there. It cannot change.

Defaultnull

Response Body

OK

application/json
  1. response
id*string
profileId*string
accountId*string
network*Network
Value in"instagram""facebook""threads""linkedin""tiktok""youtube""x""pinterest""google"
name*string
status*string

Paused: comments are not answered, and those that arrive meanwhile never will be.

Value in"active""paused"
pausedReason*|

Why Rizamo paused it, such as a permission Meta refused or a link of the message that stopped working: fix it, then resume. Null when it is active or someone paused it.

networkPostId*|

Only comments on this post on the network (List posts on the networks). Null with postId null: every post of the account, new ones too.

postId*|

Only comments on this Rizamo post, on the account: it can be scheduled, and the automation starts when it goes live there.

armed*boolean

False while its Rizamo post is not live on the account yet.

keywords*array<string>

Any of them triggers it. Empty: every comment.

match*string

contains: the keyword anywhere, even inside a longer word. word (the default): as a whole word or phrase. exact: the whole comment is the keyword, give or take punctuation and spaces. Always in any case and with or without accents.

Value in"contains""word""exact"
exclude*array<string>

A comment with any of these, as whole words, never triggers it.

message*
links*array<>

The Rizamo links in the message, one per web address.

utm*|

The UTM tags on every address in the message, which its Rizamo links send people to (Get a short link shows each address), so your analytics see the network and the automation. Null: none.

publicReplies*array<string>

After the private reply goes out, one of these is posted under the comment, picked at random. Empty: none.

markDone*boolean

Marks the comment's thread done in the inbox once the private reply went out.

followGate*|null
oncePerPerson*boolean

One message per person for this automation, however many times they comment. On by default.

stats*
createdBy*|||
createdAt*string
Formatdate-time
updatedAt*string
Formatdate-time
Example Request
curl -X POST 'https://api.rizamo.com/v1/comment-automations' \  -H 'Idempotency-Key: 4b9e7c1a-2f3d-4e8a-9c6b-1d2e3f4a5b6c' \  -H 'Content-Type: application/json' \  -d '{  "name": "Winter menu guide",  "accountId": "acc_01m423bp00fz39kp5pc7m42tsw",  "networkPostId": "npost_01m4fkyer0em9939e5rz4f89v7",  "keywords": [    "menu",    "guide"  ],  "message": {    "text": "Here is our winter menu, with every drink and pastry of the season.",    "link": "https://cafelumen.pt/menu",    "button": "See the menu"  },  "publicReplies": [    "Sent it to your messages!",    "Check your DMs!"  ],  "markDone": true}'
Example Response
{  "id": "cauto_01m4h40hg0f4wa1w5cfcgpjrp3",  "profileId": "prof_01m40k9k80fxd8cvng8derm7g9",  "accountId": "acc_01m423bp00fz39kp5pc7m42tsw",  "network": "instagram",  "name": "Winter menu guide",  "status": "active",  "pausedReason": null,  "networkPostId": "npost_01m4fkyer0em9939e5rz4f89v7",  "postId": null,  "armed": true,  "keywords": [    "menu",    "guide"  ],  "match": "word",  "exclude": [],  "message": {    "text": "Here is our winter menu, with every drink and pastry of the season.",    "link": "https://cafelumen.pt/menu",    "button": "See the menu"  },  "links": [    {      "url": "https://cafelumen.pt/menu",      "shortUrl": "https://go.rizamo.com/w2Lp9d",      "linkId": "lnk_01m4t4e1c0f7a1rq4q3s7d2c8b"    }  ],  "utm": {    "source": "instagram",    "medium": "social",    "campaign": "winter-menu-guide"  },  "publicReplies": [    "Sent it to your messages!",    "Check your DMs!"  ],  "markDone": true,  "followGate": null,  "oncePerPerson": true,  "stats": {    "triggered": 0,    "sent": 0,    "waiting": 0,    "skipped": 0,    "failed": 0,    "expired": 0,    "failures": [],    "linkClicks": 0,    "followGate": null,    "sentToday": 0,    "dailyCap": 750  },  "createdBy": {    "type": "user",    "userId": "user_01m4pc7v40fdm89vjt5k51b5h8",    "name": "Ana Costa",    "initials": "AC"  },  "createdAt": "2026-11-06T09:30:00.000Z",  "updatedAt": "2026-11-06T09:30:00.000Z"}