# Form management

Create, read, update and delete CRM forms, validate a configuration without saving it and toggle whether a form is active.

Bitrix24 API: `crm.form.*`
Scope: `crm`

## Operations

- [Create a form](./create.md) — `POST /v1/crm-forms`
- [List forms](./list.md) — `GET /v1/crm-forms`
- [Get a form](./get.md) — `GET /v1/crm-forms/:id`
- [Update a form](./update.md) — `PATCH /v1/crm-forms/:id`
- [Delete a form](./delete.md) — `DELETE /v1/crm-forms/:id`
- [Validate a form](./validate.md) — `POST /v1/crm-forms/validate`
- [Activate a form](./activate.md) — `POST /v1/crm-forms/:id/activate`
- [Deactivate a form](./deactivate.md) — `POST /v1/crm-forms/:id/deactivate`

## Typical scenario

1. Validate a draft without saving it: `POST /v1/crm-forms/validate`.
2. Create the form: `POST /v1/crm-forms`. Use a flat body or `{fields:{...}}`. If the response contains `meta.warnings`, creation succeeded: GET the form instead of repeating POST. If `CRM_FORM_PARTIALLY_CREATED` is returned, the form exists; its ID is in `error.id`. Read it, then correct or delete it. Do not repeat creation.
3. To update a form, read it with `GET /v1/crm-forms/:id`, keep `updatedTime` and pass it at the root of `PATCH /v1/crm-forms/:id`, with flat settings or an object-valued `fields` wrapper. A partial projection is not a full configuration. Do not save a response marked with `meta.redacted` back as the complete form.
4. Activate and deactivate the form with separate `activate` and `deactivate` calls. Keep the returned `active` and `updatedTime`. After a write that returns a read warning, GET the form before the next change.

## See also

- [Builder dictionaries](/docs/entities/crm-forms/builder)
- [Publishing and results](/docs/entities/crm-forms/publishing)
- [CRM forms](/docs/entities/crm-forms)
