Create a New CRM object crm.item.add

If you are developing integrations for Bitrix24 using AI tools (Codex, Claude Code, Cursor), connect to the MCP server so that the assistant can utilize the official REST documentation.

Scope: crm

Who can execute the method: any user with the "add" access permission for the CRM object

This method provides a universal approach for creating CRM objects. It allows you to create various types of objects, such as deals, contacts, companies, and others.

To create an object, you must pass the appropriate parameters, including the object type and its information: title, description, contact details, and other specifics.

Upon successful execution of the request, a new object is created.

This method provides a flexible opportunity to automate the object creation process and integrate the CRM with other systems.

When creating an entity, a standard series of checks, modifications, and automatic actions are performed:

  • access permissions are checked
  • required fields are validated
  • stage-dependent required fields are validated
  • field values are checked for correctness
  • default values are assigned to fields
  • automation rules are triggered after saving

Next, we will take a closer look at how to use this method and which parameters must be passed.

Method Parameters

Required parameters are marked with *

Name
type

Description

entityTypeId*
integer

System or custom type identifier of the item we want to create.

Numerical values for system types (Lead — 1, Deal — 2, Contact — 3, Company — 4, Invoice — 31, etc.) are provided in the CRM object type directory. The SPA identifier can be found using the crm.type.list method.

fields*
object

Format object.

{
            field_1: value_1,
            field_2: value_2,
            ...,
            field_n: value_n,
        }
        

where

  • field_n — field name
  • value_n — field value

Each CRM object type has its own set of fields. This means that the set of fields for creating a Lead does not necessarily match the set of fields for creating a Contact or SPA.

The list of available fields for each entity type is described below.

An incorrect field in fields will be ignored.

useOriginalUfNames
boolean

Parameter to control the format of custom field names in the request and response.
Possible values:

  • Y — original names of custom fields, e.g., UF_CRM_2_1639669411830
  • N — custom field names in camelCase, e.g., ufCrm2_1639669411830

Default is N.

Parameter fields

Required parameters are marked with *

CRM object identifier entityTypeId: 1

Name
type

Description

title
string

Item name.

By default, it is generated according to the template {entityTypeName} #{id}, where

  • entityTypeName — entity name
  • id — item identifier

For example, for a lead with id = 13 — 'Lead #13'

honorific
crm_status

String identifier of the lead's salutation (e.g., 'HNR_US_1' = 'Mr.').

The list of available salutations can be found using crm.status.list by applying the filter { ENTITY_ID: "HONOFIRIC" }.

Default is null

name
string

First name.

Default is null

secondName
string

Middle name.

Default is null

lastName
string

Last name.

Default is null

birthdate
date

Date of birth.

Default is null

companyTitle
string

Company name.

Default is null

sourceId
crm_status

String identifier of the source.

For example, 'CALL' = 'Call'.

The list of available sources can be found using crm.status.list by applying the filter { ENTITY_ID: "SOURCE" }.

By default, it is set to of the first available source

sourceDescription
text

Additional information about the source.

Default is null

stageId
crm_status

String identifier of the item stage.

For example, 'NEW' = 'Unprocessed'.

The list of available stages can be found using crm.status.list by applying the filter { ENTITY_ID: "STATUS" }

By default, it is set to of the first available stage

statusDescription
text

Additional information about the stage.

Default is null

post
string

Job title.

Default is null

currencyId
crm_currency

Item currency identifier

By default, it is set to of the default currency

isManualOpportunity
boolean

opportunity
double

opened
boolean

comments
text

assignedById
user

companyId
crm_company

contactId
crm_contact

contactIds
crm_contact[]

originatorId
string

originId
string

webformId
integer

observers
user[]

utmSource
string

utmMedium
string

utmCampaign
string

utmContent
string

utmTerm
string

ufCrm...
crm_userfield

parentId...
crm_entity

fm
multifield[]

CRM object identifier entityTypeId: 2

Name
type

Description

title
string

typeId
crm_status

categoryId
integer

stageId
crm_status

isRecurring
boolean

probability
integer

currencyId
crm_currency

isManualOpportunity
boolean

opportunity
double

taxValue
double

companyId
crm_company

contactId
crm_contact

contactIds
crm_contact[]

quoteId
crm_quote

begindate
date

closedate
date

opened
boolean

comments
text

assignedById
user

sourceId
crm_status

sourceDescription
text

Additional information about the source.

leadId
crm_lead

additionalInfo
string

originatorId
string

originId
string

observers
user[]

locationId
location

utmSource
string

utmMedium
string

utmContent
string

utmTerm
string

ufCrm...
crm_userfield

parentId...
crm_entity

CRM object identifier entityTypeId: 3

Name
type

Description

honorific
crm_status

name
string

First name.

Default is null

secondName
string

Middle name.

Default is null

lastName
string

Last name.

Default is null

photo
file

birthdate
date

Date of birth.

Default is null

typeId
crm_status

sourceId
crm_status

String identifier of the source.

For example, 'CALL' = 'Call'.

The list of available sources can be found using crm.status.list by applying the filter { ENTITY_ID: "SOURCE" }.

sourceDescription
text

Additional information about the source.

Default is null

post
string

Job title.

Default is null

comments
text

opened
boolean

export
boolean

assignedById
user

companyId
crm_company

companyIds
crm_company

leadId
crm_lead

originatorId
string

originId
string

originVersion
string

observers
user[]

utmSource
string

