> ## Documentation Index
> Fetch the complete documentation index at: https://docs.paubox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Update a form with the Forms API

> Updates a form. This is a partial update: any fields omitted from the request body are left unchanged.




## OpenAPI

````yaml openapi-forms PUT /api/forms/{form_id}
openapi: 3.0.0
info:
  title: Paubox Forms API
  description: >
    The Paubox Forms API has two kinds of endpoints. Public, respondent-facing
    endpoints (retrieving a form definition for rendering and submitting a form
    response) require no authentication. Authenticated management endpoints
    (creating, listing, updating, copying, archiving forms, and reading or
    exporting submissions) require a Paubox API key with the "forms" scope, sent
    as `Authorization: Bearer YOUR_API_KEY`. API keys are generated in the
    Paubox dashboard.
  version: 1.0.0
servers:
  - url: https://api.paubox.com/v1/forms
    description: Paubox Forms API
security: []
tags:
  - name: Forms
    description: Retrieve form definitions and accept submissions
  - name: Form management
    description: Create, list, update, copy, and archive forms (requires API key)
  - name: Submissions
    description: List and export form submissions (requires API key)
paths:
  /api/forms/{form_id}:
    put:
      tags:
        - Form management
      summary: Update a form
      description: >
        Updates a form. This is a partial update: any fields omitted from the
        request body are left unchanged.
      operationId: updateForm
      parameters:
        - name: form_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: UUID of the form to update
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateFormRequest'
            examples:
              example:
                summary: Rename and activate a form
                value:
                  title: Patient Intake Form (2024)
                  active: true
      responses:
        '200':
          description: Form updated
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                  form_id:
                    type: string
                    format: uuid
              examples:
                example:
                  summary: Example response
                  value:
                    detail: Form updated successfully
                    form_id: 550e8400-e29b-41d4-a716-446655440000
        '401':
          description: Missing or invalid API key, or the key lacks the "forms" scope
        '403':
          description: The form belongs to a different customer
        '404':
          description: Form not found or deleted
        '422':
          description: >
            `form_json` is not a schema the form renderer can draw. Only checked
            when the payload includes `form_json` — a partial update that omits
            it (changing `title` or `active`, say) is never validated and leaves
            the stored schema untouched. A rejected update applies nothing.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FormJsonValidationError'
      security:
        - bearerAuth: []
components:
  schemas:
    UpdateFormRequest:
      type: object
      description: >
        Partial update. All fields are optional; omitted fields are left
        unchanged.
      properties:
        title:
          type: string
        description:
          type: string
        form_json:
          type: object
          description: >
            The form's schema. Must be an object containing a `body` array of
            components; the renderer reads `body` and ignores every other
            top-level key. A payload shaped any other way — notably a `fields`
            array — is rejected with 422. Empty `body` is allowed: a draft
            legitimately has no components yet.
          properties:
            body:
              type: array
              description: >
                Ordered list of components. Each entry is an object with a
                string `type` drawn from the list below, an `id`, and an
                optional `properties` object.
              items:
                type: object
                required:
                  - type
                properties:
                  type:
                    type: string
                    description: >
                      Component type. Case-sensitive — note `Radiobutton` has a
                      lowercase `b`, unlike the others.
                    enum:
                      - Text
                      - Divider
                      - TextInput
                      - TextArea
                      - Dropdown
                      - Checkboxes
                      - Radiobutton
                      - FileUpload
                      - Signature
                      - Button
                      - Conditional
                      - Logo
                  id:
                    type: string
                    description: Identifier for the component, unique within the form.
                  properties:
                    type: object
                    description: >
                      Per-component settings such as `field_name`, `text`,
                      `required` and `input_mask`. Not validated on write.
          required:
            - body
        vanity_url:
          type: string
        recipient:
          type: string
          description: |
            Comma-separated email addresses notified on each submission.
        active:
          type: boolean
        subscription_list_id:
          type: string
          description: >
            ID of the connected Marketing contact list. For marketing forms, new
            subscribers are added to this list.
    FormJsonValidationError:
      type: object
      description: >
        Returned with 422 when `form_json` is not a schema the form renderer can
        draw. Introduced in pb_rforms v1.11.0; before that release these
        payloads were accepted and the resulting form rendered as an empty page.
      properties:
        message:
          type: string
          description: >
            Human-readable reason, naming the offending component's index and
            type where applicable.
      example:
        message: >-
          form_json.body[1].type `DatePicker` is not a component the form
          renderer knows; expected one of: Text, Divider, TextInput, TextArea,
          Dropdown, Checkboxes, Radiobutton, FileUpload, Signature, Button,
          Conditional, Logo
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >
        Paubox API key sent as `Authorization: Bearer YOUR_API_KEY`. API keys
        are created in the Paubox dashboard and must have the "forms" scope; a
        key without the forms scope receives 401 Unauthorized. A valid key used
        against a resource that belongs to a different customer receives 403
        Forbidden.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.