Aura LogoAura

Event Types

Reference of every webhook event Aura emits

Event Types

Aura emits 15 webhook events across three resources: leads, calls, and payments. Every event follows the pattern {resource}.{action}.

This page is regenerated from the canonical event registry in apps/api/src/lib/webhook-events.ts. If you see drift between the docs and a live payload, trust the live payload and open an issue.

Envelope

Every event ships with the same envelope:

{
  "event": "call.booked",
  "created_at": "2026-05-12T14:30:00.000Z",
  "organization_id": "org_abc123",
  "data": { /* resource-specific, see below */ }
}
FieldTypeDescription
eventstringOne of the event types in the table below
created_atstring (ISO 8601)When the event was emitted, UTC
organization_idstringThe org the event belongs to
dataobjectResource payload — shape depends on event

For signing, retries, and SSRF rules, see the Webhooks Overview.


All Events

Lead events

EventFires whenPayload shape
lead.createdA new lead is created from any channel — booking-link funnel, form submission, or POST /v1/leads. Delivered in the envelope shape below (UTM under data.source). Zapier users who want the flat, top-level-UTM payload should trigger on lead.captured instead (see the Zapier guide).LeadWebhookData
lead.updatedAn existing lead's contact info, metadata, or attribution changesLeadWebhookData
lead.status_changedNo longer offered. Sent only when a lead is archived through the APILeadWebhookData
lead.deletedA lead is removed from Aura. An admin deleted it, or the person asked us to erase their data. Use it to remove the person from your own tools.LeadDeletedWebhookData

Call events

EventFires whenPayload shape
call.bookedA guest completes a booking and a call is createdCallWebhookData
call.updatedA call's scheduled time, closer, status, or attribution changesCallWebhookData
call.startedThe Notetaker joins the meeting and recording beginsCallWebhookData
call.completedThe call ends and outcome is finalised (won / lost / no-show)CallWebhookData
call.cancelledA booked call is cancelled. Arrives flat, not in the envelopecall.cancelled payload
call.canceledDeprecated: takes no new subscriptions. Existing ones still receive every cancel; subscribe to call.cancelled insteadCallWebhookData
call.rescheduledA scheduled call moves to a different timeCallWebhookData
call.closer_reassignedAn admin swaps the host on a booked upcoming callCallCloserReassignedWebhookData
call.no_showA scheduled call is marked as no-showCallWebhookData
call.analysis_completedThe AI review of a call finishes (minutes to hours after call.completed)CallAnalysisWebhookData

Payment events

EventFires whenPayload shape
payment.succeededA Stripe payment for a deal succeedsPaymentWebhookData
payment.failedA Stripe payment for a deal failsPaymentWebhookData
payment.refundedA previously-succeeded payment is refundedPaymentWebhookData

Example payloads

call.booked

{
  "event": "call.booked",
  "created_at": "2026-05-12T14:30:00.000Z",
  "organization_id": "org_abc123",
  "data": {
    "id": "call_def456",
    "lead_id": "lead_ghi789",
    "closer_id": "user_jkl012",
    "booking_link_id": "bl_mno345",
    "scheduled_at": "2026-05-13T10:00:00.000Z",
    "duration": 30,
    "status": "scheduled",
    "conferencing_url": "https://meet.google.com/abc-defg-hij",
    "utm_source": "google",
    "utm_medium": "cpc",
    "utm_campaign": "spring-2026",
    "utm_term": null,
    "utm_content": "demo-cta",
    "referral": null,
    "guest_rsvp_status": null,
    "guest_rsvp_confirmed_at": null,
    "created_at": "2026-05-12T14:30:00.000Z",
    "updated_at": "2026-05-12T14:30:00.000Z"
  }
}

lead.created

