Discover/eFloras API
live

eFloras APIefloras.org ↗

Search plant names across eFloras.org floras, retrieve full taxon treatments, and resolve illustration or photo URLs via a 3-endpoint API.

Endpoint health
verified 3h ago
get_plant
get_plant_image
search_plants
2/3 passing latest checkself-healing
Endpoints
3
Updated
3h ago

What is the eFloras API?

The eFloras.org API gives programmatic access to botanical treatments published across multiple regional floras — Flora of China, Flora of North America, Flora of Pakistan, and more — through 3 endpoints. Use search_plants to find taxon records by name, get_plant to retrieve a full treatment including classification, lower taxa, synonyms, and distribution paragraphs, and get_plant_image to resolve illustration or photo objects to direct image URLs.

This call costs1 credit / call— charged only on success
Try it
Numeric flora id of the flora the object belongs to (e.g. 2 = Flora of China); the same flora_id used for get_plant.
Numeric object id from get_plant.objects[*].object_id.
→ api.parse.bot/scraper/755834ff-705a-49b2-a88b-28aafe0e027e/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/755834ff-705a-49b2-a88b-28aafe0e027e/get_plant_image?flora_id=2&object_id=3183' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

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 efloras-org-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.

"""Walkthrough: eFloras plant data — search, detail, and image resolution."""
from parse_apis.efloras_org_api import Efloras, InputFormatInvalid

client = Efloras()

# Search for a genus across all floras; cap total items.
for summary in client.plant_summaries.search(query="Ocimum", limit=5):
    print(summary.name, summary.flora_id, summary.volume)

# Drill into the first hit's full treatment.
hit = client.plant_summaries.search(query="Hyssopus", limit=1).first()
if hit is not None:
    plant = hit.detail()
    print(plant.name, plant.heading)

    # Walk classification chain (family → genus → …).
    for ancestor in plant.classification:
        print("  ancestor:", ancestor.name, ancestor.taxon_id)

    # Print treatment paragraphs.
    for paragraph in plant.treatment:
        print("  treatment:", paragraph[:120])

    # Resolve the first illustration/photo to its image URL.
    if plant.objects:
        obj = plant.objects[0]
        image = client.plant_images.get(flora_id=plant.flora_id, object_id=obj.object_id)
        print(image.taxon_name, image.image_url)
        if image.caption is not None:
            print("  caption:", image.caption)

    # Show the same taxon in other floras.
    for ref in plant.other_floras:
        try:
            other = client.plants.get(flora_id=ref.flora_id, taxon_id=ref.taxon_id)
            print("other flora:", other.flora_name, other.name)
        except InputFormatInvalid as e:
            print("could not fetch flora reference:", e.message)

print("exercised: plant_summaries.search / detail / plants.get / plant_images.get")
All endpoints · 3 totalmissing one? ·

Returns the image behind one related object (illustration or photo) listed on a plant treatment: the object type, the taxon it depicts and the direct image URL. One request per call; the site is slow (page responses commonly take 10-30 seconds). Input ids come from get_plant.objects[*].object_id together with the same flora_id.

Input
ParamTypeDescription
flora_idrequiredstringNumeric flora id of the flora the object belongs to (e.g. 2 = Flora of China); the same flora_id used for get_plant.
object_idrequiredstringNumeric object id from get_plant.objects[*].object_id.
Response
{
  "type": "object",
  "fields": {
    "url": "page the data was read from",
    "caption": "caption/link text shown under the image, null when the site shows none",
    "taxon_id": "numeric id of the taxon depicted (usable with get_plant)",
    "image_url": "absolute URL of the image file",
    "taxon_name": "scientific name of the taxon depicted",
    "object_type": "kind of object as labelled by the site, e.g. Illustration"
  },
  "sample": {
    "data": {
      "url": "http://www.efloras.org/object_page.aspx?object_id=3183&flora_id=2",
      "caption": null,
      "flora_id": "2",
      "taxon_id": "200019719",
      "image_url": "https://images.mobot.org/mrsid/176/17606839_001.gif",
      "object_id": "3183",
      "taxon_name": "Hyssopus cuspidatus",
      "object_type": "Illustration"
    },
    "status": "success"
  }
}

About the eFloras API

Searching Taxa

search_plants accepts a scientific name or prefix in the query parameter and returns every matching record across all hosted floras in a single unpaginated response. An optional flora_id parameter narrows results to one flora (e.g. 2 for Flora of China). The results array contains accepted-name rows with taxon_id, flora_id, name, local_name, lower_taxa_count, and volume; a separate synonyms array carries synonym rows that include an accepted_name field pointing back to the accepted taxon. Because eFloras treats the same biological taxon separately per flora, the same taxon_id can appear multiple times — once per flora that covers it.

Taxon Treatments

get_plant takes a flora_id and a taxon_id (sourced from search_plants results, or from get_plant.lower_taxa, get_plant.classification, or get_plant.other_floras) and returns the full published treatment. The treatment field is an ordered array of paragraphs as they appear on the page — vernacular name lines, synonyms, morphological description, and habitat/distribution text. The response also includes classification (ancestor taxa from family downward), lower_taxa (infraspecific or child taxa), other_floras (parallel treatments in other hosted floras), and an objects array of associated illustrations and photos, each with an object_id for downstream resolution.

