Create a comment automation
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.
apiKeyAuthorizationBearer <token>An API key from the web app, under Developers. It starts with rz_live_.
Idempotency-Key?string1 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.
1 <= length <= 255application/json- body
name*stringFor people: "Guide on the October reel".
1 <= length <= 80keywords?array<>Any of them triggers it, in any case and with or without accents. Empty: every comment.
items <= 20[]match?stringcontains: 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.
"word""contains""word""exact"exclude?array<>A comment with any of these, as whole words, never triggers it.
items <= 20[]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.
items <= 5[]markDone?booleanMark the comment's thread done once the private reply went out. Off when left out.
falsefollowGate?|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.
nulloncePerPerson?booleanOne message per person, however many times they comment. On when left out.
trueutm?|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.
{}status?stringactive (the default) answers comments made from now on; paused saves it without answering.
"active""active""paused"accountId*stringThe Instagram account or Facebook Page (acc_) whose comments it answers (not TikTok: see Create a comment automation). It cannot change.
length <= 100networkPostId?|One post on the network (npost_, from List posts on the networks). It cannot change.
nullpostId?|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.
nullOK
application/json- response
id*stringprofileId*stringaccountId*stringnetwork*Network"instagram""facebook""threads""linkedin""tiktok""youtube""x""pinterest""google"name*stringstatus*stringPaused: comments are not answered, and those that arrive meanwhile never will be.
"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*booleanFalse while its Rizamo post is not live on the account yet.
keywords*array<string>Any of them triggers it. Empty: every comment.
match*stringcontains: 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.
"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*booleanMarks the comment's thread done in the inbox once the private reply went out.
followGate*|nulloncePerPerson*booleanOne message per person for this automation, however many times they comment. On by default.
stats*createdBy*|||createdAt*stringdate-timeupdatedAt*stringdate-timecurl -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}'{ "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"}List comment automations GET
Newest first, with their numbers so far. Every one without `limit`; with it, a page at a time: pass `nextCursor` as `cursor` for the next one, with the same filters.
Get a comment automation GET
One comment automation: its settings, whether it is armed or paused and why, and its numbers so far.