---
search:
  tags:
    - Events
    - POST
seo:
  description: >-
    Each item is either a create or an update: Reference for the POST
    /api/v1/events endpoint in the Bloomcount Public API API.
sidebar:
  label: Bulk create or update events
  badge: POST
title: Bulk create or update events
type: openapi-operation
---
Each item is either a create or an update:

- **Create**: omit `eventId`. `name` and `priceListId` are required.
- **Update**: pass `eventId`. Only the supplied fields are patched; pass `null` to clear an optional field (e.g. `ceremonyStart: null`).

This endpoint writes the event header: dates, addresses, client names, budget, status and the assigned price
lists. That is the shape a CRM keeps in sync. An event's contents have their own endpoints —
`POST /api/v1/events/{id}/groups` and `POST /api/v1/events/{id}/items` — so creating a populated event is two
calls: this one for the header, then one for the lines. Labour charges, fees and image uploads stay app-side.

Returns 201 if any row was created, 200 if every row was an update or errored. Per-row failures are listed in `errors`.

**Errors** (per row, in `errors`)

- `missing_required_fields_on_create` — a create row without `name` or `priceListId`.
- `event_not_found` — `eventId` is unknown or belongs to another tenant.
- `price_list_not_found` — a price list ID that doesn't exist on the tenant, on any of the three list fields.

Whole-request failures: `422 too_many_items` above 500 rows, and `422 wrong_id_type:...` when a prefixed ID in
the batch doesn't decode.

<Operation source="reference" id="post-api-v1-events" />
