> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apifycloud.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Product Carousel

> Send a horizontally scrollable carousel of 2 to 10 product cards

## Request

Use `type` as `interactive` and set `interactive.type` to `carousel`.

A product carousel displays 2 to 10 product cards from the same catalog in a horizontally scrollable format. Each card supports the same Single-Product Message actions — view, add to cart, send order.

### Field types

* `to`: string (required)
* `type`: string = `interactive` (required)
* `interactive`: object (required)
* `interactive.type`: string = `carousel` (required)
* `interactive.body`: object (required)
* `interactive.body.text`: string (required)
* `interactive.action`: object (required)
* `interactive.action.cards`: array of objects (required, 2 to 10)
* `interactive.action.cards[].card_index`: integer 0-9 (required, unique per message)
* `interactive.action.cards[].type`: string = `product` (required)
* `interactive.action.cards[].action`: object (required)
* `interactive.action.cards[].action.product_retailer_id`: string (required)
* `interactive.action.cards[].action.catalog_id`: string (required)
* `tags`: array of strings (optional)
* `metadata`: object | string (optional)

### Field behavior and limits

* `interactive.body.text` is required, max 1024 characters.
* `interactive.action.cards` must contain between 2 and 10 cards.
* `interactive.action.cards[].card_index` must be a unique integer between 0 and 9 across the cards in the message.
* Each card must reference the **same** `catalog_id` — a carousel cannot mix products from different catalogs.
* Each card must be of `type: "product"`.
* Do not include a `header`, `footer`, or `buttons` on the interactive object — the carousel message only accepts `body` and `action`.
* Product data (image, name, price, stock) is fetched by WhatsApp at delivery time — the recipient always sees the latest catalog state.
* Cannot be sent as a notification — only inside an existing conversation.

```json theme={null}
{
  "to": "+573001112233",
  "type": "interactive",
  "interactive": {
    "type": "carousel",
    "body": { "text": "Nuestros productos destacados" },
    "action": {
      "cards": [
        {
          "card_index": 0,
          "type": "product",
          "action": {
            "product_retailer_id": "SKU-001",
            "catalog_id": "1234567890"
          }
        },
        {
          "card_index": 1,
          "type": "product",
          "action": {
            "product_retailer_id": "SKU-002",
            "catalog_id": "1234567890"
          }
        }
      ]
    }
  }
}
```
