Update Commercial Estimate crm.quote.update
Scope:
crmWho can execute the method: a user with "edit" access permission for estimates
Method Development Halted
The method crm.quote.update continues to function, but there is a more current alternative, crm.item.update.
The method crm.quote.update updates an existing estimate.
Method Parameters
Required parameters are marked with *
|
Name |
Description |
|
id* |
Identifier of the estimate. The identifier can be obtained using the methods crm.quote.list and crm.quote.add |
|
fields |
Object format:
where:
Only include the fields that need to be changed in Unknown fields in The list of primary fields for updating is provided below. A complete list of fields and types can be obtained using the method crm.quote.fields |
|
params |
Object of additional parameters (detailed description) |
Parameter fields
|
Name |
Description |
|
TITLE |
Subject of the estimate. Length restriction — up to If a value longer than |
|
STATUS_ID |
Stage of the estimate. The list of available stages can be obtained using the method crm.status.list with the filter |
|
CURRENCY_ID |
Currency of the estimate amount |
|
OPPORTUNITY |
Amount of the estimate |
|
ASSIGNED_BY_ID |
Identifier of the responsible person |
|
COMPANY_ID |
Identifier of the client company |
|
CONTACT_IDS |
Array of identifiers for client contacts. The field is completely replaced |
|
MYCOMPANY_ID |
Identifier of "your company" for vendor details |
|
OPENED |
Is the estimate available to everyone? Possible values:
|
|
PERSON_TYPE_ID |
Identifier of the client type |
|
BEGINDATE |
Date of issue |
|
CLOSEDATE |
Expiration date of the estimate |
|
CLIENT_TITLE |
Client name, up to |
|
CLIENT_ADDR |
Client address, up to |
|
CLIENT_EMAIL |
Client email, up to |
|
CLIENT_PHONE |
Client phone, up to |
|
COMMENTS |
Comment |
|
PARENT_ID_... |
Fields for links to smart processes. For example, |
Method Feature
Some incorrect values in the fields may not lead to a 400 error: values are normalized, truncated, or replaced with default values.
Parameter params
|
Name |
Description |
|
REGISTER_HISTORY_EVENT |
Should a record be created in the change history? Possible values:
Default — |
Code Examples
How to Use Examples in Documentation
Example of updating an estimate:
- estimate identifier —
43 - new stage —
SENT - updated comment —
Terms and conditions clarified
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"id":43,"fields":{"STATUS_ID":"SENT","COMMENTS":"Terms and conditions clarified"},"params":{"REGISTER_HISTORY_EVENT":"Y"}}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/crm.quote.update
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"id":43,"fields":{"STATUS_ID":"SENT","COMMENTS":"Terms and conditions clarified"},"params":{"REGISTER_HISTORY_EVENT":"Y"},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/crm.quote.update
try
{
const response = await $b24.callMethod(
'crm.quote.update',
{
id: 43,
fields: {
STATUS_ID: 'SENT',
COMMENTS: 'Terms and conditions clarified',
},
params: {
REGISTER_HISTORY_EVENT: 'Y',
},
}
);
const result = response.getData().result;
console.info(result);
}
catch( error )
{
console.error('Error:', error);
}
try {
$response = $b24Service
->core
->call(
'crm.quote.update',
[
'id' => 43,
'fields' => [
'STATUS_ID' => 'SENT',
'COMMENTS' => 'Terms and conditions clarified',
],
'params' => [
'REGISTER_HISTORY_EVENT' => 'Y',
],
]
);
$result = $response
->getResponseData()
->getResult();
echo 'Updated: ' . ($result ? 'true' : 'false');
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error updating quote: ' . $e->getMessage();
}
BX24.callMethod(
'crm.quote.update',
{
id: 43,
fields: {
STATUS_ID: 'SENT',
COMMENTS: 'Terms and conditions clarified',
},
params: {
REGISTER_HISTORY_EVENT: 'Y',
},
},
(result) => {
result.error()
? console.error(result.error())
: console.info(result.data())
;
},
);
require_once('crest.php');
$result = CRest::call(
'crm.quote.update',
[
'id' => 43,
'fields' => [
'STATUS_ID' => 'SENT',
'COMMENTS' => 'Terms and conditions clarified',
],
'params' => [
'REGISTER_HISTORY_EVENT' => 'Y',
],
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
Response Handling
HTTP Status: 200
{
"result": true,
"time": {
"start": 1773410167,
"finish": 1773410167.690598,
"duration": 0.6905980110168457,
"processing": 0,
"date_start": "2026-03-13T16:56:07+01:00",
"date_finish": "2026-03-13T16:56:07+01:00",
"operating_reset_at": 1773410767,
"operating": 0.26904988288879395
}
}
Returned Data
|
Name |
Description |
|
result |
Root element of the response, returns |
|
time |
Information about the request execution time |
Error Handling
HTTP Status: 400
{
"error": "",
"error_description": "Quote is not found"
}
|
Name |
Description |
|
error |
String error code. It may consist of digits, Latin letters, and underscores |
|
error_description |
Textual description of the error. The description is not intended to be shown to the end user in its raw form |
Possible Error Codes
|
Code |
Description |
Value |
|
|
|
|
|
|
|
|
|
|
|
Invalid |
|
|
|
User does not have permission to edit estimates |
|
|
|
Estimate with the provided |
Statuses and System Error Codes
HTTP Status: 20x, 40x, 50x
The errors described below may occur when calling any method.
|
Status |
Code |
Description |
|
|
|
An internal server error has occurred, please contact the server administrator or Bitrix24 technical support |
|
|
|
An internal server error has occurred, please contact the server administrator or Bitrix24 technical support |
|
|
|
The request intensity limit has been exceeded |
|
|
|
The current method is not allowed to be called using batch |
|
|
|
The maximum length of parameters passed to the batch method has been exceeded |
|
|
|
Invalid access token or webhook code |
|
|
|
The methods must be called using the HTTPS protocol |
|
|
|
The REST API is blocked due to overload. This is a manual individual block, to remove it you need to contact Bitrix24 technical support |
|
|
|
The REST API is available only on commercial plans |
|
|
|
The user whose access token or webhook was used to call the method lacks permissions |
|
|
|
The manifest is not available |
|
|
|
The request requires higher privileges than those provided by the webhook token |
|
|
|
The provided access token has expired |
|
|
|
The user does not have access to the application. This means that the application is installed, but the account administrator has allowed access to this application only for specific users |
|
|
|
The public part of the site is closed. To open the public part of the site on an on-premise installation, disable the option "Temporary closure of the public part of the site". Path to the setting: Desktop > Settings > Product Settings > Module Settings > Main Module > Temporary closure of the public part of the site |
Continue Learning
- Add Estimate crm.quote.add
- Get an Estimate by ID: crm.quote.get
- Get a List of Estimates by Filter crm.quote.list
- Delete Estimate crm.quote.delete
- Get Fields of the Estimate crm.quote.fields
- Set Product Rows for the Quote crm.quote.productrows.set
- Get Product Rows of the Quote crm.quote.productrows.get