---
title: "Create a catalog price"
method: POST
path: "/catalog/prices"
tags: ["catalog"]
---

# Create a catalog price

`POST /catalog/prices`

Creates a new catalog price for a catalog entry.

## Headers

- `Authorization` string, required
- `X-Api-Key` string, required
- `X-API-Version` string
- `Idempotency-Key` string

## Request body

- object
  - `ottimate_company_id` integer, required — The Ottimate company ID this price belongs to
  - `catalog_entry_id` string, required — The ID of the catalog entry this price applies to
  - `price` number, double, required — Price amount for the pack size
  - `unit_price` number, double — Price amount per individual unit (optional)
  - `price_type` 'company' | 'location_group' | 'location' — Price type: company (default), location_group, or location
  - `ottimate_location_id` integer — Location ID. Required when price_type is 'location' — omitting it in that case returns a 400. Ignored (silently dropped, no error) if supplied while price_type is 'company'. Cannot be supplied together with ottimate_group_id — doing so returns a 400 regardless of price_type.
  - `ottimate_group_id` integer — Location group ID. Required when price_type is 'location_group' — omitting it in that case returns a 400. Ignored (silently dropped, no error) if supplied while price_type is 'company'. Cannot be supplied together with ottimate_location_id — doing so returns a 400 regardless of price_type.
  - `start_date` string, date-time, required — Price effective start date (ISO 8601). Stored and returned as a calendar date in the account's local timezone, not UTC — a timestamp near UTC midnight (e.g. 00:00:00Z) can be stored as the previous calendar day locally. Submit a time comfortably within the day (e.g. midday UTC) to avoid this.
  - `end_date` string, date-time — Price effective end date (ISO 8601, optional). If omitted, defaults to 36,500 days (~100 years) after start_date rather than staying null. Subject to the same local-timezone date truncation as start_date.
  - `reference_id` string — External reference ID for the price. Currently not persisted — the stored reference_id is always auto-generated from the price's identifying fields, regardless of what you submit here.

## Response `201`

Price created successfully

- CatalogPriceItem — Catalog price object
  - `id` string, required — Price ID
  - `catalog_entry_id` string — Catalog entry ID
  - `ottimate_company_id` integer — Company ID
  - `price` string, required — Price amount (decimal string)
  - `unit_price` string — Unit price (decimal string)
  - `price_type` integer, required — Price type
  - `price_type_display` 'company' | 'location_group' | 'location' — Human-readable price type
  - `ottimate_location_id` integer — Location ID
  - `ottimate_group_id` integer — Location group ID
  - `start_date` string, date, required — Price start date. Date-only (e.g. "2026-07-24").
  - `end_date` string, date — Price end date. Date-only (e.g. "2126-07-24"). Defaults to 36,500 days (~100 years) after start_date when not supplied at creation, rather than staying null.
  - `reference_id` string — Unique key
  - `created_date` string, date-time — Record creation date
  - `created_date_utc` string, date-time, nullable — UTC equivalent of created_date. ISO 8601 with Z suffix, e.g. "2025-05-20T15:17:35.652584Z".
  - `last_modified_date` string, date-time — Record last modified date
  - `last_modified_date_utc` string, date-time, nullable — UTC equivalent of last_modified_date. ISO 8601 with Z suffix, e.g. "2025-05-20T15:17:35.652584Z".

## Other responses

- `400` — Bad request - Invalid parameters or request format
- `401` — Unauthorized - Authentication required or invalid credentials
- `403` — Forbidden - Access denied or insufficient permissions

---

[API](https://skmtc.dev/ottimate/apis/api-reference.md) · [All operations](https://skmtc.dev/ottimate/apis/api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/ottimate/api-reference/revisions/ba91ff4c6969/schema)
