---
title: "Blast RCS to Audience"
method: POST
path: "/messages/blast/rcs"
tags: ["Messages > blast"]
---

# Blast RCS to Audience

`POST /messages/blast/rcs`

## Request

- Base URL: `https://api.pinnacle.sh`
- URL: `https://api.pinnacle.sh/messages/blast/rcs`
- Auth: API key in header `PINNACLE-API-KEY`

Send an RCS message to all contacts in an audience. <br>

Messages are distributed evenly across the provided RCS agents for load balancing. Requires active RCS agents and recipient devices that support RCS Business Messaging. <br>

Use the optional `schedule` parameter in `options` to schedule the blast for future delivery. When scheduled, the response will contain a `scheduleId` instead of blast details.

## Request body

- BlastRcsRequest: Send an RCS message to all contacts in an audience.
  - `audienceId` string, required: The audience ID to send the blast to. This identifier is a string that always begins with the prefix `aud_`, for example: `aud_abc123`. <br> You can create an audience via [the dashboard](https://app.pinnacle.sh/dashboard/audiences) or [API](/api-reference/audiences/create).
  - `senders` string[], required: Array of RCS agent IDs to send from. Each must be prefixed with `agent_`. <br> Messages will be evenly distributed across these agents. **Limit:** 1 min
  - `message` union, required
    - RcsTextContent: Message containing longer text content with optional quick reply buttons.
      - `quickReplies` RichButton[]: List of interactive quick reply buttons in the message. <br><br> **Limit:** 10 max
        - union
          - object: Button that opens a URL when tapped by the recipient.
            - `type` 'openUrl', required: Discriminator value: openUrl
            - `webviewMode` 'HALF' | 'TALL' | 'FULL': Controls how the URL is displayed when the button is tapped. **Default behavior:** If not specified, the URL opens in the device's default browser. If you're sending deeplinks, you should use this mode as it will open the deeplink in the native app if it is installed. **Available modes in order of size:** - `HALF` — Half-screen webview overlay - `TALL` — Tall webview overlay - `FULL` — Full-screen webview
            - `payload` string, uri, required: The URL to open when the button is tapped. Must be a valid HTTP or HTTPS URL.
            - `title` string, required: Display text for the button.
            - `metadata` string: Optional additional data to attach to this button.
          - object: Button that initiates a phone call when tapped by the recipient.
            - `type` 'call', required: Discriminator value: call
            - `metadata` string: Optional additional data to attach to this button.
            - `payload` string, required: Phone number to call in E.164 format
            - `title` string, required: Display text for the button.
          - object: Button that sends custom data back to your application when tapped by the recipient.
            - `type` 'trigger', required: Discriminator value: trigger
            - `metadata` string: Optional additional data to attach to this button.
            - `payload` string, required: Custom data sent to your webhook when the button is tapped. Use this to identify the user's choice.
            - `title` string, required: Display text for the button.
          - object: Button that prompts the recipient to share their current location.
            - `type` 'requestUserLocation', required: Discriminator value: requestUserLocation
            - `metadata` string: Optional additional data to attach to this button.
            - `title` string, required: Display text for the button.
          - object: Button that prompts the recipient to add an event to their calendar.
            - `type` 'scheduleEvent', required: Discriminator value: scheduleEvent
            - `eventDescription` string: Detailed description for the calendar event.
            - `eventEndTime` string, required: End time in ISO 8601 format.
            - `eventStartTime` string, required: Starting time in ISO 8601 format.
            - `eventTitle` string, required: Title of the event.
            - `metadata` string: Optional additional data to attach to this button.
            - `title` string, required: Display text for the button.
          - object: Button that shares a specific location with the recipient when tapped.
            - `type` 'sendLocation', required: Discriminator value: sendLocation
            - `name` string: Optional name or label for the location that will be displayed in the map app (e.g., "Central Park", "Home Office"). If not provided, the button title will be used as the location name.
            - `latLong` RichButtonDiscriminatorMappingSendLocationLatLong, required: Geographic coordinates of the location to share.
              - …
            - `title` string, required: Display text for the button.
            - `metadata` string: Optional additional data to attach to this button.
      - `text` string, required: Text content of the RCS message.
    - RcsValidateContent1: Message containing a media file and/or text with optional quick reply buttons.<br> See [supported media types](https://app.pinnacle.sh/supported-file-types?type=RCS-MEDIA).
      - `media` string, url, required: Media file URLs to send.
      - `quickReplies` RichButton[]
        - union
          - object: Button that opens a URL when tapped by the recipient.
            - `type` 'openUrl', required: Discriminator value: openUrl
            - `webviewMode` 'HALF' | 'TALL' | 'FULL': Controls how the URL is displayed when the button is tapped. **Default behavior:** If not specified, the URL opens in the device's default browser. If you're sending deeplinks, you should use this mode as it will open the deeplink in the native app if it is installed. **Available modes in order of size:** - `HALF` — Half-screen webview overlay - `TALL` — Tall webview overlay - `FULL` — Full-screen webview
            - `payload` string, uri, required: The URL to open when the button is tapped. Must be a valid HTTP or HTTPS URL.
            - `title` string, required: Display text for the button.
            - `metadata` string: Optional additional data to attach to this button.
          - object: Button that initiates a phone call when tapped by the recipient.
            - `type` 'call', required: Discriminator value: call
            - `metadata` string: Optional additional data to attach to this button.
            - `payload` string, required: Phone number to call in E.164 format
            - `title` string, required: Display text for the button.
          - object: Button that sends custom data back to your application when tapped by the recipient.
            - `type` 'trigger', required: Discriminator value: trigger
            - `metadata` string: Optional additional data to attach to this button.
            - `payload` string, required: Custom data sent to your webhook when the button is tapped. Use this to identify the user's choice.
            - `title` string, required: Display text for the button.
          - object: Button that prompts the recipient to share their current location.
            - `type` 'requestUserLocation', required: Discriminator value: requestUserLocation
            - `metadata` string: Optional additional data to attach to this button.
            - `title` string, required: Display text for the button.
          - object: Button that prompts the recipient to add an event to their calendar.
            - `type` 'scheduleEvent', required: Discriminator value: scheduleEvent
            - `eventDescription` string: Detailed description for the calendar event.
            - `eventEndTime` string, required: End time in ISO 8601 format.
            - `eventStartTime` string, required: Starting time in ISO 8601 format.
            - `eventTitle` string, required: Title of the event.
            - `metadata` string: Optional additional data to attach to this button.
            - `title` string, required: Display text for the button.
          - object: Button that shares a specific location with the recipient when tapped.
            - `type` 'sendLocation', required: Discriminator value: sendLocation
            - `name` string: Optional name or label for the location that will be displayed in the map app (e.g., "Central Park", "Home Office"). If not provided, the button title will be used as the location name.
            - `latLong` RichButtonDiscriminatorMappingSendLocationLatLong, required: Geographic coordinates of the location to share.
              - …
            - `title` string, required: Display text for the button.
            - `metadata` string: Optional additional data to attach to this button.
    - RcsCards: Message containing cards, each with its own title, subtitle, and/or buttons. Quick replies can also be added. <br> See (supported file types)[https://app.pinnacle.sh/supported-file-types?type=RCS-CARD].
      - `cards` RcsCardsCardsItems[], required: Collection of cards attached to the message. <br><br> **Limit:** 1 to 10
        - `buttons` RichButton[]: While buttons resemble quick replies, they remain on screen after being clicked and are card-specific. <br><br> **Limit:** 4 max
          - union
            - object: Button that opens a URL when tapped by the recipient.
              - …
            - object: Button that initiates a phone call when tapped by the recipient.
              - …
            - object: Button that sends custom data back to your application when tapped by the recipient.
              - …
            - object: Button that prompts the recipient to share their current location.
              - …
            - object: Button that prompts the recipient to add an event to their calendar.
              - …
            - object: Button that shares a specific location with the recipient when tapped.
              - …
        - `media` string, url: Media file URLs to send.
        - `mediaHeight` 'SHORT' | 'MEDIUM' | 'TALL': Height of the card media. <br><br> **Default:** `MEDIUM` <br> **Valid for:** Carousel cards and vertical standalone cards. <br> **Not valid for:** Horizontal standalone cards. <br> **Requires:** The card must include a `media` field. <br> **Platform:** Media height selection applies only on Android. For iOS, assume `MEDIUM`.
        - `subtitle` string: Secondary text displayed below the title for additional context.
        - `title` string, required: Title displayed on the card.
      - `quickReplies` RichButton[]: List of interactive quick reply buttons in the message. <br><br> **Limit:** 10 max
        - union
          - object: Button that opens a URL when tapped by the recipient.
            - `type` 'openUrl', required: Discriminator value: openUrl
            - `webviewMode` 'HALF' | 'TALL' | 'FULL': Controls how the URL is displayed when the button is tapped. **Default behavior:** If not specified, the URL opens in the device's default browser. If you're sending deeplinks, you should use this mode as it will open the deeplink in the native app if it is installed. **Available modes in order of size:** - `HALF` — Half-screen webview overlay - `TALL` — Tall webview overlay - `FULL` — Full-screen webview
            - `payload` string, uri, required: The URL to open when the button is tapped. Must be a valid HTTP or HTTPS URL.
            - `title` string, required: Display text for the button.
            - `metadata` string: Optional additional data to attach to this button.
          - object: Button that initiates a phone call when tapped by the recipient.
            - `type` 'call', required: Discriminator value: call
            - `metadata` string: Optional additional data to attach to this button.
            - `payload` string, required: Phone number to call in E.164 format
            - `title` string, required: Display text for the button.
          - object: Button that sends custom data back to your application when tapped by the recipient.
            - `type` 'trigger', required: Discriminator value: trigger
            - `metadata` string: Optional additional data to attach to this button.
            - `payload` string, required: Custom data sent to your webhook when the button is tapped. Use this to identify the user's choice.
            - `title` string, required: Display text for the button.
          - object: Button that prompts the recipient to share their current location.
            - `type` 'requestUserLocation', required: Discriminator value: requestUserLocation
            - `metadata` string: Optional additional data to attach to this button.
            - `title` string, required: Display text for the button.
          - object: Button that prompts the recipient to add an event to their calendar.
            - `type` 'scheduleEvent', required: Discriminator value: scheduleEvent
            - `eventDescription` string: Detailed description for the calendar event.
            - `eventEndTime` string, required: End time in ISO 8601 format.
            - `eventStartTime` string, required: Starting time in ISO 8601 format.
            - `eventTitle` string, required: Title of the event.
            - `metadata` string: Optional additional data to attach to this button.
            - `title` string, required: Display text for the button.
          - object: Button that shares a specific location with the recipient when tapped.
            - `type` 'sendLocation', required: Discriminator value: sendLocation
            - `name` string: Optional name or label for the location that will be displayed in the map app (e.g., "Central Park", "Home Office"). If not provided, the button title will be used as the location name.
            - `latLong` RichButtonDiscriminatorMappingSendLocationLatLong, required: Geographic coordinates of the location to share.
              - …
            - `title` string, required: Display text for the button.
            - `metadata` string: Optional additional data to attach to this button.
  - `fallback` FallbackMessage: SMS/MMS fallback message to send if the RCS message fails to deliver. When a recipient's device doesn't support RCS, this fallback message will be sent as SMS or MMS instead. The fallback is sent from the specified phone number. > **Note:** At least one of `text` or `mediaUrls` must be provided. Fallback messages require a verified `from` phone number with SMS/MMS sending capabilities. > **Billing:** You will be charged the standard SMS or MMS rate for the fallback message. The original RCS message will not be charged if the fallback is sent instead.
    - `from` string, required: Phone number to send the fallback message from in E.164 format. Must be a verified phone number with SMS/MMS sending capabilities. Sandbox numbers cannot be used for fallbacks. The phone number must be connected to an active toll-free or 10DLC campaign.
    - `text` string: Text content for the fallback message. At least one of `text` or `mediaUrls` must be provided. If `mediaUrls` is empty and the text fits within SMS segment limits, the fallback will be sent as SMS. Otherwise, it will be sent as MMS. You will only be billed for the message sent.
    - `mediaUrls` string[]: Media file URLs to include in the fallback MMS message. See [supported media types](https://app.pinnacle.sh/supported-file-types?type=MMS). If provided, the fallback will be sent as MMS. Otherwise, it will be sent as SMS (if text fits within segment limits). At least one of `text` or `mediaUrls` must be provided.
  - `options` BlastRcsOptions: Configure how your RCS blast is sent and tracked.
    - `transcode` boolean: Media files and card media will be transcoded to a supported RCS format. This adds a small delay to sending the message. Ignored for rich text messages.
    - `validate` boolean: Validate your message for any unsupported files. <br> If failed, errors will be thrown and the blast will not be sent.
    - `standalone_card` BlastRcsRequestOptionsStandaloneCard: Configure standalone card layout options for enhanced visual presentation. > **⚠️ Important Restriction** > > This option is **only valid for single card messages**. Using it with multiple cards will cause the request to fail with a validation error.
      - `orientation` 'HORIZONTAL' | 'VERTICAL': The orientation of the standalone card.
      - `image_alignment` 'LEFT' | 'RIGHT': The alignment of the image in the standalone card. This field is ignored if orientation is VERTICAL.
    - `cardWidth` 'SMALL' | 'MEDIUM': Width of each card in a carousel. <br><br> **Default:** `MEDIUM` <br> **Valid for:** Multi-card messages (2 to 10 cards). <br> **Not valid for:** Single-card messages. Setting it with one card fails validation. <br> **Platform:** Card width selection applies only on Android. For iOS, assume `MEDIUM`.
    - `schedule` ScheduleSchema: Define when and how your message should be sent.
      - `sendAt` string, required: The date and time you want your message to be sent. - Use [ISO 8601 format](https://en.wikipedia.org/wiki/ISO_8601), for example: `2024-12-17T14:30:00Z`. Format: `YYYY-MM-DDThh:mm` (e.g., `2024-12-25T14:30`). - This time must be at least 5 minutes in the future. - The message will be scheduled based on the `timezone` you provide. - If you set a `recurrence` schedule, this is the start date and time for the recurring schedule.
      - `recurrence` string: AWS cron expression for recurring schedules (6 fields). <br> [Learn more about cron expressions](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-scheduled-rule-pattern.html). <br> **Examples:** - `0 10 * * ? *` - Every day at 10:00 AM - `0/30 * * * ? *` - Every 30 minutes - `0 9 ? * MON-FRI *` - Every weekday at 9:00 AM - `0 12 1 * ? *` - First day of every month at noon
      - `timezone` string: IANA timezone identifier (e.g., `America/New_York`, `UTC`). <br> Defaults to `UTC` if not specified.
      - `endDate` string: Date and time when recurring messages should stop. <br> Format: `YYYY-MM-DDThh:mm`. Required if `recurrence` is set.

## Response `200`

Successfully queued or scheduled the RCS blast. <br>

- **Immediate blast**: Returns blast details including total recipients, messages, segments, and cost.
- **Scheduled blast**: Returns a `scheduleId` and the schedule configuration.

- union
  - BlastResponse: Response containing details about the scheduled blast.
    - `blastId` string, required: Unique identifier for the blast. This identifier is a string that always begins with the prefix `blast_`, for example: `blast_1234567890`.
    - `audienceId` string, required: The audience ID the blast was sent to. This identifier is a string that always begins with the prefix `aud_`, for example: `aud_abc123`.
    - `totalRecipients` integer, required: Total number of recipients in the audience.
    - `totalMessages` integer, required: Total number of messages to be sent.
    - `totalSegments` integer, required: Total number of message segments across all messages.
    - `totalCost` number, double, required: Total cost of the blast. For RCS blasts with a fallback configured, this reflects the actual mix of RCS and SMS/MMS pricing based on each recipient's RCS capability. For more details check the [Transactions page](https://app.pinnacle.sh/dashboard/settings/billing/transactions) and the [Audiences page](https://app.pinnacle.sh/dashboard/audiences) to see blasts.
  - ScheduledBlastResponse: Response returned when a blast is scheduled for future delivery.
    - `scheduleId` string, required: Unique identifier for the scheduled blast. This identifier is a string that always begins with the prefix `msg_sched_`, for example: `msg_sched_xxxxx`.
    - `config` ScheduledBlastResponseConfig, required: The schedule configuration for the blast.
      - `sendAt` string: When the first message will be sent.
      - `recurrence` string: AWS cron expression for recurring schedules.
      - `timezone` string: IANA timezone identifier.
      - `endDate` string: When recurring schedules will stop.

## Other responses

- `400`: The request was unacceptable, often due to providing an invalid update. <br> Errors may originate from invalid payload or from Pinnacle's additional validation checks. For example, providing an URL that cannot be accessed, updating a campaign that is currently being reviewed, updating data that you cannot access, sending a malformed message, and so on. <br> For `Pinnacle Validation Error` inspect the `error` payload to determine the source of the failure. These errors are likely due to additional validation and business logic checks.<br> For `Request Validation Error` inspect the `description` and `errors` payload to determine the source of failure. These errors are likely due to invalid payload inside the request.
- `401`: The request lacks valid authentication credentials or the provided credentials are invalid. <br> Ensure you're including a valid API key in the request headers and that your account has the necessary permissions to access this endpoint.
- `402`: Insufficient credits to complete this request. <br> This occurs when your account balance is below the required amount for processing the operation. Please add credits to your account to continue using the service.
- `403`: Your subscription does not include access to this feature. <br> This occurs when attempting to use functionality that requires a higher subscription tier. Please upgrade your subscription to access this feature.
- `500`: An unexpected error occurred on Pinnacle's servers while processing your request. <br> If this error persists, please contact support with the request details.

---

[API](https://skmtc.dev/pinnacle/apis/pinnacle-2.md) - [All operations](https://skmtc.dev/pinnacle/apis/pinnacle-2/llms.txt) - [OpenAPI document](https://skmtc.dev/pinnacle/apis/pinnacle-2/revisions/45416dadab79?raw)
