Living with Fire API
1,361 plants with fire data — open API for fire-resistant landscapes
No auth required for all GET endpoints. Base URL:
https://lwf-api.vercel.app/api/v1
Swagger UI
Interactive docs — try endpoints live
Scalar API Reference
Clean docs with search
Plant Data Field Guide
Every field explained + JSON download
Browse Plants (JSON)
Raw JSON — paginated with images
Data Structure (JSON)
Hierarchical attribute tree
Live Example App
See the data in action
Key Endpoints
GET /plants — Paginated list. ?includeImages=true ?search=abelia
Start here. Your main data feed.
GET /plants/{id}/values — All attributes for a plant, with resolved display names.
The money endpoint. Use
resolved.value for display.GET /plants/{id}/images — All images. Primary: isPrimary: true.
GET /attributes/hierarchical — Full attribute tree with allowed values.
Cache this. Use it to build filter UIs.
GET /values/bulk?attributeIds=...&plantIds=... — Batch values. plantIds optional.
GET /plants/{id}/risk-reduction — Fire risk score + best practices text.
GET /filter-presets — Pre-built filter configs.
GET /key-terms — Fire glossary.
GET /nurseries — Where to buy.
GET /resources — Educational links.
All prefixed with /api/v1. Pagination: ?limit=&offset=. Format: {"data":[...],"meta":{"pagination":{...}}}
Data Structure
- Attributes define what can be measured (e.g., "Water Needs")
- Attributes have
valuesAllowedarrays (each option has an ID + display label) - Values store the selected option ID for each plant
- Multi-select attributes = multiple value rows per plant
The API resolves display names automatically. Each value has a resolved object:
// GET /api/v1/plants/{id}/values
{
"attributeName": "Water Amount",
"rawValue": "04", // stored ID
"resolved": { "value": "Low", "type": "enum" } // display name
}
// Just use resolved.value:
values.forEach(v => console.log(`${v.attributeName}: ${v.resolved.value}`));
Gotcha: Display names != stored values. "Low" is stored as "04". Filter by raw ID, display with
resolved.value.
Quick Start
// Fetch plants with images
const { data, meta } = await fetch(
'https://lwf-api.vercel.app/api/v1/plants?includeImages=true'
).then(r => r.json());
// Get a plant's attributes
const { data: values } = await fetch(
`https://lwf-api.vercel.app/api/v1/plants/${data[0].id}/values`
).then(r => r.json());
values.forEach(v =>
console.log(`${v.attributeName}: ${v.resolved?.value}`)
);
Test plant: 1b78126d-1f69-44b0-a06b-47116e41270d (Glossy abelia)
Project Ideas
Fire-Safe Garden Planner
Zone layouts by flammability + water needs
Wildlife Habitat Designer
Pollinators, birds, bloom calendars
Native Plant Finder
Region-specific recs, invasive alternatives
Plant Care Assistant
Match plants to conditions, care reminders
Neighborhood Fire Map
Nursery locations, community risk scores
Ecosystem Game
Balance fire safety, water, wildlife with real data