Skip to main content
Tech Titan

API Method Guide

crm.item.add

Module: CRM (universal / SPA)Scope: crm

Direct answer

crm.item.add is the universal creation method: pass entityTypeId (e.g. your SPA's type ID, or 1 for leads, 2 for deals, 3 for contacts, 4 for companies) plus a fields object. Note: field names are camelCase here (title, opportunity), unlike the classic UPPER_CASE methods.

What crm.item.add does

Creates items of any CRM entity type through one interface — the primary API for Smart Process Automations (SPAs) and Bitrix24's strategic direction for all CRM objects.

Business use cases

  • Creating SPA items: property units, insurance policies, vehicles, shipments, applications
  • Importers writing thousands of custom-entity records
  • One code path serving multiple entity types in middleware
  • New integrations future-proofed on the universal API

Typical fields and parameters

  • entityTypeIdThe entity type: standard objects have fixed IDs (1 lead, 2 deal, 3 contact, 4 company); SPAs get IDs at creation — find them via crm.type.list
  • fieldscamelCase for system fields (title, stageId, assignedById, opportunity); custom fields keep ufCrm-style names returned by crm.item.fields
  • categoryId / stageIdPipeline and stage for staged SPAs
  • parentId{typeId}Relation fields binding SPA items to deals/contacts (e.g. parentId2 = deal ID)

Example workflow

  1. Property inventory system publishes a new unit
  2. crm.type.list (cached) gives the 'Units' SPA entityTypeId = 187
  3. crm.item.list checks for existing item by external reference
  4. crm.item.add creates the unit with fields and deal relation
  5. Portal leads matching that reference now link to the unit's history

Example request

POST .../crm.item.add.json

{
  "entityTypeId": 187,
  "fields": {
    "title": "Marina Vista — Unit 2104",
    "categoryId": 14,
    "stageId": "DT187_14:NEW",
    "assignedById": 7,
    "ufCrm12PropertyRef": "REF-4521",
    "ufCrm12Bedrooms": 2,
    "parentId2": 3120
  }
}

Example response

{
  "result": {
    "item": { "id": 981, "title": "Marina Vista — Unit 2104", ... }
  },
  "time": { ... }
}
// Note: returns the full item object, not a bare ID like classic methods.

Field mapping notes

  • The #1 confusion: classic methods use UPPER_CASE (TITLE, UF_CRM_X); crm.item.* uses camelCase (title, ufCrm12X). Get exact names from crm.item.fields for your entityTypeId
  • The response shape differs too — result.item.id, not result
  • SPA stage IDs look like DT{typeId}_{categoryId}:{code}
  • Relations via parentId{entityTypeId} fields are how SPA items bind to deals/contacts

Security notes

  • SPA permissions are configured per type — a webhook with crm scope sees what its user sees; test with the service account, not your admin login

Common errors

  • 'Entity type not found'Wrong entityTypeId — list types with crm.type.list; IDs differ between portals, never hardcode across environments
  • Fields ignored on createUPPER_CASE names sent to a camelCase API — check crm.item.fields output
  • Item created in wrong stagestageId format DT{type}_{category}:{code} mismatched with categoryId

Production implementation tips

  • Cache crm.type.list and crm.item.fields per portal at startup; resolve IDs by SPA symbolic code, not numeric ID, across environments
  • For importers: validate the whole file first, then batch crm.item.add in 50s, then reconcile counts — the SPA Importer pattern
  • Prefer crm.item.* for all new integration work; the classic per-entity methods are the legacy path

Webhook or OAuth app?

Same decision as elsewhere; importers run fine on service-account webhooks, long-lived syncs deserve apps.

Full decision guide: webhook vs OAuth app in Bitrix24.

When to use a queue worker

Bulk SPA imports are the canonical queue-worker use case: thousands of records, 50-per-batch, controlled concurrency, resumable progress.

How Tech Titan can help

Tech Titan builds production Bitrix24 integrations around crm.item.add and its siblings — with authentication, field mapping, queue workers, retry logic, duplicate handling, and structured logs as standard. If this method is on your critical path, bring the requirement to a free audit call and leave with an architecture sketch.

Frequently asked questions

How do I use crm.item.add in Bitrix24?

Pass entityTypeId plus camelCase fields. For SPAs, get the type ID from crm.type.list and field names from crm.item.fields. The response returns the full created item.

How do I import or export Bitrix24 SPA items in bulk?

Export: crm.item.list with pagination (start parameter) or filtered batches. Import: validate first, then batched crm.item.add with duplicate checks on an external-reference field. Our SPA Importer productizes exactly this.

Should new integrations use crm.item.* or crm.deal.*?

crm.item.* — it covers all entities with one consistent interface and is where platform development is heading. Classic methods remain fine for existing code.

Need crm.item.add working in production?

Bring your integration to a free audit call — you'll leave with an architecture sketch and an honest scope, whether or not you engage us.