# Catalog price types

Price types of your Bitrix24 account: list, retrieve, create, update and delete. A price type is what [catalog prices](/docs/entities/catalog-prices) pass in the `catalogGroupId` field. Bitrix24 requires the Manage price types catalog permission for writes.

Bitrix24 API: `catalog.priceType.*`
Scope: `catalog`

## Operations

- [Create a price type](./catalog-price-types/create.md) — `POST /v1/catalog-price-types`
- [List price types](./catalog-price-types/list.md) — `GET /v1/catalog-price-types`
- [Get a price type](./catalog-price-types/get.md) — `GET /v1/catalog-price-types/:id`
- [Update a price type](./catalog-price-types/update.md) — `PATCH /v1/catalog-price-types/:id`
- [Delete a price type](./catalog-price-types/delete.md) — `DELETE /v1/catalog-price-types/:id`
- [Search price types](./catalog-price-types/search.md) — `POST /v1/catalog-price-types/search`
- [Price type fields](./catalog-price-types/fields.md) — `GET /v1/catalog-price-types/fields`

## Key fields

| Field | Description |
|------|---------|
| `id` | Price type identifier. This is the value passed in `catalogGroupId` when working with [catalog prices](/docs/entities/catalog-prices) |
| `name` | Price type name as configured in your Bitrix24 account |
| `base` | `Y` for the base price type of the account, `N` for the rest. Exactly one type carries `Y` |
| `sort` | Sort order in the Bitrix24 interface |
| `xmlId` | External code used by import and export integrations. Can be `null` |

The full field list — [`GET /v1/catalog-price-types/fields`](./catalog-price-types/fields.md).

## What to know before you start

1. **Price type identifiers depend on the account.** On one account the base type has `id` 1, on another 3 or 7: numbers are assigned as types are created and are not reused after deletion. Do not hardcode the number into an integration.
2. **Find the base price type by `base`, not by number.** Take the record from the [list](./catalog-price-types/list.md) whose `base` equals `Y` — there is exactly one — and use its `id`. Other types are easier to find by `name`.
3. **Deleting a price type permanently removes every product price of that type and its rounding rules across the account.** Verify the `id` first. The base type cannot be deleted. You can create and change `name`, `sort` and `xmlId`; `base` is read-only because setting it to `Y` would change the base type for the whole account.
4. **An unknown `catalogGroupId` returns 422.** If the type number you pass to [`POST /v1/catalog-prices`](/docs/entities/catalog-prices) does not exist on your account, Bitrix24 responds with `422` and a message about an invalid price group. In that response the platform adds a hint pointing to this endpoint.
5. **Catalog permissions are required.** The `catalog` scope alone is insufficient: Bitrix24 checks read permissions or Manage price types for writes. The latter can be granted to an employee; administrators have it by default.

## Typical scenario

1. Get the price types: [`GET /v1/catalog-price-types`](./catalog-price-types/list.md).
2. Take the `id` of the record with `base: "Y"` — that is the base price type of the account.
3. Create a price with that number: [`POST /v1/catalog-prices`](/docs/entities/catalog-prices) with `catalogGroupId` from step 2.

## Limits

| Limit | Value |
|-------|----------|
| Maximum records per request | 5000 (`limit ≤ 5000`) |
| Auto-pagination | enabled when `limit > 50` |
| Batch requests | disabled: deleting a type requires a fresh base-status lookup; use single-record routes |
| Rate limit | shared across the Vibecode API — see [Limits and optimization](/docs/optimization) |

## See also

- [Catalog prices](/docs/entities/catalog-prices)
- [Catalog products](/docs/entities/catalog-products)
- [Catalogs](/docs/entities/catalogs)
- [Filtering syntax](/docs/filtering)
- [API reference](/docs/api-reference)
