Learn how to read, create, update, and delete monday.com Workforms via the platform API
monday.com Workforms enables you to create and share custom forms that automatically sync with your monday boards and workflows. You can fully control the form's settings, including questions, appearance, and accessibility settings.
Queries
You can retrieve monday.com form data via the API through the form
query.
- Returns metadata for a given form
- Can only be queried at the root; cannot be nested within another query
- You must have access to the board associated with the form to run this query
query {
form(formToken: "YOUR_FORM_TOKEN") {
id
title
active
appearance {
primaryColor
showProgressBar
}
features {
responseLimit {
enabled
limit
}
}
questions {
id
title
type
required
visible
}
}
}
{
"data": {
"form": {
"id": 12345,
"title": "Customer Feedback Survey",
"active": true,
"appearance": {
"primaryColor": "#2196f3",
"showProgressBar": false
},
"features": {
"responseLimit": {
"enabled": true,
"limit": 500
}
},
"questions": [
{ "id": "q1", "title": "What is your full name?", "type": "Name", "required": true, "visible": true },
{ "id": "q2", "title": "What is your email address?", "type": "Email", "required": true, "visible": true },
{ "id": "q3", "title": "How would you rate your experience?", "type": "Rating", "required": false, "visible": true }
]
}
}
}
Arguments
You can use the following argument(s) to reduce the number of results returned in your form
query.
Argument | Description |
---|---|
formToken String! | The form's unique string token, located in the form's URL. |
How to access the form's token
- Open your form and click Share form in the top-right corner.
- This opens a pop-up with your form's shareable URL.
Sample URL: https://forms.monday.com/forms/abc123def456ghi789?r=use1
- The token is the alphanumeric string that appears right after
/forms/
and before the?
. In the sample above, the token isabc123def456ghi789
.

