Bundles send a message to multiple recipients at once, making them ideal for broadcasts and marketing campaigns. To send RCS to one recipient, use the Conversation. A bundle contains the sending agent, text or card content, and a recipient list. It efficiently delivers one interactive message to a larger audience.
Quickstart
curl -X POST https://api.ip1.net/v3/bundles \
-H "Authorization: Bearer API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"brand": "My-Store-Inc",
"agent": "Customer-Service",
"recipients": {
"46700123456": {}
},
"reference": "INTERN-REF-001",
"tags": [
"shipping",
"important"
],
"deliveryReportUrl": "https://delivery.ip1.net",
"fallbackPolicy": "FallbackOnNoCapability,FallbackOnFailure,FallbackAfterTimeout",
"fallbackMessage": "This is a fallback message",
"fallbackTimeOutSeconds": 300,
"type": "Carousel",
"carousel": [
{
"title": "Summer Campaign 2026",
"content": "Get 20% off all sunglasses!",
"mediaUrl": "https://cdn.site.se/promo-sun.jpg",
"type": "Carousel",
"order": 0
},
{
"title": "Summer Campaign 2026",
"content": "Get 20% off all sunglasses!",
"mediaUrl": "https://cdn.site.se/promo-sun.jpg",
"type": "Carousel",
"order": 1
},
],
"suggestions": [
{
"text": "View selection",
"type": "OpenUrlAction",
"order": 0,
"url": "https://site.se/shop",
"postbackData": "shop_click"
},
{
"text": "Call store",
"type": "DialAction",
"order": 1,
"phoneNumber": "468123456",
"postbackData": "call_click"
}
]
}'Request
Endpoint: /bundles
Method: POST
Request example
{
"brand": "My-Store-Inc",
"agent": "Customer-Service",
"recipients": {
"46700123456": {}
},
"reference": "INTERN-REF-001",
"tags": [
"shipping",
"important"
],
"deliveryReportUrl": "https://delivery.ip1.net",
"fallbackPolicy": "FallbackOnNoCapability,FallbackOnFailure,FallbackAfterTimeout",
"fallbackMessage": "This is a fallback message",
"fallbackTimeOutSeconds": 300,
"type": "carousel",
"carousel": [
{
"title": "Summer Campaign 2026",
"content": "Get 20% off all sunglasses!",
"mediaUrl": "https://cdn.site.se/promo-sun.jpg",
"type": "Carousel",
"order": 0
},
{
"title": "Summer Campaign 2026",
"content": "Get 20% off all sunglasses!",
"mediaUrl": "https://cdn.site.se/promo-sun.jpg",
"type": "Carousel",
"order": 1
},
],
"suggestions": [
{
"text": "View selection",
"type": "OpenUrlAction",
"order": 0,
"url": "https://site.se/shop",
"postbackData": "shop_click"
},
{
"text": "Call store",
"type": "DialAction",
"order": 1,
"phoneNumber": "468123456",
"postbackData": "call_click"
}
]
}Request fields
| Field name | Description | Required | Type | Example |
| brand | Your brand name. | Yes | String | "My-Store-Inc" |
| agent | Your agent name. | Yes | String | ”Customer-Service |
| recipients | Recipient list. | Yes | Object | ”46700123456”: { ”name”: ”Alex” } |
| content | Message content. | Required when the type is “Text” | String | ”Hello {name}! Your order has shipped.” |
| deliveryReportUrl | Callback URL for handling read receipts and delivery reports. | No | String | ”https://delivery.ip1.net” |
| fallbackPolicy | SMS fallback policy type (NoFallback, FallbackOnNoCapability, FallbackOnFailure, FallbackAfterTimeout, CustomerControlledFallback). | No (default is NoFallback) | String | ”FallbackOnNoCapability,FallbackOnFailure, FallbackAfterTimeout” |
| fallbackMessage | Message sent when fallback is activated. | Yes when using Carousel. Generated automatically from card or content if omitted. | String | ”This is a fallback message” |
| fallbackTimeoutSeconds | Seconds before the fallback policy activates when FallbackAfterTimeout is selected. | Yes when FallbackAfterTimeout is selected. | Integer | 500 |
| type | Message type. | Yes | String or number (enum) | ”Carousel” |
| reference | Internal bundle reference. | No | String | ”INTERN-REF-001” |
| tags | Searchable tags used to group the send. | No | Array | [”shipping”, ”important”] |
| carousel | A list of cards that forms a carousel. | Required when the type is “Carousel” | Array | (See the table below) |
| card | Contains an image, title, and text (Rich Card). | Required when the type is “Card” | Object | (See the table below) |
| suggestions | A list of interactive buttons. | No | Array | (See the table below) |
| uniqueId | Unique ID used to prevent duplicates. | No | String | ”order-12345-id” |
Details for the card
| Field name | Description | Required | Type | Example |
|---|---|---|---|---|
| title | Title displayed at the top of the card. | Yes | String | ”Our SALE!” |
| content | Descriptive text on the card. | Yes | String | ”Clearance sale now on.” |
| type | Card type (Carousel for a Rich Card in a carousel). | No | Integer | ”Carousel” |
| order | Order in which cards are displayed. | No | Integer | 1 |
| height | Card height. | No | String (enum) | ”Medium” |
| width | Card width. | No | String (enum( | ”Medium” |
| orientation | Card orientation. | No | String (enum) | ”Horizontal” |
| mediaUrl | Public URL of an image or video. | No | URI | ”https://site.se/image.jpg” |
Details for the suggestions
| Field name | Description | Required | Type | Example |
|---|---|---|---|---|
| text | Text displayed on the button. | Yes | String | ”Shop now” |
| type | Action type OpenUrlAction”= URL ”ShareLocationAction”= Share location ”ViewLocationAction”= View location ”DialAction”=Ring) ”CreateCalendarEventAction” = Create calendar event. | Yes | String (enum) | ”OpenUrlAction” |
| order | Determines the order in which suggestions are displayed. | No | Integer | 1 |
| postbackData | Data returned when the button is clicked. | Yes | String | ”track_sale_click” |
| url | Target URL (required for type 2). | No | String | ”https://site.se/shop” |
| Title | Title for View Location on Map and Calendar Event. | Required for ShareLocationAction and ViewLocationAction | String | ”Our store” |
| Description | Description of a calendar event. | Required for CreateCalendarEventAction | String | ”Welcome to your haircut appointment!” |
| StartTime | Start time of a calendar event. | Required for CreateCalendarEventAction | String | ”2026-07-01T14:30” |
| EndTime | End time of a calendar event. | Required for CreateCalendarEventAction | String | ”2026-07-01T15:30” |
| Latitude | Latitude for displaying a location on a map. | Required for ViewLocationAction | String | ”58.3944347” |
| Longitude | Longitude for displaying a location on a map. | Required for ViewLocationAction | String | ”13.8601547,18” |
| PhoneNumber | Phone number dialed when the button is pressed. | Required for DialAction | String | ”46101606060” |
Response
Response example
{
"id": "65eb3d14f1234567890abcdef",
"brand": "My-Store-Inc",
"agent": "Customer-Service",
"type": "Card",
"content": "Hello! Your order has shipped.",
"sendDate": "2026-03-04T15:05:00Z",
"uniqueId": "order-12345-id",
"reference": "INTERN-REF-001",
"deliveryReportUrl": "https://delivery.ip1.net",
"created": "2026-03-04T15:03:02Z",
"fallback": {
"fallbackPolicy": "FallbackOnNoCapability,FallbackOnFailure",
"fallbackMessage": "This is a fallback message",
"fallbackStatus": "Unknown"
},
"tags": ["shipping", "important"]
}Response fields
| Field name | Description | Type | Example |
| id | Bundlens unika id. | String | |
| brand | Brand used for the send. | String | ”My-Store-Inc” |
| agent | Your agent name. | String | ”Customer-Service” |
| type | Meddelandetyp: Text Card Carousel | String (enum) | ”Card” |
| content | Text content that was sent. | String | ”Hello {name}! Your order has shipped.” |
| sendDate | Scheduled send time. | DateTime | ”2026-03-04T15:05:00Z” |
| reference | Your optional free-text reference. | String | ”INTERN-REF-001” |
| uniqueId | Your ID used for duplicate detection. | String | ”order-12345-id” |
| deliveryReportUrl | Callback URL for read receipts and delivery reports. | String | ”https://delivery.ip1.net” |
| created | Time when the record was created. | DateTime | ”2026-03-04T15:03:02Z” |
| tags | Array of tags associated with the send. | Array | [”shipping”, ”important”] |
