For AI agents: markdown of this page — /docs-content-en/entities/catalog-prices/create.md documentation index — /llms.txt

Create a price

POST /v1/catalog-prices

Creates a product price. Fields are passed flat at the JSON root. A single product can have one price per price type (catalogGroupId).

Request fields (body)

Field Type Req. Description
productId number yes ID of the product the price belongs to. List: GET /v1/catalog-products?filter[iblockId]=<id> (the iblockId value comes from GET /v1/catalogs)
catalogGroupId number yes Price type. Base price is 1. The types configured in the Bitrix24 account are visible from the catalogGroupId values in the price list
price number yes Price value
currency string yes Price currency, e.g. USD. List: GET /v1/currencies
quantityFrom number no Lower bound of the quantity range
quantityTo number no Upper bound of the quantity range

Examples

curl — personal key

Terminal
curl -X POST "https://vibecode.bitrix24.com/v1/catalog-prices" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "productId": 104,
    "catalogGroupId": 1,
    "price": 1500,
    "currency": "USD"
  }'

curl — OAuth app

Terminal
curl -X POST "https://vibecode.bitrix24.com/v1/catalog-prices" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "productId": 104,
    "catalogGroupId": 1,
    "price": 1500,
    "currency": "USD"
  }'

JavaScript — personal key

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/catalog-prices', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    productId: 104,
    catalogGroupId: 1,
    price: 1500,
    currency: 'USD',
  }),
})

const { success, data } = await res.json()
console.log('Price ID:', data.id)

JavaScript — OAuth app

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/catalog-prices', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    productId: 104,
    catalogGroupId: 1,
    price: 1500,
    currency: 'USD',
  }),
})

const { success, data } = await res.json()

Response fields

Returns the full object of the created price.

Field Type Description
id number Identifier of the created price
productId number Product ID
catalogGroupId number Price type
price number Price value
currency string Price currency
quantityFrom number | null Lower bound of the quantity range
quantityTo number | null Upper bound of the quantity range
priceScale number Price in the Bitrix24 account's base currency. On creation equals price
extraId number | null Markup identifier (catalog_extra). Deprecated Bitrix24 field
timestampX string Modification date (ISO 8601 with timezone)

Response example

JSON
{
  "success": true,
  "data": {
    "catalogGroupId": 1,
    "currency": "USD",
    "extraId": null,
    "id": 5104,
    "price": 1500,
    "priceScale": 1500,
    "productId": 104,
    "quantityFrom": null,
    "quantityTo": null,
    "timestampX": "2026-06-08T14:58:52+00:00"
  }
}

Error response example

422 — a required field was not provided:

JSON
{
  "success": false,
  "error": {
    "code": "BITRIX_ERROR",
    "message": "Required fields: currency"
  }
}

Errors

HTTP Code Description
422 BITRIX_ERROR A required field was not provided — the message lists the missing ones (Required fields: <name>)
400 READONLY_FIELD The body contained id — this field is set by the system and is not accepted on creation
403 SCOPE_DENIED The key lacks the catalog scope
401 TOKEN_MISSING X-Api-Key was not provided

The full list of common API errors — Errors.

See also