Skip to Content
Event Cataloglead.captured.v1

lead.captured.v1

Fired when a new lead is captured from any source — VSL forms, quiz completions, inbound leads, or other channels.

Event Name

lead.captured.v1

Schema

FieldTypeRequiredDescription
eventIduuidYesUnique event identifier
occurredAtdatetimeYesISO 8601 timestamp
brandIduuidYesBrand that captured the lead
emailemailYesLead’s email address
sourceenumYesCapture source: vsl_form, quiz_completion, inbound_lead, other
attributionobjectYesAttribution data
attribution.utm_sourcestringNoUTM source parameter
attribution.utm_mediumstringNoUTM medium parameter
attribution.utm_campaignstringNoUTM campaign parameter
attribution.irclickidstringNoImpact Radius click ID
personIduuid | nullNoResolved person ID (null if not yet resolved)

Example Payload

{ "eventId": "550e8400-e29b-41d4-a716-446655440000", "occurredAt": "2026-05-19T14:30:00Z", "brandId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "email": "jane@example.com", "source": "vsl_form", "attribution": { "utm_source": "google", "utm_medium": "cpc", "utm_campaign": "bpc157-launch" }, "personId": null }

Usage

import { validateEvent } from '@loop/contracts'; const payload = { eventId: crypto.randomUUID(), occurredAt: new Date().toISOString(), brandId: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890', email: 'jane@example.com', source: 'vsl_form', attribution: { utm_source: 'google', utm_medium: 'cpc', utm_campaign: 'bpc157-launch', }, personId: null, }; const result = validateEvent('lead.captured.v1', payload); if (result.success) { await fetch('https://comms.loop.health/api/events', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${API_KEY}`, }, body: JSON.stringify({ event: 'lead.captured.v1', payload: result.data, }), }); } else { console.error('Validation failed:', result.error.issues); }