Forms
Design forms once, embed them anywhere. Submissions land in your dashboard with file uploads, search, and CSV export.
Overview
The Forms service gives you:
- A full-screen form builder: drag questions in from the library, arrange them on pages, and edit each one in the panel on the right. Undo and redo, and every change saves itself.
- Around thirty question types: short and long answers, email, phone, number, date and time, single and multiple choice, dropdowns, yes or no, star ratings, 0 to 10 scales, sliders, grids, file uploads, signatures, address, country, consent boxes, hidden values and calculations. Plus headings, text, images and sections to lay the form out.
- Rules that show, hide or require questions, fill hidden values, skip pages or end the form early, based on earlier answers.
- Multi-page forms with a progress bar or step counter.
- Drafts and published versions: you edit a draft, and visitors keep seeing the published form until you press Publish changes.
- A share link anyone can open, with a QR code, optional access code and spam controls. No website needed.
- Results: every response with a status, an assignee and notes, a per-question summary with charts, and analytics showing views, completion rate and where people stop.
- Hand-offs to the rest of SoftSolz: create a lead, add a deal to a pipeline, add to your newsletter, or send people on to a payment or a booking.
- The website widget, the server API and webhooks you already use keep working as before.
Build a form
- Forms → New form. Start blank, or pick Use a template for a ready-made contact form, feedback survey, event sign-up, job application and more.
- Add questions. Click a question type in the library on the left, or drag it onto the page. Click any question to edit its label, help text, options and checks in the panel on the right.
- Add pages for long forms. Drag questions between pages, and give each page a title.
- Watch the save status in the top bar. All changes saved means your draft is stored. If you lose your connection it says Offline, will retry and saves when you are back.
- Preview shows the form as a visitor sees it, on desktop, tablet or phone, with your rules working.
- Save & publish makes it live the first time. After that the button reads Publish changes with the number of changes waiting.
Rules and pages
Open the Logic tab and click Add rule. Each rule reads If (all or any of these answers match) then do this. For example:
- If Customer type is Business, show the Company details section.
- If Do you need a quote? is No, end the form.
- If Budget is greater than 5000, skip to the Large projects page.
Hidden questions are never required and their answers are not saved. Skips only move forward, so nobody gets stuck in a loop.
Build forms by asking
You can also describe the form you want and let the AI build it. The same request works in two places:
- AI Assistant - type "Create a form called Contact with name, email and message fields". The form is created as a draft and a card appears in the chat with Open and Undo. You stay in the chat. See AI Assistant.
- AI Assistant panel - ask from the panel on any page. The assistant panel opens the form builder and you watch each field appear. See AI Assistant panel.
Then keep going in plain words:
- "Make email required" or "change the message label to Your question".
- "Add a phone field after email" or "move message to the top".
- "Remove the phone field" or "rename the form to Get in touch".
Things to know:
- New forms are always drafts. The AI never publishes a form for you: it offers Publish as a next step, and a person confirms it.
- Changes the AI makes go into the draft, so visitors keep seeing the published form. Publishing them is your decision, through AI Review or the Publish changes button.
- If the builder has changes you have not saved, the assistant panel asks you to save or discard them first, so your edits are never overwritten.
- Undo on a new form removes it. Undo on an edit puts the fields back. Undo works for 24 hours and stops if someone has changed the form since.
- You need the same permissions as building by hand: creating a form needs create access to Forms, and changing one needs edit access.
Publish
Only published forms accept responses. While you edit, visitors keep seeing the last published version; press Publish changes when you are ready. You can unpublish or archive a form from the ⋮ menu. Publishing needs the Publish, unpublish and share forms permission.
<script> tag on customer sites references it. Renaming breaks live embeds. The share link does not use the slug, so it keeps working.Share a link
Open the Share tab and switch on Share link. Copy the link, or download the QR code for posters and printouts. Anyone with the link can fill the form in; they do not need an account and you do not need a website.
- Access code - only people you give the code to can open the form.
- New link - if a link gets out, make a new one. The old link stops working straight away.
- Pre-fill answers - add
?email=jane@example.comto the link to fill in a question. Set the name a question listens to under Advanced in its settings. Hidden values work the same way, for example to record which campaign someone came from.
On the Settings tab you can protect the form from spam and repeat answers:
| Setting | What it does |
|---|---|
| One response per browser | Stops the same browser answering twice. Someone can get round it by clearing their browser, so treat it as a polite limit. |
| Responses per network per day | Limits answers from one internet connection. Offices, schools and mobile networks often share one connection, so do not set this too low. |
| Allowed networks | Only people on the networks you list can open and fill the form, for example your office. |
| Close date and response limit | Closes the form on a date or after a number of responses, and shows your closed message. |
| Daily limit | Stops accepting responses after a number per day. |
| Minimum time to fill | Quietly ignores answers sent faster than a person could type them. A hidden trap field also catches simple bots. |
Embed on your site
Open the Share tab and click Get the embed code, or go to Forms → Developer and pick the form. Colours, fonts and layout are set on the builder's Design tab and apply everywhere the form appears.
- Create a widget key. Under Public widget keys, enter the website address you'll embed on as the Allowed origin (e.g.
https://example.com, no path at the end) and click Generate key. Copy the key from the Save this key now window - it is only shown once. - Copy the snippet and drop it into any HTML page.
<script src="https://app.softsolz.uk/softsolz.js"
data-public-key="pk_live_…"
data-service-id="forms"
data-form-slug="contact-us"></script>
The script shows your form in a frame that resizes itself. Multi-page forms, rules and payment or booking steps all work inside the embed.
Connect to other services
The Connect tab sends each response on to the SoftSolz service that handles it, so you never copy data by hand:
- Create a lead in My Leads, choosing which question fills the name, email, phone and company.
- Add to a pipeline as a new deal in the stage you pick.
- Add to the newsletter - only when the person ticks a marketing consent question.
- Continue to payment - after submitting, people pay a fixed amount or the total from a calculation question. The response shows as paid once the payment goes through.
- Continue to booking - after submitting, people pick a time on one of your booking links, with their name and email already filled in.
- Automate with a workflow using the Form submitted trigger, which can be limited to one form.
If a hand-off fails, the response shows it with a Retry button.
View responses
Open a form's results (Forms → Submissions, then the form, or Results on the Forms list). Four tabs:
- Submissions - every response, filtered by New, In progress, Completed or Archived, by date, source, assignee or a particular answer. Select rows to change their status, archive them or delete them. Export CSV downloads exactly what you filtered, with your question labels as column headings.
- Summary - a chart for each question: how many chose each option, average ratings, Net Promoter Score and the latest written answers.
- Analytics - views, starts, completion rate, average time to finish, devices, and for multi-page forms how many people continue past each page.
- Files - every file and signature people uploaded.
Open a response to see all answers, assign it to a teammate, add notes for your team, and see where the person came from. Answers to questions you later removed are kept under Other answers.
Under Settings → Privacy you can choose to delete responses automatically after a number of days.
Files library
Every file uploaded through a form is kept with that form. Open the form's results and choose the Files tab. Search by file name or filter by file type. Click a file to preview it, or use its download icon.
Dashboard
When Forms is installed, the main Dashboard adds tiles for total forms, submissions and unread count, plus a 7-day submissions trend chart and a "Recent submissions" card.
Use the API
Two integration paths:
| Path | Auth | When to use |
|---|---|---|
| Widget - the embedded form (the snippet above) | pk_… public key (browser) |
Visitors submit from your site via the embedded widget. |
Server - POST https://app.softsolz.uk/api/v1/services/forms/forms/<slug>/submit |
sk_… secret key (server) with the Submit form responses scope |
Your backend creates submissions (CRM sync, automation, etc.). |
Send the answers as JSON, keyed by each field's id (shown in the field's Field id box and made from its label, so "Full name" becomes full_name), inside a data object, for example {"data": {"full_name": "Jane Doe", "email": "jane@example.com"}}. The form must be published. File fields need a multipart/form-data request with one file part per field id.
Full reference: Submit a response to a form and the Forms developer guide.
Test it step by step
Follow these steps once from start to finish to prove Forms works for your workspace.
- Get access. You need the Super Admin or Admin role, or a custom role that includes the Forms permissions (Members & access → Roles).
- Pick where to test. To try things without touching live data, open the workspace menu and choose Switch to Sandbox mode. The sandbox has its own forms, keys and submissions.
- Install Forms. Open Marketplace, find Forms and click Install. Forms now appears in the sidebar.
- Build a test form. Go to Forms → New Form, name it "Test contact", and add three fields: Short text "Full name" (required), Email "Email" (required) and Long text "Message". Click Save & publish. The Form published window appears, and the form shows as published on the Forms list. Note its slug from the Slug box (for example
test-contact). - Make a key for the Widget Tester. Click Open Developer (or go to Forms → Developer and pick the form), open Embed the widget, enter
https://developer.softsolz.ukas the Allowed origin and click Generate key. Copy the key from the Save this key now window. - Try the form in the Widget Tester. Open developer.softsolz.uk/widget-tester and choose Forms. In the Embed snippet box, replace
pk_live_REPLACE_WITH_YOUR_KEYwith your key andREPLACE_WITH_FORM_SLUGwith your form's slug, then click Load widget. Your form appears on the example page. Fill it in and submit: your success message shows. - Check it arrived. Back in SoftSolz, open Forms → Submissions. Your form's card shows 1 submission and 1 unread, and the bell shows a New form submission notification. Click the card, then the row, to see the answers.
- Put it on your own site. On the same Developer page, generate a second key with your own website address as the allowed origin (for example
https://www.example.com-wwwand nowwwcount as different addresses). Copy the snippet from the Snippet for "Test contact" card, paste it into a page on your site, publish the page and submit the form once. The new entry appears under Forms → Submissions. - Tidy up. Delete the test submissions or the test form when you are done, and revoke any key you no longer need. If you tested in the sandbox, switch back with Switch to Live mode and build the real form and key there: sandbox forms, keys and entries never carry over to live.
For developers
In the sandbox, open Forms → Developer → Use the API, click New API key and tick Submit form responses. Sandbox keys start with sk_test_. Then send a submission from your server:
curl -X POST https://app.softsolz.uk/api/v1/services/forms/forms/test-contact/submit \
-H "Authorization: Bearer sk_test_your_key" \
-H "Content-Type: application/json" \
-d '{"data":{"full_name":"Jane Doe","email":"jane@example.com","message":"Testing the form"}}'
A 201 reply with the new submission's id means it worked. The entry shows under Forms → Submissions with the source Server API. See the API Reference for every option.
If something goes wrong
| You see | What it means |
|---|---|
| Invalid embed key or origin not allowed. (inside the widget) | The page address is not on the key's allowed origins, or the key was revoked. Generate a key for the exact address the page runs on, starting https:// with no path. |
Form not found or not published. (widget) or 404 not_found "Form not found." (API) |
The form is still a draft or paused, or the slug is wrong. Publish it and check the slug on the Forms list. Sandbox and live are separate: a sk_test_ key only finds forms made in the sandbox. |
400 "Submission failed validation." |
A required field is missing or a value is the wrong type. The reply lists each field and what is wrong. Field ids must match the form's field ids exactly. |
401 api_key_invalid, 401 api_key_revoked or 403 missing_scope |
The key is mistyped or revoked, or it does not have the Submit form responses scope. Create a new key with that scope ticked. |
Common changes & risks
- Add a field - safe any time. Old submissions just have the field blank.
- Rename a field id - risky on published forms. Old data keeps the old key in storage; tables/exports won't show it for historical rows.
- Make a field newly required - visitors with the form open in a tab will fail submit until they refresh. Already-saved submissions unaffected.
- Change the slug - breaks every live embed. The dashboard locks the field and warns you.