Aura LogoAura

Payload Reference

Field-level reference for every webhook payload

Payload Reference

Every Aura webhook ships in the same envelope. The data object's shape depends on the event type. This page documents each shape exactly as it appears in production.

The interfaces below mirror apps/api/src/lib/webhook-events.ts — the canonical source of truth. Fields here that show string | null may arrive as null if the underlying data is missing.

Envelope

interface WebhookPayload<T> {
  event: WebhookEventType;     // e.g. "call.booked"
  created_at: string;          // ISO 8601, UTC
  organization_id: string;     // The org the event belongs to
  data: T;                     // Resource payload — see below
}
FieldTypeNotes
eventstringOne of the 14 event types
created_atstringISO 8601 timestamp of emission, UTC
organization_idstringYour Aura organization ID
dataobjectShape depends on event

LeadWebhookData

Emitted on lead.created, lead.updated, lead.status_changed.

FieldTypeDescription
idstringLead ID
namestring | nullFull name, if provided
emailstring | nullEmail, if provided
phonestring | nullPhone, if provided
companystring | nullCompany, if provided
statusstringPipeline stage (see status values below)
timezonestring | nullIANA timezone, if known
sourceobject | nullAttribution — see below
created_atstringWhen the lead was created (ISO 8601)
updated_atstringWhen the lead was last updated (ISO 8601)

source object

FieldTypeDescription
utm_sourcestring | nullTraffic platform (e.g. google, facebook)
utm_mediumstring | nullChannel type (e.g. cpc, email, social)
utm_campaignstring | nullCampaign name
utm_termstring | nullPaid search keywords / targeting criteria
utm_contentstring | nullAd creative or A/B variant
referrerstring | nullHTTP referrer — embed host page or traffic source

Lead status values

ValueMeaning
interestedContact info captured, no booking yet
qualifiedForm questions answered, fit confirmed
scheduledCall booked, in the future
attendedCall completed
closedDeal won
lostDeal lost
canceledBooking canceled
disqualifiedMarked as not a fit

CallWebhookData

Emitted on call.booked, call.updated, call.started, call.completed, call.canceled, call.rescheduled, call.no_show.

FieldTypeDescription
idstringCall ID
lead_idstringAssociated lead ID
closer_idstring | nullAssigned host's user ID
booking_link_idstring | nullWhich funnel / product the call came through
scheduled_atstringScheduled meeting time (ISO 8601)
durationnumber | nullScheduled duration in minutes
statusstring | nullCall status (scheduled, attended, no_show, canceled, etc.)
conferencing_urlstring | nullVideo conference URL
utm_sourcestring | nullAttribution: traffic platform
utm_mediumstring | nullAttribution: channel type
utm_campaignstring | nullAttribution: campaign name
utm_termstring | nullAttribution: paid search keywords
utm_contentstring | nullAttribution: ad creative or A/B variant
referralstring | nullPartner / affiliate identifier (separate from utm_source)
guest_rsvp_statusstring | nullGuest's calendar RSVP (yes, no, maybe, noreply)
guest_rsvp_confirmed_atstring | nullWhen the guest first RSVP'd yes
created_atstringWhen the call was created
updated_atstringWhen the call was last updated

Call attribution fields are flat on the call payload (utm_source etc.), whereas lead attribution is nested under source. This intentional asymmetry mirrors the underlying schema: calls inherit UTM at booking time from the originating lead, but are stored as columns for fast pipeline filtering.


CallCloserReassignedWebhookData

Emitted on call.closer_reassigned. This is the only call event with a non-CallWebhookData shape — it carries the swap details rather than the full call record.

FieldTypeDescription
call_idstringAffected call ID
previous_closer_idstring | nullThe host being unassigned
previous_closer_namestringCached display name of the previous host
new_closer_idstringThe host being assigned
new_closer_namestringCached display name of the new host
scheduled_atstringCall's scheduled time (unchanged by reassignment)
conferencing_linkstring | nullConferencing URL on the new event
new_event_idstringThe canonical Nylas event ID after the swap
booking_link_idstring | nullOriginating booking link
reassigned_by_user_idstringAdmin or Partner API caller who performed the swap
old_event_orphanedbooleantrue if the old event could not be cleanly canceled on the previous host's calendar

PaymentWebhookData

Emitted on payment.succeeded, payment.failed, payment.refunded.

FieldTypeDescription
idstringPayment ID
lead_idstring | nullAssociated lead, if known
call_idstring | nullAssociated call, if the payment is tied to a deal
amountnumberAmount in the currency's smallest unit (e.g. cents for USD)
currencystringISO 4217 lowercase (usd, eur, etc.)
statusstringStripe-style status (succeeded, failed, refunded)
payment_datestringWhen the payment was processed (ISO 8601)
created_atstringWhen the payment record was created

Conventions

Timestamps

All timestamps are ISO 8601 UTC (Z suffix):

2026-05-12T14:30:00.000Z

Null handling

Optional fields are emitted as null rather than omitted. Always treat the contract as nullable for any field marked string | null here:

const phone = data.phone ?? "(not provided)";

Forward compatibility

Aura may add new fields to any payload without a major version bump. Consumers must ignore unknown fields. Removing or renaming a documented field is a breaking change and will trigger a schema-diff review on our side before shipping.


Verifying signatures

Webhook deliveries carry a signed header X-Aura-Signature-V1 of the form:

X-Aura-Signature-V1: t=1715520600000,v1=<sha256_hex>[,v1=<previous_sig>]

The signed string is ${timestamp}.${rawBody} — not the body alone — which prevents replay attacks. Reject deliveries whose t differs from your server clock by more than 5 minutes.

During a 24-hour secret rotation window, two v1= segments are present. Accept the delivery if either signature verifies — this lets you rotate secrets with zero downtime.

The legacy bare-hex X-Aura-Signature header is still sent for backwards compatibility but offers no replay protection; new integrations should verify the V1 header only.


Next steps

On this page