Psu APIplantvillage.psu.edu ↗
Access PlantVillage crop profiles, disease/pest details, treatment strategies, blog posts, and videos via 12 structured API endpoints.
What is the Psu API?
The PlantVillage API provides access to 12 endpoints covering crop profiles, disease and pest records, treatment strategies, blog posts, and educational videos from plantvillage.psu.edu. You can retrieve the full crop catalog via list_crops, drill into a specific crop with get_crop_detail (returning scientific name, images, and content sections), or pull disease-specific management guidance with get_treatments_and_management. All responses are structured JSON.
curl -X GET 'https://api.parse.bot/scraper/c7fef214-845f-4681-b8bd-d6ba69987eec/list_crops?letter=A' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace plantvillage-psu-edu-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.plantvillage_api import PlantVillage, CropSummary, Crop, CropDisease, DiseaseSummary, Video, Topic, BlogPostSummary, Letter
client = PlantVillage()
# List crops starting with letter A using the Letter enum
for crop_summary in client.crops.list(letter=Letter.A):
print(crop_summary.name, crop_summary.slug, crop_summary.thumbnail_url)
# Search for crops by keyword
for result in client.crops.search(query="tomato"):
print(result.name, result.slug)
# Get full crop detail and explore diseases
apple = client.crops.get(slug="apple")
print(apple.name, apple.scientific_name)
for disease in apple.diseases():
print(disease.name, disease.cause, disease.management)
# Get images for the crop
for img in apple.get_images():
print(img.url, img.caption)
# Browse diseases and get treatments
for ds in client.diseases.list():
print(ds.name, ds.slug)
faw = client.diseases.get(slug="fall-armyworm")
treatment = faw.treatments()
for title, content in treatment.management_strategies.items():
print(title, content[:100])
# List topics
for topic in client.topics.list():
print(topic.name, topic.slug)
# Blog posts
for post in client.blogposts.list():
full = post.details()
print(post.title, full.content[:80] if full.content else "")
# Videos
for video in client.videos.list():
print(video.title, video.language)
Returns all crops available on PlantVillage. Supports alphabetical filtering via the letter parameter. Each crop includes name, slug, and thumbnail URL. When letter is omitted, returns the full catalog.
| Param | Type | Description |
|---|---|---|
| letter | string | Single uppercase letter (A-Z) to filter crops by first letter. Omitting returns all crops. |
{
"type": "object",
"fields": {
"crops": "array of CropSummary objects with name, slug, and thumbnail_url"
},
"sample": {
"data": {
"crops": [
{
"name": "African Eggplant",
"slug": "african-eggplant",
"thumbnail_url": "https://plantvillage-production-new.s3.amazonaws.com/image/6378/file/medium-5eb9cc25a65d4d1bf2564ff83113aff5.jpeg"
}
]
},
"status": "success"
}
}About the Psu API
Crop and Disease Data
The list_crops endpoint returns the full PlantVillage crop catalog — each record includes name, slug, and thumbnail_url. An optional letter parameter (single uppercase A–Z) filters results alphabetically. Pass any slug to get_crop_detail for richer data: scientific_name, common_names, a sections object mapping section titles to prose, an images array with url and caption, and a related_diseases array with each disease's name and scientific name.
Disease, Pest, and Treatment Endpoints
list_diseases_and_pests returns the full pest/disease catalog with name, slug, and thumbnail_url per entry. get_disease_detail expands a single slug into sections, an images array, and an affected_crop object (name and URL). For crop-centric queries, get_plant_diseases_by_crop returns every disease associated with a given crop slug, with each record including symptoms, cause, comments, and management fields. get_treatments_and_management isolates only the management/control sections for a disease slug, returning them as a management_strategies object.
Search, Images, and Media
search_plants accepts a query string: a single alphabetical character performs first-letter filtering; two or more characters run a substring match against all crop names, returning matching CropSummary objects. get_plant_images accepts either a crop or disease slug and returns a unified images array with url and caption fields. The list_videos endpoint exposes video library entries including title, video_id, url, thumbnail_url, and language, making it useful for multilingual content filtering.
Blog and Topics
get_blog_posts returns article summaries with title, slug, author, summary, and thumbnail_url. Pass a slug to get_blog_post_detail for the full content string. list_topics returns the educational topic index as an array of name and slug pairs.
The Psu API is a managed, monitored endpoint for plantvillage.psu.edu — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when plantvillage.psu.edu changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official plantvillage.psu.edu API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a crop disease lookup tool using get_plant_diseases_by_crop to surface symptoms and management for a chosen crop.
- Power a multilingual agricultural video library by filtering list_videos results on the language field.
- Create an alphabetical crop browser using list_crops with the letter parameter for A–Z navigation.
- Generate disease treatment summaries with get_treatments_and_management mapped to a pest slug from list_diseases_and_pests.
- Populate a plant image gallery using get_plant_images for any crop or disease slug.
- Index PlantVillage blog content for an agricultural knowledge base using get_blog_posts and get_blog_post_detail.
- Implement a search-as-you-type crop finder using search_plants with substring queries against the full crop catalog.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.