Skip to main content
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:
  1. Detection — The compliance engine or carrier audit flags a breach.
  2. Notification — The carrier’s compliance contact is automatically notified via email + API webhook.
  3. Referral — The policy is moved to carrier_review status and blocked from further endorsements.
  4. Resolution — Carrier may approve (retroactive) or require cancellation.
  5. 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 }
  ]
}
:::caution 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.