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

Terminal
curl "https://vibecode.bitrix24.com/v1/quotes/fields" \
  -H "X-Api-Key: YOUR_API_KEY"

curl — OAuth application

Terminal
curl "https://vibecode.bitrix24.com/v1/quotes/fields" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"

JavaScript — personal key

javascript
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

javascript
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 yes Tax amount for the quote. Computed by Bitrix24 from the product rows and accepted on no write door. 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. Therefore declared read-only: a write is refused instead of answering success and dropping the value. Set the tax through the product rows
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 Not 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); in select it answers 400 SELECT_FIELD_NOT_RETURNED, and it is not accepted in filter or order — 400 UNKNOWN_FILTER_FIELD / 400 UNKNOWN_SORT_FIELD
clientTitle clientTitle string yes Client 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 — a value sent on create, update, batch or import is dropped by Bitrix24. The legacy crm.quote.add / crm.quote.update methods (the ones older integrations use) store them, so they are returned in reads, work in filter and sort, and are declared read-only. A write is refused instead of answering success and dropping 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
clientAddr clientAddr string yes Client address from the legacy snapshot — filled and read the same way as clientTitle
clientContact clientContact string yes Client contact person from the legacy snapshot — as clientTitle
clientEmail clientEmail string yes Client e-mail from the legacy snapshot — as clientTitle
clientPhone clientPhone string yes Client phone from the legacy snapshot — as clientTitle
clientTpId clientTpId string yes Client taxpayer ID (INN) from the legacy snapshot — as clientTitle
clientTpaId clientTpaId string yes Client tax registration code (KPP) from the legacy snapshot — as clientTitle
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

JSON
{
  "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 account 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.

See also