For AI agents: markdown of this page — /docs-content-en/entities/crm-forms.md documentation index — /llms.txt

CRM forms

Read and configure CRM forms, publish them on a website and submit visitor data to them.

Scope: crm | Base URL: https://vibecode.bitrix24.com/v1 | Authorization: X-Api-Key

Documentation sections

Key fields

Field Description
Fieldid DescriptionForm ID. List: GET /v1/crm-forms
Fieldname DescriptionForm name in the list of forms
Fieldactive DescriptionWhether the form is active. Can be changed only through activation and deactivation
FieldupdatedTime DescriptionTime of the last change. Passed in write requests to protect against overwriting someone else's changes
Fieldfields[].name DescriptionForm field name, for example LEAD_NAME, LEAD_PHONE
Fieldfields[].required DescriptionWhether the field is required for submission
Fieldresponsible.userIds DescriptionUsers responsible for the form's results. List: GET /v1/users

To read a full form or select specific properties, see Get a form. Form contract fields lists top-level metadata only. Take nested property names and values from the full GET response for your configured form.

What to know before you start

  1. A read-only key can use GET requests and both form validations — POST /v1/crm-forms/validate and POST /v1/crm-forms/:id/validate. Creating, updating, activating or deactivating, deleting and submitting visitor data require a key with write access. Submitting visitor data can create CRM records and trigger automation and notifications.
  2. Without filters, the list includes active and inactive forms and returns one page. By default, it returns 11 scalar fields. Use select, for example id,name,crm.entityScheme,responsible.userIds,updatedTime, to request sections or subfields. Bitrix24 validates filters, sorting and pagination.
  3. A full form contains the 11 scalar fields and 14 configuration sections, including analytics, integrations and spamProtection. The object is passed through without rebuilding agreements, adding top-level aliases or filling missing fields. An explicit select can return a partial object without id, name or fields.
  4. User content, public URLs and embedding signatures are preserved. Only credentials for the current Bitrix24 connection are replaced, with affected paths in meta.redacted. Such a response is not a complete configuration for saving back. Credentials are always hidden in errors and logs.
  5. For an update, first read the form and keep updatedTime. Activate and deactivate return the actual active and updatedTime, including the unchanged version when no write was needed. If the additional read after a confirmed create or update fails, the response remains successful with data.id and meta.warnings. Read the form before the next write, without repeating the successful operation.
  6. Create, update, validate and embedding-update requests accept a flat body or an object-valued fields wrapper. For versioned updates, keep updatedTime at the root. The form's own fields array remains a form property. Bitrix24 validates settings and business rules.
  7. CRM_FORM_PARTIALLY_CREATED is an error: the form already exists; its ID is in error.id. GET the form, then correct or delete it. Do not repeat creation. There is no automatic deletion or retry.

Limits

Limit Value
LimitForms per list page ValueBitrix24 defaults when limit and offset are omitted. Both parameters are optional and validated by Bitrix24
LimitActive forms Valuelimits.activeForms in the builder configuration
LimitDeletion Valueirreversible; an active form is deleted only with confirm=true or confirmed=true
LimitRequest rate Valueshared across the Vibecode API — see Limits and optimization

Quick start

Get the first two forms in your Bitrix24 account:

Terminal
curl 'https://vibecode.bitrix24.com/v1/crm-forms?limit=2' \
  -H 'X-Api-Key: YOUR_API_KEY'
JSON
{
  "success": true,
  "data": [
    {
      "id": 1,
      "code": "1_kontaktnye_dannye",
      "name": "Contact details",
      "active": true,
      "system": true,
      "languageId": "ru",
      "templateId": "light",
      "createdTime": "2020-04-22T06:13:05Z",
      "updatedTime": "2020-04-22T06:13:05Z",
      "activeChangedById": 1,
      "activeChangedTime": "2020-04-22T06:13:05Z"
    },
    {
      "id": 3,
      "code": "3_obratnaya_svyaz",
      "name": "Feedback form",
      "active": true,
      "system": true,
      "languageId": "ru",
      "templateId": "light",
      "createdTime": "2020-04-22T06:13:05Z",
      "updatedTime": "2020-04-22T06:13:05Z",
      "activeChangedById": 1,
      "activeChangedTime": "2020-04-22T06:13:05Z"
    }
  ]
}

