The HomeQuotr REST API returns JSON pricing, history, contractor, peril, frequency, trade, city, and usage data across 8 endpoints, covering 100 U.S. cities and 6 trades. Fields are tier-gated per endpoint. Pricing is anchored to municipal building permit records, with the top metros refreshed weekly.

API Reference

Eight REST endpoints. JSON responses. Pricing, contractor, time-series, covered-peril, frequency, and metro data from 5.7M+ municipal permits across 100 U.S. cities.

Base URLhttps://api.homequotr.com/v1

Start with 500 free Sandbox calls each month, Dallas only. Corporate email required. Get API Key →

Authentication

Every request requires an API key passed in the X-API-Key header. Keys are scoped to your account and tied to a pricing tier.

Production
hq_live_a1b2c3d4e5f6...
Test
hq_test_x9y8z7w6v5u4...
Header
X-API-Key: hq_live_a1b2c3d4e5f6...

Rate Limits

TierPricePer MinutePer Month
SandboxFree →50500
Starter$799/mo20010,000
Growth$2,499/mo80050,000
Scale$4,999/mo2,000150,000
Enterprise$7,499/mo6,000Unlimited
Custom$15,000+/mo6,000+Volume-negotiated

HTTP Status Codes

CodeMeaningWhen
200OKRequest succeeded
400Bad RequestInvalid trade slug, city slug, or query parameter
401UnauthorizedMissing or invalid API key
403ForbiddenEndpoint not available on your tier
429Rate LimitedPer-minute or monthly quota exceeded
500Server ErrorUnexpected internal failure
GET/v1/pricing/:trade/:citySandbox+

Pricing data for a specific trade and city: median, range, percentiles, and permit count from municipal building permits. Field projection escalates by tier. See per-field badges below.

ParameterTypeRequiredDescription
tradestringRequiredTrade slug: hvac, roofing, electrical, plumbing, foundation, solar
citystringRequiredMetro slug (e.g., dallas, new-york)
includestringOptionalComma-separated: contractors and/or incentives (solar only)
curl https://api.homequotr.com/v1/pricing/hvac/dallas \
  -H "X-API-Key: hq_live_a1b2c3d4..."
response.json
// Enterprise-tier response. Lower tiers see a subset (field-gated per api-specification.md §9.1.2).
{
  "data": {
    "median_price": 6100,
    "min_price": 2100,
    "max_price": 18200,
    "p25_price": 4300,
    "p75_price": 8600,
    "p90_price": 11400,
    "p95_price": 13900,
    "severity_distribution": [
      { "bucket": 1, "min": 2100, "max": 3200, "count": 42 }
    ],
    "permit_count": 847,
    "permit_count_quality_score": 87,
    "source_attribution": "City of Dallas Building Safety Department",
    "scope": "city",
    // Growth+ only
    "confidence_interval_low": 5850,
    "confidence_interval_high": 6410,
    // Scale+ only
    "cpi_normalized_median": 6314,
    "material_cost_indexed_median": 6480,
    "labor_rate_msa_indexed_median": 6255,
    // Enterprise+ only
    "covered_peril_mapping": [
      { "peril_type": "hail", "frequency_weight": 0.42, "severity_adjustment": 1.18, "source_reference": "NOAA SPC 2020-2024", "specificity_tier": "per_metro" }
    ],
    "frequency_estimate": {
      "lambda": 0.087, "ci_low": 0.078, "ci_high": 0.096, "observation_years": 12.3, "permit_count": 4844
    }
  },
  "meta": {
    "tier": "enterprise",
    "methodology_version": "hq_methodology_v1.0_2026",
    "last_updated": "2026-04-08",
    "data_source": "municipal_permits"
  }
}

Response Shape

Each field carries a minimum tier. Lower tiers receive the field projection their plan unlocks. Sandbox keys see the Starter projection but only for Dallas.

