Media card carousel templates (create + send)
Released: August 30, 2026
Templates Added
Section titled “Templates ”You can now create and send WhatsApp media card carousel templates. A carousel is a single marketing template message accompanied by 2–10 swipeable product cards — each card has its own image or video header, an optional body text, and up to two buttons (quick reply, URL, or phone number).
Creating a carousel
Section titled “Creating a carousel”Add a CAROUSEL component alongside the message BODY. Every card must
share the same structure (same header format, same button types in
the same order), and if any card has body text then all cards must.
curl -X POST "https://api.kirimdev.com/v1/106540352242922/templates" \ -H "Authorization: Bearer $KIRIM_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "rare_succulents_carousel", "language": "en_US", "category": "MARKETING", "components": [ { "type": "BODY", "text": "Rare succulents for sale!" }, { "type": "CAROUSEL", "cards": [ { "components": [ { "type": "HEADER", "format": "IMAGE", "example": { "header_url": ["https://cdn.example.com/aloe.jpg"] } }, { "type": "BUTTONS", "buttons": [ { "type": "QUICK_REPLY", "text": "Send more like this" }, { "type": "URL", "text": "Shop", "url": "https://shop.example.com/aloe" } ] } ] }, { "components": [ { "type": "HEADER", "format": "IMAGE", "example": { "header_url": ["https://cdn.example.com/echeveria.jpg"] } }, { "type": "BUTTONS", "buttons": [ { "type": "QUICK_REPLY", "text": "Send more like this" }, { "type": "URL", "text": "Shop", "url": "https://shop.example.com/echeveria" } ] } ] } ] } ] }'Provide each card header as example.header_url (a public https://
image/video URL) — Kirimdev uploads the sample to Meta for you and
retains the URL so the template stays sendable. Carousels are
MARKETING-only and cannot carry a top-level HEADER / FOOTER /
BUTTONS (put those on the cards).
Sending a carousel
Section titled “Sending a carousel”Send an approved carousel with a carousel component whose cards
supply each card’s header asset (id or link) and any per-button
values, keyed by card_index:
curl -X POST "https://api.kirimdev.com/v1/106540352242922/messages" \ -H "Authorization: Bearer $KIRIM_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "messaging_product": "whatsapp", "to": "+16505551234", "type": "template", "template": { "name": "rare_succulents_carousel", "language": { "code": "en_US" }, "components": [ { "type": "carousel", "cards": [ { "card_index": 0, "components": [ { "type": "header", "parameters": [{ "type": "image", "image": { "id": "1558081531584829" } }] }, { "type": "button", "sub_type": "quick_reply", "index": 0, "parameters": [{ "type": "payload", "payload": "more-aloes" }] } ] }, { "card_index": 1, "components": [ { "type": "header", "parameters": [{ "type": "image", "image": { "link": "https://cdn.example.com/echeveria.jpg" } }] }, { "type": "button", "sub_type": "quick_reply", "index": 0, "parameters": [{ "type": "payload", "payload": "more-echeverias" }] } ] } ] } ] } }'SDK Added
Section titled “SDK ”Both flows go through the existing templates.create() and
messages.send() methods — the carousel shapes are now part of their
types.
await kirim.phoneNumbers('106540352242922').templates.create({ name: 'rare_succulents_carousel', category: 'MARKETING', language: 'en_US', components: [ { type: 'BODY', text: 'Rare succulents for sale!' }, { type: 'CAROUSEL', cards: [ { components: [ { type: 'HEADER', format: 'IMAGE', example: { header_url: ['https://cdn.example.com/aloe.jpg'] } }, { type: 'BUTTONS', buttons: [{ type: 'QUICK_REPLY', text: 'Send more like this' }] }, ] }, { components: [ { type: 'HEADER', format: 'IMAGE', example: { header_url: ['https://cdn.example.com/echeveria.jpg'] } }, { type: 'BUTTONS', buttons: [{ type: 'QUICK_REPLY', text: 'Send more like this' }] }, ] }, ], }, ],})MCP Added
Section titled “MCP ”The create_template and send_message MCP tools accept the same
carousel shapes automatically — no new tools were added.