Surplus Lines Tax Compliance
Surplus lines insurance covers risks that the admitted (standard) market declines to write. Because these policies are placed with non-admitted carriers, they carry additional regulatory obligations: premium taxes, stamping office fees, diligent search requirements, and periodic tax return filings. OpenInsure automates this end-to-end through @openinsure/billing and the tax filing API.
Admitted vs Surplus Lines
Section titled “Admitted vs Surplus Lines”| Dimension | Admitted Market | Surplus Lines (Non-Admitted) |
|---|---|---|
| Rate approval | State DOI files and approves rates | Rates are not filed with the DOI |
| Guaranty fund | Policyholders protected by state guaranty fund | No guaranty fund protection |
| Tax collection | Carrier remits premium tax directly | Surplus lines broker remits premium tax |
| Stamping office | Not applicable | Required in stamping-office states |
| Diligent search | Not required | Most states require 3 admitted declinations |
| Carrier eligibility | Must be admitted in the state | Must appear on the state’s eligible surplus lines insurer list |
In the OpenInsure model, the MGA acts as the surplus lines broker of record. The platform tracks declinations, calculates taxes, and generates filing-ready tax returns.
Diligent Search Requirement
Section titled “Diligent Search Requirement”Most states require the producing broker to demonstrate that admitted markets have declined the risk before placing it with a non-admitted carrier. The system tracks this through the isSurplusLinesEligible() function in @openinsure/billing.
- Declination threshold — Typically 3 declinations. Configurable per state in
SL_TAX_RATES. - Exempt states — New York and Vermont do not require a diligent search for certain lines of business.
- Documentation — Each declination is recorded with carrier name, date, and reason. The system blocks binding until the threshold is met.
import { isSurplusLinesEligible } from '@openinsure/billing';
// Returns true if 3+ declinations recorded (or state doesn't require search)const eligible = isSurplusLinesEligible('FL', 'commercial_auto', 3);State Premium Tax Rates
Section titled “State Premium Tax Rates”Premium tax rates vary by state and are maintained in the SL_TAX_RATES lookup table in packages/billing/src/surplus-lines-tax.ts. Rates are sourced from the NAPSLO/WSIA surplus lines law compendium.
Selected state rates (representative sample):
| State | Premium Tax | Stamping Fee | Filing Fee | Declinations |
|---|---|---|---|---|
| FL | 5.0% | 0.10% | 0.15% | 3 |
| TX | 4.8% | 0.06% | — | 3 |
| CA | 3.0% | 0.18% | — | 3 |
| NY | 3.6% | 0.06% | — | Not required |
| IL | 3.5% | 0.10% | — | 3 |
| GA | 4.0% | — | — | 3 |
| AL | 6.0% | — | — | 3 |
| OR | 0.22% | 0.30% | — | 3 |
| PR | 9.0% | — | — | 3 |
The full table covers all 50 states plus DC, Puerto Rico, the U.S. Virgin Islands, and Guam.
Stamping Offices
Section titled “Stamping Offices”Several states operate a Surplus Lines Stamping Office (SLSO) that reviews and stamps each surplus lines policy for compliance. States with stamping fees in the OpenInsure rate table include:
- California (SLSF) — 0.18%
- Florida (FSLSO) — 0.10%
- Texas (SLTX) — 0.06%
- New York (ELANY) — 0.06%
- Illinois (ILSLS) — 0.10%
- Minnesota — 0.05%
- Oregon — 0.30%
Where a stamping fee applies, the system automatically includes it in the tax calculation and the filing output.
Tax Calculation
Section titled “Tax Calculation”All surplus lines tax arithmetic uses the Money type from @openinsure/rating to guarantee cent-precise, deterministic results. The calculateSurplusLinesTax() function returns a breakdown per policy:
import { calculateSurplusLinesTax } from '@openinsure/billing';
const breakdown = calculateSurplusLinesTax('FL', 125000);// {// state: 'FL',// grossPremium: 125000,// premiumTax: 6250, // 5.0%// stampingFee: 125, // 0.10%// filingFee: 187.5, // 0.15%// totalTax: 6562.5// }Municipal and Local Taxes
Section titled “Municipal and Local Taxes”Some jurisdictions impose additional local taxes on surplus lines placements, typically on fire and property lines. The system maintains a MUNICIPAL_TAX_RATES table with rates for major metropolitan areas:
| Jurisdiction | State | Tax Rate | Applies To |
|---|---|---|---|
| New York City | NY | 3.4% | Fire |
| Los Angeles | CA | 5.0% | All |
| San Francisco | CA | 5.0% | Fire |
| Chicago | IL | 3.5% | Fire |
| Houston | TX | 2.5% | Fire |
| Miami-Dade | FL | 1.0% | Fire |
| Seattle | WA | 5.0% | Fire |
| Denver | CO | 3.0% | All |
| Boston | MA | 4.0% | Fire |
Fire-applicable LOBs include: fire, homeowners, commercial property, dwelling, and BOP. The calculateMunicipalTax() function checks the LOB against the jurisdiction’s appliesTo filter before applying the rate.
Tax Return Generation
Section titled “Tax Return Generation”The tax filing API generates state-level tax returns that aggregate all surplus lines policies for a given period. The workflow is:
- Generate —
POST /v1/tax/surplus-lines/generatewith a{ period: "2025" }body. The system loads all bound/active/expired policies, calculates per-policy taxes, and aggregates by state. - Review — Each generated return starts in
draftstatus. Returns include line-item detail (policy number, gross premium, premium tax, stamping fee, filing fee) and aggregate totals. - File — Update status to
filedviaPATCH /v1/tax/surplus-lines/:id/status. - Track — Returns progress through:
draft->ready->filed->acceptedorrejected.
Tax Return Summary
Section titled “Tax Return Summary”The generate endpoint returns a TaxReturnSummary with cross-state totals:
| Field | Description |
|---|---|
stateCount | Number of states with taxable premium |
totalGrossPremium | Sum of gross premium across all states |
totalPremiumTax | Sum of state premium taxes |
totalStampingFee | Sum of stamping office fees |
totalFilingFee | Sum of state filing fees |
totalMunicipalTax | Sum of municipal/local taxes |
totalTaxLiability | Grand total tax due |
Filing Due Dates
Section titled “Filing Due Dates”Filing deadlines are state-specific and stored in the SL_TAX_DUE_DATES table:
| State | Due Date |
|---|---|
| FL | March 1 |
| TX | March 1 |
| CA | March 1 |
| NY | January 31 |
| IL | March 15 |
| Default | March 1 |
Due dates are calculated for the year following the tax period (e.g., 2025 policies are due for filing by March 1, 2026).
Tax Filing API
Section titled “Tax Filing API”List Returns
Section titled “List Returns”GET /v1/tax/surplus-lines?state=FL&period=2025&status=draftAuthorization: Bearer <token>Returns are filterable by state, period, and status. Requires org_admin or billing_admin role.
Get Return Detail
Section titled “Get Return Detail”GET /v1/tax/surplus-lines/:idAuthorization: Bearer <token>Returns the full tax return with parsed line items (per-policy breakdown).
Update Filing Status
Section titled “Update Filing Status”PATCH /v1/tax/surplus-lines/:id/statusAuthorization: Bearer <token>Content-Type: application/json
{ "status": "filed", "filedDate": "2026-02-15"}Export CSV
Section titled “Export CSV”GET /v1/tax/surplus-lines/:id/csvAuthorization: Bearer <token>Returns a CSV file with columns: Policy Number, Effective Date, LOB, Gross Premium, Premium Tax, Stamping Fee, Filing Fee. Includes a TOTAL summary row. The CSV is formatted for direct submission to state tax authorities or stamping offices.
Late Filing Penalties
Section titled “Late Filing Penalties”If a tax return is filed after the due date, the calculateLatePenalty() function computes the penalty and interest:
- Penalty — 10% of tax due (flat).
- Interest — 1% per month of tax due (simple interest), counted from the due date.
- Months late — Calculated using 30.44-day month approximation, rounded up.
POST /v1/tax/surplus-lines/:id/late-penaltyAuthorization: Bearer <token>Content-Type: application/json
{ "filedDate": "2026-06-15"}The penalty and interest amounts are persisted to the tax return record for audit trail purposes.
Authorization
Section titled “Authorization”All tax filing endpoints require the org_admin or billing_admin JWT role. The endpoints are org-scoped — each request operates only on policies and returns belonging to the authenticated organization.