The Card Template action sends visually rich, interactive cards in Instagram DMs. Each card can have an image, a title, a subtitle, and up to three buttons, giving your contacts a clear, tappable way to take action.
⚠️ Card Template is an advanced, developer-focused action. In the visual builder it's only visible to developer organizations, but anyone on a Pro or Trial plan can add it through the API or MCP. If you don't see it in the step picker, build it programmatically (see below).
What it does
A card template sends one or more cards in a single DM. Each card has:
Image: upload one, or let Inrō fetch it from a URL using OpenGraph.
Title and subtitle: short text describing the card.
Buttons (up to 3 per card), each one either:
Postback: triggers a branch in your scenario when tapped.
Web URL: opens an external link in the contact's browser.
How to set it up (visual builder)
In your scenario, add a Card Template action.
Click a card to open its edit panel.
Fill in the title, subtitle, and image (upload, or enable Fetch from URL for automatic OpenGraph detection).
Add up to 3 buttons per card. For each, choose the type: - Postback: enter a label; Inrō generates the payload. - Web URL: enter a label and the destination URL.
Repeat for each card.
Save the action. Your scenario branches are created automatically from your buttons.
Build it via the API
Add a card_template action to your scenario JSON (see Build and Update Automations Programmatically via API & MCP). Each card takes a title, an optional subtitle, an image (image_url to fetch one, or media_file_id for an uploaded file), and a buttons array. Each button is either a postback ({ "title": "...", "payload": "..." }) or a web link ({ "title": "...", "type": "web_url", "url": "..." }).
Call get_action_types for the exact option schema before you build. The action branches on button taps, so wire your follow-up steps to the branches below.
Click tracking and branches
Inrō creates a scenario branch for each postback button, so you can route contacts by what they tap. You choose how clicks are counted:
Single click (default): one branch fires for any button tapped on a card. Best for simple yes/no choices. Over the API this is the single
option_0branch.Multiple clicks: each postback button gets its own branch (
option_0,option_1, and so on), so a contact can tap several and trigger multiple paths. Turn this on per card or for the whole action.
An expired branch (option_expired) is also created automatically, for when the card's interaction window passes.
Using variables in cards
After a contact taps a postback button, you can use these variables in later steps:
{{ button.label }}: the label of the button they tapped.{{ button.payload }}: the internal payload value.{{ button.card_title }}: the title of the card they tapped.
🐾 Netsuke's Tips
Use Web URL buttons for external links: they open a browser straight away, so they're ideal for sending contacts to your site, a product page, or a booking link.
Turn on OpenGraph fetch when your image URL comes from a web page. Inrō pulls the preview image automatically, so you don't have to upload one per card.
What's next?
Message Actions: Text, Media, Files & Buttons for the other ways to send buttons and media in a scenario.
Build and Update Automations Programmatically via API & MCP to add this action from your own code.
