Skip to content
Insurance · Homeowners & flood

Homeowners and flood documents,
without the template headache.

A declaration packet is dozens of forms, endorsements, and state notices, included or excluded by condition. Today that lives in code, behind a deploy. Mezdoc makes it one versioned workflow: edit without code, fill by API, sign with an audit trail.

The problem

Today, changing one sentence means a deploy.

Picture a Tuesday afternoon. Compliance wants one line on the California wildfire notice reworded before renewals go out. Sounds like a five-minute fix. It is not. The document lives in code, HTML and Liquid that reaches into a policy snapshot like data.policy.characteristics[0].cov_a, so the change needs an engineer, a pull request, and a deploy window.

Now multiply that by every state, every carrier form, and every declaration, endorsement, and cancellation you send. The templating was never the hard part. Living with it is.

policy-docs / declaration.template.liquid
<h1>Declarations</h1>
<p>Insured: {{ data.policy.holder.name }}</p>
{% if data.policy.characteristics[0].cov_a > 0 %}
  <p>Coverage A: {{ data.policy.characteristics[0].cov_a
     | currency }}</p>
{% endif %}
{% if data.policy.state == "CA"
   and data.policy.fire_zone == "very_high" %}
  {% include "ca_wildfire_fair_plan_notice" %}
{% endif %}
{% for e in data.policy.endorsements %}
  {% include e.template_id %}
{% endfor %}
Deploying to production9m 41s

No UI - engineers only

Documents are HTML and Liquid in a repo. Compliance cannot fix a notice or swap a logo; they file a ticket and wait for an engineer.

Versioning is brittle

Changes ride the platform deploy pipeline. There is no clean per-document history, no staging-versus-production pin, and rollback is a redeploy. Someone edits a template and production breaks.

Every edit is a deploy

Changing one sentence means a code change, a config redeploy, and a slow render feedback loop. A wording fix that should take a minute takes a release.

Logic is duplicated

The same condition (if state is CA, if flood zone is A or V) gets rewritten across many templates. Drift is inevitable and hard to audit.

Costly for what it is

You pay premium platform pricing for a document engine that still needs your engineers for every change. The value does not match the bill.

Hard to test

Validating a change means rendering against sample data through a slow loop, with no instant preview of how the final packet looks.

Try it

Change one fact. Watch the packet rebuild.

This is the whole idea, made tangible. Flip the risk state, the flood zone, the coverage, or a checkbox, and the document set assembles itself. Every row tells you the exact condition that put it in or left it out. No template was edited. Nothing was deployed.

Try a scenario
Policy facts
Risk state
Flood zone
Coverage A (dwelling)
Roof age
What your code sends
{
  "state": "CA",
  "flood_zone": "A",
  "coverage_a": 750000,
  "roof_age": "15yr+",
  "water_backup": true,
  "scheduled_items": false,
  "mortgagee": true
}
Assembled packet
8of 12 included
Declarations page
always
In
Homeowners policy formHO-3
always
In
Water back-up & sump overflowHO 04 95
water_backup is on
In
Ordinance or law, increasedHO 04 77
coverage_a >= 750,000
In
Scheduled personal propertyHO 04 61
scheduled_items is on
Skipped
Roof payment schedule (ACV)RPS
roof_age >= 15 years
In
Wildfire + FAIR Plan noticeCA
state == "CA"
In
Hurricane / named-storm deductibleFL/TX
state in FL, TX
Skipped
Sinkhole coverage disclosureFL
state == "FL"
Skipped
NFIP flood policy formNFIP
flood_zone in A, V
In
Coastal / V-zone endorsementV
flood_zone == "V"
Skipped
Mortgagee notice
mortgagee is present
In
One field set in, the right packet out. No template edits, no deploy.

This is a live preview of the rules, running in your browser. The real API takes the same fields and returns the rendered, signed PDFs.

The full catalog

Every document, and the rule that includes it.

You bring the form content. Mezdoc handles the templating, the conditions, and the assembly. This is the whole set a homeowners and flood program tends to touch, grouped the way you would actually think about it.

Core
  • Declarations page
    always
  • Homeowners policy formHO-3
    always
  • Personal property replacement costHO 04 90
    if replacement cost
Endorsements
  • Water back-up & sump overflowHO 04 95 / 06 95
    if water_backup selected
  • Ordinance or law, increasedHO 04 77
    if coverage_a >= 750,000
  • Scheduled personal propertyHO 04 61
    if scheduled_items
  • Premises alarm creditHO 04 16
    if alarm_system
  • Roof payment schedule (ACV)RPS
    if roof_age >= 15
  • Named-storm / wind-hail deductible
    if peril == named_storm
