State pricing and requirements

Before you quote or file in a state, you often want two things: what will this cost, and what does this state need from me. Both come from endpoints you've likely already called, this page just points at the right one for each question.

"What does it cost?" → /calculate

Pricing is not a lookup, it's a calculation based on the premium and the transaction type. Use POST /partner/calculate:

curl -X POST "$BASE_URL/partner/calculate" \
  -H "PartnerKey: $PARTNER_KEY" -H "Content-Type: application/json" \
  -d '{
        "filingType": "NEW_BUSINESS",
        "stateAbbr": "WA",
        "premium": 12500
      }'

Full field-by-field breakdown of inputs and outputs: Price a policy.

Don't fetch raw rates just to get a price

/calculate already knows the state's rate configuration and applies it for you. The raw rate config further down this page is for advanced cases only.

"What does it require?" → /filing-states

Requirements (what a state expects before it will accept a filing) come from GET /partner/filing-states:

curl "$BASE_URL/partner/filing-states?state=WA" -H "PartnerKey: $PARTNER_KEY"
[
  {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "name": "Washington",
    "stateAbbr": "WA",
    "descriptionNb": "<ol><li>Signed application</li><li>Declarations page, within 60 days of binding</li></ol>",
    "descriptionEd": "<ol><li>Endorsement declarations page</li></ol>",
    "filesNb": [
      { "id": "...", "name": "Declarations page", "fileName": null, "filePath": null, "createdAt": "...", "updatedAt": "..." }
    ],
    "filesEd": [
      { "id": "...", "name": "Endorsement declarations page", "fileName": null, "filePath": null, "createdAt": "...", "updatedAt": "..." }
    ]
  }
]
FieldMeaning
idThe filingStateId to use with /create-filing.
descriptionNbRequirements for new-business filings (NEW_BUSINESS, NEW_BUSINESS_RENEWAL) in this state, as an HTML string.
descriptionEdRequirements for endorsement filings (ENDORSEMENT_ADDITIONAL, ENDORSEMENT_RETURN), as an HTML string.
filesNbThe documents this state expects for a new-business filing. Each entry names a required document, not a file to download.
filesEdThe documents this state expects for an endorsement filing.

Call it without ?state= to get every state your account can file in, or check enabledStates on GET /partner/me for the plain list of state codes you have access to.

One entity, two contexts

Each state has one descriptionNb/filesNb pair and one descriptionEd/filesEd pair, not a separate record per filing type. Read whichever pair matches the filing you're preparing.

descriptionNb / descriptionEd: render them, don't print them

These fields are HTML, not plain text

descriptionNb and descriptionEd come back as an HTML string, usually an ordered list (<ol>) that spells out exactly what to provide for that filing type. Render it as HTML (for example dangerouslySetInnerHTML in React, or your templating layer's equivalent). If you print the raw string in a plain-text UI, your users will see literal <li> tags instead of a checklist.

filesNb / filesEd: the documents to gather

Each entry in filesNb (new business) or filesEd (endorsement) is one required document:

FieldMeaning
nameWhat the document is, for example "CA D1 form". This tells you what to obtain, it isn't a file to download.
fileName / filePathPoint to a reference template for that document, when Valley provides one. Both are null when there's no template, for example when the document is something you already have (a license copy) rather than a form we supply.

Treat filesNb / filesEd as your checklist: gather every document it lists before you call /upload-user-file. Each document you upload becomes one entry in the files array you send to /create-filing, with name matching what was listed here and filePath set to the storagePath you got back from the upload.

Example: California, new business (illustrative, always fetch live requirements)

For California new-business filings, filesNb currently names these documents:

  • CA D1 form
  • NEW CA SL-2 2024
  • Copy of CA Agent/Agency P&C/SL license
  • Copy of declaration page w/ limits or binder w/ limits

And descriptionNb, once rendered as HTML, reads like this (trimmed):

<ol>
  <li>Declaration pages with limits, or a binder with limits</li>
  <li>Completed and signed CA SL-2 form</li>
  <li>Signed D1 form</li>
  <li>Completed CCI/ECP checklist</li>
  <li>Current P&C license</li>
  <li>Syndicate list, for Lloyd's policies</li>
  <li>Put the policy invoice date in the filing notes</li>
</ol>

This is a snapshot, not a contract. States change their requirements, so the authoritative, current text is always whatever /filing-states returns at the time you call it, don't hardcode this list.

Your account is enabled for specific states

You can only file in the states your account is set up for. Check enabledStates on GET /partner/me before building against a state. If a state you need isn't in that list, contact us at gina@valleyinsllc.com to request access.

Advanced: raw rate configuration

Most integrations never need this. /calculate already applies these rates for you. This is here for partners building their own rate-preview UI or reconciling numbers against our fee engine directly.

GET /partner/get-state-rates/{state}/{type} returns the raw fee-engine configuration for a state, where type is new-business or endorsement:

curl "$BASE_URL/partner/get-state-rates/WA/new-business" -H "PartnerKey: $PARTNER_KEY"
{
  "id": "...",
  "filingFee": "FLAT",
  "filingFeeValue": 25,
  "filingFeeMinimum": 0,
  "filingFeeMaximumEnabled": false,
  "filingFeeMaximum": 0,
  "surplusTax": "PERCENTAGE",
  "surplusTaxValue": 3.5,
  "surplusTaxRounded": true,
  "stampingFee": "PERCENTAGE",
  "stampingFeeValue": 0.5,
  "stampingFeeRounded": true,
  "lgt": "OFF",
  "lgtValue": 0,
  "mwua": "OFF",
  "mwuaValue": 0,
  "fmt": "OFF",
  "fmtValue": 0,
  "carriersFee": false,
  "carriersTaxable": false,
  "policyFee": false,
  "policyTaxable": false,
  "createdAt": "..."
}

Each fee has a mode enum and a value. Modes vary by fee:

FeeMode enumMeaning
filingFeeOFF, FLAT, PERCENTAGE, PERCENTAGE_WITH_FEESHow the state filing fee is computed.
surplusTaxOFF, FLAT, PERCENTAGE, PERCENTAGE_WITH_FEES, PERCENTAGE_WITH_FEES_VIAHow surplus lines tax is computed.
stampingFeeOFF, FLAT, PERCENTAGE, PERCENTAGE_WITH_FEES, PERCENTAGE_WITH_FEES_VIAHow the stamping office fee is computed.
lgtOFF, PERCENTAGE, PERCENTAGE_WITH_FEES, PERCENTAGE_WITH_FEES_VIA, MANUALLocal government tax mode, where the state levies one.
mwuaOFF, PERCENTAGE, PERCENTAGE_WITH_FEES, PERCENTAGE_WITH_FEES_VIA, MANUALWindstorm/market-assistance surcharge mode, where applicable.
fmtOFF, PERCENTAGE, PERCENTAGE_WITH_FEES, PERCENTAGE_WITH_FEES_VIA, MANUALFire marshal tax mode, where the state levies one.

PERCENTAGE_WITH_FEES bases the percentage on premium plus other fees, PERCENTAGE_WITH_FEES_VIA additionally includes the stamping/VIA fee in that base, and MANUAL means the value is set directly rather than computed. carriersFee, carriersTaxable, policyFee, and policyTaxable are booleans controlling whether those flat fees apply and whether they're taxable.

Reproducing /calculate's output from this raw config yourself is more work than it's worth for almost every use case, call /calculate instead.