---
title: "Send an API-triggered broadcast"
method: POST
path: "/v1/campaigns/{broadcast_id}/triggers"
tags: ["Send Messages"]
---

# Send an API-triggered broadcast

`POST /v1/campaigns/{broadcast_id}/triggers`

## Request

- Base URL: `https://api.customer.io`
- URL: `https://api.customer.io/v1/campaigns/{broadcast_id}/triggers`
- Auth: HTTP bearer

Trigger a broadcast and optionally provide data to populate liquid placeholders in the message. To trigger one-time send broadcasts, use the [one-time send endpoint](/integrations/api/app/tag/send-messages/sendNewsletter/).

Broadcasts are optimized to send messages to a large audience and not for one-to-one interactions. Use our [transactional API](/integrations/api/app/tag/send-messages/sendEmail/) or [event-triggered automations](/journeys/send/campaigns/triggers/#event-trigger) to respond to your audience on an individual, one-to-one basis.

**Define your audience**

**The shape of the request depends on how you define your audience**: default (the recipients set in the UI), custom conditions, a list of emails, a list of customer IDs, a map of users, or a data file.

You can narrow any of these audiences, except the default audience, with the `filter` object. This is useful when a file or a list of people is broader than the audience you want for your broadcast.

**You can only trigger broadcasts to send to people you've already added to your workspace.** A broadcast cannot add or identify new people. If you reference people who don't exist in your broadcast audience, the broadcast will fail by default. You can override this behavior by setting the `email_ignore_missing` and/or `id_ignore_missing` flags to `true`. The broadcast will skip over any people who don't exist in your workspace and send to the remaining recipients.

You can reference properties in the `data` object in your broadcast using liquid—`{{trigger.<property_in_data_obj>}}`.

**Send or schedule your broadcast**

By default, we send your broadcast as soon as you trigger it. Set `scheduled_at` to send it at a future time instead. You can [cancel the trigger](/integrations/api/app/tag/send-messages/cancelBroadcastTrigger/) to stop a scheduled send before it starts sending. You can't change a trigger's `scheduled_at` value later; if you need to reschedule your broadcast, you must cancel the trigger and re-trigger the broadcast with the new timestamp.

If your broadcast produces a `422` error, you can [get more information about the errors](/integrations/api/app/tag/broadcasts/broadcastErrors/) to see what went wrong.

**This endpoint is rate-limited to one request every 10 seconds.** After exceeding this, you'll receive a status of `429`. Learn more about [API-triggered broadcast limits](/integrations/api/app/tag/send-messages/) above. If you need to trigger broadcasts more often, contact us to talk through your use case.

## Request body

- union
  - object: Send your broadcast to the default set of recipients defined in the UI.
    - `data` object: Contains information you want to use to populate your broadcast.
    - `email_add_duplicates` boolean: an email address associated with more than one profile id is an error.
    - `email_ignore_missing` boolean: If false, a missing email causes the broadcast to error and fail. If true, the broadcast will skip over any people in your audience who don't have emails, and continue sending to the rest of your audience.
    - `id_ignore_missing` boolean: If false, a missing customer ID causes the broadcast to error and fail. If true, the broadcast will skip over any people in your audience who don't have IDs, and continue sending to the rest of your audience.
    - `scheduled_at` integer: Unix timestamp (in seconds) when the broadcast will send. Omit it or set it to `0` to send right away. We reject a timestamp more than 5 minutes in the past. Scheduling also changes when we work out your audience: `ids`, `emails`, `per_user_data`, and `data_file_url` set a fixed audience when you make this request, while a `recipients` filter runs when the send fires.
    - `expires_after` integer: Number of seconds after the send starts that the broadcast should stop sending. Omit or set to `0` if you don't want the broadcast to expire. A rate-limited send always expires: if you set `rate_limit` and omit this field or set it to `0`, we set it to 30 days. If the broadcast expires before it finishes sending, Customer.io discards the messages that haven't gone out yet instead of delivering them late. The window runs from `scheduled_at` when you schedule the send, and from the time we receive this request when you don't.
    - `rate_limit` object: Lets people enter the broadcast at a fixed rate instead of all at the same time. For a broadcast with one message, this is the send rate. Later messages in a longer workflow follow your workflow and can go out faster. We determine your audience once, on the first run, and the trigger counts toward your queue limit until everyone enters, the send expires, or you cancel it. See [Limit the send rate](/messaging/send/broadcasts/api-triggered-broadcasts/#rate-limit).
      - `rate` integer, required: The maximum number of people that enter the broadcast in each `period`.
      - `period` 'minute' | 'hour' | 'day', required: The length of each period.
      - `spread` boolean: When `true`, we let people in at an even pace across the period, once a minute or less often. When `false`, we let the full `rate` in at the start of each period.
  - object: Send your broadcast to a group of people defined by a set of conditions.
    - `recipients` union, required: Use `and`, `or`, and `not` to combine segment and attribute conditions. The top-level object accepts one property; nest groups for complex filters.
      - object
        - `and` object[]: Match *all* conditions to return results.
          - `or` SimpleAudienceFilter[]: Returns results matching *any* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
      - object
        - `or` object[]: Match *any* condition to return results.
          - `and` SimpleAudienceFilter[]: Returns results matching *all* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
      - object
        - `and` ComplexAudienceFilter[]: Match *all* conditions to return results.
          - `and` SimpleAudienceFilter[]: Returns results matching *all* conditions.
            - union
              - …
          - `or` SimpleAudienceFilter[]: Returns results matching *any* conditions.
            - union
              - …
          - `not` union: Returns people who don't match conditions. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
      - object
        - `or` ComplexAudienceFilter[]: Match *any* condition to return results.
          - `and` SimpleAudienceFilter[]: Returns results matching *all* conditions.
            - union
              - …
          - `or` SimpleAudienceFilter[]: Returns results matching *any* conditions.
            - union
              - …
          - `not` union: Returns people who don't match conditions. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
      - object
        - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
          - `id` integer: The ID of the segment you want to return people from.
          - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
      - object
        - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
          - `field` string, required: The name of the attribute you want to filter against.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
      - object: Filter for people who belong to a segment.
        - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
          - `id` integer: The ID of the segment you want to return people from.
          - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
      - object: filter for people who have an attribute or an attribute value.
        - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
          - `field` string, required: The name of the attribute you want to filter against.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
    - `data` object: Contains information you want to use to populate your broadcast.
    - `email_add_duplicates` boolean: an email address associated with more than one profile id is an error.
    - `email_ignore_missing` boolean: If false, a missing email causes the broadcast to error and fail. If true, the broadcast will skip over any people in your audience who don't have emails, and continue sending to the rest of your audience.
    - `id_ignore_missing` boolean: If false, a missing customer ID causes the broadcast to error and fail. If true, the broadcast will skip over any people in your audience who don't have IDs, and continue sending to the rest of your audience.
    - `scheduled_at` integer: Unix timestamp (in seconds) when the broadcast will send. Omit it or set it to `0` to send right away. We reject a timestamp more than 5 minutes in the past. Scheduling also changes when we work out your audience: `ids`, `emails`, `per_user_data`, and `data_file_url` set a fixed audience when you make this request, while a `recipients` filter runs when the send fires.
    - `expires_after` integer: Number of seconds after the send starts that the broadcast should stop sending. Omit or set to `0` if you don't want the broadcast to expire. A rate-limited send always expires: if you set `rate_limit` and omit this field or set it to `0`, we set it to 30 days. If the broadcast expires before it finishes sending, Customer.io discards the messages that haven't gone out yet instead of delivering them late. The window runs from `scheduled_at` when you schedule the send, and from the time we receive this request when you don't.
    - `rate_limit` object: Lets people enter the broadcast at a fixed rate instead of all at the same time. For a broadcast with one message, this is the send rate. Later messages in a longer workflow follow your workflow and can go out faster. We determine your audience once, on the first run, and the trigger counts toward your queue limit until everyone enters, the send expires, or you cancel it. See [Limit the send rate](/messaging/send/broadcasts/api-triggered-broadcasts/#rate-limit).
      - `rate` integer, required: The maximum number of people that enter the broadcast in each `period`.
      - `period` 'minute' | 'hour' | 'day', required: The length of each period.
      - `spread` boolean: When `true`, we let people in at an even pace across the period, once a minute or less often. When `false`, we let the full `rate` in at the start of each period.
    - `filter` union: Use `and`, `or`, and `not` to combine segment, attribute, and device attribute conditions. The top-level object accepts one property; nest groups for complex filters.
      - object
        - `and` object[]: Returns results matching *all* conditions.
          - `or` SimpleTriggerFilter[]: Returns results matching *any* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object: Filter for people who belong to a segment.
              - …
            - object: Filter for people who have a profile attribute or a profile attribute value.
              - …
            - object: Filter for people who have a device, or a device with a particular attribute value.
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
          - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
            - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - object
        - `or` object[]: Returns results matching *any* conditions.
          - `and` SimpleTriggerFilter[]: Returns results matching *all* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object: Filter for people who belong to a segment.
              - …
            - object: Filter for people who have a profile attribute or a profile attribute value.
              - …
            - object: Filter for people who have a device, or a device with a particular attribute value.
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
          - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
            - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - object
        - `and` ComplexTriggerFilter[]: Match *all* conditions to return results.
          - `and` SimpleTriggerFilter[]: Returns results matching *all* conditions.
            - union
              - …
          - `or` SimpleTriggerFilter[]: Returns results matching *any* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object: Filter for people who belong to a segment.
              - …
            - object: Filter for people who have a profile attribute or a profile attribute value.
              - …
            - object: Filter for people who have a device, or a device with a particular attribute value.
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
          - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
            - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - object
        - `or` ComplexTriggerFilter[]: Match *any* condition to return results.
          - `and` SimpleTriggerFilter[]: Returns results matching *all* conditions.
            - union
              - …
          - `or` SimpleTriggerFilter[]: Returns results matching *any* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object: Filter for people who belong to a segment.
              - …
            - object: Filter for people who have a profile attribute or a profile attribute value.
              - …
            - object: Filter for people who have a device, or a device with a particular attribute value.
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
          - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
            - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - SegmentTriggerCondition: Filter for people who belong to a segment.
        - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
          - `id` integer: The ID of the segment you want to return people from.
          - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
      - AttributeTriggerCondition: Filter for people who have a profile attribute or a profile attribute value.
        - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
          - `field` string, required: The name of the attribute you want to filter against.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
      - DeviceAttributeTriggerCondition: Filter for people who have a device, or a device with a particular attribute value.
        - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
          - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - object: Filter for people who belong to a segment.
        - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
          - `id` integer: The ID of the segment you want to return people from.
          - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
      - object: Filter for people who have a profile attribute or a profile attribute value.
        - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
          - `field` string, required: The name of the attribute you want to filter against.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
      - object: Filter for people who have a device, or a device with a particular attribute value.
        - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
          - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
  - object: An array of emails you want to send the broadcast to. These addresses must already exist; your request cannot create a new person.
    - `emails` string[], required: An array of email addresses you want to send the broadcast to. These addresses must already exist; your request cannot create a new person.
    - `data` object: Contains information you want to use to populate your broadcast.
    - `email_add_duplicates` boolean: an email address associated with more than one profile id is an error.
    - `email_ignore_missing` boolean: If false, a missing email causes the broadcast to error and fail. If true, the broadcast will skip over any people in your audience who don't have emails, and continue sending to the rest of your audience.
    - `id_ignore_missing` boolean: If false, a missing customer ID causes the broadcast to error and fail. If true, the broadcast will skip over any people in your audience who don't have IDs, and continue sending to the rest of your audience.
    - `scheduled_at` integer: Unix timestamp (in seconds) when the broadcast will send. Omit it or set it to `0` to send right away. We reject a timestamp more than 5 minutes in the past. Scheduling also changes when we work out your audience: `ids`, `emails`, `per_user_data`, and `data_file_url` set a fixed audience when you make this request, while a `recipients` filter runs when the send fires.
    - `expires_after` integer: Number of seconds after the send starts that the broadcast should stop sending. Omit or set to `0` if you don't want the broadcast to expire. A rate-limited send always expires: if you set `rate_limit` and omit this field or set it to `0`, we set it to 30 days. If the broadcast expires before it finishes sending, Customer.io discards the messages that haven't gone out yet instead of delivering them late. The window runs from `scheduled_at` when you schedule the send, and from the time we receive this request when you don't.
    - `rate_limit` object: Lets people enter the broadcast at a fixed rate instead of all at the same time. For a broadcast with one message, this is the send rate. Later messages in a longer workflow follow your workflow and can go out faster. We determine your audience once, on the first run, and the trigger counts toward your queue limit until everyone enters, the send expires, or you cancel it. See [Limit the send rate](/messaging/send/broadcasts/api-triggered-broadcasts/#rate-limit).
      - `rate` integer, required: The maximum number of people that enter the broadcast in each `period`.
      - `period` 'minute' | 'hour' | 'day', required: The length of each period.
      - `spread` boolean: When `true`, we let people in at an even pace across the period, once a minute or less often. When `false`, we let the full `rate` in at the start of each period.
    - `filter` union: Use `and`, `or`, and `not` to combine segment, attribute, and device attribute conditions. The top-level object accepts one property; nest groups for complex filters.
      - object
        - `and` object[]: Returns results matching *all* conditions.
          - `or` SimpleTriggerFilter[]: Returns results matching *any* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object: Filter for people who belong to a segment.
              - …
            - object: Filter for people who have a profile attribute or a profile attribute value.
              - …
            - object: Filter for people who have a device, or a device with a particular attribute value.
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
          - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
            - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - object
        - `or` object[]: Returns results matching *any* conditions.
          - `and` SimpleTriggerFilter[]: Returns results matching *all* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object: Filter for people who belong to a segment.
              - …
            - object: Filter for people who have a profile attribute or a profile attribute value.
              - …
            - object: Filter for people who have a device, or a device with a particular attribute value.
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
          - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
            - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - object
        - `and` ComplexTriggerFilter[]: Match *all* conditions to return results.
          - `and` SimpleTriggerFilter[]: Returns results matching *all* conditions.
            - union
              - …
          - `or` SimpleTriggerFilter[]: Returns results matching *any* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object: Filter for people who belong to a segment.
              - …
            - object: Filter for people who have a profile attribute or a profile attribute value.
              - …
            - object: Filter for people who have a device, or a device with a particular attribute value.
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
          - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
            - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - object
        - `or` ComplexTriggerFilter[]: Match *any* condition to return results.
          - `and` SimpleTriggerFilter[]: Returns results matching *all* conditions.
            - union
              - …
          - `or` SimpleTriggerFilter[]: Returns results matching *any* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object: Filter for people who belong to a segment.
              - …
            - object: Filter for people who have a profile attribute or a profile attribute value.
              - …
            - object: Filter for people who have a device, or a device with a particular attribute value.
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
          - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
            - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - SegmentTriggerCondition: Filter for people who belong to a segment.
        - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
          - `id` integer: The ID of the segment you want to return people from.
          - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
      - AttributeTriggerCondition: Filter for people who have a profile attribute or a profile attribute value.
        - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
          - `field` string, required: The name of the attribute you want to filter against.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
      - DeviceAttributeTriggerCondition: Filter for people who have a device, or a device with a particular attribute value.
        - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
          - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - object: Filter for people who belong to a segment.
        - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
          - `id` integer: The ID of the segment you want to return people from.
          - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
      - object: Filter for people who have a profile attribute or a profile attribute value.
        - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
          - `field` string, required: The name of the attribute you want to filter against.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
      - object: Filter for people who have a device, or a device with a particular attribute value.
        - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
          - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
  - object: An array of customer ids that you want to send the broadcast to. These IDs must already exist; your request cannot create a new person.
    - `ids` string[], required: An array of IDs you want to send a broadcast to. **NOTE**: If your workspace identifies people by `email`, don't use this option. Identify your audience by `emails` instead.
    - `data` object: Contains information you want to use to populate your broadcast.
    - `email_add_duplicates` boolean: an email address associated with more than one profile id is an error.
    - `email_ignore_missing` boolean: If false, a missing email causes the broadcast to error and fail. If true, the broadcast will skip over any people in your audience who don't have emails, and continue sending to the rest of your audience.
    - `id_ignore_missing` boolean: If false, a missing customer ID causes the broadcast to error and fail. If true, the broadcast will skip over any people in your audience who don't have IDs, and continue sending to the rest of your audience.
    - `scheduled_at` integer: Unix timestamp (in seconds) when the broadcast will send. Omit it or set it to `0` to send right away. We reject a timestamp more than 5 minutes in the past. Scheduling also changes when we work out your audience: `ids`, `emails`, `per_user_data`, and `data_file_url` set a fixed audience when you make this request, while a `recipients` filter runs when the send fires.
    - `expires_after` integer: Number of seconds after the send starts that the broadcast should stop sending. Omit or set to `0` if you don't want the broadcast to expire. A rate-limited send always expires: if you set `rate_limit` and omit this field or set it to `0`, we set it to 30 days. If the broadcast expires before it finishes sending, Customer.io discards the messages that haven't gone out yet instead of delivering them late. The window runs from `scheduled_at` when you schedule the send, and from the time we receive this request when you don't.
    - `rate_limit` object: Lets people enter the broadcast at a fixed rate instead of all at the same time. For a broadcast with one message, this is the send rate. Later messages in a longer workflow follow your workflow and can go out faster. We determine your audience once, on the first run, and the trigger counts toward your queue limit until everyone enters, the send expires, or you cancel it. See [Limit the send rate](/messaging/send/broadcasts/api-triggered-broadcasts/#rate-limit).
      - `rate` integer, required: The maximum number of people that enter the broadcast in each `period`.
      - `period` 'minute' | 'hour' | 'day', required: The length of each period.
      - `spread` boolean: When `true`, we let people in at an even pace across the period, once a minute or less often. When `false`, we let the full `rate` in at the start of each period.
    - `filter` union: Use `and`, `or`, and `not` to combine segment, attribute, and device attribute conditions. The top-level object accepts one property; nest groups for complex filters.
      - object
        - `and` object[]: Returns results matching *all* conditions.
          - `or` SimpleTriggerFilter[]: Returns results matching *any* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object: Filter for people who belong to a segment.
              - …
            - object: Filter for people who have a profile attribute or a profile attribute value.
              - …
            - object: Filter for people who have a device, or a device with a particular attribute value.
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
          - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
            - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - object
        - `or` object[]: Returns results matching *any* conditions.
          - `and` SimpleTriggerFilter[]: Returns results matching *all* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object: Filter for people who belong to a segment.
              - …
            - object: Filter for people who have a profile attribute or a profile attribute value.
              - …
            - object: Filter for people who have a device, or a device with a particular attribute value.
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
          - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
            - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - object
        - `and` ComplexTriggerFilter[]: Match *all* conditions to return results.
          - `and` SimpleTriggerFilter[]: Returns results matching *all* conditions.
            - union
              - …
          - `or` SimpleTriggerFilter[]: Returns results matching *any* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object: Filter for people who belong to a segment.
              - …
            - object: Filter for people who have a profile attribute or a profile attribute value.
              - …
            - object: Filter for people who have a device, or a device with a particular attribute value.
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
          - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
            - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - object
        - `or` ComplexTriggerFilter[]: Match *any* condition to return results.
          - `and` SimpleTriggerFilter[]: Returns results matching *all* conditions.
            - union
              - …
          - `or` SimpleTriggerFilter[]: Returns results matching *any* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object: Filter for people who belong to a segment.
              - …
            - object: Filter for people who have a profile attribute or a profile attribute value.
              - …
            - object: Filter for people who have a device, or a device with a particular attribute value.
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
          - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
            - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - SegmentTriggerCondition: Filter for people who belong to a segment.
        - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
          - `id` integer: The ID of the segment you want to return people from.
          - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
      - AttributeTriggerCondition: Filter for people who have a profile attribute or a profile attribute value.
        - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
          - `field` string, required: The name of the attribute you want to filter against.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
      - DeviceAttributeTriggerCondition: Filter for people who have a device, or a device with a particular attribute value.
        - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
          - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - object: Filter for people who belong to a segment.
        - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
          - `id` integer: The ID of the segment you want to return people from.
          - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
      - object: Filter for people who have a profile attribute or a profile attribute value.
        - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
          - `field` string, required: The name of the attribute you want to filter against.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
      - object: Filter for people who have a device, or a device with a particular attribute value.
        - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
          - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
  - object: An array of JSON objects containing `id` or `email` keys and a `data` key. Each object represents a person you want to send the broadcast to and data you want to personalize their message with using liquid.
    - `per_user_data` union[], required: The people you want to send a broadcast to, with custom data to personalize each message. Each person must already exist in your workspace—a broadcast trigger can't create people.
      - union
        - object
          - `id` string, required: The ID of the recipient.
          - `data` object: Merge data associated with the recipient.
        - object
          - `email` string, required: The email address of the recipient. This address must be unique in your workspace. If more than one person has the same `email` attribute, your request will produce an error.
          - `data` object: Merge data associated with the recipient.
    - `data` object: Contains information you want to use to populate your broadcast.
    - `email_add_duplicates` boolean: an email address associated with more than one profile id is an error.
    - `email_ignore_missing` boolean: If false, a missing email causes the broadcast to error and fail. If true, the broadcast will skip over any people in your audience who don't have emails, and continue sending to the rest of your audience.
    - `id_ignore_missing` boolean: If false, a missing customer ID causes the broadcast to error and fail. If true, the broadcast will skip over any people in your audience who don't have IDs, and continue sending to the rest of your audience.
    - `scheduled_at` integer: Unix timestamp (in seconds) when the broadcast will send. Omit it or set it to `0` to send right away. We reject a timestamp more than 5 minutes in the past. Scheduling also changes when we work out your audience: `ids`, `emails`, `per_user_data`, and `data_file_url` set a fixed audience when you make this request, while a `recipients` filter runs when the send fires.
    - `expires_after` integer: Number of seconds after the send starts that the broadcast should stop sending. Omit or set to `0` if you don't want the broadcast to expire. A rate-limited send always expires: if you set `rate_limit` and omit this field or set it to `0`, we set it to 30 days. If the broadcast expires before it finishes sending, Customer.io discards the messages that haven't gone out yet instead of delivering them late. The window runs from `scheduled_at` when you schedule the send, and from the time we receive this request when you don't.
    - `rate_limit` object: Lets people enter the broadcast at a fixed rate instead of all at the same time. For a broadcast with one message, this is the send rate. Later messages in a longer workflow follow your workflow and can go out faster. We determine your audience once, on the first run, and the trigger counts toward your queue limit until everyone enters, the send expires, or you cancel it. See [Limit the send rate](/messaging/send/broadcasts/api-triggered-broadcasts/#rate-limit).
      - `rate` integer, required: The maximum number of people that enter the broadcast in each `period`.
      - `period` 'minute' | 'hour' | 'day', required: The length of each period.
      - `spread` boolean: When `true`, we let people in at an even pace across the period, once a minute or less often. When `false`, we let the full `rate` in at the start of each period.
    - `filter` union: Use `and`, `or`, and `not` to combine segment, attribute, and device attribute conditions. The top-level object accepts one property; nest groups for complex filters.
      - object
        - `and` object[]: Returns results matching *all* conditions.
          - `or` SimpleTriggerFilter[]: Returns results matching *any* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object: Filter for people who belong to a segment.
              - …
            - object: Filter for people who have a profile attribute or a profile attribute value.
              - …
            - object: Filter for people who have a device, or a device with a particular attribute value.
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
          - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
            - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - object
        - `or` object[]: Returns results matching *any* conditions.
          - `and` SimpleTriggerFilter[]: Returns results matching *all* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object: Filter for people who belong to a segment.
              - …
            - object: Filter for people who have a profile attribute or a profile attribute value.
              - …
            - object: Filter for people who have a device, or a device with a particular attribute value.
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
          - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
            - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - object
        - `and` ComplexTriggerFilter[]: Match *all* conditions to return results.
          - `and` SimpleTriggerFilter[]: Returns results matching *all* conditions.
            - union
              - …
          - `or` SimpleTriggerFilter[]: Returns results matching *any* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object: Filter for people who belong to a segment.
              - …
            - object: Filter for people who have a profile attribute or a profile attribute value.
              - …
            - object: Filter for people who have a device, or a device with a particular attribute value.
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
          - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
            - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - object
        - `or` ComplexTriggerFilter[]: Match *any* condition to return results.
          - `and` SimpleTriggerFilter[]: Returns results matching *all* conditions.
            - union
              - …
          - `or` SimpleTriggerFilter[]: Returns results matching *any* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object: Filter for people who belong to a segment.
              - …
            - object: Filter for people who have a profile attribute or a profile attribute value.
              - …
            - object: Filter for people who have a device, or a device with a particular attribute value.
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
          - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
            - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - SegmentTriggerCondition: Filter for people who belong to a segment.
        - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
          - `id` integer: The ID of the segment you want to return people from.
          - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
      - AttributeTriggerCondition: Filter for people who have a profile attribute or a profile attribute value.
        - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
          - `field` string, required: The name of the attribute you want to filter against.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
      - DeviceAttributeTriggerCondition: Filter for people who have a device, or a device with a particular attribute value.
        - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
          - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - object: Filter for people who belong to a segment.
        - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
          - `id` integer: The ID of the segment you want to return people from.
          - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
      - object: Filter for people who have a profile attribute or a profile attribute value.
        - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
          - `field` string, required: The name of the attribute you want to filter against.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
      - object: Filter for people who have a device, or a device with a particular attribute value.
        - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
          - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
  - object: The URL of a data file with one JSON object per line, using either `id` and `data` or `email` and `data`. The people you reference must already exist in your workspace. The file may be gzip-compressed to reduce transfer size (recommended for large files); if compressed, it must use gzip and the hosting server must return a `Content-Encoding` header set to `gzip` when the file is downloaded.
    - `data_file_url` string, url, required: The URL of a JSON Lines file with one person per line, using `id` and `data` or `email` and `data`. The people you reference must already exist in your workspace. The file may be gzip-compressed to reduce transfer size (recommended for large files); if compressed, it must use gzip and the hosting server must return a `Content-Encoding` header set to `gzip` when the file is downloaded.
    - `data` object: Contains information you want to use to populate your broadcast.
    - `email_add_duplicates` boolean: an email address associated with more than one profile id is an error.
    - `email_ignore_missing` boolean: If false, a missing email causes the broadcast to error and fail. If true, the broadcast will skip over any people in your audience who don't have emails, and continue sending to the rest of your audience.
    - `id_ignore_missing` boolean: If false, a missing customer ID causes the broadcast to error and fail. If true, the broadcast will skip over any people in your audience who don't have IDs, and continue sending to the rest of your audience.
    - `scheduled_at` integer: Unix timestamp (in seconds) when the broadcast will send. Omit it or set it to `0` to send right away. We reject a timestamp more than 5 minutes in the past. Scheduling also changes when we work out your audience: `ids`, `emails`, `per_user_data`, and `data_file_url` set a fixed audience when you make this request, while a `recipients` filter runs when the send fires.
    - `expires_after` integer: Number of seconds after the send starts that the broadcast should stop sending. Omit or set to `0` if you don't want the broadcast to expire. A rate-limited send always expires: if you set `rate_limit` and omit this field or set it to `0`, we set it to 30 days. If the broadcast expires before it finishes sending, Customer.io discards the messages that haven't gone out yet instead of delivering them late. The window runs from `scheduled_at` when you schedule the send, and from the time we receive this request when you don't.
    - `rate_limit` object: Lets people enter the broadcast at a fixed rate instead of all at the same time. For a broadcast with one message, this is the send rate. Later messages in a longer workflow follow your workflow and can go out faster. We determine your audience once, on the first run, and the trigger counts toward your queue limit until everyone enters, the send expires, or you cancel it. See [Limit the send rate](/messaging/send/broadcasts/api-triggered-broadcasts/#rate-limit).
      - `rate` integer, required: The maximum number of people that enter the broadcast in each `period`.
      - `period` 'minute' | 'hour' | 'day', required: The length of each period.
      - `spread` boolean: When `true`, we let people in at an even pace across the period, once a minute or less often. When `false`, we let the full `rate` in at the start of each period.
    - `filter` union: Use `and`, `or`, and `not` to combine segment, attribute, and device attribute conditions. The top-level object accepts one property; nest groups for complex filters.
      - object
        - `and` object[]: Returns results matching *all* conditions.
          - `or` SimpleTriggerFilter[]: Returns results matching *any* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object: Filter for people who belong to a segment.
              - …
            - object: Filter for people who have a profile attribute or a profile attribute value.
              - …
            - object: Filter for people who have a device, or a device with a particular attribute value.
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
          - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
            - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - object
        - `or` object[]: Returns results matching *any* conditions.
          - `and` SimpleTriggerFilter[]: Returns results matching *all* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object: Filter for people who belong to a segment.
              - …
            - object: Filter for people who have a profile attribute or a profile attribute value.
              - …
            - object: Filter for people who have a device, or a device with a particular attribute value.
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
          - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
            - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - object
        - `and` ComplexTriggerFilter[]: Match *all* conditions to return results.
          - `and` SimpleTriggerFilter[]: Returns results matching *all* conditions.
            - union
              - …
          - `or` SimpleTriggerFilter[]: Returns results matching *any* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object: Filter for people who belong to a segment.
              - …
            - object: Filter for people who have a profile attribute or a profile attribute value.
              - …
            - object: Filter for people who have a device, or a device with a particular attribute value.
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
          - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
            - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - object
        - `or` ComplexTriggerFilter[]: Match *any* condition to return results.
          - `and` SimpleTriggerFilter[]: Returns results matching *all* conditions.
            - union
              - …
          - `or` SimpleTriggerFilter[]: Returns results matching *any* conditions.
            - union
              - …
          - `not` union: Returns people who don't match the condition inside it. `not` takes a single object, not an array. That object can be one condition, or an `and` or `or` group when you want to exclude people who match a combination of conditions.
            - object
              - …
            - object
              - …
            - object: Filter for people who belong to a segment.
              - …
            - object: Filter for people who have a profile attribute or a profile attribute value.
              - …
            - object: Filter for people who have a device, or a device with a particular attribute value.
              - …
          - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
            - `id` integer: The ID of the segment you want to return people from.
            - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
          - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
            - `field` string, required: The name of the attribute you want to filter against.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
          - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
            - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
            - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
            - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
            - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - SegmentTriggerCondition: Filter for people who belong to a segment.
        - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
          - `id` integer: The ID of the segment you want to return people from.
          - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
      - AttributeTriggerCondition: Filter for people who have a profile attribute or a profile attribute value.
        - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
          - `field` string, required: The name of the attribute you want to filter against.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
      - DeviceAttributeTriggerCondition: Filter for people who have a device, or a device with a particular attribute value.
        - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
          - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.
      - object: Filter for people who belong to a segment.
        - `segment` SegmentAudienceFilter: Provide the `id` of a segment containing people you want to search for.
          - `id` integer: The ID of the segment you want to return people from.
          - `inverse` boolean: Set to `true` to match people who *aren't* in the segment.
      - object: Filter for people who have a profile attribute or a profile attribute value.
        - `attribute` AttributeAudienceFilter: Filter your audience by attribute.
          - `field` string, required: The name of the attribute you want to filter against.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person in the audience has the attribute; `eq` returns results if the audience has the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* meet the condition.
      - object: Filter for people who have a device, or a device with a particular attribute value.
        - `device_attribute` DeviceAttributeTriggerFilter: Filter your audience by the devices people have. We match a person if any of their devices meets the condition. To match people who have any device at all, set `field` to `id` and `operator` to `exists`.
          - `field` string, required: The name of the device attribute you want to filter against. Use `id` to match people who have a device.
          - `operator` 'eq' | 'exists', required: Determine how to evaluate criteria against the field—`exists` returns results if a person has a device with the attribute; `eq` returns results if a person has a device with the attribute and the attribute has the `value` you specify.
          - `value` string: The value you want to match for this device attribute. You must include a value if you use the `eq` operator.
          - `inverse` boolean: Set to `true` to match people who *don't* have a device meeting the condition.

## Response `200`

A successful request returns the trigger ID.

- object
  - `id` integer: The `trigger_id` for this operation. You can use this ID to get the status of your broadcast or [check for errors](/integrations/api/app/tag/broadcasts/broadcastErrors/).

## Other responses

- `401`: Unauthorized request. Make sure that you provided the right credentials.
- `404`: The `broadcast_id` does not exist.
- `422`: The broadcast has one or more validation errors. You can learn more by [checking your broadcast for errors](/integrations/api/app/tag/broadcasts/broadcastErrors/) using the `trigger_id` found in the error `detail`.

## Changes

- **2026-10-17** `2415f42044d0`: 6 info
  - added the new optional request property `oneOf[subschema #1: Default audience]/allOf[#/components/schemas/commonTriggerProps]/rate_limit`
  - added the new optional request property `oneOf[subschema #2: Custom recipients]/allOf[#/components/schemas/commonTriggerProps]/rate_limit`
  - added the new optional request property `oneOf[subschema #3: Emails]/allOf[#/components/schemas/commonTriggerProps]/rate_limit`
  - added the new optional request property `oneOf[subschema #4: IDs]/allOf[#/components/schemas/commonTriggerProps]/rate_limit`
  - …2 more
- **2026-10-08** `6378ded43e43`: 5 breaking, 48 info
  - added `#/components/schemas/triggerFilterProp` to the `oneOf[subschema #2: Custom recipients]/` request property `allOf` list
  - added `#/components/schemas/triggerFilterProp` to the `oneOf[subschema #3: Emails]/` request property `allOf` list
  - added `#/components/schemas/triggerFilterProp` to the `oneOf[subschema #4: IDs]/` request property `allOf` list
  - added `#/components/schemas/triggerFilterProp` to the `oneOf[subschema #5: User Maps]/` request property `allOf` list
  - …49 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/customer/apis/customer-io-journeys-api-reference/changes/v1/campaigns/:broadcast_id/triggers/post.md)

---

[API](https://skmtc.dev/customer/apis/customer-io-journeys-api-reference.md) - [All operations](https://skmtc.dev/customer/apis/customer-io-journeys-api-reference/llms.txt) - [OpenAPI document](https://skmtc.dev/customer/apis/customer-io-journeys-api-reference/revisions/ac0b282053fe?raw)
