---
title: "Edit Form"
method: PUT
path: "/v3.0/forms/{slug}/"
tags: ["forms"]
---

# Edit Form

`PUT /v3.0/forms/{slug}/`

## Request

- Base URL: `https://api.formaloo.me`
- URL: `https://api.formaloo.me/v3.0/forms/{slug}/`
- Auth: none declared. Required headers: `x-api-key`

Update a form.

## Making the uploaded files private

The `submitted_files_are_private` field on the form, defines wether the files uploaded on a form should be accessible to anyone who has the link to the file, or are only accessible to anyone who has access to the form. Meaning, anyone, even of not authenticated, can see an uploaded file using its link (which needs to be shared by a form admin). But if the `submitted_files_are_private` is set to `true`, the links will be private, and only those who have access to the form can see the file.


 **Note** If you change the `submitted_files_are_private` field from, it won't affect the existing links. For example, if you change it from `false` to `true`, the link to the previous files will still be publicly accessible, but the new uploads will be private.


 The value for `submitted_files_are_private` is `false` by default.

## Form Logic

### Matrix and Table fields logic

When setting logic for a **Matrix Field** You can access the value selected for a given group, with the following syntax `matrix_field_slug.group_slug` and compare it with the desired choice. Type of these logic conditions are not `choice`, but `matrix`, since they're a specific case.

When setting logic for a **Table Field** You can access the value selected for a given cell, with the following syntax `table_field_slug.group_slug.column_slug` and compare it with the desired value. Type of these logic conditions are not `choice`, but `table`, since they're a specific case.

Example

``` json
{
  "logic": [
    {
      "type": "field",
      "identifier": "{field_1}",
      "actions": [
        {
          "action": "hide",
          "args": [
            {
              "type": "field",
              "identifier": "{field_3}"
            }
          ],
          "when": {
            "operation": "is",
            "args": [
              {
                "type": "matrix",
                "value": "{field_1}.{field_1_group_1}"
              },
              {
                "type": "choice",
                "value": "{field_1_choice_1}"
              }
            ]
          }
        }
      ]
    },
    {
      "type": "field",
      "identifier": "{field_2}",
      "actions": [
        {
          "action": "hide",
          "args": [
            {
              "type": "field",
              "identifier": "{field_4}"
            }
          ],
          "when": {
            "operation": "is",
            "args": [
              {
                "type": "table",
                "value": "{field_2}.{field_2_group_2}.{field_2_column_2}"
              },
              {
                "type": "constant",
                "value": "Tango"
              }
            ]
          }
        }
      ]
    }
  ]
}
```

### Set fields' value based on condition(s)

#### Example 1 - Using Text fields

Fields:
``` 
Text Field A: mu1oEnbp
Text Field B: 7IdBlI0V
```

Conditions:
```text
if A == 'Python'
then set B to 'Yay'
```

```json
{
    "logic": [
        {
            "type": "field",
            "identifier": "mu1oEnbp",
            "actions": [
                {
                    "action": "set",
                    "args": [
                        {
                            "type": "field",
                            "identifier": "7IdBlI0V" 
                        },
                        {
                            "type": "constant",
                            "value": "Yay"
                        }  
                    ],
                    "when": {
                        "operation": "equal",
                        "args": [
                            {
                                "type": "field",
                                "value": "mu1oEnbp"
                            },
                            {
                                "type": "constant",
                                "value": "Python"
                            }
                        ]
                    }
                }
            ]
        }
    ]
}
```

#### Example 2 - Using Choice fields

Fields:
``` 
Choice Field A: PrJNHykP
    Option 1: dgf67dGH
    Option 2: ysFv28XR 

Choice Field B: KRwEpVNX
    Option 1: f6dyegtF
    Option 2: rO0byBlU
    
```

Conditions:
```text
if A == 'Option 2'
then set B to 'Option 2'
```

```json
{
    "logic": [
        {
            "type": "field",
            "identifier": "PrJNHykP",
            "actions": [
                {
                    "action": "set",
                    "args": [
                        {
                            "identifier": "KRwEpVNX",
                            "type": "field"
                        },
                        {
                            "identifier": "rO0byBlU",
                            "type": "choice"
                        }
                    ],
                    "when": {
                        "operation": "is",
                        "args": [
                            {
                                "type": "field",
                                "value": "PrJNHykP"
                            },
                            {
                                "type": "choice",
                                "value": "ysFv28XR"
                            }
                        ]
                    }
                }
            ]
        }
    ]
}
```

## Path parameters

- `slug` string, required

## Headers

- `x-api-key` string, required
- `x-workspace` string

## Request body