{
  "event": "lead.created",
  "created_at": "2026-05-12T14:29:55.000Z",
  "organization_id": "org_abc123",
  "data": {
    "id": "lead_ghi789",
    "name": "Jane Doe",
    "email": "jane@example.com",
    "phone": "+14155551234",
    "company": "Acme Inc",
    "status": "interested",
    "pipeline_stage": "interested",
    "timezone": "America/New_York",
    "source": {
      "utm_source": "google",
      "utm_medium": "cpc",
      "utm_campaign": "spring-2026",
      "utm_term": null,
      "utm_content": "demo-cta",
      "referrer": "https://acme.com/book"
    },
    "consent": [
      {
        "id": "6f1b2c3d-0000-4000-8000-000000000001",
        "kind": "custom",
        "label": "I agree to receive appointment reminder texts from Acme Inc.",
        "disclosure": null,
        "agreed": true,
        "state": "granted",
        "at": "2026-05-12T14:29:50.000Z",
        "granted_at": null,
        "phone": "+14155551234",
        "source": "booking_form",
        "links": [
          { "text": "SMS Terms", "url": "https://acme.com/sms-terms" }
        ]
      }
    ],
    "created_at": "2026-05-12T14:29:55.000Z",
    "updated_at": "2026-05-12T14:29:55.000Z"
  }
}

consent lists each consent box and what the person chose. Before you text them:

  • An empty consent list means no consent is on file. That is not the same as declined, but it is still not a yes. Treat it as no consent.
  • agreed is false when they agreed for a different number. phone says which number that was.
  • Consent can change after this webhook is sent, for example when the person replies STOP. Read the lead again with GET /v1/leads/:id right before you text them.
  • A box they did not tick is only recorded once they finish the form.

See the payload reference for every field.

lead.deleted

{
  "event": "lead.deleted",
  "created_at": "2026-05-12T16:00:05.000Z",
  "organization_id": "org_abc123",
  "data": {
    "id": "lead_xyz789",
    "event": "lead.deleted",
    "org_id": "org_abc123",
    "timestamp": "2026-05-12T16:00:05.000Z",
    "aura_version": "1.15.1",
    "lead_id": "lead_xyz789",
    "full_name": "Jane Doe",
    "email": "jane@example.com",
    "phone": "+15551234567",
    "consent": [],
    "consent_summary": null,
    "reason": "deleted",
    "deleted_at": "2026-05-12T16:00:00.000Z"
  }
}

We send this once the lead is gone, not when someone asks to delete it. If the lead has a meeting coming up, we cancel the meeting and tell the guest first. We remove the lead at least an hour later, usually within two hours. It can take up to a day if a calendar is slow to confirm the cancel. If the person books again before then, we keep the lead and send nothing.

reason is erased when the person asked us to erase their data. Then full_name, email and phone are null and consent is empty, so nothing about the person leaves Aura. Match the person by lead_id.

call.closer_reassigned

{
  "event": "call.closer_reassigned",
  "created_at": "2026-05-12T15:00:00.000Z",
  "organization_id": "org_abc123",
  "data": {
    "call_id": "call_def456",
    "previous_closer_id": "user_jkl012",
    "previous_closer_name": "Alice Chen",
    "new_closer_id": "user_pqr678",
    "new_closer_name": "Bob Martinez",
    "scheduled_at": "2026-05-13T10:00:00.000Z",
    "conferencing_link": "https://meet.google.com/xyz-abcd-efg",
    "new_event_id": "evt_stu901",
    "booking_link_id": "bl_mno345",
    "reassigned_by_user_id": "user_admin_001",
    "old_event_orphaned": false
  }
}

payment.succeeded

{
  "event": "payment.succeeded",
  "created_at": "2026-05-13T11:15:00.000Z",
  "organization_id": "org_abc123",
  "data": {
    "id": "pay_vwx234",
    "lead_id": "lead_ghi789",
    "call_id": "call_def456",
    "amount": 500000,
    "currency": "usd",
    "status": "succeeded",
    "payment_date": "2026-05-13T11:15:00.000Z",
    "created_at": "2026-05-13T11:15:00.000Z"
  }
}

Amounts on payment events are in the currency's smallest unit (e.g. cents for USD), matching Stripe's convention.


Field-level reference

See Payload Reference for the full shape of each data object.

Next steps

On this page