API v1.0 Live

Free Plant Care API & Botanical Dataset

Build with the open-source PlantSolve API. No auth or rate limits. Access structured plant care profiles, calculators, and relationship graphs.

GET /api/v1/plants/monstera.json
{
  "id": "plant-monstera",
  "name": "Monstera Deliciosa",
  "care": {
    "difficulty": "Beginner",
    "water": "Allow top 2 inches to dry"
  }
}

Static & Read-Only

The API is compiled directly during each site build. No active database backend means it's incredibly fast, secure, and reliable.

CORS & Free Access

Wildcard CORS enabled. Fetch directly in client-side apps with zero API keys or rate limits. 100% free forever.

CC BY 4.0 License

Published under Creative Commons. Simply provide clear attribution and a canonical backlink to PlantSolve when used.

Core API Endpoints

To prevent downloading massive files, the API separates discovery from details. Fetch the lightweight index, then grab full profiles.

Resource Index Endpoint (List) Detail Endpoint (Item)
Plants /api/v1/plants/index.json /api/v1/plants/{slug}.json
Calculators /api/v1/calculators/index.json /api/v1/calculators/{slug}.json
Blogs /api/v1/blogs/index.json /api/v1/blogs/{slug}.json
Fertilizers /api/v1/fertilizers/index.json /api/v1/fertilizers/{slug}.json
Quizzes /api/v1/quizzes/index.json /api/v1/quizzes/{slug}.json

Open Knowledge Graph

PlantSolve is a connected database. All botanical relationships are exported to the master graph file at /api/v1/relationships.json.

[
  {
    "source": "fiddle-leaf-fig",
    "target": "root-rot",
    "relationship": "vulnerability",
    "notes": "Highly susceptible..."
  }
]

AI & Diagnostics Models

To power custom chatbot experiences or smart interfaces, we expose thematic diagnostic models.

Code Examples

JavaScript (Fetch API)
// Fetch all plants and filter by difficulty
async function loadEasyPlants() {
  const res = await fetch('https://www.plantsolve.com/api/v1/plants/index.json');
  const plants = await res.json();
  
  const easy = plants.filter(p => p.difficulty === 'Beginner');
  console.log(`Found ${easy.length} easy plants`);
  
  // Load details for first match
  const detail = await fetch(`https://www.plantsolve.com/api/v1/plants/${easy[0].slug}.json`);
  const profile = await detail.json();
  console.log(profile.care.watering);
}
Python (Knowledge Graph)
import urllib.request
import json

# Parse the public relationship graph
url = "https://www.plantsolve.com/api/v1/relationships.json"
res = urllib.request.urlopen(url)
graph = json.loads(res.read().decode())

vulnerabilities = {}
for edge in graph:
    if edge['relationship'] == 'vulnerability':
        plant = edge['source']
        vulnerabilities.setdefault(plant, []).append(edge['target'])

print(vulnerabilities.get('fiddle-leaf-fig'))