Skip to content
Documentation

Rich replies: tables, cards and quick replies in the chat

Let the agent answer with a table to compare options, a row of cards to choose from, or quick-reply buttons for the next step, alongside its text. Learn when it uses them, the limits, how they look in the widget and where else they appear.

With Rich replies on, the agent can show structured content inside the chat, under its text:

  • a table, to compare several things on the same points, such as plans, products or opening hours;
  • cards, a row of options to choose from, each with a title and optionally a picture, a price and buttons;
  • quick replies, short buttons for clear next steps. Tapping one sends its text as the visitor's message.

The agent always writes a text reply as well. Rich replies sit under it, like product cards and booking times.

Turn it on or off

Open your agent, select the Appearance tab and find the Rich replies switch, next to Suggest follow-up questions and Show sources under replies. It's on by default for every agent. Click Save changes to apply a change.

The Playground uses the switch as it is on screen, so you can try it before you save.

Turning it off stops new rich replies. Replies that already showed one keep it in the conversation.

When the agent uses them

The agent decides for each reply. It is told to use rich replies only when they help:

SituationWhat it shows
A comparison of several items on the same pointsA table
Several options the visitor can choose betweenCards
Clear next steps the visitor would pick fromQuick replies

It is told not to use them for a single fact, a yes or no, small talk or a reply that is one short paragraph, and to fill them only with facts from your knowledge, the conversation or the results of your actions, never invented products, prices, links or pictures. Like any AI answer, check important replies in the Playground, and use your instructions to steer it, for example "Show our plans as a table when someone asks about prices."

A rich reply is part of the same reply, so it doesn't use an extra message, and turning the switch on doesn't change how the reply streams. The rich reply appears once the text is complete. A visitor who taps a quick reply or a card's reply button sends a message, which counts like a typed one.

Limits and safety rules

A reply shows at most one table, one row of cards and one set of quick replies.

KindLimits
Table1 to 8 columns and 1 to 20 rows. Each cell is plain text of up to 200 characters, column headers up to 60, an optional caption up to 100. Every row has one cell per column.
Cards1 to 10 cards. Each has a title of up to 80 characters and, optionally, a subtitle of up to 200, a picture, a price written as text of up to 40 (such as "CHF 49" or "from $9/month") and up to 2 buttons. A button either opens a link or sends a reply of up to 120 characters as the visitor's message. Button labels are up to 40 characters.
Quick replies1 to 6 buttons of up to 40 characters each. Repeats are shown once.

intoCHAT checks every rich reply before it's shown:

  • Everything is plain text. HTML is refused, and Markdown marks such as ** are removed.
  • Links and pictures must be full https:// addresses. http://, javascript: and data: links, addresses with a user name or password, and addresses without a domain such as localhost are refused.
  • Quick replies and reply buttons can't contain a link, since their text is sent as the visitor's message.

A table, a row of cards or a set of quick replies that breaks a rule isn't shown at all, never shown in part. The text reply and any other valid rich reply still appear. When your agent also has actions, chat forms or other tools, it's told what was wrong and may fix it in the same reply.

How it looks in the widget

  • Rich replies appear under the agent's message, lined up with it, in your widget's light or dark theme. Link and reply buttons on cards use your Launcher bubble color.
  • A table scrolls sideways on a narrow screen. Several cards form a row that scrolls sideways, with arrows for mouse users. A single card is shown wide.
  • Quick replies show only under the latest reply and disappear once the visitor sends a message. While quick replies are shown, follow-up questions aren't, so the two don't compete.
  • Card links open in a new tab. With Keep campaign tags on links on (see Appearance), they carry your campaign tags like other links in replies.
  • Everything works with the keyboard: buttons and links can be reached with Tab, and the table and the row of cards can be focused and scrolled with the arrow keys. Screen readers announce the table's caption, the number of cards and the group of quick replies.

The widget's own labels, such as "More", "Previous", "Quick replies" and the note that a link opens in a new tab, follow the widget language. The text inside a rich reply is written by the agent, in the language of its reply.

Where else rich replies appear

PlaceWhat you see
Conversations tab and the PlaygroundThe rich reply as the visitor saw it. On the Conversations tab its buttons don't send anything.
Live chat inbox, hand-off email, helpdesk tickets and the CSV exportA text version: a table as lines of cells separated by |, cards as • Title — subtitle — price with their links, quick replies as [Yes] [No].
Slack and email conversationsNot offered: the agent writes plain text there.
REST API and MCP serverA ui field, described below.

In the API

Send a message (without streaming) and Get a conversation add a ui field to an agent reply that showed a rich reply. A reply without one has no ui field. The MCP tools chat_with_agent and get_conversation return the same. content and reply stay plain text without the rich reply.

{
  "id": "MESSAGE_ID",
  "role": "assistant",
  "content": "Here are our two plans.",
  "createdAt": "2026-10-27T10:00:00.000Z",
  "authorName": null,
  "sources": [],
  "ui": [
    {
      "type": "table",
      "title": "Plans",
      "columns": ["Plan", "Price", "Seats"],
      "rows": [["Basic", "CHF 9", "1"], ["Pro", "CHF 29", "5"]]
    },
    {
      "type": "cards",
      "cards": [
        {
          "title": "Pro",
          "subtitle": "For growing teams",
          "image": "https://www.example.com/pro.png",
          "price": "CHF 29 / month",
          "buttons": [
            { "label": "See details", "url": "https://www.example.com/pricing" },
            { "label": "Start a trial", "reply": "I'd like to start a Pro trial" }
          ]
        }
      ]
    },
    { "type": "quick_replies", "replies": ["Compare features", "Talk to sales"] }
  ]
}

Each item has a type: table (with columns, rows and an optional title), cards (each card with title, optional subtitle, image and price, and buttons with a label and either a url or a reply) or quick_replies (with replies). Optional fields are left out when empty.

Next steps

View as Markdown