Overview
TheDOWNSTREAM_ENTITY_LICENSE_EXPIRING webhook is triggered when one of your agencies’ licenses is 60 days from its renewal date.
It exists because a lapsing agency license did not reliably reach you. Agency Compliance Status Change fires per product and state, and only when a compliance status actually flips, so a license expiring in a state you have no requirement for is silent. Nothing announced the approaching date itself.
Webhook type: DOWNSTREAM_ENTITY_LICENSE_EXPIRING
Triggers
One delivery per license, on the day it is exactly 60 days from itsnextRenewalDate.
Deliveries land on a daily sweep at 05:00 America/New_York, not in real time. This is a date crossing rather
than a change to a record.
What does not fire this event
Licenses marked do-not-renew DO fire
If a license has been marked do-not-renew, this event still fires. Turris suppresses its own renewal reminders in that case, because there is no point nagging about a license someone decided to drop. For a carrier the reasoning inverts: an agency deliberately letting a license lapse is one of the most actionable things you can hear about your distribution book.Perpetual licenses never fire, and there are more than you might think
Both events are driven entirely by a range query onnextRenewalDate. A license without one cannot match, so it never produces a delivery.
That is roughly 11% of agency licenses on the platform. If you reconcile deliveries against your own license count you will find a gap, and this is it. Read Get Downstream Entity Licenses for the full picture.
There is no “expired” license status to key on
status is copied verbatim from NIPR and nothing in Turris derives it from a date, so a license 60 days from expiry and one that lapsed last week both normally carry status: "active".
Use daysUntilExpiration and nextRenewalDate. Do not use status to infer expiry.
Payload Example
Payload Fields
The entity fields are best-effort, and they all depend on one lookup.
downstreamEntityId, legalName,
downstreamEntityAssociationId, branchName and producerCode are resolved from your association with the
agency. If that lookup misses — an agency archived between our read and the delivery is the realistic case —
none of them arrive. If it hits, downstreamEntityId and downstreamEntityAssociationId are always
present and the rest are individually best-effort.One distinction worth reading carefully: an absent producerCode key means the lookup did not resolve,
whereas producerCode: null means it resolved and no producer code is assigned.There is deliberately no
expirationDate field. nextRenewalDate is the only expiry date the platform holds.
(The license GET reference currently documents an expirationDate; that field does not exist on any record and no
response has ever carried a value for it.)Deduplication and volume
Each license matches the 60-day boundary on exactly one calendar day, so you receive one delivery per license per renewal cycle. No debouncing, no batching. A renewal that movesnextRenewalDate forward re-arms the event for the new date rather than cancelling anything already sent.