For AI agents: markdown of this page — /docs-content-en/entities/quotes/fields.md documentation index — /llms.txt
Quote fields
GET /v1/quotes/fields
Returns the full list of available fields, including user fields (ufCrm_*).
Examples
curl — personal key
curl "https://vibecode.bitrix24.com/v1/quotes/fields" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth application
curl "https://vibecode.bitrix24.com/v1/quotes/fields" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN"
JavaScript — personal key
const res = await fetch('https://vibecode.bitrix24.com/v1/quotes/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
const res = await fetch('https://vibecode.bitrix24.com/v1/quotes/fields', {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { success, data } = await res.json()
Response fields
| Field | Type | Description |
|---|---|---|
Fieldsuccess |
Typeboolean | DescriptionAlways true on success |
Fielddata |
Typeobject | DescriptionThe quote field schema and the operations available for quotes. Its keys are in the rows below |
Fielddata.fields |
Typeobject | DescriptionThe quote field schema: field name → an object with type, readonly and label. Some fields also carry description and extra attributes such as multiple and notReturned. The standard fields are listed below, and the ufCrm* user fields of this Bitrix24 account are added to them |
Fielddata.relations |
Typeobject | DescriptionThe deal, contact and company relations: the quote's deal, contact and company |
Fielddata.products |
Typeobject | DescriptionOperations on the quote's product rows, the setWarning notice that set replaces all rows, and the product row field schema. See Quote product fields |
Fielddata.aggregatable |
Typearray | DescriptionStandard fields allowed in the aggregation groupBy: amount, stageId, assignedById |
Fielddata.batch |
Typearray | DescriptionQuote write operations available in batch calls: create, update, delete |
Fielddata.import |
Typeobject | DescriptionMethod, path and maximum batch size for importing records |
Fielddata.include |
Typearray | DescriptionThe names the include parameter accepts: deal, contact, company |
Standard quote fields
The response elements of contactIds are numbers (number[]): OpenAPI describes them as number, while this endpoint and fieldsDetailed in /v1/guide publish readItemSchema: { "type": "number" }. This describes responses only: QuoteInput.contactIds retains its previous string[] schema, and accepted values and their order do not change.
| Field | Type | RO | Description |
|---|---|---|---|
Fieldid |
Typenumber | ROyes | DescriptionQuote ID |
FieldquoteNumber |
Typestring | RO | DescriptionQuote number |
Fieldtitle |
Typestring | RO | DescriptionName |
Fieldamount |
Typenumber | RO | DescriptionAmount |
FieldtaxValue |
Typenumber | ROyes | DescriptionTax amount for the quote. Computed by Bitrix24 from the product rows and rejected by all write operations. Measured 2026-09-11 on live Bitrix24 accounts of both platforms: create and update in both amount modes, import in both modes — the read-back is 0 every time. The field is therefore read-only: write attempts are rejected instead of returning a success response and discarding the value. Set the tax through the product rows |
Fieldcurrency |
Typestring | RO | DescriptionCurrency. List: GET /v1/currencies |
FieldstageId |
Typestring | RO | DescriptionStatus: DRAFT, SENT, APPROVED. List: GET /v1/statuses?filter[entityId]=QUOTE_STATUS |
FieldisManualOpportunity |
Typeboolean | RO | DescriptionManual amount mode (Y/N in Bitrix24, converted to boolean) |
Fieldopened |
Typeboolean | RO | DescriptionAvailable to everyone |
Fieldclosed |
Typeboolean | ROyes | DescriptionQuote is closed |
FielddealId |
Typenumber | RO | DescriptionDeal ID. Lookup: GET /v1/deals |
FieldleadId |
Typenumber | RO | DescriptionLead ID. Lookup: GET /v1/leads |
FieldcontactId |
Typenumber | RO | DescriptionContact ID. Lookup: GET /v1/contacts |
FieldcontactIds |
Typenumber[] | RO | DescriptionQuote contact IDs. Send the full list — the binding set is replaced, not merged |
Fieldcontacts |
Typearray | ROyes | DescriptionNot returned: the Bitrix24 item API never returns this key for quotes, and quotes have no bindings route — the bound contacts are in contactIds. Declared so that a write is refused (400 READONLY_FIELD instead of a raw Bitrix24 error); selecting it returns 400 SELECT_FIELD_NOT_RETURNED, and it is not accepted in filter or order — 400 UNKNOWN_FILTER_FIELD / 400 UNKNOWN_SORT_FIELD |
FieldclientTitle |
Typestring | ROyes | DescriptionClient name from the legacy snapshot. The seven client* fields (name, address, contact person, e-mail, phone, taxpayer ID, tax registration code) are not filled by binding a company and a contact and are not accepted by the item API — Bitrix24 discards values submitted during create, update, batch or import operations. The legacy crm.quote.add / crm.quote.update methods (the ones older integrations use) store them, so they are returned when reading records, can be used in filters and sorting, and are declared read-only. Write attempts are rejected instead of returning a success response and discarding the value: 400 READONLY_FIELD; BATCH_ITEM_VALIDATION in batch, IMPORT_ITEM_VALIDATION in import. null when nothing was stored, like every other string field. Measured 2026-09-15/16 through the direct webhook on a Bitrix24 test account |
FieldclientAddr |
Typestring | ROyes | DescriptionClient address from the legacy snapshot — filled and read the same way as clientTitle |
FieldclientContact |
Typestring | ROyes | DescriptionClient contact person from the legacy snapshot — as clientTitle |
FieldclientEmail |
Typestring | ROyes | DescriptionClient e-mail from the legacy snapshot — as clientTitle |
FieldclientPhone |
Typestring | ROyes | DescriptionClient phone from the legacy snapshot — as clientTitle |
FieldclientTpId |
Typestring | ROyes | DescriptionClient taxpayer ID (INN) from the legacy snapshot — as clientTitle |
FieldclientTpaId |
Typestring | ROyes | DescriptionClient tax registration code (KPP) from the legacy snapshot — as clientTitle |
FieldcompanyId |
Typenumber | RO | DescriptionCompany ID. Lookup: GET /v1/companies |
FieldmycompanyId |
Typenumber | RO | DescriptionYour company details |
FieldpersonTypeId |
Typenumber | ROyes | DescriptionPayer type |
FieldassignedById |
Typenumber | RO | DescriptionAssignee. List: GET /v1/users |
FieldcreatedBy |
Typenumber | ROyes | DescriptionCreator. Lookup: GET /v1/users |
FieldupdatedBy |
Typenumber | ROyes | DescriptionUpdated by |
FieldlastActivityBy |
Typenumber | RO | DescriptionLast activity author |
Fieldcomments |
Typestring | RO | DescriptionComment |
Fieldcontent |
Typestring | RO | DescriptionContent |
Fieldterms |
Typestring | RO | DescriptionTerms |
FieldlocationId |
Typestring | RO | DescriptionLocation |
FieldwebformId |
Typenumber | RO | DescriptionCreated by a CRM web form |
FieldstorageTypeId |
Typenumber | RO | DescriptionFile storage type |
FieldstorageElementIds |
Typearray | RO | DescriptionStorage file IDs |
FieldutmSource |
Typestring | RO | DescriptionUTM source |
FieldutmMedium |
Typestring | RO | DescriptionUTM medium |
FieldutmCampaign |
Typestring | RO | DescriptionUTM campaign |
FieldutmContent |
Typestring | RO | DescriptionUTM content |
FieldutmTerm |
Typestring | RO | DescriptionUTM term |
FieldbeginDate |
Typedatetime | RO | DescriptionStart date |
FieldcloseDate |
Typedatetime | RO | DescriptionClose date |
FieldactualDate |
Typedatetime | RO | DescriptionValid until |
FieldlastActivityTime |
Typedatetime | RO | DescriptionLast activity |
FieldlastCommunicationTime |
Typestring | ROyes | DescriptionLast communication date |
FieldlastCommunicationCallTime |
Typedatetime | ROyes | DescriptionLast call date |
FieldlastCommunicationEmailTime |
Typedatetime | ROyes | DescriptionLast email date |
FieldlastCommunicationImolTime |
Typedatetime | ROyes | DescriptionLast Open Channels dialog date |
FieldlastCommunicationWebformTime |
Typedatetime | ROyes | DescriptionLast CRM web-form submission date |
FieldcreatedTime |
Typedatetime | ROyes | DescriptionCreation date |
FieldupdatedTime |
Typedatetime | ROyes | DescriptionModification date |
The UTM fields are returned in list/get but accepted neither in filter nor in sorting. A request with filter[utmSource] returns 400 UNKNOWN_FILTER_FIELD, one with sort=utmSource returns 400 UNKNOWN_SORT_FIELD, and both errors are returned before Bitrix24 is called.
User fields (ufCrm_*) are also returned in responses and accepted on create/update.
Response example
{
"success": true,
"data": {
"fields": {
"id": { "type": "number", "readonly": true, "label": "Quote ID", "description": "Quote identifier assigned by Bitrix24." },
"title": { "type": "string", "readonly": false, "label": "Name", "description": "Quote name shown in the list and in the card." },
"assignedById": { "type": "number", "readonly": false, "label": "Assignee", "description": "Employee responsible for the quote. Available values: GET /v1/users." }
},
"relations": {
"deal": { "type": "one", "entity": "deals", "includable": true },
"contact": { "type": "one", "entity": "contacts", "includable": true },
"company": { "type": "one", "entity": "companies", "includable": true }
},
"aggregatable": ["amount", "stageId", "assignedById"],
"batch": ["create", "update", "delete"],
"import": { "method": "POST", "path": "/v1/quotes/import", "maxItems": 100 },
"include": ["deal", "contact", "company"]
}
}
Three fields from data.fields are shown, along with the other data keys. The data.products block is omitted from the example, and the full set of fields is in the tables above.
label is a short caption in English, while labels that the platform takes straight from the Bitrix24 account come in the account language. description is an extended explanation: what the field is for, where to get the list of allowed values, and how it behaves on write. Request headers do not switch the language. The stageId value set is configured in your Bitrix24 account, so its description links to the status list endpoint instead of enumerating fixed values.
What to do with the names from data.include is covered on the Get a quote page. For more information about the include parameter, see Related data.
Error response example
403 — the key lacks the crm scope:
{
"success": false,
"error": {
"code": "SCOPE_DENIED",
"message": "This endpoint requires 'crm' scope",
"hint": "This request needs the 'crm' scope, which the calling key does not carry. Add 'crm' to this key in the developer cabinet (or through the management API), then repeat the call.",
"cause": "key_scope_missing",
"requiredScope": "crm",
"keyScopes": ["task", "im"],
"fix": { "action": "edit_key_scopes", "via": "cabinet" },
"userMessage": "The app's API key lacks the “CRM” permission. You can add it in the key settings in the developer cabinet."
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| HTTP403 | CodeSCOPE_DENIED |
DescriptionThe API key lacks the crm scope |
| HTTP401 | CodeTOKEN_MISSING |
DescriptionThe API key has no configured tokens |
| HTTP429 | CodeRATE_LIMITED |
DescriptionRate limit exceeded: 300 requests per minute per portal. All API keys of the portal share one limit. The current limit is returned in the x-ratelimit-limit header. Retry after the delay in the Retry-After header |
For the full list of common API errors, see Errors.