Delegated Authority
A Delegated Authority (DA) agreement is the contractual foundation of an MGA's relationship with its carrier. It specifies exactly what the MGA is permitted to do without prior carrier approval: which risks, in which states, up to which limits, and up to what aggregate volume.
OpenInsure models DA agreements as versioned, structured configurations that are enforced automatically at both quote time and bind time.
DA Agreement Structure
A DA agreement in OpenInsure contains:
interface DAAgreement {
id: string;
carrierId: string;
programId: string;
effectiveDate: string;
expirationDate: string;
status: 'active' | 'suspended' | 'expired';
// Per-policy limits
maxOccurrenceLimit: number;
maxAggregateLimit: number;
maxPremiumPerPolicy: number;
// Geographic authority
authorizedStates: string[]; // 2-letter codes, or ['ALL_50'] for nationwide
excludedStates: string[]; // States specifically prohibited
// Class authority
authorizedNaicsCodes: string[]; // Empty array = all classes permitted
excludedNaicsCodes: string[]; // NAICS codes explicitly excluded
// Aggregate limits
annualGwpLimit: number; // Total bound GWP permitted per agreement year
quarterlyGwpLimit?: number; // Optional quarterly sub-limit
maxPoliciesPerInsured: number; // Prevent concentration on a single insured
// Risk characteristics
maxInsuredRevenue?: number;
maxTiv?: number; // Property only
allowedPolicyTerms: number[]; // e.g., [6, 12] months
minYearsInBusiness?: number;
// Referral triggers (auto-refer even within limits)
referralTriggers: ReferralTrigger[];
}
interface ReferralTrigger {
type: 'REVENUE_THRESHOLD' | 'LOSS_HISTORY' | 'CLASS_CODE' | 'STATE';
threshold?: number;
values?: string[];
description: string;
}
Creating a DA Agreement via API
POST /v1/da-agreements
Authorization: Bearer <admin_token>
Content-Type: application/json
{
"carrierId": "car_01J8...",
"programId": "prog_gl_contractors",
"effectiveDate": "2025-01-01",
"expirationDate": "2025-12-31",
"maxOccurrenceLimit": 1000000,
"maxAggregateLimit": 2000000,
"maxPremiumPerPolicy": 50000,
"authorizedStates": ["VT", "NH", "ME", "MA", "CT", "RI", "NY"],
"excludedNaicsCodes": ["238210", "237310"],
"annualGwpLimit": 5000000,
"maxInsuredRevenue": 50000000,
"allowedPolicyTerms": [12],
"referralTriggers": [
{
"type": "REVENUE_THRESHOLD",
"threshold": 25000000,
"description": "Refer accounts over $25M revenue to carrier TU"
},
{
"type": "LOSS_HISTORY",
"threshold": 1.5,
"description": "Refer any account with experience mod > 1.5"
}
]
}
Runtime Enforcement
DA enforcement runs at two checkpoints:
1. Quote-Time Pre-Check
When POST /v1/submissions/:id/quote is called, the rating engine reads the DA agreement from CF D1 (cached at the edge) and validates:
- Requested limits ≤ DA maximums
- Risk state is in
authorizedStates - NAICS code is not in
excludedNaicsCodes - Insured revenue ≤
maxInsuredRevenue(if set) - No referral trigger conditions are met
If any check fails, the quote response includes a daFlags array explaining the issue. The quote is still generated (so the producer knows the premium), but binding is blocked.
{
"grossPremium": 18750,
"daFlags": [
{
"code": "STATE_NOT_AUTHORIZED",
"severity": "BLOCK",
"message": "New York is not in the authorized states for this DA agreement",
"field": "state",
"value": "NY"
}
],
"bindable": false
}
2. Bind-Time Hard Stop
When POST /v1/submissions/:id/bind is called, the system re-runs all DA checks atomically (using a database transaction with row-level locking on the DA aggregate counter). This prevents race conditions where two simultaneous binds could collectively exceed an aggregate limit.
-- Atomic aggregate check + increment
UPDATE da_agreements
SET current_gwp = current_gwp + :new_premium
WHERE id = :da_id
AND current_gwp + :new_premium <= annual_gwp_limit
AND status = 'active'
RETURNING id;
-- If 0 rows updated → aggregate limit exceeded → 422
Breach Handling
A DA breach occurs when a bound policy is discovered to violate the DA terms post-bind (e.g., a NAICS code was misclassified, or a state eligibility error was made). The breach workflow:
- Detection — The compliance engine or carrier audit flags a breach.
- Notification — The carrier's compliance contact is automatically notified via email + API webhook.
- Referral — The policy is moved to
carrier_reviewstatus and blocked from further endorsements. - Resolution — Carrier may approve (retroactive) or require cancellation.
- Root Cause — Breach record is documented with corrective action.
POST /v1/da-agreements/:id/breaches
Authorization: Bearer <admin_token>
Content-Type: application/json
{
"policyId": "pol_01J8...",
"breachType": "STATE_NOT_AUTHORIZED",
"discoveredAt": "2025-07-10T09:00:00Z",
"description": "Policy bound in NY. NY was inadvertently excluded from the DA config.",
"proposedResolution": "Carrier to retroactively approve or MGA to arrange non-renewal"
}
Aggregate Tracking
The DA module provides real-time aggregate utilization reporting:
GET /v1/da-agreements/:id/utilization
# Response:
{
"daId": "da_01J8...",
"agreementYear": "2025",
"annualGwpLimit": 5000000,
"currentGwp": 2847500,
"utilizationPct": 56.95,
"remainingCapacity": 2152500,
"projectedYearEnd": 4920000,
"onPace": true,
"quarterlyBreakdown": [
{ "quarter": "Q1", "gwp": 780000, "pct": 15.6 },
{ "quarter": "Q2", "gwp": 1240000, "pct": 24.8 },
{ "quarter": "Q3", "gwp": 827500, "pct": 16.55 },
{ "quarter": "Q4", "gwp": 0, "pct": 0, "projected": true }
]
}
When utilization reaches 85% of the annual limit, the system automatically sends a warning to the MGA admin and the carrier's DA contact. At 95%, new binds are restricted to submissions already in the underwriting queue.
Monthly Reporting to Carriers
At the end of each month, the DA module generates a utilization report for the carrier showing:
- All policies bound during the period (with premium, state, class, limit)
- Running aggregate vs. limit
- Any referrals made and their disposition
- Any DA exceptions granted
This report is included in the monthly bordereaux package. See Bordereaux Automation for delivery configuration.