Create a New CRM Item crm.item.add
Choose a tool for developing with an AI agent:
- use Alaio Vibecode to build an app for Bitrix24 from a task description without knowing any programming language. The agent writes the code and deploys the app to a server, with no manual hosting setup
- use the MCP server to develop a REST API integration in your own project. The agent refers to the official REST documentation
Scope:
crmWho can execute the method: any user with "add" permissions for the CRM object item
This is a universal method for creating objects in the CRM. It allows you to create various types of objects, such as deals, contacts, companies, and others.
To create an object, you must pass the relevant parameters, including the object type and its information: name, description, contact details, and other specifics.
A new object is created after the request is successfully executed.
This method provides a flexible way to automate the object creation process and integrate the CRM with other systems.
When an item is created, a standard series of checks, modifications, and automatic actions are performed:
- access permissions are checked
- mandatory fields are checked for completion
- stage-dependent mandatory fields are checked for completion
- field data validity is checked
- default values are assigned to fields
- automation rules are triggered after saving
Below, we will look in more detail at how to use this method and which parameters need to be passed.
Method Parameters
Required parameters are marked with *
|
Name |
Description |
|
entityTypeId* |
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* |
Format object.
where
Each CRM entity 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 |
|
useOriginalUfNames |
Parameter to control the format of custom field names in the request and response.
Default is |
Parameter fields
Required parameters are marked with *
CRM object identifier entityTypeId: 1
|
Name |
Description |
|
title |
Item name. By default, it is generated according to the template
For example, for a lead with |
|
honorific |
String identifier of the lead inquiry (for example The list of available inquiries can be found using Default — |
|
name |
First Name. Default — |
|
secondName |
Middle Name. Default — |
|
lastName |
Last Name. Default — |
|
birthdate |
Date of birth. Default — |
|
companyTitle |
Company name. Default — |
|
sourceId |
String identifier of the source. For example The list of available sources can be found using Defaults to the value of the first available source |
|
sourceDescription |
Additional information about the source. Default — |
|
stageId |
String identifier of the item stage. For example The list of available stages can be found using Defaults to the value of the first available stage |
|
statusDescription |
Additional information about the stage. Default — |
|
post |
Job title. Default — |
|
currencyId |
Item currency identifier. Defaults to the default currency value |
|
isManualOpportunity |
Amount calculation mode. Possible values:
Default — |
|
opportunity |
Amount. Default — |
|
opened |
Whether the item is available to everyone. Possible values:
Default — |
|
comments |
Comment. Default — |
|
assignedById |
Identifier of the person responsible for the item. By default, this is the identifier of the user calling the method |
|
companyId |
Company identifier linked to the item. The list of companies can be obtained using the Default — |
|
contactId |
Contact identifier linked to the item. The list of contacts can be obtained using the Default — |
|
contactIds |
List of contact identifiers linked to the item. The list of contacts can be obtained using the Default — |
|
originatorId |
External source. Default — |
|
originId |
Item identifier in the external source. Default — |
|
webformId |
CRM Form identifier. Default — |
|
observers |
Array of user identifiers who will be Observers in the item. Default — |
|
utmSource |
Ad system. For example: Search Ads, Display Ads, etc. Default — |
|
utmMedium |
Traffic type. Possible values:
Default — |
|
utmCampaign |
Advertising campaign designation. Default — |
|
utmContent |
Campaign contents. For example, for contextual ads. Default — |
|
utmTerm |
Campaign search condition. For example, contextual advertising keywords. Default is |
|
ufCrm... |
Custom field. Read the Custom Fields in CRM: Overview of Methods section for information about custom fields. Values for multiple fields are passed as an array. To upload a file, you must pass an array as the custom field value, where the first item is the filename and the second is the file content encoded in base64 |
|
parentId... |
Parent field. An item of another CRM object type that is linked to this item. Each such field has a code |
|
Multi-field array. You can read more about multi-fields in the crm_multifield section. Multi-field structure:
Example:
Default — |
CRM object identifier entityTypeId: 2
|
Name |
Description |
|
title |
Item name. By default, it is generated according to the template
|
|
typeId |
String identifier of the entity type. For example, for a deal: You can find the list of available entity types using Default — the first available entity type |
|
categoryId |
Identifier of the deal direction (pipeline). Default — |
|
stageId |
String identifier of the item stage. For example, You can find the list of available stages using
Default — the first available stage relative to the pipeline |
|
isRecurring |
Whether the deal is recurring. Possible values:
Default — |
|
probability |
Probability %. Default — |
|
currencyId |
Item currency identifier. Default — default currency |
|
isManualOpportunity |
Amount calculation mode. Possible values:
Default — |
|
opportunity |
Amount. Default — |
|
taxValue |
Tax amount. Default — |
|
companyId |
Company identifier linked to the item. The list of companies can be obtained using the Default — |
|
contactId |
Contact identifier linked to the item. The list of contacts can be obtained using the Default — |
|
contactIds |
List of contact identifiers linked to the item. The list of contacts can be obtained using the Default — |
|
quoteId |
Estimate identifier that will be linked to the deal |
|
begindate |
Item start date. Default — Create date |
|
closedate |
Item end date. Default — Create date item + 7 days |
|
opened |
Whether the item is available to everyone. Possible values:
Default — |
|
comments |
Comment. Default — |
|
assignedById |
Identifier of the person responsible for the item. Default — the identifier of the user calling the method |
|
sourceId |
String identifier of the source. For example A list of available sources can be obtained using Default — First available source |
|
sourceDescription |
Additional information about the source. Default — |
|
leadId |
Lead identifier, based on which the item is created. Default — |
|
additionalInfo |
Additional information. Default — |
|
originatorId |
External source. Default — |
|
originId |
Item identifier in the external source. Default — |
|
observers |
Array of user identifiers who will be Observers in the item. Default — |
|
locationId |
Location identifier. Service field. Default — |
|
utmSource |
Ad system. Search Ads, Display Ads, and others. Default — |
|
utmMedium |
Traffic type. Possible values:
Default — |
|
utmCampaign |
Advertising campaign designation. Default — |
|
utmContent |
Campaign contents. For example, for contextual ads. Default — |
|
utmTerm |
Campaign search condition. For example, contextual advertising keywords. Default — |
|
ufCrm... |
Custom field. See section Custom Fields in CRM: Overview of Methods
|
|
parentId... |
Parent field. An item of another CRM object type that is linked to this item. Each such field has a code |
CRM object identifier entityTypeId: 3
|
Name |
Description |
|
honorific |
String identifier of the contact inquiry. For example A list of available inquiries can be obtained using Default — |
|
name |
First Name. Default — |
|
secondName |
Middle Name. Default — |
|
lastName |
Last Name. Default — |
|
photo |
Photograph. Default — |
|
birthdate |
Date of birth. Default — |
|
typeId |
String identifier of the entity type. For example, for a deal: A list of available entity types can be obtained using Default — first available entity type |
|
sourceId |
String identifier of the source. For example A list of available sources can be obtained using Default — first available source |
|
sourceDescription |
Additional information about the source. Default — |
|
post |
Job title. Default — |
|
comments |
Comment. Default — |
|
opened |
Whether the item is available to everyone. Possible values:
Default — |
|
export |
Whether the contact is included in the export. Default — |
|
assignedById |
Identifier of the person responsible for the item. Default — the identifier of the user calling the method |
|
companyId |
Company identifier linked to the item. A list of companies can be obtained using the Default — |
|
companyIds |
An array of company identifiers that will be linked to the item |
|
leadId |
Lead identifier on the basis of which the item is created. Default — |
|
originatorId |
External source. Default — |
|
originId |
Item identifier in the external source. Default — |
|
originVersion |
Original version. Default — |
|
observers |
Array of user identifiers who will be Observers in the item. Default — |
|
utmSource |
Ad system. Search Ads, Display Ads, and others. Default — |
|
utmMedium |
Traffic type. Possible values:
Default — |
|
utmCampaign |
Advertising campaign designation. Default — |
|
utmContent |
Campaign contents. For example, for contextual ads. Default — |
|
utmTerm |
Campaign search condition. For example, contextual advertising keywords. Default — |
|
ufCrm... |
Custom field. See section Custom Fields in CRM: Overview of Methods
|
|
parentId... |
Parent field. An item of another CRM object type that is linked to this item. Each such field has a code |
|
Multi-field array. You can read more about multi-fields in the crm_multifield section. Multi-field structure:
Example:
Default — |
CRM object identifier entityTypeId: 4
|
Name |
Description |
|
title |
Item name. By default, it is generated according to the template
For example, for a company with |
|
typeId |
String identifier of the entity type. For example, for a deal: A list of available entity types can be found using Default — the first available entity type |
|
logo |
Logo. Default — |
|
bankingDetails |
Bank Company details. Default — |
|
industry |
String identifier of the industry type. For example, A list of available industry types can be found using the Default — the first available industry type |
|
employees |
String identifier of the employee count type. The value is taken from the list of available ones, for example A list of available employee count types can be found using the Default — the first available employee count type |
|
currencyId |
Item currency identifier. Default — default currency |
|
revenue |
Annual turnover. Default — |
|
opened |
Whether the item is available to everyone. Possible values:
Default — |
|
comments |
Comment. Default — |
|
isMyCompany |
Whether the company is my company. Default — |
|
assignedById |
Identifier of the person responsible for the item. Default — the identifier of the user calling the method |
|
contactIds |
List of contact identifiers linked to the item. A list of contacts can be obtained using the Default — |
|
leadId |
Lead identifier, based on which the item is created. Default — |
|
originatorId |
External source. Default — |
|
originId |
Item identifier in the external source. Default — |
|
originVersion |
Original version. Default — |
|
observers |
Array of user identifiers who will be Observers in the item. Default — |
|
utmSource |
Ad system. Search Ads, Display Ads, and others. Default — |
|
utmMedium |
Traffic type. Possible values:
Default — |
|
utmCampaign |
Advertising campaign designation. Default — |
|
utmContent |
Campaign contents. For example, for contextual ads. Default — |
|
utmTerm |
Campaign search condition. For example, contextual advertising keywords. Default — |
|
ufCrm... |
Custom field. See section Custom Fields in CRM: Overview of Methods
|
|
parentId... |
Parent field. An item of another CRM object type that is linked to this item. Each such field has a code |
|
Multi-field array. For more details on multi-fields, see section crm_multifield Multi-field structure:
Example:
Default — |
CRM object identifier entityTypeId: 7
|
Name |
Description |
|
title |
Item name. By default, it is generated according to the template
For example, for an estimate with |
|
assignedById |
Identifier of the person responsible for the item. Default — the identifier of the user calling the method |
|
opened |
Whether the item is available to everyone. Possible values:
Default — |
|
content |
Content. Default — |
|
terms |
Terms. Default — |
|
comments |
Comment. Default — |
|
dealId |
Identifier of the linked deal. Default — |
|
leadId |
Lead identifier on the basis of which the item is created. Default — |
|
storageTypeId |
Storage type identifier. Possible values:
Default:
|
|
storageElementIds |
File array. Default — |
|
webformId |
CRM Form identifier. Default — |
|
companyId |
Company identifier linked to the item. The list of companies can be obtained using the Default — |
|
contactId |
Contact identifier linked to the item. The list of contacts can be obtained using the Default — |
|
contactIds |
List of contact identifiers linked to the item. The list of contacts can be obtained using the Default — |
|
locationId |
Location identifier. Service field. Default — |
|
currencyId |
Item currency identifier. Default — default currency |
|
isManualOpportunity |
Amount calculation mode.
Default — |
|
opportunity |
Amount. Default — |
|
taxValue |
Tax amount. Default — |
|
stageId |
String identifier of the item stage. For example, The list of available stages can be found using Default — the first available stage |
|
begindate |
Item start date. Default — Item Create date |
|
closedate |
Item end date. Default — Create date item + 7 days |
|
actualDate |
Valid until. Default — Item Create date + 7 days |
|
mycompanyId |
My company identifier. Default — identifier of the first available "my" company |
|
utmSource |
Ad system. Search Ads, Display Ads, and others. Default — |
|
utmMedium |
Traffic type.
Default — |
|
utmCampaign |
Advertising campaign designation. Default — |
|
utmContent |
Campaign contents. For example, for contextual ads. Default — |
|
utmTerm |
Campaign search condition. For example, contextual advertising keywords. Default — |
|
ufCrm... |
Custom field. See section Custom Fields in CRM: Overview of Methods.
|
|
parentId... |
Parent field. An item of another CRM object type that is linked to this item. Each such field has a code |
CRM object identifier entityTypeId: 31
|
Name |
Description |
|
title |
Item name. By default, it is generated according to the template
For example, for an invoice with |
|
xmlId |
External code. Default — |
|
assignedById |
Identifier of the person responsible for the item. Default — the identifier of the user calling the method |
|
opened |
Whether the item is available to everyone. Possible values:
Default — |
|
webformId |
CRM Form identifier. Default — |
|
begindate |
Item start date. Default — Item Create date |
|
closedate |
Item end date. Default — Create date item + 7 days |
|
companyId |
Company identifier linked to the item. The list of companies can be obtained using the Default — |
|
contactId |
Contact identifier linked to the item. The list of contacts can be obtained using the Default — |
|
contactIds |
List of contact identifiers linked to the item. The list of contacts can be obtained using the Default — |
|
observers |
Array of user identifiers who will be Observers in the item. Default — |
|
stageId |
String identifier of the item stage. For example, You can find the list of available stages using Default — the first available stage |
|
sourceId |
String identifier of the source. For example, You can find the list of available sources using Default — the first available source |
|
sourceDescription |
Additional information about the source. Default — |
|
currencyId |
Item currency identifier. Default — default currency |
|
isManualOpportunity |
Amount calculation mode. Possible values:
Default — |
|
opportunity |
Amount. Default — |
|
taxValue |
Tax amount. Default — |
|
mycompanyId |
My company identifier. Default — identifier of the first available "my" company |
|
comments |
Comment. Default — |
|
locationId |
Location identifier. Service field. Default — |
|
ufCrm... |
Custom field. See section Custom Fields in CRM: Overview of Methods.
|
|
parentId... |
Parent field. An item of another CRM object type that is linked to this item. Each such field has a code |
CRM object identifier entityTypeId: can be retrieved via the crm.type.list method or created via the crm.type.add method
|
Name |
Description |
|
title |
Item name. By default, it is generated according to the template
For example, for an SPA item "HR" with |
|
xmlId |
External code. Default — |
|
assignedById |
Identifier of the person responsible for the item. Default — the identifier of the user calling the method |
|
opened |
Whether the item is accessible to everyone.
Default — |
|
webformId |
CRM Form identifier. Default — |
|
begindate |
Item start date. Only available if the Default — Item Create date |
|
closedate |
Item expiration date. Available only if the Default — Create date item + 7 days |
|
companyId |
Company identifier linked to the item. The company list can be obtained using the Available only if the Default — |
|
contactId |
Contact identifier linked to the item. The contact list can be obtained using the Available only if the Default — |
|
contactIds |
List of contact identifiers linked to the item. The contact list can be obtained using the Available only if the Default — |
|
observers |
Array of user identifiers who will be Observers in the item. Available only if the Default — |
|
categoryId |
SPA item pipeline identifier. The list of available pipelines can be found using |
|
stageId |
String identifier of the item stage. For example The list of available stages can be found using
More details about pipelines (directions). Available only if the Default — the first available stage relative to the pipeline |
|
sourceId |
String identifier of the source. (for example The list of available sources can be found using Available only if the Default — the first available source |
|
sourceDescription |
Additional information about the source. Available only if the Default — |
|
currencyId |
Item currency identifier. Only available if the Default — default currency |
|
isManualOpportunity |
Amount calculation mode. Possible values:
Only available if the Default — |
|
opportunity |
Amount. Only available if the Default — |
|
taxValue |
Tax amount. Only available if the Default — |
|
mycompanyId |
My company identifier. Only available if the Default — Identifier of the first available "my" company |
|
ufCrm... |
Custom field. See section Custom Fields in CRM: Overview of Methods.
|
|
parentId... |
Parent field. An item of another CRM object type that is linked to this item. Each such field has a code |
SPA settings
For more details on managing SPA configurations, you can read Smart Processes: Overview of Methods and Events
Code Examples
How to Use Examples in Documentation
-
Deal Creation Example
cURL (Webhook)cURL (OAuth)JS (TS)JS (UMD)PythonPHPPHP CRestGocurl -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":"EUR","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","leadId":102,"additionalInfo":"There should be additional information","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.addcurl -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":"EUR","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","leadId":102,"additionalInfo":"There should be additional information","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: 'EUR', 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: 'EUR', 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>from b24pysdk.errors import BitrixAPIError, BitrixSDKException 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": "EUR", "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", "leadId": 102, "additionalInfo": "There should be additional information", "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}")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); }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' => "EUR", '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", 'leadId' => 102, 'additionalInfo' => "There should be additional information", 'observers' => [2, 3], 'utmSource' => "google", 'utmMedium' => "CPC", 'ufCrm_1721244707107' => 1111.1, 'parentId1220' => 2, ], ] ); echo '<PRE>'; print_r($result); echo '</PRE>';// client and ctx are already created — see the Go SDK section res, err := client.Core().Call(ctx, "crm.item.add", b24.Params{ "entityTypeId": 2, "fields": b24.Params{ "title": "New deal (specifically for REST method examples)", "typeId": "SERVICE", "categoryId": 9, "stageId": "C9:UC_KN8KFI", "isReccurring": "Y", "probability": 50, "currencyId": "EUR", "isManualOpportunity": "Y", "opportunity": 999.99, "taxValue": 99.9, "companyId": 5, "contactId": 4, "contactIds": []int{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", "leadId": 102, "additionalInfo": "There should be additional information", "observers": []int{2, 3}, "utmSource": "google", "utmMedium": "CPC", "ufCrm_1721244707107": 1111.1, "parentId1220": 2, }, }) if err != nil { return fmt.Errorf("crm.item.add: %w", err) } // The response arrives as json.RawMessage — unmarshal it // into a struct matching the response shape shown below on this page. fmt.Printf("%s\n", res.Result) -
Example of Creating an SPA Item with a Set of Custom Fields
Custom fields used 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 (Webhook)cURL (OAuth)JS (TS)JS (UMD)PythonPHP CRestGocurl -X POST \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{ "entityTypeId": 1302, "fields": { "ufCrm44_1721812760630": "String for custom field of type String", "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|EUR", "ufCrm44_1721812935209": "Y", "ufCrm44_1721812948498": 9999.9 } }' \ https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/crm.item.addcurl -X POST \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{ "entityTypeId": 1302, "fields": { "ufCrm44_1721812760630": "String for custom field of type String", "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|EUR", "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|EUR', 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|EUR', 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>from b24pysdk.errors import BitrixAPIError, BitrixSDKException try: bitrix_response = client.crm.item.add( entity_type_id=1302, fields={ "ufCrm44_1721812760630": "String for a custom field of the String type", "ufCrm44_1721812814433": 81, "ufCrm44_1721812853419": "2024-08-21", "ufCrm44_1721812885588": [ "example.com", "second-example.com", ], "ufCrm44_1721812898903": [ "green_pixel.png", "iVBORw0KGgoAAAANSUhEUgAAAIAAAAAMCAYAAACqTLVoAAAALklEQVR42u3SAQEAAAQDsEsuOj3YMqwy6fBWCSCAAAIgAAIgAAIgAAIgAAJw3QLOrRH1U/gU4gAAAABJRU5ErkJggg==", ], "ufCrm44_1721812915476": "300|EUR", "ufCrm44_1721812935209": "Y", "ufCrm44_1721812948498": 9999.9, }, ).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}")require_once('crest.php'); $result = CRest::call( 'crm.item.add', [ 'entityTypeId' => 1302, 'fields' => [ 'ufCrm44_1721812760630' => "String for custom field of type String", '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|EUR", 'ufCrm44_1721812935209' => "Y", 'ufCrm44_1721812948498' => 9999.9, ], ] ); echo '<PRE>'; print_r($result); echo '</PRE>';// client and ctx are already created — see the Go SDK section res, err := client.Core().Call(ctx, "crm.item.add", b24.Params{ "entityTypeId": 1302, "fields": b24.Params{ "ufCrm44_1721812760630": "String for custom field of type String", "ufCrm44_1721812814433": 81, "ufCrm44_1721812853419": time.Now().Format(time.RFC3339), "ufCrm44_1721812885588": []string{"example.com", "second-example.com"}, "ufCrm44_1721812898903": []string{"green_pixel.png", "iVBORw0KGgoAAAANSUhEUgAAAIAAAAAMCAYAAACqTLVoAAAALklEQVR42u3SAQEAAAQDsEsuOj3YMqwy6fBWCSCAAAIgAAIgAAIgAAIgAAJw3QLOrRH1U/gU4gAAAABJRU5ErkJggg=="}, "ufCrm44_1721812915476": "300|EUR", "ufCrm44_1721812935209": "Y", "ufCrm44_1721812948498": 9999.9, }, }) if err != nil { return fmt.Errorf("crm.item.add: %w", err) } // The method wraps the response in an object with the "item" key. raw, ok := b24.Unwrap(res.Result, "item") if !ok { return fmt.Errorf("no item key in the response") } var item struct { ID b24.ID `json:"id"` CreatedTime string `json:"createdTime"` UpdatedTime string `json:"updatedTime"` CreatedBy int `json:"createdBy"` UpdatedBy int `json:"updatedBy"` AssignedByID b24.ID `json:"assignedById"` } if err := json.Unmarshal(raw, &item); err != nil { return fmt.Errorf("parse response: %w", err) } fmt.Println(item.ID, item.CreatedTime)
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": "EUR",
"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",
"originatorId": null,
"originId": null,
"additionalInfo": "There should be additional information",
"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.
If the useOriginalUfNames parameter is passed with the value Y, custom fields will be returned with their original names, for example UF_CRM_2_1639669411830.
Returned Data
|
Name |
Description |
|
result |
Root element of the response, contains a single key |
|
item |
Information about the created item, field description |
|
time |
Information about the request execution time |
Error Handling
HTTP status: 400, 403
{
"error": "NOT_FOUND",
"error_description": "Smart process not found"
}
|
Name |
Description |
|
error |
String error code. It consists of digits, Latin letters, and underscores. It may arrive empty — in that case only |
|
error_description |
Error message for the developer. Do not show it to the end user without processing |
Possible Error Codes
|
Status |
Code |
Description |
Value |
|
|
|
Action is allowed only for intranet users |
User is not an intranet user |
|
|
|
SPA not found |
Occurs when an invalid |
|
|
|
Access denied |
User does not have permission to add items of type |
|
|
|
Invalid value for field " |
Incorrect value passed for field |
|
|
|
Expected iterable value for multiple field, but got |
One of the multiple fields received a value of type |
|
|
|
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: 4xx, 5xx
The errors described below are returned by the REST API itself, not by the logic of a specific method. They can arrive in response to any method.
|
Status |
Code |
Description |
|
|
|
An internal server error has occurred. Retry the call, and if the error persists, contact the server administrator or Bitrix24 technical support |
|
|
|
The server returned an unexpected response. Retry the call, and if the error persists, contact the server administrator or Bitrix24 technical support |
|
|
|
The request intensity limit has been exceeded |
|
|
|
The method is blocked because the request resource intensity limit has been exceeded. The block is lifted automatically once the accumulated execution time of the method no longer exceeds the limit |
|
|
|
The request contains no authorization data: neither an access token nor a webhook code was passed |
|
|
|
Methods are called over the HTTPS protocol only |
|
|
|
The REST API is blocked due to overload. This is a manual individual block. To have it lifted, contact Bitrix24 technical support |
|
|
|
REST API access is not active for this account. In Bitrix24 Cloud, check the current plan or trial status: Vibe+ plans include REST API access, while Essentials plans do not. A webhook receives a different error message — |
|
|
|
No active webhook with the specified user identifier and secret code was found |
|
|
|
No method with this name was found. The name is misspelled, the method does not exist in the REST API, or it is unavailable without the required scope |
|
|
|
The request requires broader permissions than the token has: for a webhook these are the permissions granted to it, for an application it is the scope. For an application, the error message ends with |
|
|
|
The access token has expired |
|
|
|
The application is installed, but the Bitrix24 administrator has granted access to it only to specific users |
|
|
|
The public part of the site is closed. To open it 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 |