Skip to main content
PUT
/
open
/
forms
/
{id}
Update Form
curl --request PUT \
  --url https://api.opnform.com/open/forms/{id} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "workspace_id": 123,
  "title": "<string>",
  "visibility": "public",
  "tags": [
    "<string>"
  ],
  "language": "<string>",
  "custom_domain": "<string>",
  "theme": "default",
  "font_family": "<string>",
  "color": "<string>",
  "dark_mode": "light",
  "width": "centered",
  "size": "sm",
  "border_radius": "none",
  "layout_rtl": true,
  "uppercase_labels": true,
  "cover_picture": "<string>",
  "logo_picture": "<string>",
  "no_branding": true,
  "transparent_background": true,
  "submit_button_text": "<string>",
  "submitted_text": "<string>",
  "redirect_url": "<string>",
  "re_fillable": true,
  "re_fill_button_text": "<string>",
  "confetti_on_submission": true,
  "show_progress_bar": true,
  "closes_at": "2023-11-07T05:31:56Z",
  "closed_text": "<string>",
  "max_submissions_count": 2,
  "max_submissions_reached_text": "<string>",
  "auto_save": true,
  "auto_focus": true,
  "enable_partial_submissions": true,
  "editable_submissions": true,
  "editable_submissions_button_text": "<string>",
  "password": "<string>",
  "use_captcha": true,
  "captcha_provider": "recaptcha",
  "can_be_indexed": true,
  "seo_meta": {},
  "custom_code": "<string>",
  "database_fields_update": [
    "<any>"
  ],
  "properties": [
    {
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "type": "<string>",
      "name": "<string>",
      "help": "<string>",
      "hidden": true,
      "required": true,
      "placeholder": "<string>",
      "width": "full"
    }
  ]
}'
{
  "id": 123,
  "slug": "<string>",
  "title": "<string>",
  "visibility": "public",
  "tags": [
    "<string>"
  ],
  "language": "<string>",
  "custom_domain": "<string>",
  "theme": "default",
  "font_family": "<string>",
  "color": "<string>",
  "dark_mode": "light",
  "width": "centered",
  "size": "sm",
  "border_radius": "none",
  "layout_rtl": true,
  "uppercase_labels": true,
  "cover_picture": "<string>",
  "logo_picture": "<string>",
  "no_branding": true,
  "transparent_background": true,
  "submit_button_text": "<string>",
  "submitted_text": "<string>",
  "redirect_url": "<string>",
  "re_fillable": true,
  "re_fill_button_text": "<string>",
  "confetti_on_submission": true,
  "show_progress_bar": true,
  "closes_at": "2023-11-07T05:31:56Z",
  "closed_text": "<string>",
  "max_submissions_count": 2,
  "max_submissions_reached_text": "<string>",
  "auto_save": true,
  "auto_focus": true,
  "enable_partial_submissions": true,
  "editable_submissions": true,
  "editable_submissions_button_text": "<string>",
  "password": "<string>",
  "use_captcha": true,
  "captcha_provider": "recaptcha",
  "can_be_indexed": true,
  "seo_meta": {},
  "custom_code": "<string>",
  "database_fields_update": [
    "<any>"
  ],
  "properties": [
    {
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "type": "<string>",
      "name": "<string>",
      "help": "<string>",
      "hidden": true,
      "required": true,
      "placeholder": "<string>",
      "width": "full"
    }
  ]
}

Update Form

Update an existing form. You can modify any attribute that can be set when creating a form.

Authentication & Scope

Requires a token with the forms-write ability.

Request

PUT /open/forms/{id} HTTP/1.1
Host: api.opnform.com
Content-Type: application/json
Authorization: Bearer <token>

Path Parameters

ParameterTypeDescription
idnumberNumeric ID of the form to edit

Body Parameters

All fields from the Create Form endpoint may be supplied. However, the API validation requires you to include specific fields in every update request, even if you only want to change one optional field.

Required Fields in Updates

These fields must always be included:
FieldTypeDescription
titlestringForm title (max 60 characters)
visibilitystringForm visibility state ("public", "closed", "draft")
languagestringTwo-letter ISO language code (e.g. en)
themestringForm theme
presentation_stylestringHow the form is presented
widthstringForm container width
sizestringForm text size
border_radiusstringForm border radius
dark_modestringDark mode setting
colorstringPrimary color (hex format)
uppercase_labelsbooleanWhether labels should be uppercase
no_brandingbooleanHide OpenForm branding
transparent_backgroundbooleanUse transparent background
propertiesarrayArray of form fields/blocks — must never be empty, or existing properties will be lost
…other fieldsmixedAll other fields from Create Form (description, logo_picture, etc.)
Important: Omitting any of the required fields will result in a validation error. You must include all these fields in your update request, even if you’re only changing one optional field. Additionally, the properties array cannot be empty — always send your complete form fields.
To safely update a form without accidentally losing properties:
  1. Fetch the current form state using the Get Form endpoint
  2. Modify only the fields you want to change in the fetched response
  3. Send the complete updated form (including all required fields and properties) back to this endpoint
