Dynamo Developer DocsDynamo Developer Docs
Core Concepts

Superpowers

Attach engagement automation — auto-replies, DMs, auto-likes, raffles — per channel.

A superpower is engagement automation attached to a post per channel, at channels[<id>].superpower. Once the post is live it can auto-reply to comments, send DMs, auto-like, run raffles and giveaways, and more. It's the most complex part of the payload.

A superpower only acts on a live post when a real comment arrives via the platform webhook. Creating or scheduling a post does not trigger any replies. The engine also re-mints id / groupId on publish, so you don't supply them.

Two ways to attach

Reference a superpower (or template) that was authored and validated in the app, by its creativeTemplateId from GET /superpowers:

"superpower": { "creativeTemplateId": "<id from GET /superpowers>" }

When you reference one, the inline field requirements below are not enforced — it was already validated. This is the recommended path for anything non-trivial.

Option B — build one inline

Provide the full object yourself. Minimum viable inline superpower (auto-reply to every comment):

"superpower": {
  "name": "My SP",
  "hashtag": "myuniquehashtag",
  "active": true,
  "templateType": "CONDITIONAL",
  "conditionalTemplateType": "GENERAL",
  "conditionGroups": [
    {
      "name": "All comments",
      "conditions": [
        { "conditionType": "USER_ACTION", "userActionType": "COMMENTED", "values": ["any"] }
      ],
      "publicReplies": [
        { "scope": "PUBLIC", "text": "Thanks for commenting, @[mention_user]!" }
      ],
      "autoLike": true,
      "autoLikeProbability": 1,
      "probability": 1,
      "publicRepliesProbability": 1
    }
  ]
}

The inline object model

A superpower is a tree: conditionGroupsconditions (what to match) → replies (what to do).

Condition groups

Each group in conditionGroups[] matches some comments and reacts to them:

  • conditions — matching rules (see below). Empty or absent matches everything — a GENERAL catch-all.
  • publicReplies — comment replies.
  • privateReplies — DMs.
  • autoLike — auto-like matching comments.
  • autoLikeProbability, probability, publicRepliesProbability — each 0..1. Set to 1 for deterministic behavior.
  • usersLimit, timeLimit, timeLimitUnit (HOUR | MINUTE) — optional caps.

Conditions

Each entry in conditions[]:

  • conditionTyperequired (usually USER_ACTION).
  • userActionTyperequired when conditionType is USER_ACTION.
  • values — required and non-empty for COMMENT_CONTAINS and MENTION_FRIENDS. COMMENTED is the catch-all and needs no values.

Replies (type-aware)

A reply has a scope and a payload.

  • Public replies (scope: "PUBLIC") are plain comment replies — just text.
  • Private replies (DMs) must declare a broadcastMessageType, and the payload must match it:
broadcastMessageTypeRequired payload
REGULARtext (and/or media).
INTERACTIVE / WINDOW_OPENING_INTERACTIONredirects — ≥1 button, each with a title (text / description).
CAROUSELcarouselItems — ≥2.
COUPONmedia + text + couponCode + a button with text and a valid url.
OFFERtext / media.

A button (an entry in redirects) looks like:

{ "text": "Get 10% off ⚡", "url": "https://example.com" }

Per-template requirements

conditionalTemplateType drives extra validation:

  • RAFFLE — needs the full raffle block (winnersLimit, startDate, endDate, endedComment, winnersPrivateReply).
  • RAPID_RAFFLE — needs globalUsersLimit > 0 and globalTimeLimit > 0.
  • VOTE — needs globalTimeLimit > 0.

Incomplete per-type config returns 422.

Raffle block
"raffle": {
  "winnersLimit": 1,
  "startDate": "2026-06-01",
  "endDate": "2026-06-10",
  "endedComment": { "text": "Raffle ended!" },
  "winnersPrivateReply": { "scope": "PRIVATE", "text": "You won!", "broadcastMessageType": "REGULAR" }
}

Validation highlights

  • name is required; hashtag is required, ≥3 characters, and unique within the org — a collision (or two channels reusing the same hashtag in one request) returns 409.
  • All enums are validated; probabilities must be 0..1.
  • Replies must match their broadcastMessageType (see the table above).
  • Unknown extra fields are tolerated (forward-compatible) — except at the channel level, where typos are rejected.

See GET /superpowers and POST /scheduled-posts.

On this page