Producer Profile API: Webhook Events

The Producer Profile API publishes webhook events when producer identity, contact, financial, or E&O data changes. Use these events to keep downstream systems synchronized without polling.

For instructions on how to register an endpoint, verify delivery, and validate signatures, see the Webhooks Quick Start Guide.

Available Events

Event TypeWhen It Fires
id.producer.updatedA producer profile record is created or updated
id.producer.deletedA producer profile record is deleted
id.producer.address.updatedA producer's address record is created or updated
id.producer.address.deletedA producer's address record is deleted
id.producer.bank_account.updatedA producer's bank account record is created or updated
id.producer.bank_account.deletedA producer's bank account record is deleted
id.producer.errors_and_omissions.updatedA producer's E&O policy record is created or updated
id.producer.errors_and_omissions.deletedA producer's E&O policy record is deleted
id.producer.phone.updatedA producer's phone record is created or updated
id.producer.phone.deletedA producer's phone record is deleted

Event Schema

All Producer Profile API webhook events share the same envelope:

{
  "id": "whe_01je7babqteg8v9p30k8zpg3ga",
  "type": "id.producer.updated",
  "timestamp": "2024-09-30T17:33:00Z",
  "data": {}
}
FieldTypeDescription
idstringUnique identifier for this event. Uses the whe_ prefix. Repeated on retries — use for deduplication.
typestringThe specific event type (see table above)
timestampstring (ISO 8601)UTC time the event was generated
dataobjectEvent-specific payload (see examples below)

Example Payloads

Note on field names: Webhook event payloads are serialized independently from the REST API. Some field names in event payloads may differ from their REST API equivalents — for example, a field named expiry in a REST response may appear as expirationDate in a webhook event. Where known differences exist, they are called out in the event documentation below.

id.producer.updated

Fires when a producer profile record is created or updated. The shape of data differs between individual producers and firm producers.

FieldTypeApplies to
idUUIDBoth
npnStringBoth
typeStringBoth (INDIVIDUAL or FIRM)
firstNameStringIndividual only
lastNameStringIndividual only
middleNameStringIndividual only
suffixStringIndividual only
genderStringIndividual only
dateOfBirthDateIndividual only
ssnStringIndividual only
primaryEmailStringIndividual only
secondaryEmailStringIndividual only
finraCrdNumberStringBoth
businessNameStringFirm only
businessTypeStringFirm only
feinStringFirm only

Individual example:

{
  "id": "whe_01je7babqteg8v9p30k8zpg3ga",
  "type": "id.producer.updated",
  "data": {
    "dateOfBirth": "1987-01-01",
    "finraCrdNumber": "2523523",
    "firstName": "Richard",
    "gender": "MALE",
    "id": "18de9286-2ad9-4b83-96c7-6d4d63a085b1",
    "lastName": "Rogers",
    "middleName": "Person",
    "npn": "444444",
    "primaryEmail": "richard@example.com",
    "secondaryEmail": "",
    "ssn": "123456788",
    "suffix": "",
    "type": "INDIVIDUAL"
  }
}

Firm example:

{
  "id": "whe_01je7babqteg8v9p30k8zpg3ga",
  "type": "id.producer.updated",
  "data": {
    "businessName": "RDRR LLC",
    "businessType": "LLC",
    "finraCrdNumber": "",
    "id": "18de9286-2ad9-4b83-96c7-6d4d63a085b0",
    "npn": "222222",
    "primaryEmail": "rdrr@example.com",
    "type": "FIRM"
  }
}

id.producer.deleted

Fires when a producer profile record is deleted.

FieldTypeDescription
idUUIDThe producer's record ID
npnStringThe producer's NPN
{
  "id": "whe_01je7babqteg8v9p30k8zpg3ga",
  "type": "id.producer.deleted",
  "data": {
    "id": "18de9286-2ad9-4b83-96c7-6d4d63a085b0",
    "npn": "222222"
  }
}

id.producer.address.updated

Fires when a producer's address record is created or updated.

