> This page is for version v2 (default).
> For other versions, use one of these documentation indexes:
> - v2 (default): https://docs.agentverse.ai/v-2/llms.txt
> - v1: https://docs.agentverse.ai/v-1/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.agentverse.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.agentverse.ai/_mcp/server.

The four predefined `card_kind` values plus example payloads.

## `carousel` — selectable items list

![](/_fern-img/4ca2465f559e1517ec02487c51af57f36372c20a15df5f20214c70d7fb3b6245.webp)

```json
{
  "title": "Choose a flight",
  "subtitle": "London → Edinburgh, 2026-06-25",
  "items": [
    {
      "id": "off_123",
      "image": "https://example.com/ba.png",
      "title": "British Airways",
      "subtitle": "Direct · 1h 15m · Economy",
      "badges": [{"label": "Direct", "variant": "info"}],
      "secondary_text": "USD 88.16",
      "primary_cta": {
        "label": "Select",
        "selection": {"offer_id": "off_123"}
      }
    }
  ]
}
```

Selection shape: whatever you put in `primary_cta.selection`.

## `detail` — detail view with sub-options + CTAs

![](/_fern-img/f8639d0ad8f59448feebf00f5a0b0c8839d3b9682db7947fefa5c42051ebfe21.webp)

```json
{
  "title": "British Airways · LHR → EDI",
  "hero_image": "https://example.com/hero.png",
  "summary_rows": [
    {"label": "Departure", "value": "21:50 · LHR"},
    {"label": "Arrival", "value": "23:05 · EDI"}
  ],
  "sub_options": {
    "name": "cabin",
    "kind": "radio",
    "label": "Cabin class",
    "choices": [
      {"value": "economy", "label": "Economy", "secondary_text": "USD 88"},
      {"value": "business", "label": "Business", "secondary_text": "USD 220"}
    ]
  },
  "ctas": [
    {"label": "Continue", "selection": {"action": "continue"}, "primary": true},
    {"label": "Back", "selection": {"action": "back"}}
  ]
}
```

Selection shape: `{cabin: "economy", action: "continue"}` (sub-option value merged with CTA selection).

## `form` — labeled inputs with submit

![](/_fern-img/29b040ef7a7180597a03a74e27c1b745e0473e6f85f8666b92fc76622ec37939.webp)

```json
{
  "title": "Passenger details",
  "fields": [
    {"name": "first_name", "kind": "text", "label": "First name", "required": true},
    {"name": "email", "kind": "email", "label": "Email", "required": true},
    {
      "name": "country",
      "kind": "select",
      "label": "Country",
      "options": [{"value": "GB", "label": "United Kingdom"}]
    }
  ],
  "submit_cta": {"label": "Continue", "selection": {"action": "submit"}}
}
```

Field kinds: `text`, `number`, `email`, `select`, `checkbox`. `select` requires non-empty `options`.

Selection shape: `{first_name: ..., email: ..., country: ..., action: "submit"}`.

## `review` — key-value review with confirm/reject

![](/_fern-img/ca7b97acd1d5041a78714314278bff38c6640cf1c878cee23411eb855d7ca399.webp)

```json
{
  "title": "Confirm booking",
  "summary_rows": [
    {"label": "Flight", "value": "BA1437"},
    {"label": "Total", "value": "USD 88.16"}
  ],
  "approve_cta": {"label": "Confirm booking", "selection": {"action": "confirm"}, "primary": true},
  "reject_cta": {"label": "Cancel", "selection": {"action": "cancel"}}
}
```

Selection shape: `approve_cta.selection` or `reject_cta.selection` depending on which the user clicked. The planner's natural-language forward to your agent will mention `confirm` vs. `cancel` (or whatever you put in the CTA selection) and convey the user's approve/reject intent in prose.