Live response from a Russian-language portal: code and languageId are portal values returned as stored. code is the exact value for the ?code= filter, and another portal has its own codes. Only the display name appears here in English.

Full example

Validate a draft, create an inactive form, activate it, submit visitor data, deactivate it and delete it.

  1. Validate the draft without saving it:
Terminal
curl -X POST 'https://vibecode.bitrix24.com/v1/crm-forms/validate' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"name":"Contact form","crm":{"entityScheme":1},"fields":[{"name":"LEAD_NAME","type":"string","label":"Name","required":true,"multiple":false},{"name":"LEAD_PHONE","type":"phone","label":"Phone","required":false,"multiple":false}]}'
JSON
{ "success": true, "data": { "valid": true, "violations": [] } }
  1. Create the form inactive — with the same body plus "active":false:
Terminal
curl -X POST 'https://vibecode.bitrix24.com/v1/crm-forms' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"name":"Contact form","active":false,"crm":{"entityScheme":1},"fields":[{"name":"LEAD_NAME","type":"string","label":"Name","required":true,"multiple":false},{"name":"LEAD_PHONE","type":"phone","label":"Phone","required":false,"multiple":false}]}'

The 201 response contains the saved form, or data.id with meta.warnings if the additional read failed. Keep data.id, which is 87 in this example. A warning does not mean creation failed: GET the form instead of repeating POST. If creation returns CRM_FORM_PARTIALLY_CREATED, use error.id to read and correct or delete the existing form, without repeating creation.

  1. Activate the form:
Terminal
curl -X POST 'https://vibecode.bitrix24.com/v1/crm-forms/87/activate' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{}'
JSON
{ "success": true, "data": { "active": true, "updatedTime": "2026-10-27T13:48:44Z" } }
  1. Submit visitor data:
Terminal
curl -X POST 'https://vibecode.bitrix24.com/v1/crm-forms/87/results' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"fields":{"LEAD_NAME":"Anna","LEAD_PHONE":"+12025550123"},"fromUrl":"https://example.com/contact"}'
JSON
{ "success": true, "data": { "resultId": 235 } }
  1. Deactivate the form:
Terminal
curl -X POST 'https://vibecode.bitrix24.com/v1/crm-forms/87/deactivate' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{}'
JSON
{ "success": true, "data": { "active": false, "updatedTime": "2026-10-27T13:48:46Z" } }
  1. Delete the form. An inactive form is deleted without confirm:
Terminal
curl -X DELETE 'https://vibecode.bitrix24.com/v1/crm-forms/87' \
  -H 'X-Api-Key: YOUR_API_KEY'
JSON
{ "success": true, "data": { "deleted": true } }

Endpoint reference

