For AI agents: markdown of this page — /docs-content-en/changelog/2026-09-27.md documentation index — /llms.txt

API changes: September 27, 2026

← Changelog · September 2026

BC-0927-1: Cowork plans return the new-seat price with the Bitrix24 account's discounts

Old format supported until: not provided

Before

GET /v1/platform/cowork/plans returned the list price in every price.terms[] entry: vibesMonth and vibesTotal were the month and term price with the term discount, discountPercent was the term discount percentage from the settings.

After

vibesMonth and vibesTotal are the best price of a new seat for this Bitrix24 account: the term discount or a promotion without a seat limit. discountPercent is the effective percentage of the winning discount off the undiscounted monthly price. Discounts do not stack: a seat gets one, the largest.

Each term gains these fields:

  • listVibesMonth — the undiscounted monthly price, for a strike-through price
  • renewalVibesMonth — the monthly price for this term without a promotion. This is what a renewal charges and what a named order line costs without a quote
  • discount — the winning discount or null: source (TERM for the term discount, PROMO for a promotion), percent, labelKey and label, the promotion caption in the platform language. For the term discount labelKey and label are null
  • offers — seat-limited promotions the Bitrix24 account can still get: percent, labelKey, label, vibesMonth, vibesTotal, renewalVibesMonth and seatsLimit, how many seats are left at that price. Display only

An unknown Bitrix24 account gets promotions only once they are enabled for every account. While promotions are not enabled for the account, vibesMonth and vibesTotal stay as before, discountPercent is the term discount percentage computed from the monthly price (rounding can make it differ from the configured percentage by one), and offers is empty.

What integrators should do

Price unnamed seats without a quote by vibesMonth and vibesTotal, as before. Price named lines (seats[]) without a quote by renewalVibesMonth: the price of a named line depends on whether the employee's seat is paid, and GET /v1/platform/cowork/plans does not know that. Overpaying is safe, the remainder stays on the balance as vibes. POST /v1/platform/cowork/quote prices the whole order with discounts and returns a quote, and the quote goes into the order.

NEW-0927-2: Cowork seat price quote for the checkout

The new method POST /v1/platform/cowork/quote prices a Cowork seat order with the Bitrix24 account's discounts and issues a quote, a token valid for 14 days. It needs an integration key with the cowork:quote scope.

Request body:

  • portalDomain — required: the same domain that goes into the payment's metadata.portal_domain, up to 253 characters
  • portalNetworkId — optional, up to 200 characters
  • application — the same order that goes into payment.paid, including parts, in the metadata.application format: seats[], unassigned[] and parts, how many sale receipts carry the order. Up to 500 seats
  • context — optional: buyer (client or partner) and anonymous. By default anonymous is true, and named lines are priced by renewalVibesMonth without any employee data. false is sent only when the buyer is signed in as a user of the same Bitrix24 account. With buyer = partner the server always treats anonymous as true
  • contactEmails — up to three payer addresses, stored with the quote. Unsuitable addresses are dropped

Unknown fields of the body and of context do not break the request, the server skips them.

Response:

  • version and capturedAt — the response shape version and the moment of calculation
  • portal — known (the Bitrix24 account was found), portalNetworkId and portalDomain
  • lines[] — the order lines in request order: kind (seat for a named line, unassigned for seats without an employee), index, the position in seats[] or unassigned[], plan, months and count. A named line echoes userId and b24UserId. Each line has groups[], runs of seats with equal price: count, listVibesMonth, vibesMonth, vibesTotal, renewalVibesMonth and discount, the winning discount or null in the same shape as in GET /v1/platform/cowork/plans: source, percent, labelKey and label
  • totals — the order totals: listVibes (without discounts), vibes and savedVibes
  • quote — token and expiresAt, or null when the order has no promotional price and no suitable address is left after filtering

The quote goes into the order: quote.token into application.quoteToken. Addresses appear neither in the response nor in the quote.

Errors: 400 INVALID_FILTER (including a missing portalDomain, a domain longer than 253 characters or invalid characters in portalDomain and portalNetworkId), 400 INVALID_APPLICATION, 401 INVALID_KEY, 403 INSUFFICIENT_SCOPE, 413 (a body over 256 KiB) and 429.

FIX-0927-3: business process operations on an account without the module answer 409 instead of 404

Before

On an account where Business Processes are not included in the plan or are switched off in settings, only the list of running workflows answered 409 BIZPROC_MODULE_NOT_ENABLED — GET /v1/workflows. The other four operations of the section answered 404 ENTITY_NOT_FOUND in the same account state: POST /v1/workflows/start, DELETE /v1/workflows/:id, POST /v1/workflows/activity-log and POST /v1/workflows/event. That answer looked like a wrong template, document or workflow ID, although the IDs were correct.

After

All five operations of the section answer the same way in this account state: 409 BIZPROC_MODULE_NOT_ENABLED. The message names the Bitrix24 method that was called, both possible causes and the action to take: ask an account administrator to enable Business Processes. Other errors of these operations are unchanged.

Impact on integrators

No action is required: the refusal was a 4xx and stays a 4xx, and the former 404 ENTITY_NOT_FOUND was never documented for this state. Retrying with other IDs does not help while Business Processes are unavailable on the account. For stopping a workflow, 404 ENTITY_NOT_FOUND still means the workflow instance was not found, while 409 BIZPROC_MODULE_NOT_ENABLED means the module is unavailable and the workflow was not stopped. An integration that treated 404 as a sign of an already finished workflow now sees 409 on such an account, and the workflow is not stopped.

NEW-0927-4: A Cowork order with a quote is credited at the quote's prices

A Cowork seat order whose application.quoteToken carries a quote from POST /v1/platform/cowork/quote is now credited at the quote's prices: the promotional price shown to the buyer is fixed for 14 days from the moment the quote is issued. The order amount is totals.vibes from the quote response.

  • Seats under seat-limited promotions (offers in GET /v1/platform/cowork/plans) are granted only with a quote in the order. To fix the promotional price and get a seat under such a promotion, call quote at the payment step and put quote.token into application.quoteToken.
  • The quote is honoured when it has not expired at the moment of payment and was issued for the same Bitrix24 account (portalDomain matches the payment's metadata.portal_domain) and the same order. Otherwise the order is not rejected: seats are credited at current prices, as without a quote, and whatever the paid amount does not cover stays on the balance as vibes.
  • If a sale receipt is revoked, the quote is not honoured.
  • An order without quoteToken is credited as before.

NEW-0927-5: Checklist actions and attaching a file to a task

Ten named /v1/tasks/:taskId/checklist/... and /v1/tasks/:taskId/files/attach routes are now available for saving a tree, managing members, moving and completing checklist items, managing checklist attachments, and attaching a Disk file to a task. Each route returns the Bitrix24 method result in data.