API Reference
Base URL: https://wildfirecost-api.smarttechinvest.com
Pass your API key via the X-API-Key header on every request (except /v1/signup and /v1/login).
/v1/risk/county/:fipsGet wildfire risk and hardening ROI for a U.S. county by FIPS code.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| fips | path | required | 5-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
/v1/risk/zip/:zipGet wildfire risk by ZIP code (auto-resolves to county).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| zip | path | required | 5-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
/v1/risk/compareCompare wildfire hardening costs and ROI across multiple counties.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| fips_codes | body | required | Array 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
/v1/measuresList 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 }
]
}/v1/signupCreate an account and receive an API key.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| name | body | required | User display name |
| body | required | Email address | |
| password | body | required | Password (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
/v1/loginAuthenticate with email and password.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| body | required | Email address | |
| password | body | required | Password |
Response
{
"success": true,
"data": {
"name": "Jane Doe",
"email": "jane@example.com",
"tier": "free"
}
}Error Codes
- 401 Invalid credentials
/v1/accountGet 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
/v1/account/keysList 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
/v1/account/keys/rotateRotate 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
/v1/account/keys/:idRevoke a specific API key.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | path | required | API key ID |
Response
{
"success": true,
"data": { "message": "Key revoked" }
}Error Codes
- 401 API key required
- 404 Key not found
/v1/accountPermanently delete your account and all data.
Response
{
"success": true,
"data": { "message": "Account deleted" }
}Error Codes
- 401 API key required
/v1/forgot-passwordRequest a password reset email. Returns 200 regardless of email existence.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| body | required | Email address |
Response
{
"success": true,
"data": { "message": "If an account exists, a reset email was sent." }
}/v1/reset-passwordReset password using a token from the reset email.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| token | body | required | Reset token from email |
| password | body | required | New 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.
| Plan | Requests/Day | Hardening ROI |
|---|---|---|
| Free | 1 | No |
| Single Report ($9.99) | 5 | Yes |
| Buyer Pack ($14.99/mo) | 10 | Yes |
| Pro ($19.99/mo) | 100 | Yes |
| Lifetime ($99) | 100 | Yes |