FieldTypeMin TierDescription
median_priceintegerSandbox+Median declared value from permits (USD)
min_priceintegerSandbox+Lowest permit value in range (USD)
max_priceintegerSandbox+Highest permit value in range (USD)
p25_priceintegerSandbox+25th percentile, lower quartile (USD)
p75_priceintegerSandbox+75th percentile, upper quartile (USD)
p90_priceintegerSandbox+90th percentile (USD)
p95_priceintegerSandbox+95th percentile (USD)
severity_distributionarraySandbox+Per-bucket histogram of permit values (10 or 20 bins)
permit_countintegerSandbox+Number of permits used in calculation
permit_count_quality_scoreintegerSandbox+Quality score 0 to 100 reflecting completeness and recency
source_attributionstringSandbox+Originating municipal authority for the permit set
last_updatedstringSandbox+Date of last data refresh (ISO 8601)
date_range_startstringSandbox+Earliest permit date in the aggregate window (ISO 8601)
date_range_endstringSandbox+Latest permit date in the aggregate window (ISO 8601)
scopestringSandbox+Geographic scope of the aggregate: city, metro, or state
confidence_interval_lowintegerGrowth+95% CI lower bound on the median (USD)
confidence_interval_highintegerGrowth+95% CI upper bound on the median (USD)
cpi_normalized_medianintegerScale+Median normalized to current CPI (BLS CUUR0000SA0)
material_cost_indexed_medianintegerScale+Median indexed to BLS PPI for construction materials
labor_rate_msa_indexed_medianintegerScale+Median indexed to BLS QCEW MSA-level construction labor rate
covered_peril_mappingarrayEnterprise+Inline top-3 perils per metro and trade. Each entry: peril_type, frequency_weight, severity_adjustment, source_reference, specificity_tier (per_metro | climate_region | national_baseline)
frequency_estimateobjectEnterprise+Events per insured-home-year with 95% CI. Fields: lambda, ci_low, ci_high, observation_years, permit_count
custom_peril_taxonomy_idstringCustomIdentifier for a customer-defined peril taxonomy
actuarial_review_letter_versionstringCustomVersion pin of the actuarial review letter backing the dataset
The include=incentives parameter is only available for the solar trade. It returns federal and state incentive data from DSIRE.
GET/v1/pricing/:trade/:city/historyGrowth+

Returns yearly and quarterly pricing trends with 95% confidence intervals on the median. Use this to build cost trajectory charts or detect market shifts. Scale+ adds CPI, material, and labor-rate normalized medians per row.

curl https://api.homequotr.com/v1/pricing/roofing/houston/history \
  -H "X-API-Key: hq_live_a1b2c3d4..."
response.json
// Growth-tier response. Scale+ adds cpi / material / labor normalized medians per row.
{
  "data": {
    "quarterly": [
      { "period": "2024-Q1", "median": 11000, "permit_count": 892, "confidence_interval_low": 10620, "confidence_interval_high": 11380 }
    ],
    "yearly": [
      { "period": "2024", "median": 11200, "permit_count": 3841, "confidence_interval_low": 10850, "confidence_interval_high": 11550 }
    ]
  },
  "meta": {
    "tier": "growth",
    "methodology_version": "hq_methodology_v1.0_2026",
    "data_source": "municipal_permits"
  }
}
GET/v1/contractors/:trade/:cityStarter+

Licensed contractors for a specific trade and city, sourced from state licensing boards.

ParameterTypeRequiredDescription
tradestringRequiredTrade slug
citystringRequiredMetro slug
statusstringOptionalFilter: active, expired, suspended
limitintegerOptionalResults per page. Default: 25, max: 100
offsetintegerOptionalNumber of results to skip. Default: 0
curl https://api.homequotr.com/v1/contractors/hvac/chicago?status=active&limit=2 \
  -H "X-API-Key: hq_live_a1b2c3d4..."
response.json
{
  "data": [
    {
      "name": "Midwest Comfort HVAC",
      "license_number": "IL-058-012345",
      "license_status": "active",
      "city": "Chicago",
      "state": "IL"
    }
  ],
  "pagination": {
    "total": 847,
    "limit": 2,
    "offset": 0
  },
  "meta": {
    "last_updated": "2026-04-08",
    "data_source": "state_licensing_boards"
  }
}

