---
title: "Update form"
method: PATCH
path: "/forms/{id}"
tags: ["Forms"]
---

# Update form

`PATCH /forms/{id}`

## Request

- Base URL: `https://api.crevio.co/v1`
- URL: `https://api.crevio.co/v1/forms/{id}`
- Auth: API key in header `Authorization`

Update a Form's name, settings, confirmation behavior, or auto-tag list.

## Request body

- FormRequest
  - `name` string
  - `redirect_url` string, nullable: Full https:// URL people land on after they click the confirmation link, with `confirmation_required` on.
  - `delivery_type` 'none' | 'file' | 'link' | 'experience': What everyone who submits gets by email, on every submission. `none` turns delivery off; `file` needs `delivery_file_id`, `link` needs `delivery_url`, `experience` needs `experience_id`.
  - `delivery_url` string, nullable: Full https:// URL to send: a page, video or download elsewhere.
  - `experience_id` string, nullable: Experience ID to grant access to; the email carries a sign-in link.
  - `delivery_subject` string, nullable: Subject of the delivery email. Defaults to "Your freebie from <business> is here!".
  - `delivery_message` string, nullable: Plain-text body of the delivery email; the download button is added below it.
  - `archived_at` string, date-time, nullable
  - `tag_ids` string[]: Tag IDs added to everyone who submits (never replacing their other tags). With `confirmation_required`, once they confirm.
  - `form_fields_attributes` object[]: Nested-attributes payload for creating, updating, or destroying fields in one round-trip. Pass `id` to update an existing field; pass `_destroy: true` to remove one.
    - `id` integer, nullable: FormField id (omit when creating)
    - `name` string, required: User-facing label
    - `field_type` 'email' | 'text' | 'phone' | 'textarea' | 'radio' | 'select' | 'checkbox' | 'consent', required
    - `required` boolean
    - `position` integer: Zero-based ordinal
    - `options` string[]: Required when field_type is radio/select/checkbox
    - `_destroy` boolean: Set true to remove this field
  - `settings` object
  - `confirmation_required` boolean: Double opt-in: tags and the lead magnet wait until the person clicks the confirmation link.
  - `delivery_file_id` string: File ID (`file_...`, from the Files API) to send as a download.

## Response `200`

Updated form

- Form
  - `id` string, required
  - `object` string, required
  - `name` string, required
  - `redirect_url` string, nullable, required
  - `settings` object, required
  - `archived_at` string, date-time, nullable, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `confirmation_required` boolean, required
  - `tag_ids` string[], required
  - `delivery_url` string, nullable, required
  - `delivery_subject` string, nullable, required
  - `delivery_message` string, nullable, required
  - `delivery_type` 'none' | 'file' | 'link' | 'experience', required
  - `delivery_file` object, nullable, required
  - `experience_id` string, nullable, required
  - `submissions_count` number, required
  - `form_fields` FormField[], required
    - `id` string, required
    - `object` string, required
    - `name` string, required
    - `field_type` 'email' | 'text' | 'phone' | 'textarea' | 'radio' | 'select' | 'checkbox' | 'consent', required
    - `required` boolean, nullable, required
    - `position` integer, nullable, required
    - `options` string[], required

## Other responses

- `400`: Bad request
- `401`: Authentication required
- `403`: Forbidden
- `404`: Resource not found
- `422`: Validation error
- `429`: Rate limit exceeded — 600 requests per minute per credential. Retry after the number of seconds in `Retry-After`.
- `500`: Internal server error

---

[API](https://skmtc.dev/crevio/apis/crevio-api-v1.md) · [All operations](https://skmtc.dev/crevio/apis/crevio-api-v1/llms.txt) · [OpenAPI document](https://skmtc.dev/crevio/apis/crevio-api-v1/revisions/2219f18ad651?raw)
