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 use the form query to retrieve form data via the API.
- You must have access to the board associated with the form to run this query
- Returns metadata for a given form
- Can only be queried at the root; cannot be nested within another 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 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 fields to specify what information your form query will return. Some fields support their own subfields.
Field | Description | Supported Subfields |
|---|---|---|
accessibility FormAccessibility | The form's accessibility settings. | language |
active | Whether the form is visible and accepting responses. | |
appearance FormAppearance | The form's visual style settings. | background |
builtWithAi | Whether the form was created with monday.com’s AI-assisted form builder. | |
description | The optional form description, displayed below the title. | |
features FormFeatures | The form's toggles and feature settings. | afterSubmissionView |
id | The form's unique board view identifier. | |
isAnonymous | Whether responses are collected anonymously. | |
ownerId | 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 |
tags [FormTag!] | Tracking tags for categorization and analytics. | columnId |
title | Title displayed at the top of the form. | |
token | The form's string-based unique token. Used in API queries and mutations. | |
type | The form's type. |
Mutations
The API allows you to create, update, and delete forms 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 which fields to return in the mutation response.
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 | The type of board. |
|
board_owner_ids | The user IDs of the users who will be owners of the board that stores the form responses. | |
board_owner_team_ids | The team IDs of the teams whose members will be owners of the board that stores the form responses. | |
board_subscriber_ids | The user IDs of the users who will be subscribed to the board that stores the form responses. | |
board_subscriber_teams_ids | The team IDs of the teams whose members will be subscribed to the board that stores the form responses. | |
destination_folder_id | The unique identifier of the folder to create the form in. | |
destination_folder_name | The name of the folder to create the form in. | |
destination_name | The name of the board that will be created to store the form responses. | |
destination_workspace_id | 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 which fields to return in the mutation response.
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 | The form's unique identifier. You can retrieve it from the form's URL. | |
question CreationQuestionInput! | An object containing the question's properties. | description |
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 which fields to return in the mutation response.
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 | The form's unique identifier. You can retrieve it from the form's URL. | |
tag | The tag's name and value. The name must be unique within the form. | name |
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 allows you to specify which fields to return in the mutation response.
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 | 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 |
Update form question
The update_form_question mutation updates an existing question's properties via the API. It returns the FormQuestion type which allows you to specify which fields to return in the mutation response.
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 | 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 |
questionId | 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 allows you to specify which fields to return in the mutation response.
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 | 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 |
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 allows you to specify which fields to return in the mutation response.
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: Deleting a question is permanent. It can't 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. |
