---
title: "Create form"
method: POST
path: "/forms"
tags: ["Objects"]
---

# Create form

`POST /forms`

Creates a new form. Optionally pass `fields` to add questions to the form's first page in one call. SINGLE_OPTION / MULTIPLE_OPTION fields must include a non-empty `values` list of allowed options.

## Request body

- FormInput
  - `title` string, required — Form title
  - `description` string, nullable — Form description shown to respondents
  - `fields` FormFieldInputBase[] — Questions to add to the form's first page. Each becomes an answerable field.
    - `label` string, required — Question label shown to respondents
    - `dataType` 'TEXT' | 'LONG_TEXT' | 'EMAIL' | 'MOBILE' | 'NUMBER' | 'DATE' | 'SINGLE_OPTION' | 'MULTIPLE_OPTION' | 'FILE_PICKER' | 'SIGNATURE' | 'CURRENCY' | 'LINK' | 'RATING' | 'OPINION_SCALE', required — Field data type. SINGLE_OPTION / MULTIPLE_OPTION require `values`.
    - `description` string, nullable — Optional help text under the question
    - `required` boolean — Whether an answer is required. Defaults to false.
    - `placeholder` string, nullable — Optional input placeholder
    - `values` string[] — Allowed options. Required (non-empty) for SINGLE_OPTION and MULTIPLE_OPTION fields.
    - `settings` object — Extra config for RATING / OPINION_SCALE fields (e.g. { max: 5 }).

## Response `200`

OK

- Form
  - `id` string, required — Form ID (frm_ prefix)
  - `title` string, required — Form title
  - `description` string, nullable, required — Form description shown to respondents
  - `entity` string, nullable, required — CRM entity this form is associated with (e.g. leads, deals), if any
  - `submissionCount` number, required — Total number of submissions received
  - `createdById` string, nullable, required — ID of the user who created the form (usr_ prefix)
  - `createdByName` string, nullable, required — Name of the user who created the form
  - `createdAt` string, date-time, required — When the form was created
  - `updatedAt` string, date-time, nullable, required — When the form was last updated

## Other responses

- `400` — Validation error or bad request
- `401` — Missing or invalid API key
- `403` — Insufficient permission
- `404` — Resource not found
- `429` — Rate limit exceeded

---

[API](https://skmtc.net/heffl/apis/heffl-api-v2-beta.md) · [All operations](https://skmtc.net/heffl/apis/heffl-api-v2-beta/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/heffl/heffl-api-v2-beta/versions/27006cfef4d8/schema)
