---
title: "Quickly Create a Batch of Messages"
method: POST
path: "/api/v1/app/{app_id}/msg/batch"
tags: ["Message"]
---

# Quickly Create a Batch of Messages

`POST /api/v1/app/{app_id}/msg/batch`

## Request

- Base URL: `https://api.eu.svix.com`
- URL: `https://api.eu.svix.com/api/v1/app/{app_id}/msg/batch`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/svix/apis/svix-api/docs/api/v1/app/:app_id/msg/batch/post.ts> (a function with typed inputs; its response is checked against the schema)

Creates a batch of messages in a fire-or-forget fashion.

This is the fastest and most-scalable way to create messages, but doesn't allow you to detect
if your message failed certain validation steps (e.g., the `eventId` uniqueness check), and
doesn't provide any back-pressure in the event of rate-limit exhaustion. Otherwise very similar
to the `v1.create.message` action.

The entire batch may not exceed 5MB, and each individual payload may not exceed 1MiB; it's
generally a good idea to keep webhook payloads under 40KiB.

## Path parameters

- `app_id` string, required: The Application's ID or UID.

## Headers

- `idempotency-key` string

## Request body

- BatchCreateMessagesIn
  - `messages` BatchMessageIn[], required
    - `channels` string[], nullable: List of free-form identifiers that endpoints can filter by
    - `deliverAt` string, date-time, nullable: The date and time at which the message will be delivered. Note that this time is best-effort-only. Must be at least one minute and no more than 24 hours in the future.
    - `eventId` string, nullable: Optional unique identifier for the message This should not contain the '.' character
    - `eventType` string, required: The event type's name
    - `payload` object, required: JSON payload to send as the request body of the webhook. We also support sending non-JSON payloads. Please contact us for more information. The serialized byte-length of this value should be under 1MiB. Please contact us if you need to send payloads large than 1MiB.
    - `payloadRetentionHours` integer, nullable: Optional number of hours to retain the message payload. Note that this is mutually exclusive with `payloadRetentionPeriod`.
    - `payloadRetentionPeriod` integer, nullable: Optional number of days to retain the message payload. Defaults to 90. Note that this is mutually exclusive with `payloadRetentionHours`.
    - `tags` string[], nullable: List of free-form tags that can be filtered by when listing messages
    - `transformationsParams` object, nullable: Extra parameters to pass to Transformations (for future use)

## Response `202`

- EmptyResponse

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `409`: Conflict
- `413`: Payload too large
- `422`: Validation Error
- `429`: Too Many Requests

## Changes

- **2026-11-09** `f2cb264ac18a`: 1 info
  - api operation id `v1.message.create_batch` removed and replaced with `v1.message.create-batch`
- **2026-11-04** `23117f9a5448`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/svix/apis/svix-api/changes/api/v1/app/:app_id/msg/batch/post.md)

---

[API](https://skmtc.dev/svix/apis/svix-api.md) - [All operations](https://skmtc.dev/svix/apis/svix-api/llms.txt) - [OpenAPI document](https://skmtc.dev/svix/apis/svix-api/revisions/f2cb264ac18a?raw)
