Skip to main content
Documentation

API Reference

Base URL: https://wildfirecost-api.smarttechinvest.com

Authentication

Pass your API key via the X-API-Key header on every request (except /v1/signup and /v1/login).

GET/v1/risk/county/:fips

Get wildfire risk and hardening ROI for a U.S. county by FIPS code.

Parameters

NameTypeRequiredDescription
fipspathrequired5-digit county FIPS code (e.g., 06037)

Response

{
  "success": true,
  "data": {
    "county_name": "Los Angeles",
    "state_abbr": "CA",
    "fips": "06037",
    "risk": {
      "burn_probability": 0.0234,
      "risk_percentile": 72,
      "risk_to_homes": 8.4,
      "wui_class": "Interface",
      "fhsz_tier": "Very High"
    },
    "total_cost": 42500,
    "total_annual_savings": 3200,
    "package_roi_percentage": 156
  }
}

Error Codes

  • 400 Invalid FIPS code format
  • 404 No data found for FIPS code
  • 429 Rate limit exceeded
GET/v1/risk/zip/:zip

Get wildfire risk by ZIP code (auto-resolves to county).

Parameters

NameTypeRequiredDescription
zippathrequired5-digit U.S. ZIP code

Response

{
  "success": true,
  "data": {
    "county_name": "San Diego",
    "state_abbr": "CA",
    "fips": "06073",
    "zip": "92127",
    "risk": {
      "burn_probability": 0.0189,
      "risk_percentile": 65,
      "risk_to_homes": 6.2
    },
    "total_cost": 38200,
    "total_annual_savings": 2800,
    "package_roi_percentage": 142
  }
}

Error Codes

  • 400 Invalid ZIP code
  • 404 ZIP not found
  • 429 Rate limit exceeded
POST/v1/risk/compare

Compare wildfire hardening costs and ROI across multiple counties.

Parameters

NameTypeRequiredDescription
fips_codesbodyrequiredArray of 2-5 county FIPS codes to compare

Response

{
  "success": true,
  "data": {
    "counties": [
      { "fips": "06037", "county_name": "Los Angeles", "risk_percentile": 72, "total_cost": 42500 },
      { "fips": "06073", "county_name": "San Diego", "risk_percentile": 65, "total_cost": 38200 }
    ],
    "recommendation": "San Diego has lower wildfire hardening costs..."
  }
}

Error Codes

  • 400 Invalid request body
  • 401 API key required
  • 429 Rate limit exceeded
GET/v1/measures

List all available hardening measures with cost estimates and effectiveness.

Response

{
  "success": true,
  "data": [
    { "id": "class_a_roof", "name": "Class A Roof", "category": "Structure", "avg_cost": 12000, "effectiveness": 0.85 },
    { "id": "ember_vents", "name": "Ember-Resistant Vents", "category": "Structure", "avg_cost": 2500, "effectiveness": 0.72 },
    { "id": "defensible_space", "name": "Defensible Space (Zone 0-1)", "category": "Landscape", "avg_cost": 3500, "effectiveness": 0.68 },
    { "id": "fire_resistant_siding", "name": "Fire-Resistant Siding", "category": "Structure", "avg_cost": 15000, "effectiveness": 0.78 }
  ]
}
POST/v1/signup

Create an account and receive an API key.

Parameters

NameTypeRequiredDescription
namebodyrequiredUser display name
emailbodyrequiredEmail address
passwordbodyrequiredPassword (min 8 characters)

Response

{
  "success": true,
  "data": {
    "name": "Jane Doe",
    "email": "jane@example.com",
    "tier": "free",
    "apiKey": "wfc_abc123..."
  }
}

Error Codes

  • 400 Invalid input
  • 409 Email already registered
POST/v1/login

Authenticate with email and password.

Parameters

NameTypeRequiredDescription
emailbodyrequiredEmail address
passwordbodyrequiredPassword

Response

{
  "success": true,
  "data": {
    "name": "Jane Doe",
    "email": "jane@example.com",
    "tier": "free"
  }
}

Error Codes

  • 401 Invalid credentials
GET/v1/account

Get current account information and tier.

Response

{
  "success": true,
  "data": {
    "name": "Jane Doe",
    "email": "jane@example.com",
    "tier": "pro",
    "usage": { "today": 12, "month": 340 }
  }
}

Error Codes

  • 401 API key required
GET/v1/account/keys

List all API keys for the authenticated user.

Response

{
  "success": true,
  "data": {
    "keys": [
      { "id": 1, "prefix": "wfc_abc...", "lastUsed": "2026-03-01T12:00:00Z" }
    ]
  }
}

Error Codes

  • 401 API key required
POST/v1/account/keys/rotate

Rotate API key -- generates a new key and invalidates the old one.

Response

{
  "success": true,
  "data": {
    "apiKey": "wfc_new_key..."
  }
}

Error Codes

  • 401 API key required
DELETE/v1/account/keys/:id

Revoke a specific API key.

Parameters

NameTypeRequiredDescription
idpathrequiredAPI key ID

Response

{
  "success": true,
  "data": { "message": "Key revoked" }
}

Error Codes

  • 401 API key required
  • 404 Key not found
DELETE/v1/account

Permanently delete your account and all data.

Response

{
  "success": true,
  "data": { "message": "Account deleted" }
}

Error Codes

  • 401 API key required
POST/v1/forgot-password

Request a password reset email. Returns 200 regardless of email existence.

Parameters

NameTypeRequiredDescription
emailbodyrequiredEmail address

Response

{
  "success": true,
  "data": { "message": "If an account exists, a reset email was sent." }
}
POST/v1/reset-password

Reset password using a token from the reset email.

Parameters

NameTypeRequiredDescription
tokenbodyrequiredReset token from email
passwordbodyrequiredNew password (min 8 characters)

Response

{
  "success": true,
  "data": { "message": "Password updated" }
}

Error Codes

  • 400 Invalid or expired token

Rate Limiting

Requests that exceed your plan limit return 429 Too Many Requests with a Retry-After header indicating seconds until the limit resets.

PlanRequests/DayHardening ROI
Free1No
Single Report ($9.99)5Yes
Buyer Pack ($14.99/mo)10Yes
Pro ($19.99/mo)100Yes
Lifetime ($99)100Yes