For AI agents: markdown of this page — /docs-content-en/entities/deals/fields.md documentation index — /llms.txt

Deal fields

GET /v1/deals/fields

Returns the full list of available fields, including user fields (ufCrm_*).

Examples

curl — personal key

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

curl — OAuth app

Terminal
curl "https://vibecode.bitrix24.com/v1/deals/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/deals/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

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/deals/fields', {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})

const { success, data } = await res.json()

Response fields

The label and description field captions are returned in English, while the ones the platform takes straight from the Bitrix24 account come in the account language. Request headers do not switch the language. Enum values carry an English label.

Field Bitrix24 Type RO Description
id id number yes Deal ID
title title string Title
amount opportunity number Amount
currency currencyId string Currency. List: GET /v1/currencies
stageId stageId string Pipeline stage. The set of stages and their identifiers are configured in your Bitrix24 account and differ between pipelines. Current list — GET /v1/statuses?filter[entityId]=DEAL_STAGE for the main pipeline, GET /v1/statuses?filter[entityId]=DEAL_STAGE_{N} for the pipeline with categoryId={N} (the categoryId value is taken from GET /v1/deal-categories)
categoryId categoryId number Pipeline ID (0 = main). List: GET /v1/deal-categories
stageSemanticId stageSemanticId string yes Semantic category of the current stage: P — in progress, S — success, F — failure
companyId companyId number Company ID. Search: GET /v1/companies
contactId contactId number Primary contact ID. Search: GET /v1/contacts
contactIds contactIds number[] yes All linked contacts. Search: GET /v1/contacts
assignedById assignedById number Assignee. List: GET /v1/users
createdBy createdBy number yes Creator. Search: GET /v1/users
updatedBy updatedBy number yes Modified by. Search: GET /v1/users
createdAt createdTime datetime yes Creation date
updatedAt updatedTime datetime yes Modification date
closedAt closedate datetime Closing date
closed closed boolean yes Whether the deal is closed
sourceId sourceId string Source. List: GET /v1/statuses?filter[entityId]=SOURCE
sourceDescription sourceDescription string Source description
probability probability number Probability of success (%)
opened opened boolean Available to everyone
comments comments string Comment
observers observers number[] Observers. List: GET /v1/users
typeId typeId string Record type. List: GET /v1/statuses?filter[entityId]=DEAL_TYPE
isReturning isReturnCustomer boolean Repeat deal
leadId leadId number Lead the deal was created from. Arrives as null when the deal was not converted from a lead. Lookup: GET /v1/leads
quoteId quoteId number Quote the deal was created from. Arrives as null when the deal was not created from one. Lookup: GET /v1/quotes
taxValue taxValue number Tax amount on the deal, in the deal currency. Arrives as 0 when no tax applies. 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
originId originId string Identifier of this deal in the external system it was imported from. Arrives as null for deals created in Bitrix24
originatorId originatorId string External system the deal was imported from. Arrives as null for deals created in Bitrix24
additionalInfo additionalInfo string Free-form additional information on the deal. Arrives as null when unset
lastActivityBy lastActivityBy number User who performed the last timeline activity on the deal. Arrives as 0 when there was none. Lookup: GET /v1/users

The seven fields above — leadId, quoteId, taxValue, originId, originatorId, additionalInfo and lastActivityBy — are accepted in filter and in sorting, including in GET /v1/deals, POST /v1/deals/search and POST /v1/deals/aggregate. Five of them (leadId, quoteId, originId, originatorId, additionalInfo) may arrive as null, and for the three string fields an empty string from Bitrix24 is normalized to null — compare against an empty value, not against "".

The UTM fields (utmSource, utmMedium, utmCampaign, utmContent, utmTerm) and contacts are returned on reads but accepted neither in filter nor in sorting. Such a request is rejected with 400 UNKNOWN_FILTER_FIELD or 400 UNKNOWN_SORT_FIELD before Bitrix24 is called, and the reason for each field arrives in its description in this same endpoint's response. For contacts, filter by contactId (the primary contact) or by contactIds (any linked contact).

User fields (ufCrm_*) are also returned in responses and accepted on create/update.

Available includes

The GET /v1/deals/fields endpoint returns the list of available includes: contact, company.

Usage example: Get deals.

More on includes: Related data.

Response example

JSON
{
  "success": true,
  "data": {
    "fields": {
      "id": { "type": "number", "readonly": true, "label": "ID", "description": "Unique numeric identifier of the deal." },
      "title": { "type": "string", "readonly": false, "label": "Title", "description": "Deal title." },
      "assignedById": { "type": "number", "readonly": false, "label": "Assignee", "description": "ID of the responsible user. List: GET /v1/users." },
      "stageSemanticId": { "type": "string", "readonly": true, "label": "Stage semantics", "description": "Semantic category of the current stage — codes are decoded in enum.", "enum": [{ "value": "P", "label": "In progress" }, { "value": "S", "label": "Success" }, { "value": "F", "label": "Failure" }] }
    },
    "batch": ["create", "update", "delete"]
  }
}

Only 3 of the many fields are shown. The full list is in the table above.

Errors

HTTP Code Description
403 SCOPE_DENIED API key lacks the crm scope
401 TOKEN_MISSING 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.

See also