Partnership · Embed Kit
Three ways to capture leads.
Pick the variant that fits your channel — every option writes to the same WealthFirst leads database, fires the same email notification to support@wealthfirstinc.tv, and lands in the same admin pipeline.
Direct Link
Send the React-styled lead form URL in an email signature, social bio, or QR code. Append UTM params to attribute the campaign.
Best for
URL (with UTM example)
https://www.wealthfirstinc.tv/lead?utm_source=email&utm_medium=signature&utm_campaign=feb_briefing
Iframe Embed
Drop a single iframe tag into any landing page, third-party host, or partner microsite — brand-styled, dark luxe. Append UTM params to the src URL to track the campaign.
Best for
Iframe HTML
<iframe src="https://www.wealthfirstinc.tv/lead-embed.html?utm_source=partner&utm_medium=microsite&utm_campaign=feb_2026" width="100%" height="780" frameborder="0" style="border:0;max-width:560px;display:block;margin:0 auto" title="WEALTH FIRST INC. — Lead Form" loading="lazy" ></iframe>
Drop-in Code Snippet
Copy/paste the raw HTML+JS into any existing same-origin page. Zero styling, zero dependencies — your developer wraps it in their own design.
Best for
HTML + JS
<form id="leadForm">
<input name="name" type="text" placeholder="Full Name" required />
<input name="email" type="email" placeholder="Email" required />
<input name="company" type="text" placeholder="Company" />
<textarea name="message" placeholder="Message" required></textarea>
<button type="submit">Submit</button>
</form>
<script>
document.getElementById('leadForm').addEventListener('submit', async (e) => {
e.preventDefault();
const form = e.currentTarget;
const formData = new FormData(form);
const qs = new URLSearchParams(window.location.search);
const payload = {
name: formData.get('name'),
email: formData.get('email'),
company: formData.get('company'),
message: formData.get('message'),
source: 'lead_form_snippet',
utm_source: qs.get('utm_source') || '',
utm_medium: qs.get('utm_medium') || '',
utm_campaign: qs.get('utm_campaign') || '',
utm_term: qs.get('utm_term') || '',
utm_content: qs.get('utm_content') || '',
referrer: document.referrer || '',
landing_path: window.location.pathname + window.location.search
};
const res = await fetch('https://www.wealthfirstinc.tv/api/leads', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload)
});
if (res.ok) {
form.reset();
alert('Submitted successfully');
} else {
alert('Submission failed');
}
});
</script>UTM Attribution
Every lead is auto-tagged with campaign source.
All three variants automatically read ?utm_source, ?utm_medium, ?utm_campaign, ?utm_term, and ?utm_content from the page URL and post them to the leads database along with document.referrer and the landing path. No additional code needed.
Example campaign tags
Email signature → utm_source=email · utm_medium=signature Newsletter footer → utm_source=newsletter · utm_medium=email · utm_campaign=feb_briefing Partner microsite → utm_source=hermes · utm_medium=partner · utm_campaign=ss26_couture LinkedIn post → utm_source=linkedin · utm_medium=social · utm_campaign=family_office_q1 Paid LinkedIn ad → utm_source=linkedin · utm_medium=cpc · utm_campaign=uhnw_funding · utm_content=variant_a
API Contract
All three variants POST to the same endpoint.
POST https://www.wealthfirstinc.tv/api/leads
{
"name": "string (2-120 chars, required)",
"email": "valid email (required)",
"company": "string (optional)",
"message": "string (4-2000 chars, required)",
"source": "string (optional — e.g. 'lead_form_embed', 'lead_form_snippet')",
"utm_source": "string (auto-captured from URL)",
"utm_medium": "string (auto-captured)",
"utm_campaign": "string (auto-captured)",
"utm_term": "string (auto-captured)",
"utm_content": "string (auto-captured)",
"referrer": "string (auto from document.referrer)",
"landing_path": "string (auto from window.location)"
}
→ 200 OK { "ok": true, "id": "uuid", "status": "received" }
→ 422 validation errors (Pydantic)