Forms Engine
Categories and Publication Lifecycle
Category semantics, revision transitions, and publishability rules.
Categories
- category
keyis UUID - category
slugis stable and generated or maintained - categories can be
is_system - form category assignment accepts UUID key or slug
Forbidden category names
Use formforge.categories.forbidden_names to block reserved category names in management operations.
Name matching is normalized before validation: comparison is case-insensitive and ignores leading/trailing spaces.
The rule is enforced on both category creation and category update.
'categories' => [
'forbidden_names' => ['Internal', 'System'],
],
If a forbidden name is sent to POST /api/formforge/v1/categories or PATCH /api/formforge/v1/categories/{categoryKey}, the API returns 422 Unprocessable Entity.
Validation includes an error on category.
Revision lifecycle
createcreates revision 1patchcreates a new draft revisionpublishcreates a new published revisionunpublishcreates a new draft revisiondeletesoft-deletes revisions
Publishability
A form can be published only when:
- title is non-empty
- at least one page exists
- at least one field exists
Publication settings
Form schemas can carry publication-related settings that the runtime and client builder both understand:
publish_atpause_atresponse_limitsubmission_code_requiredsubmission_code
These settings control when a form opens, when it stops accepting responses, and whether a PIN is required before submission.
publish_atopens the form at a specific date and timepause_atstops the form from accepting new responses at a specific date and timeresponse_limitcloses the form after the configured number of submissionssubmission_code_requiredandsubmission_codeprotect the form with a PIN
The backend also resolves
public_url through the configured public-link resolver, but that value is read-only and is not stored as a user-editable setting.