---
title: "Send a carousel message"
method: POST
path: "/send/carousel"
tags: ["Send Message"]
---

# Send a carousel message

`POST /send/carousel`

Send an interactive carousel (multiple swipeable cards). Each card carries its own image or video, body and optional buttons.

Card button `type` accepted values (case-insensitive, uppercased internally): `REPLY` (default), `URL`, `CALL`, `COPY`.
The `PIX` button type is NOT supported in carousel cards — use `/send/button` for PIX.

IMPORTANT — `CarouselButtonStruct` is different from the flat button used in `/send/button`:
- URL button: put the link in the `id` field (NOT in a `url` field).
- CALL button: put the phone number in the `id` field (NOT in a `phoneNumber` field).
- COPY button: put the code to be copied in `copyCode`.
- REPLY button: put the payload/callback ID in `id`.

Per-card combination rules (NOT enforced by the server, but verified in the field):
- Same WhatsApp Web quirk as `/send/button`: avoid mixing REPLY with CTA buttons (URL/CALL/COPY) in the same card — mixed sets do not render on Web.
- Stick to either "only REPLY" or "only CTAs grouped together" per card.

Required body fields: `number`, `cards` (at least one). Each card requires `header` + `body`.

## Request body

- GithubComEvolutionAPIEvolutionGoPkgSendMessageServiceCarouselStruct
  - `body` string — Optional message body shown above the cards.
  - `cards` GithubComEvolutionAPIEvolutionGoPkgSendMessageServiceCarouselCardStruct[] — Cards displayed in order. At least one card is required.
    - `body` GithubComEvolutionAPIEvolutionGoPkgSendMessageServiceCarouselCardBodyStruct
      - `text` string — Main text of the card.
    - `buttons` GithubComEvolutionAPIEvolutionGoPkgSendMessageServiceCarouselButtonStruct[] — Buttons shown on the card. See CarouselButtonStruct for combination rules.
      - `copyCode` string — Code placed in the clipboard when type=COPY.
      - `displayText` string — Label rendered inside the button.
      - `id` string — Context-dependent: REPLY payload, URL target (type=URL) or phone number (type=CALL).
      - `type` 'REPLY' | 'URL' | 'CALL' | 'COPY' | 'reply' | 'url' | 'call' | 'copy' — Button kind (case-insensitive). One of: REPLY (default), URL, CALL, COPY.
    - `footer` string — Optional footer rendered under the body.
    - `header` GithubComEvolutionAPIEvolutionGoPkgSendMessageServiceCarouselCardHeaderStruct
      - `imageUrl` string — Public URL to an image. Downloaded, uploaded to WhatsApp servers and used as card media.
      - `subtitle` string — Optional subtitle rendered below the title.
      - `title` string — Optional visible title above the media.
      - `videoUrl` string — Public URL to a video. Used only when `imageUrl` is empty.
  - `delay` integer — Typing delay (milliseconds) applied before sending the message.
  - `footer` string — Optional message footer shown below the cards.
  - `formatJid` boolean — If false, skips automatic formatting/validation of `number` into a JID.
  - `number` string — Destination phone number.
  - `quoted` GithubComEvolutionAPIEvolutionGoPkgSendMessageServiceQuotedStruct
    - `messageId` string
    - `participant` string

## Response `200`

success

- GinH

## Other responses

- `400` — Error on validation
- `500` — Internal server error

## Changes

- **2026-04-24** `39879b4b0178` — 1 info
  - endpoint added
- **2026-03-25** `9a999e5656cb` — 1 breaking
  - api path removed without deprecation

[Change history](https://skmtc.dev/evolution-foundation/apis/evolution-go/changes/send/carousel/post.md)

---

[API](https://skmtc.dev/evolution-foundation/apis/evolution-go.md) · [All operations](https://skmtc.dev/evolution-foundation/apis/evolution-go/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/evolution-foundation/evolution-go/revisions/8e9c4d7d1dab/schema)