utmMedium
string

utmCampaign
string

utmContent
string

utmTerm
string

ufCrm...
crm_userfield

parentId...
crm_entity

fm
multifield[]

CRM object identifier entityTypeId: 4

Name
type

Description

title
string

Item name.

By default, it is generated according to the template {entityTypeName} #{id}, where

  • entityTypeName — entity name
  • id — item identifier

typeId
crm_status

logo
file

bankingDetails
string

industry
crm_status

employees
crm_status

currencyId
crm_currency

revenue
double

opened
boolean

comments
text

isMyCompany
boolean

assignedById
user

contactIds
crm_contact[]

leadId
crm_lead

originatorId
string

originId
string

originVersion
string

observers
user[]

utmSource
string

utmMedium
string

utmCampaign
string

utmContent
string

utmTerm
string

ufCrm...
crm_userfield

parentId...
crm_entity

fm
multifield[]

CRM object identifier entityTypeId: 7

Name
type

Description

title
string

Item name.

By default, it is generated according to the template {entityTypeName} #{id}, where

  • entityTypeName — entity name
  • id — item identifier

For example, for an offer with id = 13 => 'Offer #13'

assignedById
user

opened
boolean

content
text

Content.

Default is null

terms
text

Conditions.

Default is null

comments
text

dealId
crm_deal

Linked deal identifier.

Default is null

leadId
crm_lead

storageTypeId
integer

Storage type identifier. Possible values:

  • 1 — file
  • 2 — WebDAV
  • 3 — disk

Default:

  1. If the disk module is installed -> Disk
  2. If the webdav module is installed -> WebDAV
  3. File

storageElementIds
integer

Array of files.

Default is null

webformId
integer

companyId
crm_company

contactId
crm_contact

contactIds
crm_contact[]

locationId
location

currencyId
crm_currency

isManualOpportunity
boolean

Amount calculation mode.

opportunity
double

taxValue
double

stageId
crm_status

begindate
date

closedate
date

actualDate
date

Valid until.

mycompanyId
crm_company

My company identifier.

Default — the identifier of the first available "my" company

utmSource
string

utmMedium
string

Traffic type.

utmCampaign
string

utmContent
string

utmTerm
string

ufCrm...
crm_userfield

Custom field. See the Custom Fields in CRM: Overview of Methods section.

parentId...
crm_entity

CRM object identifier entityTypeId: 31

Name
type

Description

title
string

Item name.

By default, it is generated according to the template {entityTypeName} #{id}, where

  • entityTypeName — entity name
  • id — item identifier

xmlId
string

assignedById
user

opened
boolean

webformId
integer

begindate
date

closedate
date

companyId
crm_company

contactId
crm_contact

contactIds
crm_contact[]

observers
user[]

stageId
crm_status

sourceId
crm_status

String identifier of the source.

For example, 'CALL' = 'Call'.

The list of available sources can be found using crm.status.list by applying the filter { ENTITY_ID: "SOURCE" }.

sourceDescription
text

Additional information about the source.

Default is null

currencyId
crm_currency

isManualOpportunity
boolean

opportunity
double

taxValue
double

mycompanyId
crm_company

My company identifier.

Default — the identifier of the first available "my" company

comments
text

locationId
location

ufCrm...
crm_userfield

Custom field. See the Custom Fields in CRM: Overview of Methods section.

parentId...
crm_entity

CRM object identifier entityTypeId: can be obtained using the crm.type.list method or created using the crm.type.add method.

Name
type

Description

title
string

Item name.

By default, it is generated according to the template {entityTypeName} #{id}, where

xmlId
string

assignedById
user

opened
boolean

webformId
integer

begindate
date

closedate
date

companyId
crm_company

contactId
crm_contact

contactIds
crm_contact[]

observers
user[]

categoryId
crm_category

stageId
crm_status

sourceId
crm_status

String source identifier. (e.g., 'CALL' = 'Call').

The list of available sources can be found using crm.status.list by applying the filter { ENTITY_ID: "SOURCE" }.

Only available if the isSourceEnabled setting is enabled for the corresponding SPA.

sourceDescription
text

Additional information about the source.

Only available if the isSourceEnabled setting is enabled for the corresponding SPA.

Default is null

currencyId
crm_currency

isManualOpportunity
boolean

opportunity
double

taxValue
double

mycompanyId
crm_company

My company identifier.

Only available if the isMycompanyEnabled setting is enabled for the corresponding SPA.

Default — Identifier of the first available "my" company

ufCrm...
crm_userfield

Custom field. See the Custom Fields in CRM: Overview of Methods section.

parentId...
crm_entity

SPA settings

For more information on managing SPA settings, you can read in Smart Processes: Overview of Methods

Code Examples

