Coming from Marketo Forms 2.0: there’s no embed code that draws a form, nothing to restyle afterwards, and no field mapping step. The nearest equivalent is Forms 2.0’s “submit from your own markup” pattern — except here it’s the only pattern, and it’s fully supported.
The whole integration
Where the form id comes from
Every form has an eight-character short id, minted once and stable across renames and new versions. Find it on the form’s Settings tab, as the Form ID row, next to the full capture endpoint with a copy button.
A form's Settings tab, showing its Form ID, its capture endpoint, and whether it is accepting submissions.

The How to use drawer, with an embed snippet built from this form's real fields.
The attributes
Leave the status element out if you’d rather write your own copy, and listen for the events below instead.
The default messages
A field the visitor can fix — a missing required value, an address that isn’t an email — gets that specific message instead.
Events you can listen for
All three fire ondocument and bubble.
What the script does for you
Collects the fields. Every named, enabled control becomes part of the submission — text, email, hidden fields, textareas, selects, checkboxes as true or false, and the chosen radio option. Everything you put in the form is sent and stored, including hidden fields and UTM values. There is no mapping step. Checks what the visitor can fix. If the form declares its fields, the script checks them before sending — required values, numbers, email format, allowed options — so the visitor gets a fixable message rather than a rejection. Adds the honeypot. A hidden field bots fill and humans don’t. Don’t add your own, don’t style it visible, and don’t let your code write to it. Adds the bot-check widget, if the form requires one, just before the submit button. If it hasn’t finished loading when the visitor submits, the script says so rather than sending a submission that would be refused. Stops double submissions. A form binds once even if the script is included twice, and a second click while the first is in flight is ignored. Two submissions would create two records, and the lead would be counted twice. Gives up after twelve seconds and shows the generic error.Success redirect
A form can carry a redirect for accepted submissions, set on the form itself. The script navigates there for you, and theallgood:form:submitted event fires before it does, so a conversion tag still runs.
Because it lives on the form rather than in your markup, changing where visitors land needs no republish of your website. Leave it unset and navigate yourself if you’d rather handle it in your own listener.
Several forms on one page
Fine. Each form carries its own id, and the script asks about all of them in one request, up to ten per page. The same form id can appear more than once — a header call-to-action and a footer one, say — and both bind independently.Before it will work

What happens to every submission, resolved against one form's real configuration.
If the script doesn’t load
The script prevents the form’s normal submission, so if it never loads, the form falls back to whatever itsaction says. If you need a no-JavaScript fallback, point action at your own server and post to the form capture API from there.