Estimates in CRM: Overview of Methods and Events

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.

An estimate is a CRM object that allows you to create printed documents and send them to clients before a deal. An estimate has a subject, a stage, an amount in a currency, a list of product items, and a client — a company and contacts.

Development of the crm.quote.* methods for working with estimates has been discontinued. For new development, use the universal methods crm.item.* with entityTypeId = 7. The custom field methods crm.quote.userfield.* continue to work.

Quick navigation: all methods and events

User documentation: estimates in Bitrix24

Current API Version

An estimate is one of the CRM object types, so it is managed by the universal methods crm.item.* with entityTypeId = 7. The crm.quote.* methods remain only to support existing integrations.

If You Need To

Open the Method

Create an estimate

crm.item.add

Update an estimate

crm.item.update

Retrieve an estimate by its identifier

crm.item.get

Retrieve a list of estimates by filter

crm.item.list

Delete an estimate

crm.item.delete

Retrieve the description of estimate fields

crm.item.fields

Manage the product items of an estimate

crm.item.productrow.* with ownerType = Q

In the universal methods, field names are written in camelCase: TITLE becomes title, and ASSIGNED_BY_ID becomes assignedById. The conversion rules for custom fields are described in the section Universal CRM Methods.

Some fields are named differently in the universal methods: the estimate stage STATUS_ID arrives in the stageId field, and the multiple field CONTACT_IDS — in the contactIds field. The exact set of fields for an estimate is returned by the method crm.item.fields with entityTypeId = 7.

Getting Started

  1. Retrieve the description of estimate fields using the method crm.quote.fields — it returns both system and custom fields with their types
  2. Find out the available stages using the method crm.status.list with the filter ENTITY_ID = QUOTE_STATUS, and the list of currencies using the method crm.currency.list
  3. Create an estimate using the method crm.quote.add: pass the subject TITLE, the stage STATUS_ID, the client company COMPANY_ID or the contacts CONTACT_IDS, and your own company MYCOMPANY_ID
  4. Add product items using the method crm.quote.productrows.set; to check their composition, use the method crm.quote.productrows.get
  5. Subscribe to estimate events to receive notifications about changes in your application

Connection of Estimates with Other CRM Entities

Client. The company and contacts the estimate is addressed to. An estimate has a single company, and its identifier is passed in the field COMPANY_ID. There can be several contacts, and their identifiers are passed as an array in the multiple field CONTACT_IDS. You can find the required identifiers using the methods crm.company.list and crm.contact.list.

Deal. An estimate can be created based on a deal and vice versa. The deal identifier is stored in the estimate field DEAL_ID and can be passed to the methods crm.quote.add and crm.quote.update.

Lead. If the estimate was issued for a lead, the lead identifier is stored in the field LEAD_ID. The field is filled in automatically when a lead is converted and can be modified using the same methods.

Invoice. An invoice is linked to an estimate using the universal method crm.item.add: pass entityTypeId = 31 and the estimate identifier in the field parentId7.

Products. The product items of an estimate are created and updated by the method crm.quote.productrows.set and returned by crm.quote.productrows.get. You can retrieve the product identifier for an item using the method catalog.product.list.

Details. Buyer details are pulled into the estimate form from the associated contact or company. Seller details are taken from the company specified in the field MYCOMPANY_ID. To explicitly specify a pair of buyer and seller details, use the method crm.requisite.link.register, passing ENTITY_TYPE_ID = 7 and the estimate identifier in ENTITY_ID.

Estimate Detail Form

The main workspace of an estimate is the General tab of its detail form. It consists of two parts:

  • the left part contains fields with information. If the system fields are insufficient, add your own custom fields using the group of methods crm.quote.userfield.*. They store information in various data formats: string, number, link, address, and others. The name of such a field starts with the prefix UF_CRM_, and it is under this name that the field is passed to crm.quote.add and returned by crm.quote.get

  • the right part contains the estimate timeline. CRM activities in it are created, updated, and deleted by the group of methods crm.activity.* — the estimate is specified there by the pair OWNER_TYPE_ID = 7 and OWNER_ID. Timeline records are managed by the group of methods crm.timeline.*, where the estimate is specified by the pair ENTITY_TYPE = quote and ENTITY_ID

Widgets

You can embed an application into the estimate detail form and work with it without leaving the form. There are two embedding scenarios:

  • occupy a special embedding location — for example, create your own tab in the detail form
  • create a custom field into which the content of your application is loaded

Overview of Methods and Events

Scope: crm

Who can execute the method: depending on the method — estimate methods check access permissions for estimates, while creating, updating, and deleting custom fields is available only to a CRM administrator

Main Methods

Method

Description

crm.quote.add

Creates a new estimate

crm.quote.update

Modifies an existing estimate

crm.quote.get

Returns an estimate by its identifier

crm.quote.list

Returns a list of estimates based on a filter

crm.quote.delete

Deletes an estimate

crm.quote.fields

Returns the description of estimate fields

crm.quote.productrows.get

Returns the product items of the estimate

crm.quote.productrows.set

Creates or updates the product items of the estimate

Event

Triggered

onCrmQuoteAdd

When an estimate is created manually or via the method crm.quote.add

onCrmQuoteUpdate

When an estimate is updated manually or via the method crm.quote.update

onCrmQuoteDelete

When an estimate is deleted manually or via the method crm.quote.delete

Custom Fields

Method

Description

crm.quote.userfield.add

Creates a new custom field for estimates

crm.quote.userfield.update

Updates an existing custom field for estimates

crm.quote.userfield.get

Returns a custom field for estimates by ID

crm.quote.userfield.list

Returns a list of custom fields for estimates by filter

crm.quote.userfield.delete

Deletes a custom field for estimates

Event

Triggered

onCrmQuoteUserFieldAdd

When a custom field is added manually or via the method crm.quote.userfield.add

onCrmQuoteUserFieldUpdate

When a custom field is updated manually or via the method crm.quote.userfield.update

onCrmQuoteUserFieldDelete

When a custom field is deleted manually or via the method crm.quote.userfield.delete

onCrmQuoteUserFieldSetEnumValues

When the set of values for a list-type custom field is changed manually or via the method crm.quote.userfield.update