Fields
You can use the following field(s) to specify what information your form
query will return. Some fields will have their own subfields.
Field | Description | Supported subfields |
---|---|---|
accessibility FormAccessibility | The form's accessibility settings. | language String logoAltText String |
active Boolean! | Whether the form is visible and accepting responses. | |
appearance FormAppearance | The form's visual style settings. | background FormBackground hideBranding Boolean! layout FormLayout logo FormLogo primaryColor String showProgressBar Boolean! submitButton FormSubmitButton text FormText |
builtWithAi Boolean! | Whether the form was created with monday.com’s AI-assisted form builder. | |
description String | The optional form description, displayed below the title. | |
features FormFeatures | The form's toggles and feature settings. | afterSubmissionView FormAfterSubmissionView closeDate FormCloseDate draftSubmission FormDraftSubmission isInternal Boolean! monday FormMonday password FormPassword preSubmissionView FormPreSubmissionView reCaptchaChallenge Boolean! requireLogin FormRequireLogin responseLimit FormResponseLimit shortenedLink FormShortenedLink |
id Int! | The form's unique board view identifier. | |
isAnonymous Boolean! | Whether responses are collected anonymously. | |
ownerId Int | The user ID of the form's owner/creator. | |
questions [FormQuestion!] | An array of question objects that make up the form, in display order. | description String id String! options [FormQuestionOption!] required Boolean! settings FormQuestionSettings showIfRules JSON title String! type FormQuestionType visible Boolean! |
tags [FormTag!] | Tracking tags for categorization and analytics. | columnId String! id String! name String! value String |
title String! | Title displayed at the top of the form. | |
token String! | The form's string-based unique token. Used in API queries and mutations. | |
type String | The form's type. |
Mutations
The API allows you to create, update, and delete Workflows using the following mutations. These operations let you programmatically control a form's full lifecycle.
You must have edit access to the form to perform these mutations.
Create form
The create_form
mutation creates a new form via the API. It returns the DehydratedFormResponse
type which allows you to specify what fields to query back when you run it.
mutation {
create_form(
board_kind: public
destination_folder_id: 1234567890
destination_folder_name: "Customer Feedback 2025"
destination_name: "Customer Feedback Q4"
destination_workspace_id: 9876543210
) {
boardId
token
}
}
{
"data": {
"create_form": {
"boardId": "1234567890",
"token": "YOUR_FORM_TOKEN"
}
},
"extensions": {
"request_id": "YOUR_REQUEST_ID"
}
}
Arguments
You can use the following arguments to define the new form's characteristics.
Argument | Description | Enum values |
---|---|---|
board_kind BoardKind | The type of board. | private public share |
board_owner_ids [Float!] | The user IDs of the users who will be owners of the board that stores the form responses. | |
board_owner_team_ids [Float!] | The team IDs of the teams whose members will be owners of the board that stores the form responses. | |
board_subscriber_ids [Float!] | The user IDs of the users who will be subscribed to the board that stores the form responses. | |
board_subscriber_teams_ids [Float!] | The team IDs of the teams whose members will be subscribed to the board that stores the form responses. | |
destination_folder_id Float | The unique identifier of the folder to create the form in. | |
destination_folder_name String | The name of the folder to create the form in. | |
destination_name String | The name of the board that will be created to store the form responses. | |
destination_workspace_id Float! | The unique identifier of the workspace to create the form in. |
Create form question
The create_form_question
mutation creates a new question on a form via the API. It returns the FormQuestion
type which allows you to specify what fields to query back when you run it.
mutation {
create_form_question (
formToken: "YOUR_FORM_TOKEN"
question: {
title: "Phone"
description: "Enter your phone number."
type: Phone
required: true
settings: {
prefixAutofilled: false
prefixPredefined: {
enabled: true
prefix: "+1"
}
}
}
) {
id
}
}
{
"data": {
"create_form_question": {
"id": "YOUR_QUESTION_ID"
}
},
"extensions": {
"request_id": "YOUR_REQUEST_ID"
}
}
Arguments
You can use the following arguments to define the form's new question.
Argument | Description | Supported Fields |
---|---|---|
formToken String! | The form's unique identifier. You can retrieve it from the form's URL. | |
question CreationQuestionInput! | An object containing the question's properties. | description String options [QuestionOptionInput!] required Boolean settings FormQuestionSettingsInput title String! type FormQuestionType! visible Boolean |
Create form tag
The create_form_tag
mutation creates a new tag for a form via the API. It returns the FormTag
type which allows you to specify what fields to query back when you run it.
mutation {
create_form_tag (
formToken: "YOUR_FORM_TOKEN"
tag: {
name: "New Tag"
value: "This is the new tag."
}
) {
id
}
}
{
"data": {
"create_form_tag": {
"id": "YOUR_TAG_ID"
}
},
"extensions": {
"request_id": "YOUR_REQUEST_ID"
}
}
Arguments
You can use the following arguments to define the new tag's characteristics.
Argument | Description | Supported Fields |
---|---|---|
formToken String! | The form's unique identifier. You can retrieve it from the form's URL. | |
tag CreateFormTagInput! | The tag's name and value. The name must be unique within the form. | name String! value String |
Activate form
The activate_form
mutation activates an existing form via the API, making it visible to users and allowing new submissions. It returns a Boolean indicating whether the activation was successful.
mutation {
activate_form (
formToken: "YOUR_FORM_TOKEN"
)
}
{
"data": {
"activate_form": true
},
"extensions": {
"request_id": "YOUR_REQUEST_ID"
}
}
Arguments
You can use the following argument to specify which form to activate.
Argument | Description |
---|---|
formToken String! | The form's unique identifier. You can retrieve it from the form's URL. |
Update form
The update_form
mutation updates a form's title, description, or question order via the API. It returns the ResponseForm
type which lets you specify what fields to query back.
mutation {
update_form(
formToken: "YOUR_FORM_TOKEN"
input: {
description: "Your updated description."
title: "Your updated title."
questions: [
{ id: "Q1" }
{ id: "Q3" }
{ id: "Q2" }
]
}
) {
title
description
questions {
type
}
}
}
{
"data": {
"update_form": {
"title": "Your updated title.",
"description": "Your updated description.",
"questions": [
{
"type": "Name"
},
{
"type": "ShortText"
},
{
"type": "LongText"
}
]
}
},
"extensions": {
"request_id": "YOUR_REQUEST_ID"
}
}
Arguments
You can use the following arguments to define the updated form's characteristics.
Argument | Description | Supported Fields |
---|---|---|
formToken String! | The form's unique identifier. You can retrieve it from the form's URL. | |
input UpdateFormInput! | An object containing the form's properties to update. | description String questions [QuestionOrderInput!] title String |
Update form question
The update_form_question
mutation updates an existing question's properties via the API. It returns the FormQuestion
type which lets you specify what fields to query back.
mutation {
update_form_question (
formToken: "YOUR_FORM_TOKEN"
questionId: "Q1"
question: {
type: Name
description: "Enter your name."
settings: {
prefill: {
enabled: false
}
}
}
) {
description
settings {
prefill {
enabled
}
}
}
}
{
"data": {
"update_form_question": {
"description": "Enter your name.",
"settings": {
"prefill": {
"enabled": false
}
}
}
},
"extensions": {
"request_id": "YOUR_REQUEST_ID"
}
}
Arguments
You can use the following arguments to define the updated question.
Argument | Description | Supported Fields |
---|---|---|
formToken String! | The form's unique identifier. You can retrieve it from the form's URL. | |
question UpdateQuestionInput! | An object containing the question's updated properties. | description String required Boolean settings FormQuestionSettingsInput title String type FormQuestionType! visible Boolean |
questionId String! | The question's unique identifier. |
Update form settings
The update_form_settings
mutation updates a form's features, appearance, and accessibility options via the API. It returns the ResponseForm
type which lets you specify what fields to query back.
mutation {
update_form_settings (
formToken: "YOUR_FORM_TOKEN"
settings: {
appearance: {
isAnonymous: true
}
accessibility: {
language: "en"
}
}
) {
isAnonymous
accessibility {
language
}
}
}
{
"data": {
"update_form_settings": {
"isAnonymous": true,
"accessibility": {
"language": "en"
}
}
},
"extensions": {
"request_id": "YOUR_REQUEST_ID"
}
}
Arguments
You can use the following arguments to define the form's updated settings.
Argument | Description | Supported Fields |
---|---|---|
formToken String! | The form's unique identifier. You can retrieve it from the form's URL. | |
settings UpdateFormSettingsInput! | An object containing all of the form's configuration inputs. | accessibility FormAccessibilityInput appearance FormAppearanceInput features FormFeaturesInput |
Update form tag
The update_form_tag
mutation updates an existing form tag via the API. It returns a Boolean indicating whether the update was successful.
mutation {
update_form_tag (
formToken: "YOUR_FORM_TOKEN"
tagId: "YOUR_TAG_ID"
tag: {
value: "UPDATED_TAG"
}
) {
}
}
{
"data": {
"update_form_tag": true
},
"extensions": {
"request_id": "YOUR_REQUEST_ID"
}
}
Arguments
You can use the following arguments to define the updated tag.
Argument | Description | Supported Fields |
---|---|---|
formToken String! | The form's unique identifier. You can retrieve it from the form's URL. | |
tag UpdateFormTagInput! | The tag's updated data. | value String |
tagId String! | The tag's unique identifier. |
Set form password
The set_form_password
mutation enables password protection and allows you to set a password via the API. It returns the ResponseForm
type which lets you specify what fields to query back.
mutation {
set_form_password (
formToken: "YOUR_FORM_TOKEN"
input: {
password: "NEW_PASSWORD"
}
) {
id
title
}
}
{
"data": {
"set_form_password": {
"id": 123456789,
"title": "Contact Information"
}
},
"extensions": {
"request_id": "YOUR_REQUEST_ID"
}
}
Arguments
You can use the following arguments to define the form's password.
Argument | Description | Supported Fields |
---|---|---|
formToken String! | The form's unique identifier. You can retrieve it from the form's URL. | |
input SetFormPasswordInput! | The form's password. Must be at least one character long. | password String! |
Shorten form URL
The shorten_form_url
mutation shortens a form's URL and stores it in the form’s settings via the API. It returns the FormShortenedLink
type which contains the shortened link object.
mutation {
shorten_form_url (
formToken: "YOUR_FORM_TOKEN"
) {
enabled
url
}
}
{
"data": {
"shorten_form_url": {
"enabled": true,
"url": "https://wkf.ms/0oOoOoO"
}
},
"extensions": {
"request_id": "YOUR_REQUEST_ID"
}
}
Arguments
You can use the following argument to specify which form's URL to shorten.
Argument | Description |
---|---|
formToken String! | The form's unique identifier. You can retrieve it from the form's URL. |
Deactivate form
The deactivate_form
mutation deactivates an existing form via the API, hiding it from users and blocking new submissions. It returns a Boolean indicating whether the deactivation was successful.
mutation {
deactivate_form (
formToken: "YOUR_FORM_TOKEN"
)
}
{
"data": {
"deactivate_form": true
},
"extensions": {
"request_id": "YOUR_REQUEST_ID"
}
}
Arguments
You can use the following argument to specify which form to deactivate.
Argument | Description |
---|---|
formToken String! | The form's unique identifier. You can retrieve it from the form's URL. |
Delete question
The delete_question
mutation permanently deletes an existing question from a form via the API. It returns a Boolean indicating whether the deletion was successful.
Note: A question cannot be retrieved once it is deleted.
mutation {
delete_question (
formToken: "YOUR_FORM_TOKEN"
questionId: "YOUR_QUESTION_ID"
)
}
{
"data": {
"delete_question": true
},
"extensions": {
"request_id": "YOUR_REQUEST_ID"
}
}
Arguments
You can use the following arguments to specify which question to delete.
Argument | Description |
---|---|
formToken String! | The form's unique identifier. You can retrieve it from the form's URL. |
questionId String! | The question's unique identifier. |
Delete form tag
The delete_form_tag
mutation permanently deletes a tag from a form via the API. It returns a Boolean indicating whether the deletion was successful.
mutation {
delete_form_tag (
formToken: "YOUR_FORM_TOKEN"
tagId: "YOUR_TAG_ID"
options: {
deleteAssociatedColumn: true
}
)
}
{
"data": {
"delete_form_tag": true
},
"extensions": {
"request_id": "YOUR_REQUEST_ID"
}
}
Arguments
You can use the following arguments to specify which tag to delete.
Argument | Description | Supported Fields |
---|---|---|
formToken String! | The form's unique identifier. You can retrieve it from the form's URL. | |
options DeleteFormTagInput | The options for deleting the tag. | deleteAssociatedColumn Boolean |
tagId String! | The tag's unique identifier. |