@2bad/bitrix

中文文档
3.0.0发布于 2026/11/02MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 3833

Bitrix24 REST API client that doesn't suck

原始使用文档
文档目录7 节
  1. Why
  2. What you get
  3. Install
  4. Quick start
  5. Examples
  6. API
  7. License

@2bad/bitrix

NPM version License Code coverage GitHub Build Status

Bitrix24 REST API client for TypeScript with zero runtime dependencies.

Why

Bitrix24 ships half-finished APIs to production and leaves you to find out how they actually work. Every module has its own field names, error formats and paging rules. The documentation is incomplete, out of date or wrong, a good part of the behavior isn't documented at all, and support won't help you. Every integration turns into reverse engineering, fixing one broken assumption at a time.

We did that work so you don't have to. This client takes whatever Bitrix throws at it and gives you something you can actually build on.

What you get

  • No bullshit
  • Expressive API
  • Strongly typed, including the custom fields of your portal
  • Handles batching, rate limits and retries for you
  • Zero dependencies, runs anywhere fetch does

Install

npm install @2bad/bitrix

ESM only. Requires Node.js 26 or later.

Quick start

import { createClient } from '@2bad/bitrix'

const bitrix = createClient({ url: 'https://portal.bitrix24.com/rest/1/WEBHOOK_TOKEN' })

const deal = await bitrix.deals.get(77)
console.log(deal.TITLE, deal.STAGE_ID) // Pump delivery C2:WON

const open = await bitrix.deals.list({ filter: { CLOSED: 'N' }, select: ['ID', 'TITLE'] })

Examples

  • Connecting: webhooks, OAuth, rate limits, logging and custom fetch
  • Services: deals, leads, contacts, companies, activities, smart processes, linked contacts, products, statuses, currencies and users
  • Lists: pagination modes, changes since the last sync and progress
  • Batch and bulk writes: many commands per request, createMany, updateMany, deleteMany
  • Types: user field types from your portal and typing other methods
  • Errors: BitrixError, retries and cancellation
  • Migrating from 2.x

API

function createClient(options: ClientOptions): Client

type Client = {
  call(method, params?, options?: { raw?; signal? }): Promise<Result> // the whole response with { raw: true }
  list(method, params?, options?: PaginateOptions): Promise<Row[]>
  paginate(method, params?, options?: PaginateOptions): AsyncGenerator<Row>
  batch(commands, options?: { halt?; signal? }): Promise<{ results; errors }>

  activities: CrmService<Activity>
  companies: CrmService<Company> & { contacts: Links }
  contacts: CrmService<Contact> & { companies: Links }
  currencies: CurrenciesService
  deals: CrmService<Deal> & { productRows: ProductRows; contacts: Links }
  items(entityTypeId): ItemsService // smart processes and other crm.item.* types
  leads: CrmService<Lead> & { productRows: ProductRows; contacts: Links }
  products: ProductsService
  statuses: StatusesService
  users: UsersService
}

type CrmService<Entity> = {
  fields(): Promise<Fields>
  get(id): Promise<Entity>
  list(params?, options?: PaginateOptions): Promise<Entity[]> // rows typed by params.select
  paginate(params?, options?: PaginateOptions): AsyncGenerator<Entity>
  changedSince(since: Date | string, params?, options?): AsyncGenerator<Entity> // oldest change first
  create(fields, params?): Promise<number>
  update(id, fields, params?): Promise<boolean>
  delete(id): Promise<boolean>
  createMany(items, params?): Promise<BulkResult<number>>
  updateMany(items: { id; fields }[], params?): Promise<BulkResult<boolean>>
  deleteMany(ids): Promise<BulkResult<boolean>>
}

type ProductRows = { get(id): Promise<ProductRow[]>; set(id, rows): Promise<boolean> }
type Links = { get(id); set(id, links); add(id, link); delete(id, linkedId); clear(id) }
type ItemsService = { fields(); get(id); list(params?); paginate(params?); changedSince(since, params?); create(fields); update(id, fields); delete(id) }
type ProductsService = { fields(iblockId); get(id); list(params); paginate(params); create(fields); update(id, fields); delete(id) }
type StatusesService = { fields(); get(id); list(params?); create(fields); update(id, fields); delete(id, { forced? }) }
type CurrenciesService = { fields(); get(code); list(params?); create(fields); update(code, fields); delete(code); base(); setBase(code) }
type UsersService = { fields(); current(); get(id); list(params?); paginate(params?) }

type PaginateOptions = {
  mode?: 'cursor' | 'offset' | 'modified' // cursor by default, modified needs since
  since?: Date | string
  modifiedField?: string // DATE_MODIFY by default
  idField?: string // ID by default
  signal?: AbortSignal
  onProgress?: (progress: { read: number; total?: number }) => void
}

type BulkResult<R> = { results: (R | undefined)[]; errors: (BitrixError | undefined)[] } // in input order
bitrix-types [--url <rest url>] [--out <file>] [--entities deal,lead,contact,company]

Every error is a BitrixError with code, description, method and status.

License

MIT

版本与发布记录

@2bad/bitrix 共发布 14 个版本,首次发布于 2019/08/30;过去 12 个月发布了 1 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
3.0.0latest2026/11/024 天前
3.0.0-beta.0beta2024/07/192 年前
2.5.12023/08/313 年前
2.5.02022/10/214 年前
2.4.02021/10/175 年前
2.3.12020/01/046 年前

关于 @2bad/bitrix 的常见问题

@2bad/bitrix 是什么?

Bitrix24 REST API client that doesn't suck

如何安装 @2bad/bitrix?

在项目目录运行 npm install @2bad/bitrix,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 bitrix-types,可以用 npx bitrix-types 直接运行。

@2bad/bitrix 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@2bad/bitrix 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@2bad/bitrix 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=26。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@2bad/bitrix 可以商用吗?

@2bad/bitrix 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@2bad/bitrix 的下载量有多少?

根据 npm 官方下载统计,@2bad/bitrix 在 2026/10/05 – 2026/11/03 这 30 天内被下载 3,833 次,日均约 128 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@2bad/bitrix 还在维护吗?

最新版本 3.0.0 发布于 2026/11/02(4 天前);至今共发布 14 个版本,其中过去 12 个月发布了 1 个;首次发布于 2019/08/30。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。