Skip to content

Managed Forms

A managed form has no markup of yours. You add fields, rules, header, footer and a theme in the dashboard, and the HTML library renders the form from a blueprint the server sends with the session. Use it when a non-developer owns the form, or when you want a form up in a minute and do not need custom markup.

  1. Open the form in the dashboard, set Render mode to Managed, and build the fields.

  2. Put an empty host where the form should appear:

    <snip-form data-key="YOUR_FORM_KEY"></snip-form>
  3. Load the library before the closing body tag:

    <script src="https://cdn.snipform.io/api/v2/sf.iife.js" defer></script>

The host stays empty until a visitor interacts with the area. The session then opens, the blueprint arrives, and the form renders in place. From there it behaves exactly like a hand-written form: same session model, same spam protection, same tracking.

Builder labelTypeRenders asValue
Texttextinput type="text"string
Emailemailinput type="email"string
Paragraphtextareatextarea with four rowsstring
DropDownselectselect with a disabled placeholder optionthe selected key
Checkboxescheckone input type="checkbox" per optionarray of keys
Multiple Choiceradioone input type="radio" per optionthe selected key
Confirmationboola single checkbox with value truetrue when ticked

Text, Email, Paragraph and DropDown take a placeholder. DropDown, Checkboxes and Multiple Choice take a list of options, each with a key (the value sent) and a label.

Each field’s rules are chosen in the builder, with a default message you can edit:

RuleApplies toDefault message
RequiredText, Email, Paragraph, DropDown, Multiple ChoiceThis field is required
At least oneCheckboxesPlease select at least one option
EmailEmailPlease enter a valid email
Valid URLTextPlease enter a valid url
Numeric ValueTextPlease enter a valid number
Must selectConfirmationPlease check to continue

Rules are compiled on the server from the stored field definitions, so the page cannot change them. Errors render under each field as the visitor submits.

The renderer produces standard library markup with directives already in place, so everything in Error states and Submit states applies. The structure:

<form class="sf-managed sf-managed--inset-label sf-managed--light">
<div class="sf-managed-header">...your header HTML...</div>
<div class="sf-managed-field">
<div class="sf-managed-field-inner">
<label>Email</label>
<input type="email" name="email" sf-validate:required="..." sf-validate:email="...">
</div>
<span if-error="email" then-show-text></span>
</div>
<div class="sf-managed-field sf-managed-field--group">
<label>Interests</label>
<div class="sf-managed-field-options">
<label><input type="checkbox" name="interests" value="design"> Design</label>
</div>
</div>
<div class="sf-managed-actions">
<button type="submit" on-submit-text="Submitting...">Send</button>
</div>
<div class="sf-managed-footer">...your footer HTML...</div>
</form>
ClassOn
sf-managedthe form
sf-managed--inset-label, sf-managed--outset-label, sf-managed--hidden-labelthe form, from the chosen style
sf-managed--light, sf-managed--darkthe form, from the website theme setting
sf-managed-header, sf-managed-footerthe header and footer blocks
sf-managed-fieldevery field wrapper
sf-managed-field-innerthe bordered label + control area of text-like fields
sf-managed-field--group, sf-managed-field-optionsCheckboxes and Multiple Choice
sf-managed-field--boolConfirmation
sf-managed-actionsthe submit button row

Three label styles: Inset Label (label inside the bordered area, the default), Outset Label (label above the control) and Hidden Label (no label; the label text becomes the placeholder). Pick light or dark to match the page the form lives on.

Colours set in the builder arrive as CSS custom properties on the form element:

PropertyDefaultUsed for
--sf-color#0ea5e9accent, focus
--sf-color-border#cbd5e1field borders
--sf-color-label#334155labels
--sf-color-text#0f172atext
--sf-color-btn#0ea5e9button background
--sf-color-btn-hover#0369a1button hover
--sf-color-btn-text#bae6fdbutton text

The stylesheet is injected once as style#sf-managed-styles. To override it, target form.sf-managed from your own stylesheet; anything you set on the custom properties or with higher specificity wins.

form.sf-managed {
--sf-color-btn: #111827;
--sf-color-btn-text: #ffffff;
max-width: 32rem;
}

Render mode lives in the form’s settings and can be changed at any time. Switching to Headless makes the server read fields and rules from your markup again, as described in the HTML library. Switching to Managed makes it ignore the markup and send the blueprint. The key does not change, so the embed stays the same; only what is inside the host matters.

Managed forms stop where the builder stops: seven field types, six rules, no custom directives. When you need a date picker, a tel input, regex rules or your own layout, switch to headless or use React.