How to Use Examples in Documentation

  1. Example of creating a deal

    curl -X POST \
            -H "Content-Type: application/json" \
            -H "Accept: application/json" \
            -d '{"entityTypeId":2,"fields":{"title":"New deal (specifically for REST method examples)","typeId":"SERVICE","categoryId":9,"stageId":"C9:UC_KN8KFI","isReccurring":"Y","probability":50,"currencyId":"USD","isManualOpportunity":"Y","opportunity":999.99,"taxValue":99.9,"companyId":5,"contactId":4,"contactIds":[4,5],"quoteId":7,"begindate":"formatDate(monthAgo)","closedate":"formatDate(twelveDaysInAdvance)","opened":"N","comments":"commentsExample","assignedById":6,"sourceId":"WEB","sourceDescription":"There should be an additional description about the source here","leadId":102,"additionalInfo":"There should be additional information here","observers":[2,3],"utmSource":"google","utmMedium":"CPC","ufCrm_1721244707107":1111.1,"parentId1220":2}}' \
            https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/crm.item.add
            
    curl -X POST \
            -H "Content-Type: application/json" \
            -H "Accept: application/json" \
            -d '{"entityTypeId":2,"fields":{"title":"New deal (specifically for REST method examples)","typeId":"SERVICE","categoryId":9,"stageId":"C9:UC_KN8KFI","isReccurring":"Y","probability":50,"currencyId":"USD","isManualOpportunity":"Y","opportunity":999.99,"taxValue":99.9,"companyId":5,"contactId":4,"contactIds":[4,5],"quoteId":7,"begindate":"formatDate(monthAgo)","closedate":"formatDate(twelveDaysInAdvance)","opened":"N","comments":"commentsExample","assignedById":6,"sourceId":"WEB","sourceDescription":"There should be an additional description about the source here","leadId":102,"additionalInfo":"There should be additional information here","observers":[2,3],"utmSource":"google","utmMedium":"CPC","ufCrm_1721244707107":1111.1,"parentId1220":2},"auth":"**put_access_token_here**"}' \
            https://**put_your_bitrix24_address**/rest/crm.item.add
            
    // This snippet is an ES module: top-level await requires type="module" or a bundler.
            // $b24 is an already-initialized SDK instance (see the SDK "Get started" guide).
            import { Text } from '@bitrix24/b24jssdk'
            import type { B24Frame } from '@bitrix24/b24jssdk'
            
            declare const $b24: B24Frame
            
            type CrmItem = {
              id: number
              title: string
            }
            
            // Shape of the payload returned in result (match the "response handling" section of the page)
            type ItemAddResult = {
              item: CrmItem
            }
            
            const formatDate = (date: Date): string => date.toISOString().slice(0, 10)
            const day = 60 * 60 * 24 * 1000
            const now = new Date()
            const twelveDaysInAdvance = new Date(now.getTime() + 12 * day)
            const monthAgo = new Date(now.getTime() - 30 * day)
            
            const commentsExample = [
              'Example comment inside a deal',
              '',
              '[B]Bold text[/B]',
              '[I]Italic[/I]',
              '[U]Underlined[/U]',
              '[S]Strikethrough[/S]',
              '[B][I][U][S]Mix[/S][/U][/I][/B]',
              '',
              '[LIST]',
              '[*]List item #1',
              '[*]List item #2',
              '[*]List item #3',
              '[/LIST]',
            ].join('\n')
            
            try {
              const response = await $b24.actions.v2.call.make<ItemAddResult>({
                method: 'crm.item.add',
                params: {
                  entityTypeId: 2,
                  fields: {
                    title: 'New deal (specifically for the REST methods example)',
                    typeId: 'SERVICE',
                    categoryId: 9,
                    stageId: 'C9:UC_KN8KFI',
                    isReccurring: 'Y',
                    probability: 50,
                    currencyId: 'USD',
                    isManualOpportunity: 'Y',
                    opportunity: 999.99,
                    taxValue: 99.9,
                    companyId: 5,
                    contactId: 4,
                    contactIds: [4, 5],
                    quoteId: 7,
                    begindate: formatDate(monthAgo),
                    closedate: formatDate(twelveDaysInAdvance),
                    opened: 'N',
                    comments: commentsExample,
                    assignedById: 6,
                    sourceId: 'WEB',
                    sourceDescription: 'Additional description about the source goes here',
                    leadId: 102,
                    additionalInfo: 'Additional information goes here',
                    observers: [2, 3],
                    utmSource: 'google',
                    utmMedium: 'CPC',
                    ufCrm_1721244707107: 1111.1,
                    parentId1220: 2,
                  },
                },
                requestId: Text.getUuidRfc4122()
              })
            
              // The payload is available only on a successful response
              if (!response.isSuccess) {
                console.error(response.getErrorMessages().join('; '))
              } else {
                const result = response.getData()!.result
                console.info(`Created item #${result.item.id} (${result.item.title})`)
              }
            } catch (error) {
              // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
              console.error(error)
            }
            
    <!-- Load the SDK (UMD build); it is exposed as the global B24Js -->
            <script src="https://unpkg.com/@bitrix24/b24jssdk@1/dist/umd/index.min.js"></script>
            <script>
              async function addCrmItem() {
                try {
                  // Initialize the SDK inside a Bitrix24 frame
                  const $b24 = await B24Js.initializeB24Frame()
            
                  const formatDate = (date) => date.toISOString().slice(0, 10)
                  const day = 60 * 60 * 24 * 1000
                  const now = new Date()
                  const twelveDaysInAdvance = new Date(now.getTime() + 12 * day)
                  const monthAgo = new Date(now.getTime() - 30 * day)
            
                  const commentsExample = [
                    'Example comment inside a deal',
                    '',
                    '[B]Bold text[/B]',
                    '[I]Italic[/I]',
                    '[U]Underlined[/U]',
                    '[S]Strikethrough[/S]',
                    '[B][I][U][S]Mix[/S][/U][/I][/B]',
                    '',
                    '[LIST]',
                    '[*]List item #1',
                    '[*]List item #2',
                    '[*]List item #3',
                    '[/LIST]',
                  ].join('\n')
            
                  const response = await $b24.actions.v2.call.make({
                    method: 'crm.item.add',
                    params: {
                      entityTypeId: 2,
                      fields: {
                        title: 'New deal (specifically for the REST methods example)',
                        typeId: 'SERVICE',
                        categoryId: 9,
                        stageId: 'C9:UC_KN8KFI',
                        isReccurring: 'Y',
                        probability: 50,
                        currencyId: 'USD',
                        isManualOpportunity: 'Y',
                        opportunity: 999.99,
                        taxValue: 99.9,
                        companyId: 5,
                        contactId: 4,
                        contactIds: [4, 5],
                        quoteId: 7,
                        begindate: formatDate(monthAgo),
                        closedate: formatDate(twelveDaysInAdvance),
                        opened: 'N',
                        comments: commentsExample,
                        assignedById: 6,
                        sourceId: 'WEB',
                        sourceDescription: 'Additional description about the source goes here',
                        leadId: 102,
                        additionalInfo: 'Additional information goes here',
                        observers: [2, 3],
                        utmSource: 'google',
                        utmMedium: 'CPC',
                        ufCrm_1721244707107: 1111.1,
                        parentId1220: 2,
                      },
                    },
                    requestId: B24Js.Text.getUuidRfc4122()
                  })
            
                  // The payload is available only on a successful response
                  if (!response.isSuccess) {
                    console.error(response.getErrorMessages().join('; '))
                    return
                  }
            
                  const result = response.getData().result
                  console.info(`Created item #${result.item.id} (${result.item.title})`)
                } catch (error) {
                  // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
                  console.error(error)
                }
              }
            
              document.addEventListener('DOMContentLoaded', addCrmItem)
            </script>
            
    require_once('crest.php');
            
            $result = CRest::call(
                'crm.item.add',
                [
                    'entityTypeId' => 2,
                    'fields' => [
                        'title' => "New deal (specifically for REST method examples)",
                        'typeId' => "SERVICE",
                        'categoryId' => 9,
                        'stageId' => "C9:UC_KN8KFI",
                        'isReccurring' => "Y",
                        'probability' => 50,
                        'currencyId' => "USD",
                        'isManualOpportunity' => "Y",
                        'opportunity' => 999.99,
                        'taxValue' => 99.9,
                        'companyId' => 5,
                        'contactId' => 4,
                        'contactIds' => [4, 5],
                        'quoteId' => 7,
                        'begindate' => formatDate(monthAgo),
                        'closedate' => formatDate(twelveDaysInAdvance),
                        'opened' => "N",
                        'comments' => $commentsExample,
                        'assignedById' => 6,
                        'sourceId' => "WEB",
                        'sourceDescription' => "There should be an additional description about the source here",
                        'leadId' => 102,
                        'additionalInfo' => "There should be additional information here",
                        'observers' => [2, 3],
                        'utmSource' => "google",
                        'utmMedium' => "CPC",
                        'ufCrm_1721244707107' => 1111.1,
                        'parentId1220' => 2,
                    ],
                ]
            );
            
            echo '<PRE>';
            print_r($result);
            echo '</PRE>';
            
    try {
               $entityTypeId = 1; // Example entity type ID
               $fields = [
                   'title' => 'New Item',
                   'createdTime' => (new DateTime())->format(DateTime::ATOM),
                   'updatedTime' => (new DateTime())->format(DateTime::ATOM),
                   'begindate' => (new DateTime())->format(DateTime::ATOM),
                   'closedate' => (new DateTime())->format(DateTime::ATOM),
                   // Add other necessary fields as required
               ];
            
               $result = $serviceBuilder
                   ->getCRMScope()
                   ->item()
                   ->add($entityTypeId, $fields);
            
               print("ID: " . $result->item()->id . PHP_EOL);
               print("Title: " . $result->item()->title . PHP_EOL);
               print("Created By: " . $result->item()->createdBy . PHP_EOL);
               print("Updated By: " . $result->item()->updatedBy . PHP_EOL);
               print("Created Time: " . $result->item()->createdTime->format(DateTime::ATOM) . PHP_EOL);
               print("Updated Time: " . $result->item()->updatedTime->format(DateTime::ATOM) . PHP_EOL);
            } catch (Throwable $e) {
               print("Error: " . $e->getMessage() . PHP_EOL);
            }
            

    Example

    from b24pysdk.client import BaseClient
            from b24pysdk.errors import BitrixAPIError, BitrixSDKException
            
            client: BaseClient
            
            try:
                bitrix_response = client.crm.item.add(
                    entity_type_id=2,
                    fields={
                        "title": "New deal (specifically for REST method examples)",
                        "typeId": "SERVICE",
                        "categoryId": 9,
                        "stageId": "C9:UC_KN8KFI",
                        "isReccurring": "Y",
                        "probability": 50,
                        "currencyId": "USD",
                        "isManualOpportunity": "Y",
                        "opportunity": 999.99,
                        "taxValue": 99.9,
                        "companyId": 5,
                        "contactId": 4,
                        "contactIds": [4, 5],
                        "quoteId": 7,
                        "begindate": "formatDate(monthAgo)",
                        "closedate": "formatDate(twelveDaysInAdvance)",
                        "opened": "N",
                        "comments": "commentsExample",
                        "assignedById": 6,
                        "sourceId": "WEB",
                        "sourceDescription": "There should be an additional description about the source here",
                        "leadId": 102,
                        "additionalInfo": "There should be additional information here",
                        "observers": [2, 3],
                        "utmSource": "google",
                        "utmMedium": "CPC",
                        "ufCrm_1721244707107": 1111.1,
                        "parentId1220": 2,
                    },
                ).response
                result = bitrix_response.result
                print(result)
            except BitrixAPIError as error:
                print(
                    "Bitrix API error",
                    f"error: {error.error}",
                    f"error_description: {error.error_description}",
                    sep="\n",
                )
            except BitrixSDKException as error:
                print(f"Bitrix SDK error: {error.message}")
            except Exception as error:
                print(f"Unexpected error: {error}")
            
  2. Example of creating an SPA item with a set of custom fields

    Custom fields involved in the example
    {
            "ufCrm44_1721812760630": {
                "type": "string",
                "isRequired": false,
                "isReadOnly": false,
                "isImmutable": false,
                "isMultiple": false,
                "isDynamic": true,
                "title": "Custom field (string)",
                "listLabel": "Custom field (string)",
                "formLabel": "Custom field (string)",
                "filterLabel": "Custom field (string)",
                "settings": {
                "SIZE": 20,
                "ROWS": 1,
                "REGEXP": "",
                "MIN_LENGTH": 0,
                "MAX_LENGTH": 0,
                "DEFAULT_VALUE": ""
                },
                "upperName": "UF_CRM_44_1721812760630"
            },
            "ufCrm44_1721812814433": {
                "type": "enumeration",
                "isRequired": false,
                "isReadOnly": false,
                "isImmutable": false,
                "isMultiple": false,
                "isDynamic": true,
                "items": [
                {
                    "ID": "79",
                    "VALUE": "List item #1"
                },
                {
                    "ID": "80",
                    "VALUE": "List item #2"
                },
                {
                    "ID": "81",
                    "VALUE": "List item #3"
                },
                {
                    "ID": "82",
                    "VALUE": "List item #4"
                }
                ],
                "title": "Custom field (list)",
                "listLabel": "Custom field (list)",
                "formLabel": "Custom field (list)",
                "filterLabel": "Custom field (list)",
                "settings": {
                "DISPLAY": "LIST",
                "LIST_HEIGHT": 1,
                "CAPTION_NO_VALUE": "",
                "SHOW_NO_VALUE": "Y"
                },
                "upperName": "UF_CRM_44_1721812814433"
            },
            "ufCrm44_1721812853419": {
                "type": "date",
                "isRequired": false,
                "isReadOnly": false,
                "isImmutable": false,
                "isMultiple": false,
                "isDynamic": true,
                "title": "Custom field (date)",
                "listLabel": "Custom field (date)",
                "formLabel": "Custom field (date)",
                "filterLabel": "Custom field (date)",
                "settings": {
                "DEFAULT_VALUE": {
                    "TYPE": "NONE",
                    "VALUE": ""
                }
                },
                "upperName": "UF_CRM_44_1721812853419"
            },
            "ufCrm44_1721812885588": {
                "type": "url",
                "isRequired": false,
                "isReadOnly": false,
                "isImmutable": false,
                "isMultiple": true,
                "isDynamic": true,
                "title": "Multiple custom field (link)",
                "listLabel": "Multiple custom field (link)",
                "formLabel": "Multiple custom field (link)",
                "filterLabel": "Multiple custom field (link)",
                "settings": {
                "POPUP": "Y",
                "SIZE": 20,
                "MIN_LENGTH": 0,
                "MAX_LENGTH": 0,
                "DEFAULT_VALUE": "",
                "ROWS": 1
                },
                "upperName": "UF_CRM_44_1721812885588"
            },
            "ufCrm44_1721812898903": {
                "type": "file",
                "isRequired": false,
                "isReadOnly": false,
                "isImmutable": false,
                "isMultiple": false,
                "isDynamic": true,
                "title": "Custom field (file)",
                "listLabel": "Custom field (file)",
                "formLabel": "Custom field (file)",
                "filterLabel": "Custom field (file)",
                "settings": {
                "SIZE": 20,
                "LIST_WIDTH": 0,
                "LIST_HEIGHT": 0,
                "MAX_SHOW_SIZE": 0,
                "MAX_ALLOWED_SIZE": 0,
                "EXTENSIONS": [],
                "TARGET_BLANK": "Y"
                },
                "upperName": "UF_CRM_44_1721812898903"
            },
            "ufCrm44_1721812915476": {
                "type": "money",
                "isRequired": false,
                "isReadOnly": false,
                "isImmutable": false,
                "isMultiple": false,
                "isDynamic": true,
                "title": "Custom field (money)",
                "listLabel": "Custom field (money)",
                "formLabel": "Custom field (money)",
                "filterLabel": "Custom field (money)",
                "settings": {
                "DEFAULT_VALUE": ""
                },
                "upperName": "UF_CRM_44_1721812915476"
            },
            "ufCrm44_1721812935209": {
                "type": "boolean",
                "isRequired": false,
                "isReadOnly": false,
                "isImmutable": false,
                "isMultiple": false,
                "isDynamic": true,
                "title": "Custom field (Yes/No)",
                "listLabel": "Custom field (Yes/No)",
                "formLabel": "Custom field (Yes/No)",
                "filterLabel": "Custom field (Yes/No)",
                "settings": {
                "DEFAULT_VALUE": 0,
                "DISPLAY": "CHECKBOX",
                "LABEL": [
                    "",
                    ""
                ],
                "LABEL_CHECKBOX": {
                    "en": "Custom field (Yes/No)",
                    "de": "Custom field (Yes/No)",
                    "th": "Custom field (Yes/No)",
                    "la": "Custom field (Yes/No)",
                    "tc": "Custom field (Yes/No)",
                    "sc": "Custom field (Yes/No)",
                    "br": "Custom field (Yes/No)",
                    "ar": "Custom field (Yes/No)",
                    "fr": "Custom field (Yes/No)",
                    "vn": "Custom field (Yes/No)",
                    "pl": "Custom field (Yes/No)",
                    "tr": "Custom field (Yes/No)",
                    "ja": "Custom field (Yes/No)",
                    "it": "Custom field (Yes/No)",
                    "ms": "Custom field (Yes/No)",
                    "id": "Custom field (Yes/No)"
                }
                },
                "upperName": "UF_CRM_44_1721812935209"
            },
            "ufCrm44_1721812948498": {
                "type": "double",
                "isRequired": false,
                "isReadOnly": false,
                "isImmutable": false,
                "isMultiple": false,
                "isDynamic": true,
                "title": "Custom field (number)",
                "listLabel": "Custom field (number)",
                "formLabel": "Custom field (number)",
                "filterLabel": "Custom field (number)",
                "settings": {
                "PRECISION": 2,
                "SIZE": 20,
                "MIN_VALUE": 0,
                "MAX_VALUE": 0,
                "DEFAULT_VALUE": null
                },
                "upperName": "UF_CRM_44_1721812948498"
            }
            }
            
    curl -X POST \
            -H "Content-Type: application/json" \
            -H "Accept: application/json" \
            -d '{
                "entityTypeId": 1302,
                "fields": {
                    "ufCrm44_1721812760630": "String for a String type custom field",
                    "ufCrm44_1721812814433": 81,
                    "ufCrm44_1721812853419": "'"$(date '+%Y-%m-%d')"'",
                    "ufCrm44_1721812885588": [
                        "example.com",
                        "second-example.com"
                    ],
                    "ufCrm44_1721812898903": [
                        "green_pixel.png",
                        "iVBORw0KGgoAAAANSUhEUgAAAIAAAAAMCAYAAACqTLVoAAAALklEQVR42u3SAQEAAAQDsEsuOj3YMqwy6fBWCSCAAAIgAAIgAAIgAAIgAAJw3QLOrRH1U/gU4gAAAABJRU5ErkJggg=="
                    ],
                    "ufCrm44_1721812915476": "300|USD",
                    "ufCrm44_1721812935209": "Y",
                    "ufCrm44_1721812948498": 9999.9
                }
            }' \
            https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/crm.item.add
            
    curl -X POST \
            -H "Content-Type: application/json" \
            -H "Accept: application/json" \
            -d '{
                "entityTypeId": 1302,
                "fields": {
                    "ufCrm44_1721812760630": "String for a String type custom field",
                    "ufCrm44_1721812814433": 81,
                    "ufCrm44_1721812853419": "'"$(date '+%Y-%m-%d')"'",
                    "ufCrm44_1721812885588": [
                        "example.com",
                        "second-example.com"
                    ],
                    "ufCrm44_1721812898903": [
                        "green_pixel.png",
                        "iVBORw0KGgoAAAANSUhEUgAAAIAAAAAMCAYAAACqTLVoAAAALklEQVR42u3SAQEAAAQDsEsuOj3YMqwy6fBWCSCAAAIgAAIgAAIgAAIgAAJw3QLOrRH1U/gU4gAAAABJRU5ErkJggg=="
                    ],
                    "ufCrm44_1721812915476": "300|USD",
                    "ufCrm44_1721812935209": "Y",
                    "ufCrm44_1721812948498": 9999.9
                },
                "auth": "**put_access_token_here**"
            }' \
            https://**put_your_bitrix24_address**/rest/crm.item.add
            
    // This snippet is an ES module: top-level await requires type="module" or a bundler.
            // $b24 is an already-initialized SDK instance (see the SDK "Get started" guide).
            import { Text } from '@bitrix24/b24jssdk'
            import type { B24Frame } from '@bitrix24/b24jssdk'
            
            declare const $b24: B24Frame
            
            type CrmItem = {
              id: number
              title: string
            }
            
            // Shape of the payload returned in result (match the "response handling" section of the page)
            type ItemAddResult = {
              item: CrmItem
            }
            
            const greenPixelInBase64 = 'iVBORw0KGgoAAAANSUhEUgAAAIAAAAAMCAYAAACqTLVoAAAALklEQVR42u3SAQEAAAQDsEsuOj3YMqwy6fBWCSCAAAIgAAIgAAIgAAIgAAJw3QLOrRH1U/gU4gAAAABJRU5ErkJggg=='
            
            try {
              const response = await $b24.actions.v2.call.make<ItemAddResult>({
                method: 'crm.item.add',
                params: {
                  entityTypeId: 1302,
                  fields: {
                    ufCrm44_1721812760630: 'Value for a String-type custom field',
                    ufCrm44_1721812814433: 81,
                    ufCrm44_1721812853419: new Date().toISOString().slice(0, 10),
                    ufCrm44_1721812885588: [
                      'example.com',
                      'second-example.com',
                    ],
                    ufCrm44_1721812898903: [
                      'green_pixel.png',
                      greenPixelInBase64,
                    ],
                    ufCrm44_1721812915476: '300|USD',
                    ufCrm44_1721812935209: 'Y',
                    ufCrm44_1721812948498: 9999.9,
                  },
                },
                requestId: Text.getUuidRfc4122()
              })
            
              // The payload is available only on a successful response
              if (!response.isSuccess) {
                console.error(response.getErrorMessages().join('; '))
              } else {
                const result = response.getData()!.result
                console.info(`Created item #${result.item.id} (${result.item.title})`)
              }
            } catch (error) {
              // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
              console.error(error)
            }
            
    <!-- Load the SDK (UMD build); it is exposed as the global B24Js -->
            <script src="https://unpkg.com/@bitrix24/b24jssdk@1/dist/umd/index.min.js"></script>
            <script>
              async function addCrmItemWithCustomFields() {
                try {
                  // Initialize the SDK inside a Bitrix24 frame
                  const $b24 = await B24Js.initializeB24Frame()
            
                  const greenPixelInBase64 = 'iVBORw0KGgoAAAANSUhEUgAAAIAAAAAMCAYAAACqTLVoAAAALklEQVR42u3SAQEAAAQDsEsuOj3YMqwy6fBWCSCAAAIgAAIgAAIgAAIgAAJw3QLOrRH1U/gU4gAAAABJRU5ErkJggg=='
            
                  const response = await $b24.actions.v2.call.make({
                    method: 'crm.item.add',
                    params: {
                      entityTypeId: 1302,
                      fields: {
                        ufCrm44_1721812760630: 'Value for a String-type custom field',
                        ufCrm44_1721812814433: 81,
                        ufCrm44_1721812853419: new Date().toISOString().slice(0, 10),
                        ufCrm44_1721812885588: [
                          'example.com',
                          'second-example.com',
                        ],
                        ufCrm44_1721812898903: [
                          'green_pixel.png',
                          greenPixelInBase64,
                        ],
                        ufCrm44_1721812915476: '300|USD',
                        ufCrm44_1721812935209: 'Y',
                        ufCrm44_1721812948498: 9999.9,
                      },
                    },
                    requestId: B24Js.Text.getUuidRfc4122()
                  })
            
                  // The payload is available only on a successful response
                  if (!response.isSuccess) {
                    console.error(response.getErrorMessages().join('; '))
                    return
                  }
            
                  const result = response.getData().result
                  console.info(`Created item #${result.item.id} (${result.item.title})`)
                } catch (error) {
                  // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
                  console.error(error)
                }
              }
            
              document.addEventListener('DOMContentLoaded', addCrmItemWithCustomFields)
            </script>
            
    require_once('crest.php');
            
            $result = CRest::call(
                'crm.item.add',
                [
                    'entityTypeId' => 1302,
                    'fields' => [
                        'ufCrm44_1721812760630' => "String for a String type custom field",
                        'ufCrm44_1721812814433' => 81,
                        'ufCrm44_1721812853419' => date('Y-m-d'),
                        'ufCrm44_1721812885588' => [
                            "example.com",
                            "second-example.com",
                        ],
                        'ufCrm44_1721812898903' => [
                            "green_pixel.png",
                            "iVBORw0KGgoAAAANSUhEUgAAAIAAAAAMCAYAAACqTLVoAAAALklEQVR42u3SAQEAAAQDsEsuOj3YMqwy6fBWCSCAAAIgAAIgAAIgAAIgAAJw3QLOrRH1U/gU4gAAAABJRU5ErkJggg==",
                        ],
                        'ufCrm44_1721812915476' => "300|USD",
                        'ufCrm44_1721812935209' => "Y",
                        'ufCrm44_1721812948498' => 9999.9,
                    ],
                ]
            );
            
            echo '<PRE>';
            print_r($result);
            echo '</PRE>';
            

