x3.lead()
For sites without an own backend: x3.lead() sends the form to X3, which stores the lead, checks it for
spam and pushes it to your CRM. Sites with a server keep using
leads.create – it accepts the same crm routing.
<script>
document.querySelector("#contact").addEventListener("submit", (event) => {
const form = new FormData(event.target);
window.x3?.lead({
form: "contact",
email: form.get("email"),
firstName: form.get("name"),
message: form.get("message"),
// optional: only these CRMs (aliases or names, never ids); false = no CRM
crm: ["sales"],
});
});
</script>Switch it on
The SDK sends POST /v1/leads (text/plain JSON with the publishable key, like the conversion beacon).
Einstellungen › CRM › „Leads aus dem Browser annehmen“. Until then the endpoint answers 403. Leads are
accepted from the project's tracked domains (and the extra origins listed there), at most 3 per minute and
IP; a double submit is recorded once.
Fields
form, email, phone, firstName, lastName, company, message, answers
({questionnaire: {question: option}}), consent: {marketing}, crm, honeypot (your honeypot field
had a value – spam), fillMs (time in the form; default: time on the page – under two seconds counts
as spam), eventId (dedupe). The SDK adds the visit and the page view so the lead joins its journey.
Privacy
The contact data travels once over TLS. X3 stores it in plain text only with the project's opt-in
(Einstellungen › Erweitert › „Kontaktdaten im Klartext speichern“); otherwise X3 keeps hashes and hands the contact data to the CRM encrypted
and transiently. identify() stays hash-only and never creates a CRM contact.