Forms are the core resource in FormFlows.ai. Each form has a set of fields, a status, and accumulates submissions over time. The API lets you manage forms programmatically — useful for templating, bulk operations, or embedding form creation into your own product.
GET /forms
Returns a paginated list of forms in your account.
Query parameters
Number of forms to return. Maximum 100.
Pagination cursor from the previous response’s next_cursor. Omit to start from the beginning.
Filter by form status. One of draft, published, or archived.
Response
Array of form objects. Show Form object properties
Unique form identifier, prefixed with frm_.
Display name of the form.
Optional description of the form’s purpose.
Current status: draft, published, or archived.
Total number of submissions received.
ISO 8601 timestamp of when the form was created.
ISO 8601 timestamp of the most recent update.
Pass this value as the cursor parameter to fetch the next page. null if there are no more results.
true if additional pages exist.
curl --request GET \
--url "https://api.formflows.ai/v1/forms?limit=10&status=published" \
--header "Authorization: Bearer sk_live_your_api_key"
Example response:
{
"data" : [
{
"id" : "frm_8kQmP2xNvL" ,
"name" : "Customer Onboarding Survey" ,
"description" : "Collects new customer information after sign-up." ,
"status" : "published" ,
"submission_count" : 342 ,
"created_at" : "2024-11-03T09:15:00Z" ,
"updated_at" : "2024-12-01T14:22:00Z"
},
{
"id" : "frm_3tRjW9hYsC" ,
"name" : "Product Feedback Form" ,
"description" : null ,
"status" : "published" ,
"submission_count" : 87 ,
"created_at" : "2024-11-20T16:40:00Z" ,
"updated_at" : "2024-11-20T16:40:00Z"
}
],
"next_cursor" : "cur_eyJpZCI6ImZybV8zIn0" ,
"has_more" : true
}
POST /forms
Creates a new form. Forms start in draft status by default.
Body parameters
Display name for the form. Maximum 200 characters.
Optional description of the form’s purpose.
Array of field definitions to include in the form. Show Field object properties
The field label shown to respondents.
Field type. One of text, email, number, dropdown, checkbox, radio, textarea, file, date.
Whether the field must be filled before the form can be submitted.
For dropdown, checkbox, and radio fields — the list of selectable options.
Placeholder text shown inside the input.
Response
Returns the created form object, including the server-assigned id.
curl --request POST \
--url "https://api.formflows.ai/v1/forms" \
--header "Authorization: Bearer sk_live_your_api_key" \
--header "Content-Type: application/json" \
--data '{
"name": "Event Registration",
"description": "Registration form for the 2025 annual conference.",
"fields": [
{
"label": "Full name",
"type": "text",
"required": true,
"placeholder": "Jane Smith"
},
{
"label": "Email address",
"type": "email",
"required": true
},
{
"label": "Which sessions will you attend?",
"type": "checkbox",
"options": ["Keynote", "Workshop A", "Workshop B", "Networking Lunch"]
}
]
}'
Example response:
{
"id" : "frm_5pLnK7mQxT" ,
"name" : "Event Registration" ,
"description" : "Registration form for the 2025 annual conference." ,
"status" : "draft" ,
"fields" : [
{
"id" : "fld_a1B2c3D4" ,
"label" : "Full name" ,
"type" : "text" ,
"required" : true ,
"placeholder" : "Jane Smith"
},
{
"id" : "fld_e5F6g7H8" ,
"label" : "Email address" ,
"type" : "email" ,
"required" : true ,
"placeholder" : null
},
{
"id" : "fld_i9J0k1L2" ,
"label" : "Which sessions will you attend?" ,
"type" : "checkbox" ,
"required" : false ,
"options" : [ "Keynote" , "Workshop A" , "Workshop B" , "Networking Lunch" ]
}
],
"submission_count" : 0 ,
"created_at" : "2025-01-15T11:00:00Z" ,
"updated_at" : "2025-01-15T11:00:00Z"
}
GET /forms/{id}
Returns a single form including all its fields.
Path parameters
The form ID, e.g. frm_5pLnK7mQxT.
Response
Returns the full form object (same structure as the create response above).
curl --request GET \
--url "https://api.formflows.ai/v1/forms/frm_5pLnK7mQxT" \
--header "Authorization: Bearer sk_live_your_api_key"
PATCH /forms/{id}
Updates one or more properties of an existing form. Only include the fields you want to change — omitted fields are left unchanged.
Path parameters
Body parameters
New display name for the form.
New status. One of draft, published, or archived.
Replaces the entire fields array. Include existing field IDs to preserve them; omit an ID to create a new field. Fields not included in the array are removed.
Response
Returns the updated form object.
curl --request PATCH \
--url "https://api.formflows.ai/v1/forms/frm_5pLnK7mQxT" \
--header "Authorization: Bearer sk_live_your_api_key" \
--header "Content-Type: application/json" \
--data '{"status": "published"}'
DELETE /forms/{id}
Deleting a form is permanent and cannot be undone. All submissions associated with the form are also permanently deleted. Export your data before calling this endpoint.
Path parameters
Response
Returns a 204 No Content response on success, with no body.
curl --request DELETE \
--url "https://api.formflows.ai/v1/forms/frm_5pLnK7mQxT" \
--header "Authorization: Bearer sk_live_your_api_key"