Response Handling

HTTP status: 200

Note

Disabled fields always return null.

{
            "result": {
                "item": {
                    "id": 342,
                    "createdTime": "2024-07-18T14:00:14+02:00",
                    "dateCreateShort": null,
                    "updatedTime": "2024-07-18T14:00:14+02:00",
                    "dateModifyShort": null,
                    "createdBy": 1,
                    "updatedBy": 1,
                    "assignedById": 6,
                    "opened": "N",
                    "leadId": 102,
                    "companyId": 5,
                    "contactId": 4,
                    "quoteId": 7,
                    "title": "New deal (specifically for rest method examples)",
                    "productId": null,
                    "categoryId": 9,
                    "stageId": "C9:UC_KN8KFI",
                    "stageSemanticId": "P",
                    "isNew": "N",
                    "isRecurring": "N",
                    "isReturnCustomer": "N",
                    "isRepeatedApproach": "Y",
                    "closed": "N",
                    "typeId": "SERVICE",
                    "opportunity": 999.99,
                    "isManualOpportunity": "Y",
                    "taxValue": 0,
                    "currencyId": "USD",
                    "probability": 50,
                    "comments": "\nExample comment inside the deal\n\n[B]Bold text[/B]\n[I]Italic[/I]\n[U]Underlined[/U]\n[S]Strikethrough[/S]\n[B][I][U][S]Mix[/S][/U][/I][/B]\n\n[LIST]\n[*]List item #1\n[*]List item #2\n[*]List item #3\n[/LIST]\n\n[LIST=1]\n[*]Numbered list item #1\n[*]Numbered list item #2\n[*]Numbered list item #3\n[/LIST]\n",
                    "begindate": "2024-06-18T02:00:00+02:00",
                    "begindateShort": null,
                    "closedate": "2024-07-30T02:00:00+02:00",
                    "closedateShort": null,
                    "eventDate": null,
                    "eventDateShort": null,
                    "eventId": null,
                    "eventDescription": null,
                    "locationId": null,
                    "webformId": null,
                    "sourceId": "WEB",
                    "sourceDescription": "There should be an additional description about the source here",
                    "originatorId": null,
                    "originId": null,
                    "additionalInfo": "There should be additional information here",
                    "searchContent": null,
                    "orderStage": null,
                    "movedBy": 1,
                    "movedTime": "2024-07-18T14:00:14+02:00",
                    "lastActivityBy": 1,
                    "lastActivityTime": "2024-07-18T14:00:14+02:00",
                    "isWork": null,
                    "isWon": null,
                    "isLose": null,
                    "receivedAmount": null,
                    "lostAmount": null,
                    "hasProducts": null,
                    "ufCrm_1721244707107": 1111.1,
                    "parentId1220": 2,
                    "utmSource": "google",
                    "utmMedium": "CPC",
                    "utmCampaign": null,
                    "utmContent": null,
                    "utmTerm": null,
                    "observers": [
                        2,
                        3
                    ],
                    "contactIds": [
                        4,
                        5
                    ],
                    "entityTypeId": 2
                }
            },
            "time": {
                "start": 1721304013.245896,
                "finish": 1721304015.555471,
                "duration": 2.309574842453003,
                "processing": 1.8328988552093506,
                "date_start": "2024-07-18T14:00:13+02:00",
                "date_finish": "2024-07-18T14:00:15+02:00",
                "operating": 1.8328571319580078
            }
        }
        

