Update a form
/forms/{id}Changes the fields you send and returns the form. pages and fields are upserted by id or, for fields, reference; delete_field_ids takes field ids or references and delete_page_ids page ids. Every id must belong to this form, else 422 exists. A form that onboarding flows protect returns 409 conflict. status is read-only. dry_run shows the result without saving it. Emits form.updated when something changes; sends no email. Sending the old values undoes it.
Path parameters
The form's id, a uuid. An unknown id, or a hidden form, returns 404.
Query parameters
Validate and run the call without committing it, returning what the real call would return with
meta.dry_runset.
Request body
application/json, required · FormUpdate
The form's display name.
What the form is for.
Pages to add or change.
Fields to add or change.
Fields to remove, each by id or reference.
Pages to remove, each by id.
{
"name": "Subscription Agreement v2",
"delete_field_ids": [
"spouse_name"
]
}Responses
{
"data": {
"id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
"name": "string",
"description": "string",
"type": "string",
"status": "draft",
"pages": [
{
"id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
"name": "string",
"description": "string",
"order": 1
}
],
"fields": [
{
"id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
"label": "string",
"name": "string",
"description": "string",
"type": "string",
"reference": "string",
"validator": "string",
"placeholder": "string",
"pre_population_key": "string",
"backfill": true,
"order": 1,
"page_id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
"option_preset_id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
"options": [],
"required": true,
"conditions": [],
"condition_logic": "AND"
}
],
"created_at": "2026-06-12T10:00:00+00:00",
"updated_at": "2026-06-12T10:00:00+00:00"
}
}Authorization failed. error.code is one of org_disabled,
ip_blocked, missing_scope, scope_disabled, user_disabled.
The request conflicts with existing state (error.code = conflict),
e.g. a compliance flow with the requested name already exists.
The request can't be processed (HTTP 422): validation_failed with one ErrorDetail per
problem, or a code documented on the operation.
Examples
curl -X PATCH https://your-org-domain/kong/core/api/v2/forms/{id}\
-H "Authorization: Bearer $HELM_API_KEY"\
-H "Content-Type: application/json"\
-d '{
"name": "Subscription Agreement v2",
"delete_field_ids": [
"spouse_name"
]
}'