CABI APIcabi.org ↗
Search and retrieve plant disease datasheet metadata from the CABI Digital Library Compendium, including titles, DOIs, and abstracts via 2 endpoints.
What is the CABI API?
The CABI Plant Disease API provides access to plant disease datasheet data from the CABI Digital Library Compendium across 2 endpoints. Use search_diseases to find datasheets by keyword — returning titles, URLs, and datasheet IDs — then pass a result URL to get_disease_details to retrieve the DOI, abstract description, and available reference citations for that specific disease record.
curl -X GET 'https://api.parse.bot/scraper/f64c9998-0222-4b89-a53c-c3579ec02423/search_diseases?query=late+blight' \ -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 cabi-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: CABI Compendium SDK — search diseases and fetch details."""
from parse_apis.cabi_compendium_api import CABI, DiseaseNotFound
client = CABI()
# Search for plant diseases — limit= caps total items fetched.
for disease in client.searchresults.search(query="Phytophthora", limit=5):
print(disease.title, disease.url)
# Drill into the first result for full metadata.
first = client.searchresults.search(query="powdery mildew", limit=1).first()
if first:
detail = first.details()
print(detail.title, detail.doi, detail.description)
# Typed error handling for a bad URL.
try:
bad = Disease(_api=client, id="cabicompendium.0000000", title="", url="https://www.cabidigitallibrary.org/doi/10.1079/cabicompendium.0000000")
bad.details()
except DiseaseNotFound as exc:
print(f"Not found: {exc.url}")
print("exercised: searchresults.search / disease.details / DiseaseNotFound")
Full-text search across the CABI Compendium for plant disease datasheets. Returns up to 20 results per query, each carrying a title, URL, and compendium ID. Results are ordered by relevance. No pagination beyond the first page is supported.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search term for plant diseases (e.g. 'late blight', 'Phytophthora') |
{
"type": "object",
"fields": {
"query": "the search term that was used",
"results": "array of matching datasheets, each with title, url, and id"
},
"sample": {
"data": {
"query": "late blight",
"results": [
{
"id": "cabicompendium.40970",
"url": "https://www.cabidigitallibrary.org/doi/10.1079/cabicompendium.40970",
"title": "Phytophthora infestans (Phytophthora blight )"
},
{
"id": "cabicompendium.4528",
"url": "https://www.cabidigitallibrary.org/doi/10.1079/cabicompendium.4528",
"title": "Alternaria solani (early blight of potato and tomato)"
}
]
},
"status": "success"
}
}About the CABI API
What the API Returns
The API covers plant disease datasheet records from the CABI Digital Library Compendium. The search_diseases endpoint accepts a query string (for example, 'late blight' or 'Phytophthora') and returns up to 20 matching results, each containing the datasheet title, its url, and a datasheet id. This is the standard entry point for discovery when you know a disease name, pathogen genus, or symptom term.
Datasheet Detail Retrieval
Once you have a datasheet URL from search results, pass it to get_disease_details to retrieve publicly available metadata for that record. The response includes the datasheet title (common and scientific name), the doi link, a description field containing the abstract that summarizes topics covered, and a references array of citation strings. The references array may be empty when that data is not publicly loaded for a given record.
Access Limitations
CABI's Compendium datasheets are partly paywalled. Full datasheet content — including host plant lists, geographic distribution tables, control measures, and detailed symptom descriptions — requires institutional subscription access and is not returned by this API. The get_disease_details endpoint exposes only the publicly available metadata layer: title, DOI, and abstract. This makes the API suitable for indexing, linking, and screening datasheets, but not for extracting full agronomic detail.
The CABI API is a managed, monitored endpoint for cabi.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when cabi.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 cabi.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.
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?+
- Building a plant pathology reference index by collecting datasheet titles, DOIs, and abstracts for a library catalog
- Screening search results for a specific pathogen genus using the
queryparameter insearch_diseases - Generating citation-ready DOI links for plant disease records in research tooling
- Populating a disease lookup tool with CABI datasheet URLs to direct agronomists to canonical records
- Cross-referencing CABI datasheet IDs with internal crop protection databases
- Alerting systems that check whether a newly reported disease name exists in the CABI Compendium
| 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 CABI offer an official developer API for the Digital Library?+
What does `get_disease_details` actually return, and what is excluded?+
title, doi, url, description (the abstract), and a references array. It does not return host plant lists, distribution maps, symptom details, control measures, or other content gated behind institutional access. Those sections are available only to subscribers on the CABI Digital Library site.Can I retrieve more than 20 search results per query?+
search_diseases returns up to 20 results per call and does not currently expose pagination parameters. You can fork this API on Parse and revise it to add offset or page-number support if your use case requires deeper result sets.Does the API cover fungal pathogens, bacteria, viruses, and nematodes, or only certain disease types?+
query parameter in search_diseases searches across all disease types indexed in the CABI Compendium, so fungal, bacterial, viral, and nematode-related datasheets can appear in results. However, the API does not expose a filter parameter for pathogen type or host crop — all filtering must be done against the returned title field in your own application. You can fork the API on Parse and revise it to add a pathogen-type or crop filter endpoint.Are the references returned in `get_disease_details` always populated?+
references array may be empty for a given datasheet if that citation data is not part of the publicly accessible portion of the record. Availability varies by datasheet.