By default, custom field names are passed and returned in camelCase, for example ufCrm2_1639669411830.
When passing the parameter useOriginalUfNames with the value Y, custom fields will be returned with their original names, for example UF_CRM_2_1639669411830.

Returned Data

Name
type

Description

result
object

Root element of the response, contains a single key item

item
item

Information about the created item, field description

time
time

Information about the request execution time

Error Handling

HTTP status: 400, 403

{
            "error": "NOT_FOUND",
            "error_description": "Smart process not found"
        }
        

Name
type

Description

error
string

String error code. It may consist of digits, Latin letters, and underscores

error_description
error_description

Textual description of the error. The description is not intended to be shown to the end user in its raw form

Possible Error Codes

Status

Code

Description

Value

403

allowed_only_intranet_user

Action is allowed only for intranet users

User is not an intranet user

400

NOT_FOUND

SPA not found

Occurs when an invalid entityTypeId is passed

400

ACCESS_DENIED

Access denied

User does not have permission to add items of type entityTypeId

400

CRM_FIELD_ERROR_VALUE_NOT_VALID

Invalid value for field "field"

Incorrect value passed for field field

400

100

Expected iterable value for multiple field, but got type instead

One of the multiple fields received a value of type type, while an iterable type was expected

400

CREATE_DYNAMIC_ITEM_RESTRICTED

