RHS Plants APIrhsplants.co.uk ↗
Access the RHS Plants catalogue via API. Search, list by category, and retrieve detailed growing conditions, images, and purchasing options for thousands of plants.
What is the RHS Plants API?
The RHS Plants API provides 4 endpoints for querying the Royal Horticultural Society's plant catalogue at rhsplants.co.uk. Use search_plants to find plants by keyword, list_plants to paginate and sort the full catalogue, list_plants_by_category to scope results to a specific category slug, and get_plant_detail to retrieve structured growing attributes, images, pricing options, and companion plant data for any individual listing.
curl -X GET 'https://api.parse.bot/scraper/3fbe0228-b288-448e-9b23-647ad0851316/list_plants?page=1&sort=7&limit=5&can_order=True&category_id=29' \ -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 rhsplants-co-uk-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.rhs_plants_api import RHSPlants, Sort, PlantSummary, Plant, Category
client = RHSPlants()
# Search for lavender plants
for plant in client.plantsummaries.search(query="lavender"):
print(plant.name, plant.price, plant.url)
# List popular plants sorted by popularity
for plant in client.plantsummaries.list(sort=Sort.POPULARITY, can_order=True):
print(plant.name, plant.price)
# Browse a specific category using constructible Category
perennials = client.category("perennials")
for plant in perennials.list_plants():
print(plant.name, plant.image_url)
# Get full detail for a specific plant
detail = client.plants.get(url="https://www.rhsplants.co.uk/plants/_/lavandula-angustifolia-hidcote/classid.4047/")
print(detail.title, detail.description)
for companion in detail.companion_plants:
print(companion.name, companion.url)
# Navigate from summary to detail
for summary in client.plantsummaries.search(query="rose"):
full = summary.details()
print(full.title, full.attributes)
List plants from the main catalogue with pagination and optional filtering/sorting. Returns paginated plant items with name, URL, image, and price. Supports sorting by popularity or price, and filtering to only orderable items. Each page returns up to `limit` items; iterate pages to walk the full catalogue.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (1-indexed). |
| sort | string | Sort order. |
| limit | integer | Items per page (max 100). |
| can_order | boolean | Filter to only show orderable items. |
| category_id | string | Category ID to filter by. '29' returns all plants. |
{
"type": "object",
"fields": {
"page": "integer current page number",
"items": "array of plant summary objects with name, url, image_url, and price",
"limit": "integer items per page",
"total": "integer total count of matching plants"
},
"sample": {
"data": {
"page": 1,
"items": [
{
"url": "https://www.rhsplants.co.uk/plants/_/agastache-blue-fortune/classid.208/",
"name": "Agastache Blue Fortune",
"price": "From £8.99",
"image_url": "https://img.crocdn.co.uk/images/products2/pl/00/00/00/02/pl0000000208.jpg?width=440&height=440"
}
],
"limit": 5,
"total": 0
},
"status": "success"
}
}About the RHS Plants API
Browsing and Filtering the Catalogue
The list_plants endpoint returns paginated plant items — each with name, url, image_url, and price — from the main catalogue. You can supply a category_id (e.g. '29' for all plants), sort by popularity ('7') or price descending ('6'), and filter to orderable items only using can_order. The limit parameter supports up to 100 items per page, and total in the response tells you how many matching plants exist across all pages.
Category-Based Listing and Search
list_plants_by_category accepts a category_slug string — such as 'perennials', 'shrubs', or 'seeds' — matching the URL path used on the site, and returns the same paginated item structure. search_plants takes a free-text query and returns matched plant objects alongside categories (an array of category name strings) and category_links (full URLs to those category pages), making it straightforward to combine keyword discovery with category-level browsing.
Plant Detail Data
get_plant_detail accepts a full plant URL and returns the richest payload. The attributes object maps horticultural properties — such as flowering period, position, and hardiness — to their values. options is an array of purchasing variants, each carrying sku, description, price, was_price, stock_status, and full_text. The response also includes an images array of image URLs, a full description string, and a companion_plants array with names and URLs for related plants.
The RHS Plants API is a managed, monitored endpoint for rhsplants.co.uk — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when rhsplants.co.uk 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 rhsplants.co.uk 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 plant finder tool that filters rhsplants.co.uk results by hardiness, position, or flowering period from
attributes. - Track price changes across plant variants using the
priceandwas_pricefields fromget_plant_detailoptions. - Populate a gardening app's category browser using
list_plants_by_categorywith slugs like'shrubs'or'seeds'. - Power autocomplete search using
search_plantsresults and the returnedcategory_linksfor navigation. - Monitor stock availability for specific plant SKUs by checking
stock_statusin the purchasing options. - Generate companion planting suggestions by reading the
companion_plantsarray from any plant detail page. - Build a catalogue index of orderable plants only by setting
can_order: trueinlist_plants.
| 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.
Does RHS Plants have an official developer API?+
What does `get_plant_detail` return in the `attributes` field?+
attributes field is an object whose keys are horticultural property names — such as 'Flowering period', 'Position', and 'Hardiness' — mapped to their corresponding values as they appear on the plant's detail page. The exact set of attributes varies by plant.Does `search_plants` support filtering by category or price range?+
search_plants endpoint accepts only a query keyword. It returns matched plants and related category names and links, but does not accept category or price filter parameters. For category-scoped results, use list_plants_by_category with the relevant category_slug. You can fork this API on Parse and revise it to add filtering parameters if your use case requires them.Are user reviews or RHS Award of Garden Merit (AGM) ratings included in the plant detail response?+
get_plant_detail endpoint returns horticultural attributes, purchasing options, images, description, and companion plants. AGM status and user review data are not exposed in the current response fields. You can fork this API on Parse and revise it to add the missing endpoint or fields.Is there a way to retrieve all category slugs programmatically?+
list_plants_by_category — examples include 'perennials', 'shrubs', and 'seeds'. There is no dedicated endpoint that lists all available categories and their slugs. You can fork this API on Parse and revise it to add a category listing endpoint.