Get Available Fields of a Basket Item (Product from Catalog) sale.basketitem.getFieldsCatalogProduct
{% note tip "" %}
If you are developing integrations for Bitrix24 using AI tools (Codex, Claude Code, Cursor), connect to the MCP server so that the assistant can utilize the official REST documentation.
{% endnote %}
Scope:
saleWho can execute the method: store manager
The method sale.basketitem.getFieldsCatalogProduct retrieves a list of available fields for a basket item (position) for the methods sale.basketitem.addCatalogProduct and sale.basketitem.updateCatalogProduct — these methods only work with products from the catalog module in basket items (positions).
Unlike sale.basketitem.getFields, the method sale.basketitem.getFieldsCatalogProduct returns the minimum necessary list of fields for operation.
No parameters required.
{% include Footnote on examples %}
{% list tabs %}
-
cURL (Webhook)
curl -X POST \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{}' \ https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/sale.basketitem.getFieldsCatalogProduct
-
cURL (OAuth)
curl -X POST \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"auth":"**put_access_token_here**"}' \ https://**put_your_bitrix24_address**/rest/sale.basketitem.getFieldsCatalogProduct
-
JS (TS)
// This snippet is an ES module: top-level await requires type="module" or a bundler. // $b24 is an already-initialized SDK instance (see the SDK "Get started" guide). import { Text } from '@bitrix24/b24jssdk' import type { B24Frame } from '@bitrix24/b24jssdk' declare const $b24: B24Frame type FieldDescription = { isImmutable: boolean isReadOnly: boolean isRequired: boolean type: string } // Shape of the payload returned in result (match the "response handling" section of the page) type GetCatalogProductFieldsResult = { basketItem: Record<string, FieldDescription> } try { const response = await $b24.actions.v2.call.make<GetCatalogProductFieldsResult>({ method: 'sale.basketitem.getFieldsCatalogProduct', params: {}, requestId: Text.getUuidRfc4122() }) // The payload is available only on a successful response if (!response.isSuccess) { console.error(response.getErrorMessages().join('; ')) } else { const result = response.getData()!.result console.info('basketItem fields:', Object.keys(result.basketItem)) } } catch (error) { // Thrown on transport or SDK failures (AjaxError, SdkError, etc.) console.error(error) }
-
JS (UMD)
<!-- Load the SDK (UMD build); it is exposed as the global B24Js --> <script src="https://unpkg.com/@bitrix24/b24jssdk@1/dist/umd/index.min.js"></script> <script> async function getCatalogProductFields() { try { // Initialize the SDK inside a Bitrix24 frame const $b24 = await B24Js.initializeB24Frame() const response = await $b24.actions.v2.call.make({ method: 'sale.basketitem.getFieldsCatalogProduct', params: {}, requestId: B24Js.Text.getUuidRfc4122() }) // The payload is available only on a successful response if (!response.isSuccess) { console.error(response.getErrorMessages().join('; ')) return } const result = response.getData().result console.info('basketItem fields:', Object.keys(result.basketItem)) } catch (error) { // Thrown on transport or SDK failures (AjaxError, SdkError, etc.) console.error(error) } } document.addEventListener('DOMContentLoaded', getCatalogProductFields) </script>
-
Python
from b24pysdk.errors import BitrixAPIError, BitrixSDKException try: bitrix_response = client.sale.basketitem.get_fields_catalog_product().response result = bitrix_response.result print(result) except BitrixAPIError as error: print( "Bitrix API error", f"error: {error.error}", f"error_description: {error.error_description}", sep="\n", ) except BitrixSDKException as error: print(f"Bitrix SDK error: {error.message}") except Exception as error: print(f"Unexpected error: {error}")
-
PHP
try { $response = $b24Service ->core ->call( 'sale.basketitem.getFieldsCatalogProduct', [] ); $result = $response ->getResponseData() ->getResult(); if ($result->error()) { echo 'Error: ' . $result->error(); } else { echo 'Success: ' . print_r($result->data(), true); } } catch (Throwable $e) { error_log($e->getMessage()); echo 'Error getting catalog product fields: ' . $e->getMessage(); }
-
BX24.js
BX24.callMethod( "sale.basketitem.getFieldsCatalogProduct", {}, ) .then( function(result) { if (result.error()) { console.error(result.error()); } else { console.log(result.data()); } }, function(error) { console.info(error); } );
-
PHP CRest
require_once('crest.php'); $result = CRest::call( 'sale.basketitem.getFieldsCatalogProduct', [] ); echo '<PRE>'; print_r($result); echo '</PRE>';
-
Go
// client and ctx are already created — see the Go SDK section res, err := client.Core().Call(ctx, "sale.basketitem.getFieldsCatalogProduct", nil) if err != nil { return fmt.Errorf("sale.basketitem.getFieldsCatalogProduct: %w", err) } // The response arrives as json.RawMessage — unmarshal it // into a struct matching the response shape shown below on this page. fmt.Printf("%s\n", res.Result)
{% endlist %}
HTTP Status: 200
{
"result": {
"basketItem": {
"basePrice": {
"isImmutable": false,
"isReadOnly": true,
"isRequired": false,
"type": "double"
},
"canBuy": {
"isImmutable": false,
"isReadOnly": true,
"isRequired": false,
"type": "string"
},
"catalogXmlId": {
"isImmutable": false,
"isReadOnly": true,
"isRequired": false,
"type": "string"
},
...
}
},
"time": {
"start": 1713789567.852219,
"finish": 1713789568.52453,
"duration": 0.6723108291625977,
"processing": 0.01367807388305664,
"date_start": "2024-04-22T14:39:27+02:00",
"date_finish": "2024-04-22T14:39:28+02:00",
"operating": 0
}
}#|
|| Name
type | Description ||
|| result
object | Root element of the response ||
|| basketItem
object | Object in the format {"field_1": "value_1", ... "field_N": "value_N"}, where field is the identifier of the field of the sale_basket_item, and value is an object of type rest_field_description
||
|| time
time | Information about the request execution time ||
|#
HTTP Status: 400
{
"error":0,
"error_description":"error"
}{% include notitle error handling %}
#|
|| Code | Description ||
|| 200040300010 | Insufficient permissions to read ||
|| 0 | Other errors (e.g., fatal errors) ||
|#
{% include system errors %}