Forms
Create, update, publish and organise forms.
List forms
GET /api/v1/forms
Returns the forms in the active workspace that the caller can access, most recently updated first. Trashed forms are excluded unless status=trashed is requested. Service accounts see every form in the instance.
Service account scope: forms:read
query parameters
limitinteger default 25- Maximum number of items to return.
offsetinteger default 0- Number of items to skip.
statusstring- Only return forms with this status. One of
active,archived,disabled,trashed qstring- Only return forms whose title contains this text.
Example request
curl "https://acme.formcel.com/api/v1/forms" \
-H "Authorization: Bearer $FORMCEL_API_KEY" Responses
200A page of forms.401The API key is missing or invalid.
Response body FormList
dataarray of FormSummary requiredtotalinteger requiredlimitinteger requiredoffsetinteger required
FormSummary
idstring requiredtitlestring requiredstatusstring required- active, archived, disabled or trashed. New values may be added.
current_versioninteger required- Latest published version; 0 if never published.
created_atstring (date-time) requiredupdated_atstring (date-time) required
Create a form
POST /api/v1/forms
Creates a blank draft form in the active workspace. The caller becomes its owner. Requires edit access to the workspace.
Service account scope: forms:write
Request body
titlestring- Defaults to "Untitled Form" when empty.
folder_idstring- Folder to create the form in.
Example request
curl -X POST "https://acme.formcel.com/api/v1/forms" \
-H "Authorization: Bearer $FORMCEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Customer feedback"}' Responses
201The created form.400The request body or parameters are invalid.401The API key is missing or invalid.403The caller lacks access to the resource, or the service account lacks the required scope.
Response body FormDetail
idstring requiredtitlestring requiredslugstring- Custom URL slug. Omitted when not set.
statusstring required- active, archived, disabled or trashed. New values may be added.
favoriteboolean requiredcurrent_versioninteger required- Latest published version; 0 if never published.
publish_modestring required- draft (changes go live on publish) or auto (changes publish automatically).
folder_idstring- Omitted when the form is unfiled.
opens_atstring (date-time)- Submissions open at this time.
closes_atstring (date-time)- Submissions close at this time.
max_submissionsinteger- Submission limit.
closed_messagestring- Shown to respondents when the form is closed.
timezonestring- IANA time zone used for opens_at and closes_at.
created_atstring (date-time) requiredupdated_atstring (date-time) requiredrolestring required- The caller's role on the form: owner, editor or viewer. Treat unknown values as no access.
Get a form
GET /api/v1/forms/{id}
Service account scope: forms:read
path parameters
idstring required- Form ID.
Example request
curl "https://acme.formcel.com/api/v1/forms/ID" \
-H "Authorization: Bearer $FORMCEL_API_KEY" Responses
200The form, including the caller's role on it.401The API key is missing or invalid.403The caller lacks access to the resource, or the service account lacks the required scope.404The resource does not exist.
Response body FormDetail
idstring requiredtitlestring requiredslugstring- Custom URL slug. Omitted when not set.
statusstring required- active, archived, disabled or trashed. New values may be added.
favoriteboolean requiredcurrent_versioninteger required- Latest published version; 0 if never published.
publish_modestring required- draft (changes go live on publish) or auto (changes publish automatically).
folder_idstring- Omitted when the form is unfiled.
opens_atstring (date-time)- Submissions open at this time.
closes_atstring (date-time)- Submissions close at this time.
max_submissionsinteger- Submission limit.
closed_messagestring- Shown to respondents when the form is closed.
timezonestring- IANA time zone used for opens_at and closes_at.
created_atstring (date-time) requiredupdated_atstring (date-time) requiredrolestring required- The caller's role on the form: owner, editor or viewer. Treat unknown values as no access.
Update a form
PATCH /api/v1/forms/{id}
Updates form settings. Only the fields present in the body change. Fields that accept null are cleared when sent as null. Requires the owner or editor role.
Service account scope: forms:write
path parameters
idstring required- Form ID.
Request body
titlestringslugstring or null- Custom URL slug; must be unique.
statusstring- One of
active,archived,disabled favoritebooleanpublish_modestring- One of
draft,auto folder_idstring or null- Send null to unfile the form.
opens_atstring or null (date-time)closes_atstring or null (date-time)max_submissionsinteger or nullclosed_messagestring or nulltimezonestring or null
Example request
curl -X PATCH "https://acme.formcel.com/api/v1/forms/ID" \
-H "Authorization: Bearer $FORMCEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Customer feedback 2026","closes_at":"2026-12-31T23:59:59Z"}' Responses
200The updated form.400The request body or parameters are invalid.401The API key is missing or invalid.403The caller lacks access to the resource, or the service account lacks the required scope.404The resource does not exist.
Response body FormDetail
idstring requiredtitlestring requiredslugstring- Custom URL slug. Omitted when not set.
statusstring required- active, archived, disabled or trashed. New values may be added.
favoriteboolean requiredcurrent_versioninteger required- Latest published version; 0 if never published.
publish_modestring required- draft (changes go live on publish) or auto (changes publish automatically).
folder_idstring- Omitted when the form is unfiled.
opens_atstring (date-time)- Submissions open at this time.
closes_atstring (date-time)- Submissions close at this time.
max_submissionsinteger- Submission limit.
closed_messagestring- Shown to respondents when the form is closed.
timezonestring- IANA time zone used for opens_at and closes_at.
created_atstring (date-time) requiredupdated_atstring (date-time) requiredrolestring required- The caller's role on the form: owner, editor or viewer. Treat unknown values as no access.
Delete a form
DELETE /api/v1/forms/{id}
Moves the form to the trash. Only the owner can delete a form.
Service account scope: forms:write
path parameters
idstring required- Form ID.
Example request
curl -X DELETE "https://acme.formcel.com/api/v1/forms/ID" \
-H "Authorization: Bearer $FORMCEL_API_KEY" Responses
204The form was moved to the trash.401The API key is missing or invalid.403The caller lacks access to the resource, or the service account lacks the required scope.404The resource does not exist.
List form fields
GET /api/v1/forms/{id}/fields
Returns the fields of the published form in a simplified shape for mapping submission data in integrations. Not paginated.
Service account scope: forms:read
path parameters
idstring required- Form ID.
Example request
curl "https://acme.formcel.com/api/v1/forms/ID/fields" \
-H "Authorization: Bearer $FORMCEL_API_KEY" Responses
200The form's fields.401The API key is missing or invalid.403The caller lacks access to the resource, or the service account lacks the required scope.404The resource does not exist.
Response body FormFields
form_idstring requiredfieldsarray of FormField required
FormField
keystring required- Key of the field's value in submission data.
labelstring requiredtypestring required- string, number, boolean or file. New values may be added.
requiredboolean required
Duplicate a form
POST /api/v1/forms/{id}/duplicate
Creates a copy of the form. Any role can duplicate; the caller owns the copy.
Service account scope: forms:write
path parameters
idstring required- Form ID.
Example request
curl -X POST "https://acme.formcel.com/api/v1/forms/ID/duplicate" \
-H "Authorization: Bearer $FORMCEL_API_KEY" Responses
201The new form.401The API key is missing or invalid.403The caller lacks access to the resource, or the service account lacks the required scope.404The resource does not exist.
Response body FormDetail
idstring requiredtitlestring requiredslugstring- Custom URL slug. Omitted when not set.
statusstring required- active, archived, disabled or trashed. New values may be added.
favoriteboolean requiredcurrent_versioninteger required- Latest published version; 0 if never published.
publish_modestring required- draft (changes go live on publish) or auto (changes publish automatically).
folder_idstring- Omitted when the form is unfiled.
opens_atstring (date-time)- Submissions open at this time.
closes_atstring (date-time)- Submissions close at this time.
max_submissionsinteger- Submission limit.
closed_messagestring- Shown to respondents when the form is closed.
timezonestring- IANA time zone used for opens_at and closes_at.
created_atstring (date-time) requiredupdated_atstring (date-time) requiredrolestring required- The caller's role on the form: owner, editor or viewer. Treat unknown values as no access.
Publish a form
POST /api/v1/forms/{id}/publish
Publishes the current draft as a new immutable version. Warnings are informational; a response with warnings is still a successful publish. Requires the owner or editor role.
Service account scope: forms:write
path parameters
idstring required- Form ID.
Example request
curl -X POST "https://acme.formcel.com/api/v1/forms/ID/publish" \
-H "Authorization: Bearer $FORMCEL_API_KEY" Responses
200The published version.400The request body or parameters are invalid.401The API key is missing or invalid.403The caller lacks access to the resource, or the service account lacks the required scope.404The resource does not exist.
Response body PublishResponse
versioninteger requiredpublished_atstring (date-time) requiredwarningsarray of string required