Overview
TheDOWNSTREAM_ENTITY_REGULATORY_ACTION_ADDED webhook is triggered when the daily NIPR PDB-alerts pass finds a regulatory action against one of your agencies that Turris has not seen before.
It exists because an adverse action against an agency previously reached you only if you went looking. Regulatory actions are available on Get Downstream Entity Regulatory Actions, but nothing told you when a new one appeared, so the only way to act on one was to poll every agency on your book. An action does not always change a compliance status either, so the compliance-status events cannot stand in for this.
This event tells you an action was newly filed, against which agency, and what it says.
Webhook type: DOWNSTREAM_ENTITY_REGULATORY_ACTION_ADDED
Triggers
This webhook fires when the daily NIPR PDB-alerts pass records a regulatory action against an agency that was not already on file. That is the only trigger, and the wording is deliberate — see the next section for what that excludes.This webhook is sent immediately, with no debouncing, and there is one delivery per newly found action. A single
daily pass can find several, so a receiver can see a short run of deliveries — bounded by what NIPR newly reports,
which is typically small, rather than by any batching on our side.
What does not fire this event
Only newly found actions are delivered
An agency’s existing action history is never delivered by this event, and that is by design rather than an omission. Three cases all stay silent:- the first compliance-data synchronisation after an agency is added, which loads its whole history at once
- a re-synchronisation after its NIPR data is reset, which reloads the same history
- an internal reprocessing run over previously retrieved NIPR data
Payload Example
An action with full detail:Payload Fields
The seven nullable NIPR fields are always present as keys.
null means NIPR did not supply a value; it never
means the key is missing. So you can read payload.disposition without a presence check, and an empty string from
NIPR is normalised to null so you do not have to treat blank and absent differently.Two of the numbers are worth reading carefully. penaltyFineForfeitureInUSD: 0 genuinely means no penalty, but
lengthOfOrderInDays: 0 is ambiguous in NIPR’s own data — it covers both “not specified” and “indefinite”. Do not
render it as “0 days”.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.Deduplication
Key onactionId + npn + stateCode. Those three together identify a real-world action, and a redelivery of the
same action carries the same three values.
Do not key on regulatoryActionId alone if you also poll the API, because you would then hold the same action twice
under two different shapes of record.
No fan-out across relationships
If you hold more than one relationship with the same agency, or if the same agency appears on more than one carrier’s book, each holder gets their own copy of the action and receives exactly one delivery for it, carrying their owndownstreamEntityAssociationId.
This differs from Agency Updated, where a single change to the agency
record fans out once per relationship. There is nothing to de-duplicate across relationships here.