FieldTypeDescription
addressIdUUIDUnique identifier for the address record
addressLine1StringFirst line of the street address
addressLine2StringSecond line of the street address (optional)
addressTypeStringType of address (e.g. MAILING)
cityStringCity
countryStringCountry code (e.g. USA)
countyStringCounty
moveInDateDateDate the producer moved to this address
producerIdUUIDThe producer's record ID
producerNpnStringThe producer's NPN
stateStringTwo-letter state code
updatedAtDate-TimeWhen the record was last updated
zipStringZIP code
preferredbooleanWhether this is the preferred address
{
  "id": "whe_01je7babqteg8v9p30k8zpg3ga",
  "type": "id.producer.address.updated",
  "data": {
    "addressId": "5025c204-5c07-47c6-b9d3-11ad09c35f43",
    "addressLine1": "123 Easy Street",
    "addressLine2": "Suite 500",
    "addressType": "MAILING",
    "city": "Athens",
    "country": "USA",
    "county": "Clarke",
    "createdAt": "2024-12-05T00:03:37Z",
    "moveInDate": "2024-12-02",
    "producerId": "be941609-884a-466b-8a87-2f158d79ebec",
    "producerNpn": "1234",
    "state": "GA",
    "updatedAt": "2024-12-05T00:03:37Z",
    "zip": "30606"
  }
}

id.producer.address.deleted

Fires when a producer's address record is deleted.

FieldTypeDescription
addressIdUUIDUnique identifier for the deleted address
producerIdUUIDThe producer's record ID
producerNpnStringThe producer's NPN
{
  "id": "whe_01je7babqteg8v9p30k8zpg3ga",
  "type": "id.producer.address.deleted",
  "data": {
    "addressId": "5025c204-5c07-47c6-b9d3-11ad09c35f43",
    "producerId": "be941609-884a-466b-8a87-2f158d79ebec",
    "producerNpn": "1234"
  }
}

id.producer.bank_account.updated

Fires when a producer's bank account record is created or updated.

FieldTypeDescription
bankAccountIdUUIDUnique identifier for the bank account record
nameStringName or label for the bank account
numberStringBank account number — masked in practice (e.g. ****4321)
producerIdUUIDThe producer's record ID
npnStringThe producer's NPN
routingNumberStringBank routing number
typeStringAccount type (e.g. CHECKING)
updatedAtDate-TimeWhen the record was last updated

Note: The account number is returned masked (e.g. ****4321). Additionally, primaryAccount has been observed in sandbox responses but is not listed in the source schema — treat it as undocumented until confirmed.

{
  "id": "whe_01je7babqteg8v9p30k8zpg3ga",
  "type": "id.producer.bank_account.updated",
  "data": {
    "bankAccountId": "5025c204-5c07-47c6-b9d3-11ad09c35f43",
    "name": "Wells Fargo",
    "number": "****4321",
    "producerId": "00283595-fc7b-4999-80ab-fb4a70c21b04",
    "producerNpn": "1234",
    "routingNumber": "123456789",
    "type": "CHECKING",
    "updatedAt": "2024-12-05T00:03:37Z"
  }
}

id.producer.bank_account.deleted

Fires when a producer's bank account record is deleted.

FieldTypeDescription
bankAccountIdUUIDUnique identifier for the deleted bank account
producerIdUUIDThe producer's record ID
npnStringThe producer's NPN
{
  "id": "whe_01je7babqteg8v9p30k8zpg3ga",
  "type": "id.producer.bank_account.deleted",
  "data": {
    "bankAccountId": "5025c204-5c07-47c6-b9d3-11ad09c35f43",
    "producerId": "00283595-fc7b-4999-80ab-fb4a70c21b04",
    "producerNpn": "1234"
  }
}

id.producer.errors_and_omissions.updated

Fires when a producer's errors and omissions (E&O) policy record is created or updated.

