Developers & API
Explore the static, open-source PlantSolve API (v1). Access structured plant care profiles, calculators data, and relationship graphs.
Open Plant Care Dataset (v1)
Welcome to the PlantSolve Developer Portal. We believe plant care knowledge should be free, open, and easily consumable by both humans and machines. That's why we generate a fully static, public JSON API alongside our website at build time. This portal documents the API's architecture, endpoints, data schemas, and relationship graphs.
API Principles & Characteristics
- Static & Read-Only: The API is compiled directly from our Markdown and JSON content registry during each site build. There is no active database backend, making it incredibly fast, secure, and reliable.
- CORS Enabled: Cross-Origin Resource Sharing is enabled with wildcard headers (
Access-Control-Allow-Origin: *) across all API paths so you can fetch data directly in client-side applications. - No Auth or Rate Limits: No API keys or tokens are required. You are free to query endpoints at CDN speeds without limits.
- Attribution License (CC BY-NC 4.0): Our dataset is published under the Creative Commons Attribution-NonCommercial 4.0 International License. You must provide clear attribution and a canonical backlink to PlantSolve.
API Discovery & Entry Points
External developers and AI crawler agents (like search engine bots or LLM crawlers) can discover the API topology through these files:
- LLM Context (
/api/v1/llm-context.json): High-level system profile outlining site contents and primary topic areas. - Knowledge Base Map (
/api/v1/knowledge-base.json): Primary entry point mapping version strings, total counts, and index file paths. - Database Stats (
/api/v1/stats.json): Dynamic resource counts (plants, blogs, calculators, quizzes, relationships) and the exact build timestamp. - API Sitemap (
/api/v1/sitemap.json): Flat list of all available URL endpoints for crawling and caching. - Search Index (
/api/v1/search-index.json): Deterministically sorted list of all site URLs, titles, categories, and content snippets for fast local search implementations.
Indexes vs. Detailed Endpoints
To prevent downloading massive files, the API separates discovery from details. First fetch the lightweight index, filter or select the items you need, then fetch the full entity profile using its slug.
- Plants Index: /api/v1/plants/index.json (Returns ID, name, slug, scientific name, difficulty, and update timestamp).
- Plant Detail:
/api/v1/plants/{slug}.json(Returns the full plant care profile). - Blogs Index: /api/v1/blogs/index.json
- Blog Detail:
/api/v1/blogs/{slug}.json - Calculators Index: /api/v1/calculators/index.json
- Calculator Detail:
/api/v1/calculators/{slug}.json - Quizzes Index: /api/v1/quizzes/index.json
- Quiz Detail:
/api/v1/quizzes/{slug}.json
Open Knowledge Graph & Relationships
PlantSolve is a connected database. All botanical and diagnostic relationships are exported to the master graph file at /api/v1/relationships.json. This file contains a flat list of edges representing relationships between entities:
[
{
"source": "fiddle-leaf-fig",
"target": "root-rot",
"relationship": "vulnerability",
"strength": "high",
"notes": "Fiddle Leaf Figs are highly susceptible to root rot if soil remains soggy."
}
]The relationship types are normalized to a tight vocabulary:
vulnerability: Susceptibility to pests, diseases, or environmental stresses.association: Companion planting, soil requirements, or environmental preferences.prevention: Care routines that ward off specific problems.tool: Interactive calculators related to a specific plant or issue.topic: Thematic tags connecting content to core plant care concepts, like those for Pothos and other indoor plants.related: Generic semantic associations.
AI-Friendly Diagnostics & Topics
To power custom chatbot experiences or smart interfaces, we expose thematic diagnostic models:
- Symptom-to-Entity Maps (
/api/v1/problems/{problem}.json): Diagnoses for issues likeoverwatering,low-humidity,fertilizer-burn,root-rot, andheat-stress. Returns a list of matching plants, articles, symptoms, and immediate fixes. - Topic Clustering (
/api/v1/topics/{topic}.json): Lists of plant profiles, calculators, and articles clustered around key care topics.
CC BY-NC 4.0 License & Citation
Every single plant, article, calculator, and quiz response includes a citation block in the root metadata:
"citation": {
"source": "PlantSolve",
"canonicalUrl": "https://www.plantsolve.com/plants/monstera-deliciosa-care/",
"lastReviewed": "2026-06-01",
"license": "CC BY-NC 4.0"
}If you use this data in a public project, application, or dataset, you must display the citation block information and link back to the canonical URL of the plant or guide.
Code Examples
JavaScript (Client-Side Fetch)
// Fetch all plants, check for low maintenance, and load details
async function loadEasyPlants() {
const indexRes = await fetch('https://www.plantsolve.com/api/v1/plants/index.json');
const plants = await indexRes.json();
const easyPlants = plants.filter(p => p.difficulty === 'Easy');
console.log(`Found ${easyPlants.length} easy plants. Loading care profile for ${easyPlants[0].name}...`);
const detailRes = await fetch(`https://www.plantsolve.com/api/v1/plants/${easyPlants[0].slug}.json`);
const profile = await detailRes.json();
console.log('Watering Requirements:', profile.care.watering);
}
loadEasyPlants();Python (Parse Relationships Graph)
import urllib.request
import json
# Fetch and parse the public relationship graph
url = "https://www.plantsolve.com/api/v1/relationships.json"
response = urllib.request.urlopen(url)
graph = json.loads(response.read().decode())
# Group all vulnerabilities by plant slug
vulnerabilities = {}
for edge in graph:
if edge['relationship'] == 'vulnerability':
plant = edge['source']
target = edge['target']
vulnerabilities.setdefault(plant, []).append(target)
# Print results
for plant, issues in list(vulnerabilities.items())[:5]:
print(f"Plant '{plant}' is vulnerable to: {', '.join(issues)}")