> ## 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 a question

> Add a question to a form. The change is saved as a draft and reaches respondents only after the form is published. Use the list question kinds endpoint to see the kinds and the attributes each kind accepts.

> [!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
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:
    post:
      tags:
        - Questions
      summary: Add a question
      description: >-
        Add a question to a form. The change is saved as a draft and reaches
        respondents only after the form is published. Use the list question
        kinds endpoint to see the kinds and the attributes each kind accepts.
      parameters:
        - $ref: '#/components/parameters/api_key_header'
        - $ref: '#/components/parameters/form_id_param'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - question
              properties:
                question:
                  type: object
                  required:
                    - kind
                  properties:
                    kind:
                      type: string
                      description: Kind of the question to add.
                      example: dropdown
                    position:
                      type: integer
                      description: >-
                        Zero-based position for the new question. When omitted,
                        the question is added just before the submit button.
                      example: 2
                    attributes:
                      $ref: '#/components/schemas/question_attributes_input'
      responses:
        '201':
          description: Created - Question added successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/question_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 - The kind cannot be added, the form already
            has a question of a kind that is allowed only once, or an attribute
            name is not valid for the kind
          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
    question_response:
      type: object
      properties:
        question:
          $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.