This ensures you retain all existing form fields and don’t accidentally overwrite them with empty arrays.
Best Practice Example: If you only want to change form visibility, fetch the form first, update only the visibility field locally, then send the complete form back with all its properties intact.

Body Example

Example request updating title and visibility (note: all required fields must be included):
{
    "title": "Customer Feedback (v2)",
    "visibility": "closed",
    "language": "en",
    "theme": "light",
    "presentation_style": "default",
    "width": "normal",
    "size": "medium",
    "border_radius": "medium",
    "dark_mode": "off",
    "color": "#3b82f6",
    "uppercase_labels": false,
    "no_branding": false,
    "transparent_background": false,
    "properties": [
        {
            "id": "field-1",
            "type": "short_text",
            "name": "First name",
            "required": true
        }
    ],
    "closed_text": "Form is currently closed"
}

Response

200 OK – Returns the updated Form object. 403 Forbidden – The token lacks forms-write or you don’t have permission.

Authorizations

Authorization
string
header
required

Personal Access Token

Path Parameters

id
number
required

Body

application/json
workspace_id
number

ID of the workspace that owns the form.

title
string

The title of the form.

visibility
enum<string>

The current visibility state of the form.

Available options:
public,
draft,
closed
tags
string[] | null
language
string

Two-letter ISO language code.

custom_domain
string | null
theme
enum<string>
Available options:
default,
simple,
notion
font_family
string | null
color
string
dark_mode
enum<string>
Available options:
light,
dark,
auto
width
enum<string>
Available options:
centered,
full
size
enum<string>
Available options:
sm,
md,
lg
border_radius
enum<string>
Available options:
none,
small,
full
layout_rtl
boolean
uppercase_labels
boolean
cover_picture
string<uri> | null
logo_picture
string<uri> | null
no_branding
boolean

Whether to hide the OpnForm branding.

transparent_background
boolean

Transparent background when form is embedded.

submit_button_text
string
Maximum length: 50
submitted_text
string
Maximum length: 2000
redirect_url
string<uri> | null
re_fillable
boolean
re_fill_button_text
string
Maximum length: 50
confetti_on_submission
boolean
show_progress_bar
boolean
closes_at
string<date-time> | null
closed_text
string | null
max_submissions_count
integer | null
Required range: x >= 1
max_submissions_reached_text
string | null
auto_save
boolean
auto_focus
boolean
enable_partial_submissions
boolean
editable_submissions
boolean
editable_submissions_button_text
string
Maximum length: 50
password
string | null
use_captcha
boolean
captcha_provider
enum<string>
Available options:
recaptcha,
hcaptcha
can_be_indexed
boolean
seo_meta
object | null
custom_code
string | null
database_fields_update
any[] | null
properties
object[]

An array of field and layout blocks that make up the form.

Response

Updated

id
number

The unique identifier for the form.

slug
string

The URL-friendly slug for the form.

title
string

The title of the form.

visibility
enum<string>

The current visibility state of the form.

Available options:
public,
draft,
closed
tags
string[] | null
language
string

Two-letter ISO language code.

custom_domain
string | null
theme
enum<string>
Available options:
default,
simple,
notion
font_family
string | null
color
string
dark_mode
enum<string>
Available options:
light,
dark,
auto
width
enum<string>
Available options:
centered,
full
size
enum<string>
Available options:
sm,
md,
lg
border_radius
enum<string>
Available options:
none,
small,
full
layout_rtl
boolean
uppercase_labels
boolean
cover_picture
string<uri> | null
logo_picture
string<uri> | null
no_branding
boolean

Whether to hide the OpnForm branding.

transparent_background
boolean

Transparent background when form is embedded.

submit_button_text
string
Maximum length: 50
submitted_text
string
Maximum length: 2000
redirect_url
string<uri> | null
re_fillable
boolean
re_fill_button_text
string
Maximum length: 50
confetti_on_submission
boolean
show_progress_bar
boolean
closes_at
string<date-time> | null
closed_text
string | null
max_submissions_count
integer | null
Required range: x >= 1
max_submissions_reached_text
string | null
auto_save
boolean
auto_focus
boolean
enable_partial_submissions
boolean
editable_submissions
boolean
editable_submissions_button_text
string
Maximum length: 50
password
string | null
use_captcha
boolean
captcha_provider
enum<string>
Available options:
recaptcha,
hcaptcha
can_be_indexed
boolean
seo_meta
object | null
custom_code
string | null
database_fields_update
any[] | null
properties
object[]

An array of field and layout blocks that make up the form.