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

# Create a form

> Creates a form with its questions. Note: Assembly forms do not support conditional/branching logic — questions are presented as a flat, ordered sequence.



## OpenAPI

````yaml /api-reference/openapi.json post /v1/forms
openapi: 3.0.0
info:
  contact: {}
  title: Assembly API
  version: 0.0.1
servers:
  - url: https://api.assembly.com
security: []
paths:
  /v1/forms:
    post:
      tags:
        - Forms
      summary: Create a form
      description: >-
        Creates a form with its questions. Note: Assembly forms do not support
        conditional/branching logic — questions are presented as a flat, ordered
        sequence.
      operationId: create-form
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/forms.CreateFormInput'
        description: Form to create
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/forms.Form'
          description: OK
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/dispatcher.Error'
          description: Invalid request body or field values
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/dispatcher.Error'
          description: Missing or invalid API key
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/dispatcher.Error'
          description: Unexpected server error
      security:
        - APIKeyHeader: []
components:
  schemas:
    forms.CreateFormInput:
      properties:
        additionalFields:
          allOf:
            - $ref: '#/components/schemas/forms.FormAdditionalFields'
          description: >-
            AdditionalFields holds form-level metadata such as title and
            description.
        fields:
          allOf:
            - $ref: '#/components/schemas/forms.FormFields'
          description: Fields is the ordered set of questions/inputs that make up the form.
      required:
        - additionalFields
        - fields
      type: object
    forms.Form:
      properties:
        additionalFields:
          $ref: '#/components/schemas/forms.FormAdditionalFields'
        createdAt:
          type: string
        creatorId:
          type: string
        data:
          type: string
        fields:
          $ref: '#/components/schemas/forms.FormFields'
        id:
          type: string
        identityId:
          type: string
        object:
          type: string
        owner:
          $ref: '#/components/schemas/users.Owner'
        previousAttributes:
          additionalProperties: true
          type: object
        ref:
          type: string
        updatedAt:
          type: string
      type: object
    dispatcher.Error:
      properties:
        code:
          type: string
        data: {}
        message:
          type: string
      type: object
    forms.FormAdditionalFields:
      properties:
        formResponseRequests:
          description: >-
            Number of clients the form has been assigned to (response requests
            created).
          example: 12
          type: integer
        formResponseSubmissions:
          description: Number of assigned responses that have been completed.
          example: 8
          type: integer
        latestSubmissionDate:
          description: Timestamp of the most recent completed submission, if any.
          format: date-time
          type: string
      type: object
    forms.FormFields:
      properties:
        allowMultipleSubmissions:
          description: Whether a client may submit the form more than once.
          example: false
          type: boolean
        description:
          description: Human-readable description shown to clients.
          example: Tell us about your business so we can tailor onboarding.
          type: string
        formFieldIds:
          description: IDs of the form's question templates, in display order.
          example:
            - q_abc123
            - q_def456
          items:
            type: string
          type: array
        formFields:
          description: >-
            Questions only being used in the request DTO and not while saving in
            the database

            it indicates the questions which are being created/updated by the
            POST/PUT APIs
          items:
            $ref: '#/components/schemas/forms.FormQuestionFields'
          type: array
        name:
          description: Display name of the form.
          example: Client Intake Form
          type: string
        visibility:
          allOf:
            - $ref: '#/components/schemas/forms.FormVisibilityType'
          description: >-
            Controls who can see the form: only clients it is sent to, or all
            clients.
          enum:
            - requestedClients
            - allClients
          example: requestedClients
      type: object
    users.Owner:
      properties:
        id:
          type: string
        metadata:
          $ref: '#/components/schemas/users.OwnerFields'
      type: object
    forms.FormQuestionFields:
      properties:
        description:
          description: Optional helper text shown beneath the prompt.
          example: As it appears on your incorporation documents.
          type: string
        formFieldId:
          description: >-
            InputID only used in case of updating form where form questions are
            saved already

            doesn't exist in database and only used for processing of record
          example: q_abc123
          type: string
        hasOtherOption:
          description: Whether select-type questions offer a free-text "Other" choice.
          example: false
          type: boolean
        isRequired:
          description: Whether the client must answer this question to submit the form.
          example: true
          type: boolean
        multipleChoiceOptions:
          description: Choices for singleSelect, multiSelect, and dropdown questions.
          example:
            - Option A
            - Option B
          items:
            type: string
          type: array
        title:
          description: Question prompt shown to the client.
          example: What is your company name?
          type: string
        type:
          allOf:
            - $ref: '#/components/schemas/forms.FormFieldType'
          description: >-
            Question type, which determines how the answer is collected and
            rendered.
          enum:
            - shortAnswer
            - longAnswer
            - singleSelect
            - multiSelect
            - title
            - fileUpload
            - phoneNumber
            - email
            - date
            - dropdown
          example: shortAnswer
      type: object
    forms.FormVisibilityType:
      enum:
        - requestedClients
        - allClients
      type: string
      x-enum-varnames:
        - FormVisibilityTypeOnSend
        - FormVisibilityTypeAllClients
    users.OwnerFields:
      properties:
        avatarImageUrl:
          type: string
        companyAvatarUrl:
          type: string
        companyId:
          type: string
        companyName:
          type: string
        email:
          type: string
        fallbackColor:
          type: string
        familyName:
          type: string
        givenName:
          type: string
      type: object
    forms.FormFieldType:
      enum:
        - shortAnswer
        - longAnswer
        - singleSelect
        - multiSelect
        - title
        - fileUpload
        - phoneNumber
        - email
        - date
        - dropdown
      type: string
      x-enum-varnames:
        - FormFieldTypeShortAnswer
        - FormFieldTypeLongAnswer
        - FormFieldTypeSingleSelect
        - FormFieldTypeMultiSelect
        - FormFieldTypeTitle
        - FormFieldTypeFileUpload
        - FormFieldTypePhoneNumber
        - FormFieldTypeEmail
        - FormFieldTypeDate
        - FormFieldTypeDropdown
  securitySchemes:
    APIKeyHeader:
      in: header
      name: X-API-KEY
      type: apiKey

````