You cannot create a new item due to your plan restrictions

Plan restrictions do not allow creating SPA items

Statuses and System Error Codes

HTTP Status: 20x, 40x, 50x

The errors described below may occur when calling any method.

Status

Code
Error Message

Description

500

INTERNAL_SERVER_ERROR
Internal server error

An internal server error has occurred. Please contact the server administrator or Bitrix24 technical support

500

ERROR_UNEXPECTED_ANSWER
Server returned an unexpected response

An internal server error has occurred. Please contact the server administrator or Bitrix24 technical support

503

QUERY_LIMIT_EXCEEDED
Too many requests

The request intensity limit has been exceeded

405

ERROR_BATCH_METHOD_NOT_ALLOWED
Method is not allowed for batch usage

The current method is not permitted for calls using batch

400

ERROR_BATCH_LENGTH_EXCEEDED
Max batch length exceeded

The maximum length of parameters passed to the batch method has been exceeded

401

NO_AUTH_FOUND
Wrong authorization data

Invalid access token or webhook code

400

INVALID_REQUEST
Https required

The HTTPS protocol is required for method calls

503

OVERLOAD_LIMIT
REST API is blocked due to overload

The REST API is blocked due to overload. This is a manual individual block; please contact Bitrix24 technical support to lift it

403

ACCESS_DENIED
REST API is available only on commercial plans

The REST API is only available on commercial plans

403

INVALID_CREDENTIALS
Invalid request credentials

The user associated with the access token or webhook used to call the method lacks the necessary permissions

404

ERROR_MANIFEST_IS_NOT_AVAILABLE
Manifest is not available

The manifest is not available

403

insufficient_scope
The request requires higher privileges than provided by the webhook token

The request requires higher privileges than those provided by the webhook token

401

expired_token
The access token provided has expired

The provided access token has expired

403

user_access_error
The user does not have access to the application

The user does not have access to the application. This means that the application is installed, but the portal administrator has restricted access to this application to specific users only

500

PORTAL_DELETED
Portal was deleted

The public part of the site is closed. To open the public part of the site on an on-premise installation, disable the "Temporary closure of the public part of the site" option. Path to the setting: Desktop > Settings > Product Settings > Module Settings > Main Module > Temporary closure of the public part of the site

Continue Learning