---
title: "Create a bulk job"
method: POST
path: "/bulk"
tags: ["Bulk"]
---

# Create a bulk job

`POST /bulk`

Creates a new bulk job for sending messages to multiple recipients.

**Required**: `message.event` (event ID or notification ID)

**Optional (V2 format)**: `message.template` (notification ID) or `message.content` (Elemental content) 
can be provided to override the notification associated with the event.

## Request body

- object
  - `message` InboundBulkMessage, required — Bulk message definition. Supports two formats: - V1 format: Requires `event` field (event ID or notification ID) - V2 format: Optionally use `template` (notification ID) or `content` (Elemental content) in addition to `event`
    - `brand` string, nullable
    - `data` object, nullable
    - `event` string, required — Event ID or Notification ID (required). Can be either a Notification ID (e.g., "FRH3QXM9E34W4RKP7MRC8NZ1T8V8") or a custom Event ID (e.g., "welcome-email") mapped to a notification.
    - `template` string, nullable — Notification ID or template ID (optional, for V2 format). When provided, this will be used instead of the notification associated with the `event` field.
    - `content` union
      - ElementalContentSugar — Syntactic sugar to provide a fast shorthand for Courier Elemental Blocks.
        - `title` string, required — Title/subject displayed by supported channels.
        - `body` string, required — The text content displayed in the notification.
      - ElementalContent
        - `version` string, required — For example, "2022-01-01"
        - `elements` ElementalNode[], required
          - union
            - object — Represents a body of text to be rendered inside of the notification.
              - …
            - object — The meta element contains information describing the notification that may be used by a particular channel or provider. One important field is the title field which will be used as the title for channels that support it.
              - …
            - object — The channel element allows a notification to be customized based on which channel it is sent through. For example, you may want to display a detailed message when the notification is sent through email, and a more concise message in a push notification. Channel elements are only valid as top-level elements; you cannot nest channel elements. If there is a channel element specified at the top-level of the document, all sibling elements must be channel elements. Note: As an alternative, most elements support a `channel` property. Which allows you to selectively display an individual element on a per channel basis. See the [control flow docs](https://www.courier.com/docs/platform/content/elemental/control-flow/) for more details.
              - …
            - object — Used to embed an image into the notification.
              - …
            - object — Allows the user to execute an action. Can be a button or a link.
              - …
            - object — Renders a dividing line between elements.
              - …
            - object — Renders a quote block.
              - …
            - object — Raw HTML string inside an Elemental document. When rendering a message, this node is turned into output only for the email channel; for other channels it produces no blocks.
              - …
    - `locale` object, nullable
    - `override` object, nullable

## Response `200`

- BulkCreateJobResponse
  - `jobId` string, required

## Other responses

- `400`

## Changes

- **2026-04-02** `b3dde9374868` — 1 info
  - added `subschema #8` to the `message/content/oneOf[subschema #2: ElementalContent]/elements/items/` request property `oneOf` list
- **2026-03-04** `44c2e612f5d4` — 1 warning
  - removed the request property `message/content/oneOf[subschema #2: ElementalContent]/brand`
- **2026-01-14** `e3e54d99e2a7` — 1 info
  - the request property `message/content/oneOf[subschema #2: ElementalContent]/elements/items/oneOf[subschema #3]/allOf[subschema #2: ElementalChannelNode]/channel` became optional
- **2025-12-16** `9859cb664d1a` — 2 breaking, 1 warning, 2 info
  - the request property `message/event` became not nullable
  - the request property `message/event` became required
  - removed `#/components/schemas/InboundBulkMessageV2` from the `message` request property `allOf` list
  - added the new optional request property `message/content`
  - …1 more
- …earlier changes not shown

[Full history](https://skmtc.dev/trycourier/apis/courier/changes/bulk/post.md)

---

[API](https://skmtc.dev/trycourier/apis/courier.md) · [All operations](https://skmtc.dev/trycourier/apis/courier/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/trycourier/courier/revisions/ecf876c6cda3/schema)
