
## Price type fields

`GET /v1/catalog-price-types/fields`

Returns a reference of price type fields with their types. All fields are read-only.

## Examples

### curl — personal key

```bash
curl "https://vibecode.bitrix24.com/v1/catalog-price-types/fields" \
  -H "X-Api-Key: YOUR_API_KEY"
```

### curl — OAuth application

```bash
curl "https://vibecode.bitrix24.com/v1/catalog-price-types/fields" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"
```

### JavaScript — personal key

```javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/catalog-price-types/fields', {
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
  },
})

const { success, data } = await res.json()
console.log('Fields:', Object.keys(data.fields).length)
```

### JavaScript — OAuth application

```javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/catalog-price-types/fields', {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})

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

## Response fields

`data.fields` is an object whose key matches the field name, and whose value contains `type` (the field type), `readonly` (`true` — the field cannot be passed on create or update), `label` (the display name), and `description` (a short description). The `label`/`description` values are returned in English. Request headers do not switch the language. Fields that may arrive without a value carry `nullable: true`. The `data.batch` list is empty: price types have no write operations in batch mode.

| Field | Type | RO | Description |
|------|-----|:--:|---------|
| `id` | number | yes | Price type identifier. This value is passed in `catalogGroupId` when working with [catalog prices](/docs/entities/catalog-prices) |
| `name` | string | yes | Price type name as configured in your Bitrix24 account |
| `base` | string | yes | `Y` for the base price type of the account, `N` for the rest |
| `xmlId` | string | yes | External code for import and export integrations. Can be `null` |
| `sort` | number | yes | Sort order in the Bitrix24 interface |
| `createdBy` | number | yes | ID of the user who created the price type. Can be `null` |
| `modifiedBy` | number | yes | ID of the user who last modified the price type. Can be `null` |
| `dateCreate` | datetime | yes | Date and time the price type was created. Can be `null` |
| `timestampX` | datetime | yes | Date and time the price type was last modified. Can be `null` |

## Response example

```json
{
  "success": true,
  "data": {
    "fields": {
      "id": { "type": "number", "readonly": true, "label": "ID", "description": "Price type identifier. This is the value /v1/catalog-prices expects in catalogGroupId." },
      "name": { "type": "string", "readonly": true, "label": "Name", "description": "Price type name as configured on the Bitrix24 account." },
      "base": { "type": "string", "readonly": true, "label": "Base price type", "description": "Y for the base price type of this Bitrix24 account, N otherwise. Exactly one price type carries Y, and its id is portal-specific — it is not necessarily 1." },
      "xmlId": { "type": "string", "readonly": true, "nullable": true, "label": "External code", "description": "External identifier used by import/export integrations." },
      "sort": { "type": "number", "readonly": true, "label": "Sort", "description": "Sort order of the price type in the Bitrix24 interface." },
      "createdBy": { "type": "number", "readonly": true, "nullable": true, "label": "Created by", "description": "ID of the user who created the price type." },
      "modifiedBy": { "type": "number", "readonly": true, "nullable": true, "label": "Modified by", "description": "ID of the user who last modified the price type." },
      "dateCreate": { "type": "datetime", "readonly": true, "nullable": true, "label": "Created at", "description": "Date and time the price type was created." },
      "timestampX": { "type": "datetime", "readonly": true, "nullable": true, "label": "Modified at", "description": "Date and time the price type was last modified." }
    },
    "batch": []
  }
}
```

Every field is marked `readonly: true` — a price type cannot be created or changed through the API; that is done in the Bitrix24 interface.

## Error response example

403 — no scope:

```json
{
  "success": false,
  "error": {
    "code": "SCOPE_DENIED",
    "message": "This endpoint requires 'catalog' scope"
  }
}
```

## Errors

| HTTP | Code | Description |
|------|-----|---------|
| 403 | `SCOPE_DENIED` | The API key does not carry the `catalog` scope |
| 401 | `MISSING_API_KEY` | The `X-Api-Key` header is missing |
| 429 | `RATE_LIMITED` | Rate limit exceeded: 300 requests per minute per portal, all API keys of the portal share one limit. The exact value arrives in the `x-ratelimit-limit` header (the cap is divided across replicas). Retry after the delay in the `Retry-After` header |

The full list of common API errors — [Errors](/docs/errors).

## See also

- [List price types](/docs/entities/catalog-price-types/list)
- [Get a price type](/docs/entities/catalog-price-types/get)
- [Catalog prices](/docs/entities/catalog-prices)
- [API reference](/docs/api-reference)