Like what you see?

Start with 500 free Sandbox calls each month, Dallas only. Corporate email required.

Get API Key
GET/v1/tradesSandbox+

Returns the six trades currently covered by HomeQuotr. Use this to dynamically populate trade selectors in your application.

curl https://api.homequotr.com/v1/trades \
  -H "X-API-Key: hq_live_a1b2c3d4..."
response.json
{
  "data": [
    { "slug": "hvac", "name": "HVAC", "display_name": "HVAC" },
    { "slug": "roofing", "name": "Roofing", "display_name": "Roofing" },
    { "slug": "electrical", "name": "Electrical", "display_name": "Electrical" },
    { "slug": "plumbing", "name": "Plumbing", "display_name": "Plumbing" },
    { "slug": "foundation", "name": "Foundation", "display_name": "Foundation/Structural" },
    { "slug": "solar", "name": "Solar", "display_name": "Solar" }
  ]
}
GET/v1/citiesSandbox+

All 100 metros with pricing data: slug, display name, state, tier, and population.

curl https://api.homequotr.com/v1/cities \
  -H "X-API-Key: hq_live_a1b2c3d4..."
response.json
{
  "data": [
    { "slug": "new-york", "name": "New York", "state": "NY", "tier": "A", "population": 19979477 },
    { "slug": "los-angeles", "name": "Los Angeles", "state": "CA", "tier": "A", "population": 12997353 }
  ],
  "meta": { "total": 100 }
}
GET/v1/usageSandbox+

Your current billing period: calls used, calls remaining, quota, and overage count.

curl https://api.homequotr.com/v1/usage \
  -H "X-API-Key: hq_live_a1b2c3d4..."
response.json
{
  "data": {
    "calls_used": 3842,
    "calls_remaining": 1158,
    "quota": 5000,
    "overage_count": 0,
    "period_start": "2026-04-01",
    "period_end": "2026-04-30"
  }
}
GET/v1/peril/:peril_type/:cityEnterprise+

Covered-peril mapping for a metro. Returns the trades affected by a given peril (wind, hail, water, fire, freeze), the severity median and 95th percentile, and the frequency lambda with confidence interval.

curl https://api.homequotr.com/v1/peril/wind/dallas \
  -H "X-API-Key: hq_live_a1b2c3d4..."
response.json
// Enterprise-tier response. Trade splits for a peril with per-trade frequency weight and severity adjustment.
{
  "data": {
    "peril_type": "wind",
    "city": "Dallas",
    "state": "TX",
    "trade_splits": [
      { "trade": "roofing", "trade_display_name": "Roofing", "sub_category": null, "frequency_weight": 0.55, "severity_adjustment": 1.22, "source_reference": "NOAA SPC 2020-2024", "effective_date": "2024-01-01", "specificity_tier": "per_metro" },
      { "trade": "foundation", "trade_display_name": "Foundation", "sub_category": null, "frequency_weight": 0.20, "severity_adjustment": 1.05, "source_reference": "NOAA SPC 2020-2024", "effective_date": "2024-01-01", "specificity_tier": "per_metro" }
    ]
  },
  "meta": {
    "tier": "enterprise",
    "methodology_version": "hq_methodology_v1.0_2026"
  }
}
GET/v1/frequency/:trade/:cityEnterprise+

Frequency estimate for a trade in a metro, expressed as events per insured-home-year with a 95% CI on the lambda. Backed by a five-year observation window of municipal permit data.

curl https://api.homequotr.com/v1/frequency/hvac/dallas \
  -H "X-API-Key: hq_live_a1b2c3d4..."
response.json
// Enterprise-tier response. Lambda + 95% CI on events per insured-home-year.
{
  "data": {
    "trade": "hvac",
    "city": "dallas",
    "events_per_insured_home_year": 0.087,
    "poisson_lambda": 0.087,
    "ci_low": 0.078,
    "ci_high": 0.096,
    "permit_count": 4844,
    "estimated_households": 2680000,
    "observation_years": 12.3
  },
  "meta": {
    "tier": "enterprise",
    "methodology_version": "hq_methodology_v1.0_2026"
  }
}