Method Path Bitrix24 method Description
MethodPOST Path/v1/crm-forms Bitrix24 methodcrm.form.add DescriptionCreate a form
MethodGET Path/v1/crm-forms Bitrix24 methodcrm.form.list DescriptionList forms
MethodGET Path/v1/crm-forms/:id Bitrix24 methodcrm.form.get DescriptionGet a form
MethodPATCH Path/v1/crm-forms/:id Bitrix24 methodcrm.form.update DescriptionUpdate a form
MethodDELETE Path/v1/crm-forms/:id Bitrix24 methodcrm.form.delete DescriptionDelete a form
MethodPOST Path/v1/crm-forms/validate Bitrix24 methodcrm.form.validate DescriptionValidate a form without saving it
MethodPOST Path/v1/crm-forms/:id/activate Bitrix24 methodcrm.form.activate DescriptionActivate a form
MethodPOST Path/v1/crm-forms/:id/deactivate Bitrix24 methodcrm.form.deactivate DescriptionDeactivate a form
MethodGET Path/v1/crm-forms/fields Bitrix24 methodcrm.form.field.list DescriptionForm contract fields
MethodGET Path/v1/crm-forms/fields/:name Bitrix24 methodcrm.form.field.get DescriptionGet a form contract field
MethodGET Path/v1/crm-forms/configuration Bitrix24 methodcrm.form.configuration.get DescriptionGet the builder configuration
MethodGET Path/v1/crm-forms/entity-fields Bitrix24 methodcrm.form.entityfield.list DescriptionList entity fields
MethodGET Path/v1/crm-forms/scenarios Bitrix24 methodcrm.form.scenario.list DescriptionList scenarios
MethodGET Path/v1/crm-forms/scenario-categories Bitrix24 methodcrm.form.scenariocategory.list DescriptionList scenario categories
MethodGET Path/v1/crm-forms/:id/embedding Bitrix24 methodcrm.form.embedding.get DescriptionEmbedding code
MethodPATCH Path/v1/crm-forms/:id/embedding Bitrix24 methodcrm.form.embedding.update DescriptionEmbedding settings
MethodGET Path/v1/crm-forms/:id/site-buttons Bitrix24 methodcrm.form.sitebutton.list DescriptionWebsite widgets
MethodGET Path/v1/crm-forms/:id/openlines Bitrix24 methodcrm.form.openline.list DescriptionOpen Channels for a form
MethodPOST Path/v1/crm-forms/:id/results Bitrix24 methodcrm.webform.result.add DescriptionSubmit visitor data, REST v2

The PRD name crm.form.embed.get maps to crm.form.embedding.get. The PRD name crm.form.fields.get for fields of selected CRM entities maps to crm.form.entityfield.list. crm.form.field.list and crm.form.field.get describe the form model itself. Visitor submissions use REST v2 and are separate from these REST v3 methods.

Error codes

CRM form errors

HTTP Code When
HTTP400 CodeINVALID_PARAMS WhenInvalid request structure or a parameter rejected by Bitrix24. The original code is in error.b24Code, with field diagnostics in error.validation when supplied
HTTP400 CodeCRM_FORM_PARTIALLY_CREATED WhenThe form exists, but some settings were not saved. GET the form by error.id, then correct or delete it. Do not repeat creation
HTTP402 CodeCRM_FORM_WRITE_RESTRICTED WhenThe Bitrix24 plan (free or demo) does not allow writing CRM forms
HTTP402 CodeCRM_FORM_ACTIVATION_LIMIT_REACHED WhenThe active-form limit has been reached
HTTP403 CodeCRM_FORM_SYSTEM_IMMUTABLE WhenA system form cannot be updated or deleted
HTTP409 CodeCRM_FORM_VERSION_MISMATCH WhenThe form changed after it was read. The current version is in error.currentUpdatedTime
HTTP409 CodeCRM_FORM_DELETE_CONFIRMATION_REQUIRED WhenAn active form is deleted only with confirm=true or confirmed=true
HTTP500 CodeCRM_FORM_SIDE_EFFECT_FAILED WhenThe write has already been performed, but the next step failed. Read the form before retrying

System errors

HTTP Code When
HTTP401 CodeMISSING_API_KEY WhenX-Api-Key is not passed
HTTP403 CodeSCOPE_DENIED WhenThe key does not have the crm scope
HTTP403 CodeBITRIX_ACCESS_DENIED WhenThe Bitrix24 user lacks permission. Original code: error.b24Code
HTTP403 CodeBITRIX_INSUFFICIENT_SCOPE WhenThe Bitrix24 token lacks the required scope. Original code: error.b24Code
HTTP409 CodeCRM_FORM_REST_NOT_ENABLED WhenCRM form REST methods are disabled. The condition is detected from the missing-method code in error.b24Code
HTTP403 CodeWRITE_BLOCKED_READONLY_KEY WhenA write was attempted with a read-only key
HTTP404 CodeENTITY_NOT_FOUND WhenThe form was not found
HTTP422 CodeBITRIX_ERROR WhenAnother Bitrix24 refusal, with the original code in error.b24Code

Full list of common API errors — Errors.

See also