Skip to main content

Overview

The AGENT_LICENSE_EXPIRED webhook is triggered the day after one of your producers’ licenses passes its renewal date. This is the event behind “did you know your license lapsed in Oregon”. Agent Compliance Status Change fires per product and state and only on an actual status flip, so a lapse in a state you have no requirement for, or one covered by another license the producer holds, never reached you. Webhook type: AGENT_LICENSE_EXPIRED

Triggers

One delivery per license, on the day after its nextRenewalDate. The day after is deliberate: a state treats the renewal date as the last valid day, so a license expiring today is still valid today. daysUntilExpiration is therefore -1 on a normal delivery, not 0.
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 the producer chose not to renew DO fire

If a producer marked a license do-not-renew, this event still fires, which is the opposite of how Turris treats its own renewal reminders (those are suppressed, because there is no point nagging someone about a license they decided to drop). For a carrier the reasoning inverts, and this is arguably the single most useful case: the license you most want to hear about lapsing is the one the producer let lapse on purpose.

There is no “expired” license status, and this payload proves it

The most confusing thing about this event: status on the payload normally reads "active" even though the license has expired. That is correct. status is copied verbatim from the NIPR PDB payload and nothing in Turris derives it from a date, so a license can sit at active with a renewal date years past. This event exists precisely because the status field cannot tell you what this tells you. Key on daysUntilExpiration being negative, or on nextRenewalDate being in the past. Never on status.

Perpetual licenses never fire

Both events are driven entirely by a range query on nextRenewalDate, so a license without one never produces a delivery. That is roughly 9% of producer licenses on the platform. Reconcile against Get Agent Licenses if you need the complete set.

Payload Example

Note status: "active" on an expired license, and daysUntilExpiration: -1. Both are what a real delivery looks like.

Payload Fields

The entity fields are best-effort, and they all depend on one lookup. agentId, downstreamEntityAssociationId, branchName and legalName are resolved from your association with the producer’s 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, downstreamEntityAssociationId is always present and the rest are individually best-effort.Absent means “we could not resolve this”, never a statement about the data. Re-read from the API rather than inferring anything from an absent field.One caveat. When a producer works under more than one of your agencies, the agency fields name an arbitrary one of those relationships, because a single NIPR subscription is shared across them. agentId is exact; treat downstreamEntityAssociationId as one of possibly several. Match on agentId.
There is deliberately no expirationDate field. nextRenewalDate is the only expiry date the platform holds.

Deduplication and volume

Each license matches the expired boundary on exactly one calendar day, so you receive one delivery per license per renewal cycle. No debouncing, no batching.
Size your receiver for the spike, not for the median. A typical sweep delivers single digits and the 95th percentile is under 50, but the busiest measured sweep for a single carrier carries about 2,800 deliveries of this event alone. Because renewal dates cluster on the last day of the month, this event’s spikes land on the 1st or 2nd. Return 2xx quickly and queue.
If the daily sweep does not run, that day’s licenses are not announced later. There is no catch-up pass. Reconcile against Get Agent Licenses if you need a guarantee.
Webhook subscriptions are per event type. Subscribing to Agent License Expired does not deliver Agent License Expiring — register a separate webhook for each.