- FormUpdateRequest
  - `submit_start_time` string, date-time, nullable
  - `submit_end_time` string, date-time, nullable
  - `forward_submit_emails_to` string[]: A list of emails to forward the form submit emails to.
  - `user_spreadsheet_id` string, nullable, required
  - `user_spreadsheet_range` string, nullable, required
  - `sync_gsheet` boolean, nullable
  - `category` string, nullable: category's slug.
  - `admin_email_notif_template` string, nullable: email template's slug.
  - `user_email_notif_template` string, nullable: email template's slug.
  - `rows_pdf_template` string, nullable: pdf template's slug.
  - `admin_pdf_template` string, nullable: pdf template's slug.
  - `user_pdf_template` string, nullable: pdf template's slug.
  - `tags` string[]: tags's slug.
  - `logic` object
  - `form_fields` string[]: a list of form's field slugs.
  - `primary_field` string
  - `payment_method` string, nullable, required
  - `redirection_address` string, nullable, required
  - `fixed_payment_amount` string, nullable, required
  - `shuffle_choices` boolean, nullable
  - `logo_slug` string, nullable
  - `background_image_slug` string, nullable
  - `favicon_slug` string, nullable
  - `meta_image_slug` string, nullable
  - `banner_slug` string, nullable
  - `file_slug` string: Send the slug of a file uploaded to the storage service and used in form's description, so the file is attached to the form.
  - `file_slugs` string[]: Send the list of slugs for the files uploaded to the storage service and used in form's description, so the files are attached to the form.
  - `language` string, nullable: The language's slug.
  - `slug` string, nullable
  - `address` string, nullable: A unique string to identify form for users. It's auto-generated if not set by user.
  - `title` string, nullable: the form's display name.
  - `show_title` boolean: title visibility on form.
  - `description` string, nullable: a description about form.
  - `success_message` string, nullable: a messages to show if the form is successfully submitted.
  - `error_message` string, nullable: a messages to show if the form is not successfully submitted.
  - `button_text` string, nullable: a text to show on the form's submit button.
  - `localized_content` object, nullable: localized content
  - `save_ai_response` boolean: whether to save the AI response on the row or not.
  - `max_submit_count` integer, nullable: the maximum times people can submit this form.
  - `needs_login` boolean: whether the users need to login to submit the form.
  - `max_submit_per_ip_per_day` integer, nullable
  - `time_limit` string, time, nullable: time limit to fill this form
  - `shuffle_fields` boolean: shows wether to shuffle the ordering of the form field on show.
  - `form_redirects_after_submit` string, nullable: Either null or the url of destination.
  - `include_data_on_redirect` boolean: if set true, the submitted data along with aliases will be included in the redirect url.
  - `has_recaptcha` boolean: defines if show a recaptcha on form or not
  - `send_emails_to` string, email, nullable: an email address to send form data copy on each submit.
  - `submit_email_notif` boolean: receive email notifications on each submit for the form.
  - `row_update_email_notif` boolean: receive email notifications when a row is updated.
  - `send_user_confirm` boolean: whether to send a copy of data to user.
  - `can_send_notification_status` 'always_allow' | 'banned' | 'default' | 'soft_disable' | 'ban_admin_email'
  - `generate_pdf_for_admin` boolean: whether to generate a pdf after each submit.
  - `generate_pdf_for_user` boolean: whether to generate a pdf after each submit.
  - `slack_accesses` object, nullable: List of slack access slugs.
  - `form_type` 'simple' | 'multi_step' | 'nps'
  - `thumbnail` string, binary, nullable: an optional thumbnail for the form
  - `logo` string, binary, nullable: the logo to be shown on the top of form
  - `logo_position` 'left' | 'center' | 'right'
  - `text_color` string, nullable: the form's text color.
  - `button_color` string, nullable: the form's button color.
  - `theme_color` string, nullable: the form's theme color.
  - `theme_name` string, nullable: the form's theme name.
  - `field_color` string, nullable: the form's field color.
  - `background_color` string, nullable: the form's background color.
  - `border_color` string, nullable: the form's border color.
  - `submit_text_color` string, nullable: the form's submit text color.
  - `background_image` string, binary, nullable: background image for this form.
  - `theme_config` object: the form's additional theme configuration.
  - `custom_js` string, nullable
  - `custom_css` string, nullable
  - `version` string: version of form
  - `active` boolean: defines if the form is active and users can see and submit it.
  - `config` string, nullable: the form's additional configuration.
  - `show_calculations_score_result` boolean: to show calculations result after user submits a form
  - `show_submit_tracking_code` boolean: whether to show the tracking code after user has submitted the form.
  - `assign_submit_number` boolean: if set to true, each new row will have an incremental submit number starting from 1.
  - `show_answers` boolean: whether to show the reslts page containing answers and answer sheet after form submit.
  - `form_currency_type` 'dollar' | 'USD' | 'EUR' | 'GBP' | 'AUD' | 'CAD' | 'CHF' | 'NOK' | 'SEK' | 'DKK' | 'MXN' | 'NZD' | 'BRL' | 'JPY' | 'INR' | 'AED' | 'IDR' | 'SGD'
  - `public_stats` boolean: if set true, form stats will be publicly shared by a link.
  - `public_rows` boolean: if set true, submitted data will be publicly shared by a link.
  - `address_is_universal` boolean: If set true, form's address should be universally unique, and the forms is accessible on the root domain, otherwise, it's only available on the user's domain and subdomain.
  - `custom_domain` string, nullable: user can set this on the form, if they want to show this form on a custom domain (e.g. https://example.co/).
  - `accept_draft_answers` boolean: users can have draft answers on this form or not.
  - `meta_tags` string, nullable: the form's meta tags, which will be added to all pages related to this form.
  - `ai_mode` boolean
  - `meta_description` string, nullable: Meta description for the form.
  - `auto_translation_enabled` boolean
  - `allow_indexing` boolean
  - `run_field_logics_on_update` boolean: Whether to run field logics on row update or not.
  - `last_export_start_time` string, date-time, nullable: when was last excel export task was started for the form?
  - `spreadsheet_id` string, nullable: id for the corresponding google sheet.
  - `spreadsheet_url` string, nullable: url for the corresponding google sheet.
  - `is_google_integration_enabled` boolean: whether google sheets integration is enabled for this form.
  - `last_submit_time` string, date-time, nullable: when was the last submit on the form?
  - `total_submits_count` integer: shows how many submits the form has.
  - `total_size` integer: shows total size of the form and it's fields' fields in bytes.
  - `create_type` 'api' | 'excel' | 'google_forms' | 'google_sheets' | 'magic_import' | 'magic_create' | 'recurring_submission'
  - `primary_email` integer, nullable: an email field in the form, to send the submitted data to.

## Response `200`

- FormUpdate
  - `submit_start_time` string, date-time, nullable
  - `submit_end_time` string, date-time, nullable
  - `forward_submit_emails_to` string[]: A list of emails to forward the form submit emails to.
  - `owner` User
    - `first_name` string
    - `last_name` string
    - `username` string, required: Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.
    - `email` string, email
    - `user_type` string
  - `fields` object
  - `fields_list` object
  - `submit_count` integer
  - `visit_count` integer
  - `has_email_fields` boolean
  - `user_spreadsheet_id` string, nullable, required
  - `user_spreadsheet_range` string, nullable, required
  - `user_spreadsheet_url` string, nullable: url for the corresponding google sheet of user.
  - `sync_gsheet` boolean, nullable
  - `export_in_progress` boolean: Shows if there's an excel export task in progress for the form.
  - `last_export_file` string, uri, nullable
  - `last_export_time` string, date-time, nullable: when was last excel export created.
  - `copied_from` string
  - `category` string, nullable: category's slug.
  - `admin_email_notif_template` string, nullable: email template's slug.
  - `user_email_notif_template` string, nullable: email template's slug.
  - `rows_pdf_template` string, nullable: pdf template's slug.
  - `admin_pdf_template` string, nullable: pdf template's slug.
  - `user_pdf_template` string, nullable: pdf template's slug.
  - `tags` string[]: tags's slug.
  - `logic` object
  - `subdomain` string
  - `owner_custom_domain` string
  - `currency` Currency
    - `title` string, required
    - `currency_code` string, required
    - `sign` string, nullable
  - `logic_metadata` object
  - `full_form_address` string
  - `primary_field` string
  - `shared_access` string
  - `row_tags` object
  - `combined_localized_content` string
  - `payment_method` string, nullable, required
  - `redirection_address` string, nullable, required
  - `fixed_payment_amount` string, nullable, required
  - `logo_url` string
  - `background_image_url` string
  - `favicon_url` string
  - `meta_image_url` string
  - `banner_url` string
  - `language` string, nullable: The language's slug.
  - `deleted` string, date-time
  - `created_at` string, date-time
  - `updated_at` string, date-time
  - `slug` string, nullable
  - `address` string, nullable: A unique string to identify form for users. It's auto-generated if not set by user.
  - `title` string, nullable: the form's display name.
  - `show_title` boolean: title visibility on form.
  - `description` string, nullable: a description about form.
  - `success_message` string, nullable: a messages to show if the form is successfully submitted.
  - `error_message` string, nullable: a messages to show if the form is not successfully submitted.
  - `button_text` string, nullable: a text to show on the form's submit button.
  - `localized_content` object, nullable: localized content
  - `save_ai_response` boolean: whether to save the AI response on the row or not.
  - `max_submit_count` integer, nullable: the maximum times people can submit this form.
  - `needs_login` boolean: whether the users need to login to submit the form.
  - `max_submit_per_ip_per_day` integer, nullable
  - `time_limit` string, time, nullable: time limit to fill this form
  - `shuffle_fields` boolean: shows wether to shuffle the ordering of the form field on show.
  - `form_redirects_after_submit` string, nullable: Either null or the url of destination.
  - `include_data_on_redirect` boolean: if set true, the submitted data along with aliases will be included in the redirect url.
  - `has_recaptcha` boolean: defines if show a recaptcha on form or not
  - `send_emails_to` string, email, nullable: an email address to send form data copy on each submit.
  - `submit_email_notif` boolean: receive email notifications on each submit for the form.
  - `row_update_email_notif` boolean: receive email notifications when a row is updated.
  - `send_user_confirm` boolean: whether to send a copy of data to user.
  - `can_send_notification_status` 'always_allow' | 'banned' | 'default' | 'soft_disable' | 'ban_admin_email'
  - `generate_pdf_for_admin` boolean: whether to generate a pdf after each submit.
  - `generate_pdf_for_user` boolean: whether to generate a pdf after each submit.
  - `slack_accesses` object, nullable: List of slack access slugs.
  - `form_type` 'simple' | 'multi_step' | 'nps'
  - `thumbnail` string, uri, nullable: an optional thumbnail for the form
  - `logo` string, uri, nullable: the logo to be shown on the top of form
  - `logo_position` 'left' | 'center' | 'right'
  - `text_color` string, nullable: the form's text color.
  - `button_color` string, nullable: the form's button color.
  - `theme_color` string, nullable: the form's theme color.
  - `theme_name` string, nullable: the form's theme name.
  - `field_color` string, nullable: the form's field color.
  - `background_color` string, nullable: the form's background color.
  - `border_color` string, nullable: the form's border color.
  - `submit_text_color` string, nullable: the form's submit text color.
  - `background_image` string, uri, nullable: background image for this form.
  - `theme_config` object: the form's additional theme configuration.
  - `custom_js` string, nullable
  - `custom_css` string, nullable
  - `version` string: version of form
  - `active` boolean: defines if the form is active and users can see and submit it.
  - `config` string, nullable: the form's additional configuration.
  - `show_calculations_score_result` boolean: to show calculations result after user submits a form
  - `show_submit_tracking_code` boolean: whether to show the tracking code after user has submitted the form.
  - `assign_submit_number` boolean: if set to true, each new row will have an incremental submit number starting from 1.
  - `show_answers` boolean: whether to show the reslts page containing answers and answer sheet after form submit.
  - `form_currency_type` 'dollar' | 'USD' | 'EUR' | 'GBP' | 'AUD' | 'CAD' | 'CHF' | 'NOK' | 'SEK' | 'DKK' | 'MXN' | 'NZD' | 'BRL' | 'JPY' | 'INR' | 'AED' | 'IDR' | 'SGD'
  - `public_stats` boolean: if set true, form stats will be publicly shared by a link.
  - `public_rows` boolean: if set true, submitted data will be publicly shared by a link.
  - `address_is_universal` boolean: If set true, form's address should be universally unique, and the forms is accessible on the root domain, otherwise, it's only available on the user's domain and subdomain.
  - `custom_domain` string, nullable: user can set this on the form, if they want to show this form on a custom domain (e.g. https://example.co/).
  - `accept_draft_answers` boolean: users can have draft answers on this form or not.
  - `meta_tags` string, nullable: the form's meta tags, which will be added to all pages related to this form.
  - `ai_mode` boolean
  - `meta_description` string, nullable: Meta description for the form.
  - `auto_translation_enabled` boolean
  - `allow_indexing` boolean
  - `run_field_logics_on_update` boolean: Whether to run field logics on row update or not.
  - `last_export_start_time` string, date-time, nullable: when was last excel export task was started for the form?
  - `spreadsheet_id` string, nullable: id for the corresponding google sheet.
  - `spreadsheet_url` string, nullable: url for the corresponding google sheet.
  - `is_google_integration_enabled` boolean: whether google sheets integration is enabled for this form.
  - `last_submit_time` string, date-time, nullable: when was the last submit on the form?
  - `total_submits_count` integer: shows how many submits the form has.
  - `total_size` integer: shows total size of the form and it's fields' fields in bytes.
  - `create_type` 'api' | 'excel' | 'google_forms' | 'google_sheets' | 'magic_import' | 'magic_create' | 'recurring_submission'
  - `primary_email` integer, nullable: an email field in the form, to send the submitted data to.

---

[API](https://skmtc.dev/formaloo/apis/formaloo-api-documentation.md) · [All operations](https://skmtc.dev/formaloo/apis/formaloo-api-documentation/llms.txt) · [OpenAPI document](https://skmtc.dev/formaloo/apis/formaloo-api-documentation/revisions/47b268aeb656?raw)
