For AI agents: markdown of this page — /docs-content-en/entities/crm-forms/update.md documentation index — /llms.txt
Update a form
PATCH /v1/crm-forms/:id
Bitrix24 method: crm.form.update (REST v3).
Scope: crm. Requires a READWRITE key.
Behavior and parameters
Supply updatedTime from get a form and only the configuration properties to change. Omitted properties stay unchanged. Collections supplied in the request replace the collection; an empty array clears it. The wrapper re-reads the saved form and returns HTTP 200 in the GET DTO. Activate or deactivate the form using the dedicated actions.
Allowed top-level properties: name, active on creation only, languageId, templateId, crm, appearance, fields, responsible, agreements, submission, callback, payment, booking, presetFields, dependencies; update additionally requires updatedTime. Nested values are passed unchanged; Bitrix24 validates them. analytics, integrations, spamProtection and unknown top-level properties are refused before calling Bitrix24. Read field metadata with form fields.
Set required and multiple explicitly for each field; omitted flags are saved as true. List, checkbox, radio, product and booking fields cannot be configured through this contract; validation reports violations. The appearance theme is not part of the writable projection; Bitrix24 decides how to handle an unrecognized nested property.
Bitrix24 does not perform writes on free or demo plans. Permissions, quota and business rules are checked by Bitrix24.
Example
curl -X PATCH 'https://vibecode.bitrix24.com/v1/crm-forms/8' \
-H 'X-Api-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"updatedTime":"2026-10-22T12:00:00Z","name":"Updated contact form"}'
For an OAuth application, use its key and the Authorization: Bearer USER_SESSION_TOKEN header.
{"success":true,"data":{"id":8,"name":"Contact form","fields":[],"updatedTime":"2026-10-22T12:00:00Z"}}
Errors
| HTTP | Code | Reason |
|---|---|---|
| HTTP400 | CodeINVALID_PARAMS |
ReasonInvalid id, body or query shape |
| HTTP400 | CodeMISSING_REQUIRED_FIELDS |
ReasonMissing updatedTime on PATCH |
| HTTP400 | CodeREADONLY_FIELD |
ReasonUnpublished field |
| HTTP400 | CodeUNKNOWN_FIELD |
ReasonUnknown top-level field |
| HTTP403 | CodeWRITE_BLOCKED_READONLY_KEY |
ReasonREADONLY key |
| HTTP402 | CodeCRM_FORM_WRITE_RESTRICTED |
ReasonBitrix24 plan does not allow writing CRM forms |
| HTTP403 | CodeSCOPE_DENIED |
ReasonMissing crm scope |
| HTTP403 | CodeBITRIX_ACCESS_DENIED |
ReasonBitrix24 permission refusal |
| HTTP403 | CodeCRM_FORM_SYSTEM_IMMUTABLE |
ReasonSystem form cannot be changed |
| HTTP404 | CodeENTITY_NOT_FOUND |
ReasonForm does not exist |
| HTTP409 | CodeCRM_FORM_VERSION_MISMATCH |
ReasonVersion is stale; error.currentUpdatedTime contains the current version |
| HTTP422 | CodeBITRIX_ERROR |
ReasonOther Bitrix24 refusal, original message retained |
| HTTP500 | CodeCRM_FORM_SIDE_EFFECT_FAILED |
ReasonWrite already happened; read the form before retrying. On creation error.id identifies the saved form |
| HTTP502 | CodeBITRIX_UNAVAILABLE |
ReasonInvalid or unavailable upstream response; re-read the form before retrying a write |
Bitrix24 codes, statuses and messages are retained. See common limits for shared 429, 502 and 503 responses.
Scalar null values are passed to Bitrix24 for clearing; supplied collections replace the previous collection, and an empty array clears it.