Resolving Illustrations and Photos

get_plant_image resolves one entry from the objects array to a direct image file. Inputs are the flora_id and the object_id from get_plant.objects[*].object_id. The response returns image_url (absolute URL of the image file), taxon_name, taxon_id, object_type (e.g. Illustration), and an optional caption. Note that eFloras.org page responses are slow — 10–30 seconds per request is typical — so batch workflows should account for this latency.

Flora Coverage and Cross-Flora Links

The flora_id parameter is the key to navigating between floras. The get_plant response surfaces other_floras — an array of {flora_id, taxon_id, flora_name} tuples — so you can follow a taxon from Flora of China into Flora of North America or any other hosted flora without re-running a search. Volume information (volume field) is returned where the flora is organized into volumes; it is null for floras that have no volume structure.

Reliability & maintenanceVerified

The eFloras API is a managed, monitored endpoint for efloras.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when efloras.org 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 efloras.org 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.

Last verified
3h ago
Latest check
2/3 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a cross-flora synonym resolver by comparing results and synonyms arrays from search_plants across multiple flora_ids.
  • Aggregate morphological descriptions and distribution paragraphs from get_plant.treatment for machine-learning training datasets.
  • Download illustration image files in bulk by iterating get_plant.objects and calling get_plant_image for each object_id.
  • Generate taxon classification trees using the classification and lower_taxa arrays returned by get_plant.
  • Cross-reference how the same species is treated in different regional floras using get_plant.other_floras.
  • Populate a herbarium database with accepted names, vernacular names, and volume citations from search_plants results.
  • Map species distributions by parsing habitat/distribution paragraphs in the ordered treatment array from get_plant.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 req/min

Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does eFloras.org have an official developer API?+
No. eFloras.org does not publish a public developer API or documented data feed. This Parse API provides structured access to the same botanical treatment data available on the site.
What does search_plants return, and how does it handle synonyms?+
search_plants returns two separate arrays in one response: results for accepted-name rows and synonyms for synonym rows. Each synonym row carries an accepted_name field identifying the name it resolves to. The total field counts both accepted and synonym rows combined. Results are not paginated — the full match list is returned in a single call.
How slow are responses from get_plant_image?+
The eFloras.org site is notably slow. Individual page responses for get_plant_image commonly take 10–30 seconds. Any workflow that resolves many object_id values should treat each call as a slow, sequential operation rather than a fast lookup.
Does the API return full-text treatment prose, or only structured metadata?+
get_plant returns both. The treatment field is an ordered array of raw paragraphs — vernacular names, synonyms, morphological description, habitat and distribution text — exactly as they appear in the published treatment. Structured metadata (classification, lower_taxa, other_floras, volume, objects) is returned alongside this text.
Can I retrieve a list of all available floras or browse flora contents by volume?+
Not currently. The API covers taxon-level lookups via search_plants and get_plant, and image resolution via get_plant_image. There is no endpoint that enumerates all flora IDs or walks a flora's volume/chapter structure. You can fork this API on Parse and revise it to add a flora-listing or volume-browsing endpoint.
Page content last updated . Spec covers 3 endpoints from efloras.org.
Related APIs in OtherSee all →
identify.plantnet.org API
Identify and explore plant species by searching through Pl@ntNet's comprehensive botanical database to access detailed information like taxonomic families, genera, species descriptions, photos, and community observations. Track plant distributions, view contribution trends, and discover expert contributors within the platform's collaborative plant identification community.
powo.science.kew.org API
Access data from powo.science.kew.org.
plantsforafuture.org API
Search for edible and medicinal plants to discover their culinary and health uses, cultivation tips, and physical characteristics. Browse the comprehensive plant database alphabetically or look up detailed information about specific plants' benefits and growing requirements.
wildflower.org API
Search the Lady Bird Johnson Wildflower Center's comprehensive database to find native plants and access detailed information about their botanical characteristics, bloom times, geographic distribution, growing requirements, and propagation methods. Discover the perfect native plants for your region with specific growing and care guidance all in one place.
rhsplants.co.uk API
Search and browse the RHS Plants catalogue to discover thousands of plants and gardening products. Retrieve detailed specifications, growing conditions, images, and purchasing options for any plant, and filter or sort results by category or keyword.
plantvillage.psu.edu API
Search for crops, diseases, and pests to access detailed agricultural knowledge including treatments, management strategies, and educational content like blog posts and videos. Get comprehensive plant health information with images and disease identification to help diagnose and manage crop problems.
oms.fromyouflowers.com API
Search and browse From You Flowers' complete product catalog, view detailed information about floral arrangements and gifts, explore available categories, and read customer testimonials to help with your purchase decisions. Get autocomplete suggestions as you search and access all the product details you need to find the perfect flowers or gift.
1800flowers.com API
Search 1-800-Flowers products and instantly retrieve detailed SKU-level pricing information to compare costs and availability across their catalog. Access real-time product data to make informed purchasing decisions or integrate current pricing into your applications.