careCycle
Webhooks

Events & Payloads

The careCycle webhook event catalog and example payloads for each event.

These are the events careCycle can deliver. When you add an endpoint you can subscribe to all events or only the ones you care about.

EventFires when
customer.createdA customer is created (manual entry, inbound call, lead capture, or an integration). Bulk CSV imports do not emit this event.
customer.updatedA customer's details are edited.
call.completedA call finishes and its details (transcript, duration, disposition) are finalized.

Every payload includes a top-level event_type field (e.g. "customer.created") — switch on it to route events. This matters most for customer.created and customer.updated, which are otherwise identical in shape. The same value is also sent as the Svix event type for endpoint-level subscription filtering.

All IDs are UUIDs, timestamps are ISO 8601, and any field with no value is null. Phone numbers are E.164.

customer.created

Sent when a new customer record is created. The payload is the full customer object.

{
  "event_type": "customer.created",
  "id": "b1f7c0e2-3a4d-4e5f-8a9b-0c1d2e3f4a5b",
  "createdAt": "2026-06-17T19:07:23.709Z",
  "updatedAt": "2026-06-17T19:07:23.709Z",
  "externalId": "CRM-48213",
  "status": "Lead",
  "firstName": "Marcus",
  "middleName": null,
  "lastName": "Delacroix",
  "salutation": null,
  "suffix": null,
  "preferredName": null,
  "phoneNumber": "+13128471928",
  "lineType": "mobile",
  "email": "marcus.delacroix@example.com",
  "dateOfBirth": "1958-04-12",
  "language": "en",
  "ethnicity": null,
  "gender": "Male",
  "maritalStatus": "Married",
  "address": "4427 Westbrook Ave",
  "address2": "Apt 3B",
  "city": "Mesa",
  "county": "Maricopa",
  "state": "AZ",
  "postalCode": "85204",
  "timezone": "America/Phoenix",
  "mbiNumber": "1EG4TE5MK73",
  "medicareCard": true,
  "medicarePartADate": "2023-05-01",
  "medicarePartBDate": "2023-05-01",
  "hasMedicaid": false,
  "medicaidNumber": null,
  "socialSecurityDisability": false,
  "veteran": true,
  "vaNumber": null,
  "householdIncome": 42000,
  "annualIncome": 42000,
  "filingStatus": "married_joint",
  "dependentCount": 0,
  "subsidyEligible": true,
  "subsidyAmount": 148,
  "carrierAssignedCustomerId": null,
  "agentName": null,
  "agentNpn": null,
  "assignedUser": {
    "id": "b396018f-7d49-4a55-abe5-544174abcaaa",
    "name": "Priya Raman",
    "email": "priya@youragency.com",
    "npn": "8419302",
    "role": "agent",
    "licensedStates": ["AZ", "AR"]
  },
  "doNotCall": false,
  "doNotSMS": false,
  "doNotEmail": false,
  "doNotMail": false,
  "testCustomer": false
}

Every field below is present on customer.created and customer.updated. Any field without a value is null.

Identifiers & status

FieldTypeDescription
event_typestringThe webhook event — customer.created or customer.updated. Switch on this to route the event
idUUIDcareCycle customer ID
createdAt / updatedAtISO 8601When the record was created / last updated
externalIdstringYour own identifier for the customer, if one was provided
statusenumLifecycle status — one of Lead, Active, Inactive
carrierAssignedCustomerIdstringThe carrier's identifier for the customer, if known
testCustomerbooleantrue for test records — filter these out in production

Identity & contact

FieldTypeDescription
firstName / middleName / lastNamestringLegal name parts
salutation / suffix / preferredNamestringOptional name extras
phoneNumberstringPrimary phone number (E.164)
lineTypeenumCarrier line type — landline, mobile, fixedVoip, nonFixedVoip, personal, tollFree, premium, sharedCost, uan, voicemail, pager, or unknown
emailstringEmail address
dateOfBirthdateYYYY-MM-DD (a date, not a timestamp)
languagestringISO 639-1 language code (e.g. en, es)
ethnicitystringFree-text ethnicity, if collected
genderenumMale, Female, Non-Binary, Other, or Prefer Not to Say
maritalStatusenumSingle, Married, Divorced, Widowed, Separated, or Domestic Partnership

Address

