When the standard deal card falls short
A sales manager for equipment sees the same fields as a rental manager: fields are not grouped, no computed values, no conditional display logic. We've encountered such requests dozens of times and have accumulated expertise that allows us to solve the task in 3–7 days instead of months. Our engineers guarantee: a custom card will show the manager exactly what is needed at the current stage, without extraneous information.
Custom CRM cards: two levels of customization
Bitrix24 offers two ways to modify the CRM entity card, and they are fundamentally different in depth.
Level 1: UI settings. In the deal card (contact, smart process), click "Card settings" → "Edit fields and sections". Here you can: rename sections, drag fields between sections, hide unnecessary fields, set field required by stages (for deals). This is free and covers ~40% of requests. But you cannot add computed fields, conditional logic, custom widgets, or data from external systems.
Level 2: Development via REST Placement API. This embeds arbitrary HTML/JS content into specific zones of the card. This is where real customization begins.
What can be embedded via Placement API?
The CRM entity card has several zones (placements) where you can embed custom content:
-
CRM_DEAL_DETAIL_TAB— a tab in the deal card. Full area for any UI. -
CRM_DEAL_DETAIL_ACTIVITY— a block in the timeline. Suitable for custom actions. -
CRM_CONTACT_DETAIL_TAB,CRM_COMPANY_DETAIL_TAB— analogously for contacts and companies. -
CRM_DYNAMIC_ITEM_DETAIL_TAB— a tab in the smart process card.
Register a placement via REST:
BX24.callMethod('placement.bind', { PLACEMENT: 'CRM_DEAL_DETAIL_TAB', HANDLER: 'https://your-app.com/deal-tab.html', TITLE: 'Margin calculator' }); After registration, a new tab appears in the card. When opened, Bitrix24 loads the HANDLER in an iframe and passes the context: ENTITY_ID (deal ID), AUTH_ID, REFRESH_ID.
Deep dive: custom tab with data
Consider a typical case — a "Finance" tab in the deal card that shows: total by product items, cost from external 1C, margin, payment history.
Step 1: get deal data
BX24.init(function() { var dealId = BX24.placement.info().options.ID; BX24.callBatch({ deal: ['crm.deal.get', {id: dealId}], products: ['crm.deal.productrows.get', {id: dealId}] }, function(result) { var deal = result.deal.data(); var products = result.products.data(); renderFinanceTab(deal, products); }); }); Step 2: request cost from external API
The tab makes a request to your backend, passing product SKUs. The backend proxies to 1C or ERP and returns the cost.
Step 3: render
Calculate margin client-side and display a table. For visual consistency, use B24 CSS variables or the @bitrix24/b24-ui library.
Why conditional field logic doesn't work out of the box?
A frequent request: show/hide fields based on another field's value. E.g., "Reason for rejection" field visible only on "Lost" stage. Standard functionality allows making a field required by stage, but not hiding it.
Solution — a custom handler via placement CRM_DEAL_DETAIL_TAB or embedding JS code via a user field type. In the on-premise version, you can modify the bitrix:crm.deal.detail component template and add JS logic to script.js.
For the cloud version, the only clean way is a placement with full redrawing of the required field section. This means: you fetch data via REST, render fields with conditional logic in your iframe, and on save, send changes back via crm.deal.update.
Timeline widgets
Placement CRM_*_DETAIL_ACTIVITY embeds a block directly into the activity feed of the card. Suitable for:
- Displaying delivery status (data from a transport company API)
- Showing client balance from an accounting system
- Displaying the latest tickets from helpdesk
The widget updates on every card open. For caching, use BX24.appOption — the app storage on the B24 side.
Performance: approach comparison
Iframe tabs load on activation (click on the tab). For heavy tabs, this is fine — the user doesn't wait for something they haven't opened. But if you embed a widget in the main card area, it loads immediately. Every REST request from an iframe is a network round-trip. Use BX24.callBatch to batch requests: one batch instead of five sequential calls. Custom tabs via Placement API are 3 times faster to develop than overriding templates in the on-premise version and do not require core updates.
| Card element | Customization method | Timeline |
|---|---|---|
| Field regrouping | UI settings | 1–2 hours |
| Required by stage | UI settings | 30 minutes |
| Custom tab with external data | REST Placement | 3–5 days |
| Conditional field logic (cloud) | REST Placement + custom render | 5–7 days |
| Timeline widget | REST Placement Activity | 2–3 days |
Custom card development stages
| Stage | What we do | Result |
|---|---|---|
| Analytics | Collect requirements for fields, logic, integrations | TOR and card prototype |
| Design | Design tab structure, widgets, API calls | Architecture diagram |
| Development | Register placement, write tab/widget code, integrate with 1C or external API | Working card in test environment |
| Testing | Verify data correctness, conditional logic, performance | Test report |
| Deployment | Install app on production portal, set access rights | Working card in production |
What's included
- Development of technical specification and card prototype
- Placement registration and REST integration setup
- Implementation of custom tab/widget with testing
- Integration with 1C (CommerceML) or other external systems
- API documentation and access transfer
- Employee training on the new card
- 1 month support after launch
Cloud version limitations
In the cloud, you cannot modify standard card sections — only add new tabs and widgets. You cannot remove standard fields from the main view (only hide via card settings). For full interface control, use the on-premise version with component template override (crm.deal.detail).
Estimate your project in one day
We develop custom CRM cards turnkey. 10+ years of Bitrix24 experience, over 50 successful projects. Development cost is calculated individually, manager time savings after implementation reach 30%. Order custom CRM card development — we'll send a preliminary estimate of timeline and cost. Get a free engineer consultation.

