{% 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:
catalogWho can execute the method: administrator
This method adds a price rounding rule.
{% include Note on required parameters %}
#|
|| Name
type | Description ||
|| fields*
object| Field values for creating a new price rounding rule (detailed description) ||
|#
{% include Note on required parameters %}
#|
|| Name
type | Description ||
|| catalogGroupId*
catalog_price_type.id | Price type ||
|| price*
double | Minimum price for rounding ||
|| roundType*
integer | Rounding type. Possible values:
1— mathematical rounding2— rounding up (in favor of the store)4— rounding down (in favor of the customer) || || roundPrecision*double| Rounding precision || |#
{% include Note on examples %}
{% list tabs %}
-
cURL (Webhook)
curl -X POST \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"fields":{"catalogGroupId":14,"price":1000,"roundType":4,"roundPrecision":100}}' \ https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/catalog.roundingRule.add
-
cURL (OAuth)
curl -X POST \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"fields":{"catalogGroupId":14,"price":1000,"roundType":4,"roundPrecision":100},"auth":"**put_access_token_here**"}' \ https://**put_your_bitrix24_address**/rest/catalog.roundingRule.add
-
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, ISODate } from '@bitrix24/b24jssdk' declare const $b24: B24Frame // Shape of the payload returned in result (match the "response handling" section of the page) type RoundingRuleAddResult = { roundingRule: { catalogGroupId: number createdBy: number dateCreate: ISODate | null dateModify: ISODate | null id: number modifiedBy: number price: number roundPrecision: number roundType: number } } try { const response = await $b24.actions.v2.call.make<RoundingRuleAddResult>({ method: 'catalog.roundingRule.add', params: { fields: { catalogGroupId: 14, price: 1000, roundType: 4, roundPrecision: 100, }, }, 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(result.roundingRule.id, result.roundingRule.roundType, result.roundingRule.roundPrecision) } } 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 addRoundingRule() { try { // Initialize the SDK inside a Bitrix24 frame const $b24 = await B24Js.initializeB24Frame() const response = await $b24.actions.v2.call.make({ method: 'catalog.roundingRule.add', params: { fields: { catalogGroupId: 14, price: 1000, roundType: 4, roundPrecision: 100, }, }, 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(result.roundingRule.id, result.roundingRule.roundType, result.roundingRule.roundPrecision) } catch (error) { // Thrown on transport or SDK failures (AjaxError, SdkError, etc.) console.error(error) } } document.addEventListener('DOMContentLoaded', addRoundingRule) </script>
-
Python
from b24pysdk.errors import BitrixAPIError, BitrixSDKException try: bitrix_response = client.catalog.rounding_rule.add( fields={ "catalogGroupId": 14, "price": 1000, "roundType": 4, "roundPrecision": 100, }, ).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( 'catalog.roundingRule.add', [ 'fields' => [ 'catalogGroupId' => 14, 'price' => 1000, 'roundType' => 4, 'roundPrecision' => 100 ] ] ); $result = $response ->getResponseData() ->getResult(); if ($result->error()) { error_log($result->error()); echo 'Error: ' . $result->error(); } else { echo 'Success: ' . print_r($result->data(), true); } } catch (Throwable $e) { error_log($e->getMessage()); echo 'Error adding rounding rule: ' . $e->getMessage(); }
-
BX24.js
BX24.callMethod( 'catalog.roundingRule.add', { fields: { catalogGroupId: 14, price: 1000, roundType: 4, roundPrecision: 100 } }, function(result) { if (result.error()) console.error(result.error()); else console.log(result.data()); } );
-
PHP CRest
require_once('crest.php'); $result = CRest::call( 'catalog.roundingRule.add', [ 'fields' => [ 'catalogGroupId' => 14, 'price' => 1000, 'roundType' => 4, 'roundPrecision' => 100 ] ] ); 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, "catalog.roundingRule.add", b24.Params{ "fields": b24.Params{ "catalogGroupId": 14, "price": 1000, "roundType": 4, "roundPrecision": 100, }, }) if err != nil { return fmt.Errorf("catalog.roundingRule.add: %w", err) } // The method wraps the response in an object with the "roundingRule" key. raw, ok := b24.Unwrap(res.Result, "roundingRule") if !ok { return fmt.Errorf("no roundingRule key in the response") } var item struct { CatalogGroupID b24.ID `json:"catalogGroupId"` CreatedBy int `json:"createdBy"` DateCreate string `json:"dateCreate"` DateModify string `json:"dateModify"` ID b24.ID `json:"id"` ModifiedBy int `json:"modifiedBy"` } if err := json.Unmarshal(raw, &item); err != nil { return fmt.Errorf("parse response: %w", err) } fmt.Println(item.CatalogGroupID, item.CreatedBy)
{% endlist %}
HTTP status: 200
{
"result": {
"roundingRule": {
"catalogGroupId": 14,
"createdBy": 1,
"dateCreate": "2024-09-25T16:40:59+02:00",
"dateModify": "2024-09-25T16:40:59+02:00",
"id": 1,
"modifiedBy": 1,
"price": 1000,
"roundPrecision": 100,
"roundType": 4
}
},
"time": {
"start": 1716552521.40908,
"finish": 1716552521.69852,
"duration": 0.289434909820557,
"processing": 0.011207103729248,
"date_start": "2024-09-25T16:40:59+02:00",
"date_finish": "2024-09-25T16:40:59+02:00",
"operating": 0
}
}#|
|| Name
type | Description ||
|| result
object | Root element of the response ||
|| roundingRule
catalog_rounding_rule | Object with information about the created price rounding rule ||
|| time
time | Information about the request execution time ||
|#
HTTP status: 400
{
"error": 200040300020,
"error_description": "Access Denied"
}{% include notitle error handling %}
#|
|| Code | Description ||
|| 200040300020 | Insufficient permissions to edit
||
|| 100 | Required parameter fields not provided
||
|| 0 | Required fields not set
||
|| 0 | Other errors (e.g., fatal errors)
||
|#
{% include system errors %}