FieldTypeDescription
producerIdUUIDThe producer's record ID
npnStringThe producer's NPN
policyIdUUIDUnique identifier for the E&O policy
policyTypeStringType of policy (e.g. INDIVIDUAL)
policyNumberStringPolicy number
providerNameStringName of the E&O insurance provider
totalLimitDecimalTotal coverage limit
effectiveDateDateWhen the policy became effective
expirationDateDateWhen the policy expires
certificateNumberStringCertificate number
createdAtDate-TimeWhen the record was created
updatedAtDate-TimeWhen the record was last updated
{
  "id": "whe_01je7babqteg8v9p30k8zpg3ga",
  "type": "id.producer.errors_and_omissions.updated",
  "data": {
    "producerId": "fcd7c256-2cdc-43ad-b4ce-6c52c0e1cf20",
    "npn": "2523523",
    "policyId": "c2e7c7ac-c994-4989-a703-7eec29a9038b",
    "policyType": "INDIVIDUAL",
    "policyNumber": "18de9286-2ad9-4b83-96c7-6d4d63a085b1",
    "providerName": "EZLandC",
    "totalLimit": "1000000",
    "effectiveDate": "2024-12-04",
    "expirationDate": "2026-12-04",
    "certificateNumber": "4524524",
    "createdAt": "2024-12-05T00:03:37Z",
    "updatedAt": "2024-12-05T00:03:37Z"
  }
}

id.producer.errors_and_omissions.deleted

Fires when a producer's E&O policy record is deleted.

FieldTypeDescription
producerIdUUIDThe producer's record ID
producerNpnStringThe producer's NPN
policyIdUUIDUnique identifier for the deleted E&O policy
{
  "id": "whe_01je7babqteg8v9p30k8zpg3ga",
  "type": "id.producer.errors_and_omissions.deleted",
  "data": {
    "producerId": "18de9286-2ad9-4b83-96c7-6d4d63a085b0",
    "producerNpn": "123456",
    "policyId": "18de9286-2ad9-4b83-96c7-6d4d63a085b0"
  }
}

id.producer.phone.updated

Fires when a producer's phone record is created or updated.

FieldTypeDescription
producerIdUUIDThe producer's record ID
producerNpnStringThe producer's NPN
phoneIdUUIDUnique identifier for the phone record
preferredBooleanWhether this is the preferred phone number
phoneTypeStringType of phone number (e.g. CELL)
numberStringThe phone number
updatedAtDate-TimeWhen the record was last updated
{
  "id": "whe_01je7babqteg8v9p30k8zpg3ga",
  "type": "id.producer.phone.updated",
  "data": {
    "producerId": "fcd7c256-2cdc-43ad-b4ce-6c52c0e1cf20",
    "producerNpn": "2523523",
    "phoneId": "c2e7c7ac-c994-4989-a703-7eec29a9038b",
    "preferred": true,
    "phoneType": "CELL",
    "number": "7065554444",
    "updatedAt": "2024-12-05T00:03:37Z"
  }
}

id.producer.phone.deleted

Fires when a producer's phone record is deleted.

FieldTypeDescription
producerIdUUIDThe producer's record ID
producerNpnStringThe producer's NPN
phoneIdUUIDUnique identifier for the deleted phone record
{
  "id": "whe_01je7babqteg8v9p30k8zpg3ga",
  "type": "id.producer.phone.deleted",
  "data": {
    "producerId": "18de9286-2ad9-4b83-96c7-6d4d63a085b0",
    "producerNpn": "123456",
    "phoneId": "18de9286-2ad9-4b83-96c7-6d4d63a085b0"
  }
}

Subscribing to Events

When registering your endpoint in the Svix webhook portal, subscribe to the id high-level event group to receive all producer profile events, or subscribe to specific event types if you only need a subset.

See the Webhooks Quick Start Guide for step-by-step registration instructions.

Processing Recommendations

  • Use id for deduplication — if an event is retried, the id stays the same. Store processed event IDs to avoid duplicate processing.
  • Respond quickly — your endpoint must return 2xx within 5 seconds. Offload heavy processing to a queue or background job.
  • Validate signatures — verify the webhook-signature header against your signing secret before processing. See Webhooks Quick Start Guide for details.
  • Log all receipts — log the full event payload and id before processing so you can replay or debug later.
  • Use updatedAt for ordering — if you receive multiple events for the same resource in quick succession, use data.updatedAt to determine the most recent state.