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 app
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 app
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 | Bitrix24 | Type | RO | Description |
|---|---|---|---|---|
id |
id |
number | yes | Quote ID |
quoteNumber |
quoteNumber |
string | Quote number | |
title |
title |
string | Name | |
amount |
opportunity |
number | Amount | |
taxValue |
taxValue |
number | Tax value. Measured 2026-09-07 on a live portal: a value sent here is not stored in either amount mode — automatic or manual — on create or on update; the read-back is 0. The import path has not been measured, so the field is left writable |
|
currency |
currencyId |
string | Currency. List: GET /v1/currencies |
|
stageId |
stageId |
string | Status: DRAFT, SENT, APPROVED. List: GET /v1/statuses?filter[entityId]=QUOTE_STATUS |
|
isManualOpportunity |
isManualOpportunity |
boolean | Manual amount mode (Y/N in Bitrix24, converted to boolean) |
|
opened |
opened |
boolean | Available to everyone | |
closed |
closed |
boolean | yes | Quote is closed |
dealId |
dealId |
number | Deal ID. Lookup: GET /v1/deals |
|
leadId |
leadId |
number | Lead ID. Lookup: GET /v1/leads |
|
contactId |
contactId |
number | Contact ID. Lookup: GET /v1/contacts |
|
contactIds |
contactIds |
array | Quote contact IDs. Send the full list — the binding set is replaced, not merged | |
contacts |
contacts |
array | yes | Quote contacts |
companyId |
companyId |
number | Company ID. Lookup: GET /v1/companies |
|
mycompanyId |
mycompanyId |
number | Your company details | |
personTypeId |
personTypeId |
number | yes | Payer type |
assignedById |
assignedById |
number | Assignee. List: GET /v1/users |
|
createdBy |
createdBy |
number | yes | Creator. Lookup: GET /v1/users |
updatedBy |
updatedBy |
number | yes | Updated by |
lastActivityBy |
lastActivityBy |
number | Last activity author | |
comments |
comments |
string | Comment | |
content |
content |
string | Content | |
terms |
terms |
string | Terms | |
locationId |
locationId |
string | Location | |
webformId |
webformId |
number | Created by a CRM web form | |
storageTypeId |
storageTypeId |
number | File storage type | |
storageElementIds |
storageElementIds |
array | Storage file IDs | |
utmSource |
utmSource |
string | UTM source | |
utmMedium |
utmMedium |
string | UTM medium | |
utmCampaign |
utmCampaign |
string | UTM campaign | |
utmContent |
utmContent |
string | UTM content | |
utmTerm |
utmTerm |
string | UTM term | |
beginDate |
begindate |
datetime | Start date | |
closeDate |
closedate |
datetime | Close date | |
actualDate |
actualDate |
datetime | Valid until | |
lastActivityTime |
lastActivityTime |
datetime | Last activity | |
lastCommunicationTime |
lastCommunicationTime |
string | yes | Last communication date |
lastCommunicationCallTime |
lastCommunicationCallTime |
datetime | yes | Last call date |
lastCommunicationEmailTime |
lastCommunicationEmailTime |
datetime | yes | Last email date |
lastCommunicationImolTime |
lastCommunicationImolTime |
datetime | yes | Last Open Channels dialog date |
lastCommunicationWebformTime |
lastCommunicationWebformTime |
datetime | yes | Last CRM web-form submission date |
createdTime |
createdTime |
datetime | yes | Creation date |
updatedTime |
updatedTime |
datetime | yes | Modification 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 refusals arrive before Bitrix24 is called.
User fields (ufCrm_*) are also returned in responses and accepted on create/update.
Available includes
The GET /v1/quotes/fields endpoint returns the list of available includes: deal, contact, company.
Usage example: Get quotes.
More about includes: Related data.
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."
}
},
"batch": ["create", "update", "delete"]
}
}
Only 3 of the many fields are shown. The full list is in the table above.
Every field is described by an object { type, readonly, label, description }. 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.
Errors
| HTTP | Code | Description |
|---|---|---|
| 403 | SCOPE_DENIED |
The API key lacks the crm scope |
| 401 | TOKEN_MISSING |
The API key has no configured tokens |
| 429 | RATE_LIMITED |
Rate limit exceeded: 300 requests per minute per portal, all API keys of the portal share one limit. The exact value arrives in the x-ratelimit-limit header (the cap is divided across replicas). Retry after the delay in the Retry-After header |
Full list of common API errors — Errors.