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 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

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." }
    },
    "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:

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

See also