Skip to main content

Overview

The DOWNSTREAM_ENTITY_COMPLIANCE_STATUS_CHANGE webhook is triggered when a downstream entity’s (agency) compliance status changes for any product/state combination. Webhook type: DOWNSTREAM_ENTITY_COMPLIANCE_STATUS_CHANGE

Triggers

This webhook fires when any of the following occur for a downstream entity:
  • Agency license is created, updated, or expires
  • Agency appointment status changes
  • Compliance requirements for a product/state combination are updated
  • PDB (Producer Database) alerts from NIPR affect license or appointment data
This webhook is debounced with a 1-minute sliding window. After the last change in a sequence, Turris waits 1 minute before sending a consolidated webhook. A maximum cap of 30 minutes ensures delivery even during continuous activity.

Payload Example

{
  "webhookType": "DOWNSTREAM_ENTITY_COMPLIANCE_STATUS_CHANGE",
  "upstreamEntityId": "507f1f77bcf86cd799439010",
  "payload": [
    {
      "entity": "downstreamEntity",
      "downstreamEntityAssociationId": "507f1f77bcf86cd799439011",
      "legalName": "Acme Insurance Agency",
      "branchName": "Main Branch",
      "producerCode": "ABC123",
      "npn": "1234567",
      "products": [
        {
          "productId": "507f1f77bcf86cd799439012",
          "productName": "Property & Casualty",
          "states": [
            {
              "stateCode": "CA",
              "complianceStatus": "COMPLIANT",
              "licenseStatus": {
                "statusName": "Licensed"
              },
              "appointmentStatus": {
                "statusName": "Appointed"
              }
            },
            {
              "stateCode": "FL",
              "complianceStatus": "NOT_COMPLIANT",
              "licenseStatus": {
                "statusName": "Missing License",
                "statusMessages": ["Required license class not found"]
              },
              "appointmentStatus": {
                "statusName": "Missing Carrier",
                "statusMessages": ["No active appointment with required carrier"]
              }
            }
          ]
        }
      ]
    }
  ]
}

Field Reference

Entity Fields (each element in payload)

FieldTypeDescription
entitystringAlways "downstreamEntity" for this webhook type
downstreamEntityAssociationIdstringThe association ID linking the downstream entity to your upstream entity
legalNamestringLegal name of the downstream entity (agency)
branchNamestringBranch name of the association
producerCodestringThe producer code assigned to the entity
npnstringNational Producer Number
productsarrayArray of products where compliance status changed

Product Fields (each element in products)

FieldTypeDescription
productIdstringThe product ID
productNamestringHuman-readable product name
statesarrayArray of states where compliance status changed for this product

State Fields (each element in states)

FieldTypeDescription
stateCodestringUS state/territory code (e.g., CA, TX, NY)
complianceStatusstringEither COMPLIANT or NOT_COMPLIANT
licenseStatusobjectLicense status — see below
appointmentStatusobjectAppointment status — see below

Status Object Fields (licenseStatus and appointmentStatus)

FieldTypeDescription
statusNamestringHuman-readable status name (e.g., "Licensed", "Missing License", "STATE_REMOVED")
statusMessagesstring[](Optional) Array of detailed status explanations
When a state is removed from a product’s compliance requirements, licenseStatus and appointmentStatus will both have statusName: "STATE_REMOVED".

Batching

Because this webhook is debounced, a single delivery may contain multiple downstream entities in the payload array, and each entity may have multiple products and states that changed. Design your handler to iterate over the full payload.