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

# Add questions in bulk

> Add several questions to a form in one request. Either all questions are added or none are. If any question is rejected, nothing is added.

> [!NOTE]
>
> Replace `{your-subdomain}` with your workspace’s subdomain. \
> Learn how to find your subdomain in [Workspace subdomain](https://apidocs.neetoform.com/api/workspace-subdomain.md).


## OpenAPI

````yaml bundled/questions.yaml POST /forms/{form_id}/questions/bulk_create
openapi: 3.0.3
info:
  title: NeetoForm APIs
  version: 2.0.0
servers:
  - description: NeetoForm APIs
    url: https://{your-subdomain}.neetoform.com/api/external/v2
    variables:
      your-subdomain:
        default: spinkart
        description: >-
          Replace **spinkart** with your [workspace's
          subdomain](/api/workspace-subdomain).
security: []
paths:
  /forms/{form_id}/questions/bulk_create:
    post:
      tags:
        - Questions
      summary: Add questions in bulk
      description: >-
        Add several questions to a form in one request. Either all questions are
        added or none are. If any question is rejected, nothing is added.
      parameters:
        - $ref: '#/components/parameters/api_key_header'
        - $ref: '#/components/parameters/form_id_param'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - questions
              properties:
                questions:
                  type: array
                  description: Questions to add, in the order to create them.
                  items:
                    type: object
                    required:
                      - kind
                    properties:
                      kind:
                        type: string
                        description: Kind of the question to add.
                        example: yes_no
                      position:
                        type: integer
                        description: >-
                          Zero-based position for the new question. When
                          omitted, the question is added just before the submit
                          button.
                      attributes:
                        $ref: '#/components/schemas/question_attributes_input'
            example:
              questions:
                - kind: phone
                - kind: yes_no
                  attributes:
                    label: Subscribe?
      responses:
        '201':
          description: Created - Questions added successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bulk_questions_response'
        '404':
          description: Not Found - The form does not exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_response'
              example:
                error: Form does not exist.
        '422':
          description: Unprocessable Entity - A question was rejected, so none were added
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_response'
              example:
                error: >-
                  'stripe_payment' questions cannot be added. Addable kinds:
                  short_text, long_text, dropdown
components:
  parameters:
    api_key_header:
      in: header
      name: X-Api-Key
      description: >-
        Use the X-Api-Key header to provide your workspace API key. Refer to
        [Authentication](/api/authentication) for more information.
      required: true
      schema:
        type: string
        default: your-api-key
    form_id_param:
      in: path
      name: form_id
      description: >-
        Unique ID of the form. Refer to [Getting the Form
        ID](/api/getting-form-id) for detailed instructions.
      required: true
      schema:
        type: string
  schemas:
    question_attributes_input:
      type: object
      description: >
        Values for the question. Use the names listed for the kind in the list
        question kinds endpoint. Any other name is rejected.


        Object values such as `properties` are merged key by key into the
        current value. Lists such as `options`, `fields`, `row_entities`,
        `column_entities` and `products` replace the whole list in the order
        given. Pass `id` to keep an existing item, leave `id` out to add a new
        item, and leave an item out to remove it. Image uploads are not
        supported.
      additionalProperties: true
      example:
        label: Work email
        is_required: true
    bulk_questions_response:
      type: object
      properties:
        questions:
          type: array
          items:
            $ref: '#/components/schemas/question'
    error_response:
      type: object
      properties:
        error:
          type: string
    question:
      type: object
      properties:
        id:
          type: string
          example: 6b1f2c1e-2d7a-4a55-9c4e-0f1f8a7b2c11
        kind:
          type: string
          description: >-
            Kind of the question, for example `dropdown`, `short_text` or
            `submit`.
          example: dropdown
        position:
          type: integer
          description: Zero-based position among all elements of the form.
          example: 2
        state:
          type: string
          description: >-
            `draft` until the form is published with this question, then
            `published`.
          example: draft
        has_draft_changes:
          type: boolean
          description: Whether the question has changes that are not published yet.
        attributes:
          $ref: '#/components/schemas/question_attributes'
    question_attributes:
      type: object
      description: >-
        Current values of the question, with unpublished draft changes applied.
        The keys depend on the kind. Image data is never returned.
      additionalProperties: true
      example:
        label: Plan
        description: ''
        is_required: true
        is_hidden: false
        is_multi_select: false
        placeholder: ''
        properties:
          is_randomized: false
        options:
          - id: draft-0c6e1b2a-4f1d-4c53-9d1e-7a1b2c3d4e5f
            alt_id: alt-9a41d2c8-3b7e-4a62-8f10-5d6e7f8a9b0c
            label: Basic
            position: 0
          - id: draft-5d2b8e44-1c9a-47f3-b6d2-0e1f2a3b4c5d
            alt_id: alt-17fe3a90-6d2b-4c81-a5e4-9b8c7d6e5f4a
            label: Pro
            position: 1

````

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