# Form fields

Every form returned by the API includes a `questions` array. Each item is a question object with a `questionType` that determines which type-specific settings object is present.

Use this section to understand the structure of each field type. Examples are taken from real API responses.

## Common properties

All question objects share a set of top-level fields, regardless of type.

| Field | Type | Description |
|  --- | --- | --- |
| `_id` | string | Unique question identifier (use this when matching submission answers) |
| `questionType` | string | Field type (for example, `email`, `choice`, `text`) |
| `question` | string | Question title shown to respondents |
| `displayOrder` | number | Zero-based position in the form |
| `isRequired` | boolean | Whether the field must be answered before submission |
| `isDeleted` | boolean | Soft-deleted questions remain in the array but are hidden |
| `isActive` | boolean | Whether the question is currently visible on the form |
| `placeholder` | string | Placeholder text (supported on some types) |
| `description` | string | Helper text shown below the question title |
| `media` | object | Optional image or video attached to the question |
| `productbasket` | object | Payment-related settings when the form accepts payments |


Type-specific settings live in a nested object named after the field type (for example, `email`, `choice`, `text`).

```json
{
  "_id": "6a0ef5da3affac35058b05a6",
  "questionType": "email",
  "question": "Enter your email address",
  "placeholder": "Enter Email",
  "displayOrder": 1,
  "isRequired": false,
  "isDeleted": false,
  "isActive": true,
  "description": "Short text Helper text",
  "email": {
    "labels": { "confirmation": "Confirm email" },
    "isShowConfirmation": true,
    "isLimitedDomain": true,
    "limitedDomain": "forms.app"
  },
  "productbasket": {
    "tax": { "type": "includes" }
  }
}
```

## Field types

The `questionType` value tells you which nested object to read:

| `questionType` | Nested object | Guide |
|  --- | --- | --- |
| `fullname` | `fullname` | [Full name](/guides/form-schema/form-fields/fullname) |
| `email` | `email` | [Email](/guides/form-schema/form-fields/email) |
| `phone` | `phone` | [Phone](/guides/form-schema/form-fields/phone) |
| `address` | `address` | [Address](/guides/form-schema/form-fields/address) |
| `text` | `text` | [Text](/guides/form-schema/form-fields/text) (short, long, or masked) |
| `number` | `number` | [Number](/guides/form-schema/form-fields/number) |
| `date` | `date` | [Date & time](/guides/form-schema/form-fields/date-time) |
| `time` | - | [Date & time](/guides/form-schema/form-fields/date-time) |
| `choice` | `choice` | Selection fields (see sub-pages below) |
| `selectionmatrix` | `selectionmatrix` | [Selection matrix](/guides/form-schema/form-fields/selection-matrix) |
| `imageupload` | `imageUpload` | [Image upload](/guides/form-schema/form-fields/image-upload) |
| `fileupload` | `fileUpload` | [File upload](/guides/form-schema/form-fields/file-upload) |
| `drawing` | `drawing` | [Drawing & signature](/guides/form-schema/form-fields/drawing-signature) |
| `termsandconditions` | `termsandconditions` | [Terms & conditions](/guides/form-schema/form-fields/terms-and-conditions) |
| `imagecontent` | `media` | [Image content](/guides/form-schema/form-fields/image-content) |
| `seperator` | - | [Separator](/guides/form-schema/form-fields/separator) |
| `wysiwyg` | `wysiwyg` | [Explanation](/guides/form-schema/form-fields/explanation) |
| `timer` | - | [Timer](/guides/form-schema/form-fields/timer) |


For `choice` fields, the actual input style is determined by `choice.subType`: `singlechoice`, `multiplechoice`, `yesno`, `dropdown`, `picturechoice`, `opinionscale`, `rating`, or `ranking`.

## What's next?

- [Settings](/guides/form-schema/settings): Form behaviour, thank-you pages, and visibility
- [Customization](/guides/form-schema/customization): Design, logo, and submit button
- [Fetching forms](/guides/tutorials/fetching-forms): Retrieve a form via the API