---
search:
  tags:
    - Price Lists
    - POST
seo:
  description: >-
    ID-keyed upsert for the price list itself, plus a bulk upsert of price…
    Reference for the POST /api/v1/price-lists endpoint in the Bloomcount Public
    API API.
sidebar:
  label: Create or update a price list with optional entries
  badge: POST
title: Create or update a price list with optional entries
type: openapi-operation
---
ID-keyed upsert for the price list itself, plus a bulk upsert of price entries against existing variants.

**Pricing method (flower / material):** the storage convention is "`priceExclTax` is always the pack price; `pricingMethod` is a display flag." This endpoint does the conversion for you — supply whichever method you have, and the right cost is recorded internally.

**Hire price lists** (`productType: "hire"`): each entry's `priceExclTax` is the **daily hire fee** for one unit, stored as-is. Omit `pricingMethod` — it's ignored for hire entries. Hire price lists list every hireable material variant on the tenant; setting an entry registers a daily fee for that variant on this list.

**Tax group:** pass `taxGroupId: null` to clear. Cross-tenant IDs return `tax_group_not_found` (422).

**Clearing a price:** an entry row with `remove: true` deletes that variant's price on the list. A price is
addressed by list and variant rather than by an id of its own, which is why this lives here rather than on a
DELETE route. Cleared rows come back in `removed`, and a row for a variant that had no price is reported there
too rather than as an error, since the end state is the same.

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

- `variant_not_found` — the `variantId` is unknown or belongs to another tenant.
- `price_required` — a row that neither sets `priceExclTax` nor asks to remove.

Whole-request failures: `422 price_list_name_required` when creating without a name, `404 price_list_not_found`
for an unknown `id`, `422 tax_group_not_found` for a tax group on another tenant, and `422 too_many_items`
above 500 entries.

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