Underwriting-grade fields

Growth+

Growth+ unlocks 95% confidence intervals on every median we publish. The bounds come from bootstrapped resampling of the underlying permit set, pinned to a methodology version so audit and rate-filing workstreams can cite a stable source.

  • confidence_interval_low and confidence_interval_high on every aggregate
  • methodology_version pinned in the response meta block
  • History endpoint with quarterly and yearly CIs, suitable for trend-based loss-cost modeling

Designed for mid-market MGAs in specialty home lines and regional P&C carriers who need defensible inputs for rate filings without paying enterprise data-major prices.

Time-series normalization

Scale+

Scale+ adds three normalized medians on top of the raw median, so you can compare a 2024 Dallas roof job to a 2026 Dallas roof job on the same real-dollar basis without writing your own deflator.

  • cpi_normalized_median, indexed to BLS CUUR0000SA0 (CPI-U All Items)
  • material_cost_indexed_median, indexed to BLS PPI for construction materials
  • labor_rate_msa_indexed_median, indexed to BLS QCEW MSA-level construction labor rate

All three indexes refresh monthly off the BLS pipeline. Useful for back-testing reserves, normalizing claims-cost comparisons, and explaining year-over-year movement to underwriting committees.

Covered-peril and frequency

Enterprise+

Enterprise+ unlocks the loss-cost building blocks. Severity comes from the pricing endpoints. Frequency comes from a five-year permit observation window normalized to insured-home-years. Together they produce a defensible expected-loss input.

  • covered_peril_mapping inline on the pricing endpoint, top-3 perils per metro
  • frequency_estimate inline (lambda + 95% CI) on the pricing endpoint
  • Dedicated /v1/peril/:peril_type/:city for full per-peril detail
  • Dedicated /v1/frequency/:trade/:city for trade-level frequency with observation window

Per the API anti-scraping rule (P6.5), peril and frequency endpoints never project below Enterprise tier and are subject to additional per-IP rate limiting at the gateway.

Custom taxonomies and actuarial review

Custom

Custom tier ships two fields no other tier sees, plus a contractual deliverable: a signed actuarial review letter you can hand to your state regulator or reinsurance partner.

  • custom_peril_taxonomy_id, your peril definitions mapped to our permit data
  • actuarial_review_letter_version, version pin of the signed letter backing the dataset you receive
  • Quarterly methodology refresh with named-actuary sign-off (see methodology whitepaper, Actuarial Review section)

Pricing is volume-negotiated. Reach out via the contact link in the footer if your use case requires a bespoke peril taxonomy or a signed letter for a rate filing.

Error Reference

All errors return a consistent JSON envelope with a machine-readable code and a human-readable message.

Error CodeHTTP StatusDescription
invalid_trade400Trade slug not recognized. Must be one of the six supported trades.
invalid_city400City slug not recognized. Use /v1/cities for valid slugs.
invalid_parameter400Query parameter has an invalid value (e.g., non-integer limit).
missing_api_key401No X-API-Key header provided.
invalid_api_key401API key is malformed or does not exist.
tier_restricted403Endpoint requires a higher tier. Upgrade at /pricing.
rate_limit_exceeded429Per-minute or monthly quota exceeded. Check /v1/usage for current period.
internal_error500Unexpected server error. Retry with exponential backoff.
Error Response Example
{
  "error": {
    "code": "invalid_trade",
    "message": "Trade 'windows' is not supported. Valid trades: hvac, roofing, electrical, plumbing, foundation, solar.",
    "status": 400
  }
}

Start Building

500 free Sandbox calls each month, Dallas only. Corporate email required. Upgrade when you need full metro coverage or underwriting-grade fields.

Data sourced from municipal building permits for informational purposes. Not a substitute for professional estimates.