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

# Edit Form

`PATCH /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"
              }
            ]
          }
        }
      ]
    }
  ]
}
```

## Assign Submit Number

The `assign_submit_number` field on the form defines whether each submission on a form will be assigned an incremental number starting from 1. By default, this field is set to `false`, meaning that no incremental numbering will be applied. However, when set to `true`, each new submission on the form will be given a `submit_number` that starts from `1` and increments by 1 with each new submission. 

The `submit_number` can be useful for keeping track of the order of submissions or for internal referencing purposes.

### Usage

- **Field Name**: `assign_submit_number`
- **Default Value**: `false`
- **Type**: `boolean`
- **Purpose**: If `true`, assigns an incremental `submit_number` starting from 1 to each submission.

### API Behavior

When the `assign_submit_number` field is set to `true`, the following changes will be visible:

- **In Submission Response**: 
  - Every submission will have an additional field, `submit_number`, which reflects its incremental number.
  
  Example:
  ```json
    {
        "submit_number": 5,
        "tracking_code": "ABC123",
        ...
    }



**Notes**
*   If a row is deleted, the submit_number for subsequent submissions will continue incrementing from the last assigned number (i.e., gaps may exist in the submit_number sequence if some submissions are deleted).

*   The `submit_number` is not editable once assigned and is automatically handled by the backend.

*   number is not editable once assigned and is automatically handled by the backend.

## Path parameters

- `slug` string, required

## Headers

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

## Request body

- PatchedFormUpdateRequest
  - `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
  - `user_spreadsheet_range` string, nullable
  - `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
  - `redirection_address` string, nullable
  - `fixed_payment_amount` string, nullable
  - `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)
