Forms API
Create, retrieve, update, delete, publish, and duplicate forms.
The Forms API lets you programmatically manage your NueForm forms. You can list, create, retrieve, update, delete, publish, unpublish, and duplicate forms.
All request and response bodies use snake_case field names.
List Forms
/api/v1/formsReturns a paginated list of forms the authenticated user has access to, including personal forms and forms from teams the user belongs to.
Query Parameters
pageintegerPage number (default: 1)
per_pageintegerResults per page (default: 50)
searchstringFilter forms by title (case-insensitive partial match)
team_idstringOnly return forms belonging to this team
publishedbooleanFilter by published status (true or false)
Response
{
"forms": [
{
"id": "665a1b2c3d4e5f6a7b8c9d0e",
"title": "Customer Feedback Survey",
"description": "Quarterly satisfaction survey for Q1 2026",
"slug": "a1b2c3d4e5f6",
"published": true,
"created_at": "2026-01-15T10:30:00.000Z",
"updated_at": "2026-02-20T14:22:00.000Z",
"theme_color": "#6366f1",
"background_color": "#0a0a0a",
"response_count": 142,
"team": {
"id": "665b2c3d4e5f6a7b8c9d0e1f",
"name": "Marketing"
}
}
],
"total": 24,
"page": 1,
"per_page": 50
}
Code Examples
curl -X GET "https://api.nueform.io/api/v1/forms?page=1&per_page=10&published=true" \
-H "Authorization: Bearer YOUR_API_KEY"
Create Form
/api/v1/formsCreates a new form. You can optionally include an array of questions to create along with the form.
Request Body
titlestringForm title (cannot be blank)
descriptionstringForm description
team_idstringAssign the form to a team (requires create_forms permission)
publishedbooleanWhether the form is published (default: false)
theme_colorstringPrimary theme color (hex, default: #6366f1)
background_colorstringBackground color (hex, default: #0a0a0a)
text_colorstringQuestion text color (hex)
answer_text_colorstringAnswer input text color (hex)
placeholder_colorstringInput placeholder color (hex)
button_colorstringButton background color (hex)
button_text_colorstringButton text color (hex)
title_colorstringTitle text color (hex)
description_colorstringDescription text color (hex)
option_text_colorstringChoice option text color (hex)
indicator_bg_colorstringStep indicator background color (hex)
indicator_text_colorstringStep indicator text color (hex)
font_familystringQuestion font family
font_family_answerstringAnswer input font family
font_family_buttonstringButton font family
font_family_descriptionstringDescription font family
font_family_optionstringChoice option font family
font_family_indicatorstringStep indicator font family
question_font_sizestringQuestion font size (e.g., "24px")
custom_cssstringCustom CSS injected into the form renderer
show_progress_barbooleanShow a progress bar (default: true)
branding_logo_urlstringURL for the branding logo
branding_footer_textstringCustom footer text
hide_brandingbooleanHide NueForm branding (default: false)
top_logo_urlstringURL for a logo displayed at the top of the form
top_logo_sizestringTop logo size (e.g., "120px")
top_logo_alignmentstringTop logo alignment ("left", "center", "right")
top_logo_cssstringCustom CSS for the top logo
watermark_cssstringCustom CSS for the watermark
welcome_titlestringWelcome screen title
welcome_descriptionstringWelcome screen description
welcome_button_textstringWelcome screen button text (default: "Start")
thank_you_titlestringThank-you screen title (default: "Thank you!")
thank_you_descriptionstringThank-you screen description
modestringForm mode: "standard", "knowledge_quiz", "lead_qualification", "match_quiz" (default: "standard")
quiz_settingsobjectQuiz configuration (for quiz modes)
variablesobjectForm-level variables for logic
start_logic_jumpsarrayLogic jump rules applied at form start
webhook_urlstringURL to receive POST on submission (Pro plan required)
limit_one_responsebooleanLimit to one response per visitor (default: false)
incremental_submissionbooleanSave answers incrementally as the respondent progresses (default: false)
questionsarrayArray of question objects to create (see below)
Request Example
{
"title": "Customer Feedback Survey",
"description": "Help us improve our product",
"theme_color": "#2563eb",
"background_color": "#ffffff",
"show_progress_bar": true,
"welcome_title": "We value your feedback",
"welcome_description": "This survey takes about 3 minutes.",
"welcome_button_text": "Let's go",
"thank_you_title": "Thank you!",
"thank_you_description": "Your feedback helps us build a better product.",
"questions": [
{
"type": "short_text",
"title": "What is your name?",
"required": true
},
{
"type": "multiple_choice",
"title": "How did you hear about us?",
"required": true,
"properties": {
"choices": [
{ "label": "Search engine" },
{ "label": "Social media" },
{ "label": "Friend or colleague" },
{ "label": "Other" }
],
"allow_multiple": false
}
},
{
"type": "rating",
"title": "How would you rate your overall experience?",
"required": true,
"properties": {
"steps": 5,
"shape": "star"
}
}
]
}
Response
Returns the created form object with all questions:
{
"id": "665a1b2c3d4e5f6a7b8c9d0e",
"title": "Customer Feedback Survey",
"description": "Help us improve our product",
"slug": "a1b2c3d4e5f6",
"published": false,
"created_at": "2026-02-28T12:00:00.000Z",
"updated_at": "2026-02-28T12:00:00.000Z",
"theme_color": "#2563eb",
"background_color": "#ffffff",
"show_progress_bar": true,
"welcome_title": "We value your feedback",
"welcome_description": "This survey takes about 3 minutes.",
"welcome_button_text": "Let's go",
"thank_you_title": "Thank you!",
"thank_you_description": "Your feedback helps us build a better product.",
"questions": [
{
"id": "66a1b2c3d4e5f6a7b8c9d001",
"type": "short_text",
"title": "What is your name?",
"description": null,
"required": true,
"order": 0,
"properties": {},
"logic_jumps": [],
"validations": {}
},
{
"id": "66a1b2c3d4e5f6a7b8c9d002",
"type": "multiple_choice",
"title": "How did you hear about us?",
"description": null,
"required": true,
"order": 1,
"properties": {
"choices": [
{ "label": "Search engine" },
{ "label": "Social media" },
{ "label": "Friend or colleague" },
{ "label": "Other" }
],
"allow_multiple": false
},
"logic_jumps": [],
"validations": {}
},
{
"id": "66a1b2c3d4e5f6a7b8c9d003",
"type": "rating",
"title": "How would you rate your overall experience?",
"description": null,
"required": true,
"order": 2,
"properties": {
"steps": 5,
"shape": "star"
},
"logic_jumps": [],
"validations": {}
}
]
}
Code Examples
curl -X POST "https://api.nueform.io/api/v1/forms" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Customer Feedback Survey",
"description": "Help us improve our product",
"questions": [
{
"type": "short_text",
"title": "What is your name?",
"required": true
}
]
}'
Get Form
/api/v1/forms/:idRetrieves a single form by ID, including all questions ordered by their position.
Path Parameters
idstringThe form ID
Response
{
"id": "665a1b2c3d4e5f6a7b8c9d0e",
"title": "Customer Feedback Survey",
"description": "Help us improve our product",
"slug": "a1b2c3d4e5f6",
"published": true,
"created_at": "2026-01-15T10:30:00.000Z",
"updated_at": "2026-02-20T14:22:00.000Z",
"theme_color": "#2563eb",
"background_color": "#ffffff",
"text_color": null,
"answer_text_color": null,
"placeholder_color": null,
"button_color": null,
"button_text_color": null,
"font_family": null,
"question_font_size": null,
"custom_css": null,
"show_progress_bar": true,
"incremental_submission": false,
"limit_one_response": false,
"welcome_title": "We value your feedback",
"welcome_description": "This survey takes about 3 minutes.",
"welcome_button_text": "Let's go",
"thank_you_title": "Thank you!",
"thank_you_description": "Your feedback helps us build a better product.",
"branding_logo_url": null,
"branding_footer_text": null,
"hide_branding": false,
"mode": "standard",
"webhook_url": null,
"has_unpublished_changes": false,
"published_version_id": "66c3d4e5f6a7b8c9d0e1f2a3",
"response_count": 142,
"questions": [
{
"id": "66a1b2c3d4e5f6a7b8c9d001",
"type": "short_text",
"title": "What is your name?",
"description": null,
"required": true,
"order": 0,
"properties": {},
"logic_jumps": [],
"validations": {}
}
]
}
Code Examples
curl -X GET "https://api.nueform.io/api/v1/forms/665a1b2c3d4e5f6a7b8c9d0e" \
-H "Authorization: Bearer YOUR_API_KEY"
Update Form
/api/v1/forms/:idUpdates a form's fields and synchronizes its questions. When you include a questions array, NueForm will:
- Update existing questions (matched by
id) - Create new questions (no
idor unrecognizedid) - Delete questions that exist on the form but are not present in the array
If the form is currently published, the has_unpublished_changes flag is automatically set to true.
Path Parameters
idstringThe form ID
Request Body
Accepts all fields from Create Form except team_id. Only include fields you want to change.
Request Example
{
"title": "Updated Survey Title",
"description": "Revised description for Q2",
"theme_color": "#10b981",
"questions": [
{
"id": "66a1b2c3d4e5f6a7b8c9d001",
"type": "short_text",
"title": "What is your full name?",
"required": true
},
{
"type": "long_text",
"title": "Any additional comments?",
"required": false
}
]
}
Response
Returns the updated form object with all questions (same schema as Get Form).
Code Examples
curl -X PUT "https://api.nueform.io/api/v1/forms/665a1b2c3d4e5f6a7b8c9d0e" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Updated Survey Title",
"theme_color": "#10b981"
}'
Delete Form
/api/v1/forms/:idPermanently deletes a form and all associated data, including questions, responses, versions, and changelog entries. Associated file uploads are cleaned up asynchronously.
This action is irreversible. All responses collected for this form will be permanently deleted.
Path Parameters
idstringThe form ID
Response
{
"success": true
}
Code Examples
curl -X DELETE "https://api.nueform.io/api/v1/forms/665a1b2c3d4e5f6a7b8c9d0e" \
-H "Authorization: Bearer YOUR_API_KEY"
Publish Form
/api/v1/forms/:id/publishPublishes a form by creating a versioned snapshot of the current form and its questions. Each publish increments the version number. The form becomes publicly accessible at its shareable URL.
Path Parameters
idstringThe form ID
Response
Returns the form object with a published_version field indicating the new version number:
{
"id": "665a1b2c3d4e5f6a7b8c9d0e",
"title": "Customer Feedback Survey",
"slug": "a1b2c3d4e5f6",
"published": true,
"has_unpublished_changes": false,
"published_version_id": "66c3d4e5f6a7b8c9d0e1f2a3",
"published_version": 3,
"questions": [ ... ]
}
Code Examples
curl -X POST "https://api.nueform.io/api/v1/forms/665a1b2c3d4e5f6a7b8c9d0e/publish" \
-H "Authorization: Bearer YOUR_API_KEY"
Unpublish Form
/api/v1/forms/:id/publishUnpublishes a form, making it no longer accessible at its public URL. The published version snapshot is retained so you can re-publish later.
Path Parameters
idstringThe form ID
Response
Returns the updated form object with published set to false.
{
"id": "665a1b2c3d4e5f6a7b8c9d0e",
"title": "Customer Feedback Survey",
"published": false,
"questions": [ ... ]
}
Code Examples
curl -X DELETE "https://api.nueform.io/api/v1/forms/665a1b2c3d4e5f6a7b8c9d0e/publish" \
-H "Authorization: Bearer YOUR_API_KEY"
Duplicate Form
/api/v1/forms/:id/duplicateCreates a copy of an existing form, including all questions. Logic jump references are automatically remapped to the new question IDs. The duplicated form is always created in an unpublished state.
Path Parameters
idstringThe ID of the form to duplicate
Request Body
titlestringTitle for the new form (default: "Original Title (Copy)")
team_idstringAssign the duplicate to a different team
Request Example
{
"title": "Customer Feedback Survey v2",
"team_id": "665b2c3d4e5f6a7b8c9d0e1f"
}
Response
Returns the newly created form object (same schema as Get Form) with published set to false.
Code Examples
curl -X POST "https://api.nueform.io/api/v1/forms/665a1b2c3d4e5f6a7b8c9d0e/duplicate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "title": "Customer Feedback Survey v2" }'
Error Responses
All endpoints return standard error responses.
Error Codes
400Bad RequestValidation error or missing required field
401UnauthorizedMissing or invalid API key
403ForbiddenInsufficient permissions for team forms
404Not FoundForm not found
500Server ErrorInternal server error
Error Example
{
"error": "Title is required"
}