FieldTypeDescription
address / address2stringStreet address lines
city / county / state / postalCodestringLocality fields; state is the 2-letter US abbreviation
timezonestringIANA timezone (e.g. America/Phoenix)

Medicare & Medicaid

FieldTypeDescription
mbiNumberstringMedicare Beneficiary Identifier
medicareCardbooleanWhether the customer has their Medicare card
medicarePartADate / medicarePartBDatedateYYYY-MM-DD Part A / Part B effective dates
hasMedicaidbooleanWhether the customer has Medicaid
medicaidNumberstringMedicaid ID, if applicable
socialSecurityDisabilitybooleanReceiving SSDI
veteranbooleanVeteran status
vaNumberstringVA identifier, if applicable

Financial & subsidy

FieldTypeDescription
householdIncome / annualIncomeintegerWhole US dollars (no cents)
filingStatusstringTax filing status (e.g. single, married_joint, head_of_household)
dependentCountintegerNumber of dependents
subsidyEligiblebooleanEligible for a premium subsidy
subsidyAmountintegerEstimated monthly subsidy in whole US dollars

Assignment

FieldTypeDescription
agentName / agentNpnstringExternally-supplied agent name and NPN, if provided
assignedUserobjectThe careCycle member assigned to the customer, or null if unassigned. Contains id, name, email, npn, role, and licensedStates (array of 2-letter US state codes)

Consent flags

FieldTypeDescription
doNotCall / doNotSMS / doNotEmail / doNotMailbooleanPer-channel contact suppression — respect these before reaching out

customer.updated

Sent when a customer is edited. The payload is identical in shape to customer.created and reflects the customer's state after the update. updatedAt changes on every update.

{
  "event_type": "customer.updated",
  "id": "b1f7c0e2-3a4d-4e5f-8a9b-0c1d2e3f4a5b",
  "updatedAt": "2026-06-18T14:22:09.120Z",
  "status": "Active",
  "phoneNumber": "+13128471928",
  "firstName": "Marcus",
  "lastName": "Delacroix",
  "...": "all other customer fields, same shape as customer.created"
}

call.completed

Sent once a call has finished and its details are finalized. The payload includes the call outcome, the full transcript and summary, the campaign it belonged to, and the associated customer (the same object as customer.created).

{
  "event_type": "call.completed",
  "id": "dca4a483-af54-4899-a804-766ee5812537",
  "createdAt": "2026-06-17T19:07:23.709Z",
  "phoneNumber": "+13128471928",
  "callSid": "f2a91c0b-7d2e-4c8a-9f31-6b5d0a4e1c77",
  "direction": "inbound",
  "disposition": "Enrolled",
  "durationMs": 247000,
  "startTime": "2026-06-17T19:03:16.001Z",
  "endTime": "2026-06-17T19:07:23.001Z",
  "endedReason": "completed",
  "summary": "Caller confirmed eligibility and enrolled in a Medicare Advantage plan effective July 1.",
  "transcript": "Agent: Thanks for calling careCycle...\nCaller: Hi, I'd like to review my options...",
  "campaign": {
    "id": "4f952597-5c04-4d2c-851e-30f518e2c761",
    "name": "MA Inbound Receptionist",
    "slug": null,
    "description": null,
    "status": "active",
    "vertical": "medicare",
    "suite": "receptionist",
    "direction": "inbound",
    "kind": "voice_ai",
    "tags": [],
    "startDate": "2026-03-06T00:11:35.256Z",
    "endDate": null
  },
  "customer": {
    "id": "b1f7c0e2-3a4d-4e5f-8a9b-0c1d2e3f4a5b",
    "...": "full customer object, same shape as customer.created"
  }
}
FieldDescription
event_typeThe webhook event — always call.completed
idcareCycle call ID
phoneNumberThe customer's phone number (E.164)
directioninbound or outbound
dispositionFinal outcome of the call
durationMsCall duration in milliseconds
endedReasonWhy the call ended (e.g. completed, no-answer)
summaryAI-generated summary of the call
transcriptFull call transcript
campaignThe campaign the call belonged to (null if none)
customerThe associated customer (null if the call wasn't linked to one)

call.completed fires for every terminal call — including no-answer, busy, and failed. Use disposition and endedReason to distinguish outcomes.

On this page