State notices
  • Wildfire + FAIR Plan noticeCA
    if state == "CA"
  • Hurricane / named-storm noticeFL / TX
    if state in FL, TX
  • Sinkhole acceptance / rejectionFL
    if state == "FL"
  • Fraud + replacement-cost disclosures
    by state
Flood
  • NFIP Homeowner / Dwelling / General Property formNFIP
    if flood_zone in A, V
  • Flood declarations page
    if flood bound
  • Increased Cost of ComplianceICC
    if substantial loss
  • Coastal / V-zone endorsement
    if flood_zone == "V"
Lifecycle & parties
  • Notice of cancellation
    if transaction == cancellation
  • Notice of nonrenewal
    if transaction == nonrenewal
  • Reinstatement notice
    if reinstated
  • Change endorsement + revised dec
    if transaction == endorsement
  • Mortgagee / lienholder copy
    if mortgagee present
Whole policy lifecycle

One engine for declarations, endorsements, and cancellations.

The same field vocabulary and the same condition language cover every document set across the life of the policy. Build it once, reuse it everywhere.

Declaration

New business and renewal. Assemble the dec page, base form, selected endorsements, state notices, and flood forms by condition.

Documents

Declarations, HO-3, HO 04 95, HO 04 77, CA wildfire notice, NFIP form, mortgagee copy

Endorsement

Mid-term change. Issue the change endorsement and a revised declarations page, with the 30-day explanation when an endorsement reduces coverage.

Documents

Change endorsement, revised declarations, coverage-change explanation, mortgagee notice

Cancellation and nonrenewal

Notice days and wording vary by state and reason. Generate the right notice, plus reinstatement and lienholder copies, every time.

Documents

Notice of cancellation, notice of nonrenewal, reinstatement notice, mortgagee or lienholder copy

Works with your stack

Keep your core system. Swap the document layer.

Your policy admin or rating system stays the system of record. It POSTs the policy JSON to a Mezdoc workflow and gets back the assembled, signed packet. No re-platforming, no migration project.

  • Mezdoc is the document and eSign layer, not a policy admin or rating engine.
  • You bring your own carrier forms and notice wording; we template and assemble them.
  • Native single-signer eSign with an audit trail (IP, user agent, SHA-256 of the PDF). In active development.
Your core system calls one endpoint
POST https://api.mezdoc.com/v1/workflows/homeowners-declaration/runs
{
  "environment": "production",
  "idempotency_key": "decl_2026_06_01_00481",
  "data": {
    "policyholder_name": "Acme Holdings",
    "coverage_a": 750000,
    "state": "CA",
    "fire_zone": "very_high",
    "flood_zone": "A",
    "water_backup_limit": 10000,
    "mortgagee": "First National"
  }
}
Returns the assembled packet, by rule, with the right notices.
FAQ

Questions teams ask first.

What documents are in a homeowners insurance policy packet?

A bound homeowners policy is a packet, not a single PDF: a declarations page, a base policy form (for example an HO-3), the attached endorsements (water back-up HO 04 95, ordinance or law HO 04 77, scheduled property HO 04 61, and others), any state-mandated notices, and, when flood is bound, the NFIP or private flood forms. Which documents are included depends on the coverage, the property, and the state.

How do conditional document inclusions work?

Each document carries an include or exclude rule written in one condition language. Examples: include the California wildfire and FAIR Plan notice when the state is CA and the property is in a very high fire-hazard zone; include the NFIP flood form when the flood zone is A or V; attach water back-up HO 04 95 only when the insured selected it; add the mortgagee notice only when a mortgagee is present. Workflow-level fields are entered once and map into every document in the packet.

Can I keep my core system and use Mezdoc only for documents?

Yes. Mezdoc is the document generation, assembly, and eSign layer, not a policy admin or rating system. Your core system stays the system of record and POSTs policy JSON to a Mezdoc workflow; Mezdoc returns the assembled, signed packet. There is no re-platforming.

How is this different from hand-coded Liquid or Velocity templates?

Hand-coded templates live in code, so only engineers can change a sentence, every edit waits on a deploy, and versioning rides the platform pipeline. Mezdoc gives a visual editor your ops and compliance teams can use, real per-template versioning with staging and production pinning, instant preview, and the same condition language across structured PDFs, dynamic documents, and workflows.

Do you support flood (NFIP) documents?

Yes. The NFIP Homeowner Flood Form, Dwelling Form, and General Property Form, the flood declarations page, and private flood carrier forms can all be templated and assembled by rule, including ICC and zone-driven conditions.

Turn your declaration packet into a workflow.

Show us the forms and the conditions you handle today. We will map them to a workflow and show you a first assembled packet in your shape.