PMDG Content API - Product Overview
The Pest Management Decision Guide (PMDG) Content API and associated endpoints have been created to provide external customers with structured, secure access to CABI Plantwise PMDG (Plantwise Management Decision Guide) content, enabling filtering, discovery, and retrieval of high quality information.
The API is designed to support:
- Integration into third-party platforms and applications
- Reliable retrieval using validated naming conventions
- Scalable and secure access for commercial partner use
Base URL:https://data.cabi.org/pmdg
Authentication
All requests must include your unique API Key in the header.
Header: x-api-key: YOUR_API_KEY
Note: Your data access (Countries, Crops, Pests, etc.) is automatically scoped based on this key. For example, if you have access only to United Kingdom (UK) data but you include the United States (US) in your request, the response will contain data only for the UK. Same logic applies to Crops and Pests.
GET /countries
Countries with Available PMDG Content
Business Purpose
This endpoint enables customers to understand where PMDG content exists, so partners can present valid country filters in their own applications and prevent users from selecting unsupported locations (Depending on what you have access to).
What this endpoint provides
- A complete list of countries where PMDG content is available
- Countries are returned using standard ISO2 country codes
- A stable, predictable dataset suitable for use as a picklist or filter control
Why this matters
- Ensures users only search for PMDGs in supported countries
- Supports consistent geographic filtering across platforms
Request
curl -X GET "{{BASE_URL}}/countries" \
-H "x-api-key: YOUR_API_KEY"
Response Example
[
{
"isO2": "BD",
"countryName": "Bangladesh"
},
{
"isO2": "BF",
"countryName": "Burkina Faso"
},
{
"isO2": "BG",
"countryName": "Bulgaria"
}
]
POST /croppest
Available Crops and Pests by Country
Business Purpose
This endpoint allows customers to dynamically determine which crops and pests are relevant for one or more selected countries, ensuring that search filters always reflect valid combinations.
What this endpoint provides
- A list of available crops for the selected country or countries
- A list of available pests for the selected country or countries
- Results automatically adjust based on:
- Selected countries
- Any crop or pest already selected (in any order)
Why this matters
- Prevents users selecting invalid crop/pest combinations
- Improves search accuracy and reduces empty results
Key characteristics
- Accepts one or more ISO2 country codes
- Provides a CABT ID for each crop or pest term to ensure consistency and standardisation
- Performs efficiently even with multiple filters applied
Request Body
| Field | Type | Description |
|---|---|---|
countries |
Array[String] | Mandatory. List of ISO-2 Country Codes (e.g., ["IN", "BD"]). . Send an empty array [] to retrieve data for all entitled countries. |
crops |
Array[Int] | Mandatory. List of Crop IDs. . Send an empty array [] to retrieve data for all entitled crops. |
pests |
Array[Int] | Mandatory. List of Pest IDs. . Send an empty array [] to retrieve data for all entitled pests. |
Example Request
curl -X POST "{{BASE_URL}}/croppest" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"countries": ["BD"],
"crops": [15395],
"pests": [12331]
}'
curl -X POST "{{BASE_URL}}/croppest" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"countries": ["KE", "BD"], // Selects country Kenya and Bangladesh
"crops": [], // Empty array selects ALL entitled crops
"pests": [] // Empty array selects ALL entitled pests
}'
POST /search
Filtered PMDG Search
Business Purpose
This endpoint enables customers to search and retrieve PMDG summaries based on geographic and biological relevance, supporting discovery, listing, and selection workflows.
What this endpoint provides
- A filtered list of PMDGs based on:
- One or more countries (mandatory)
- Crops (optional)
- Pests (optional)
- For each PMDG, summary information including:
- Title
- Content type (PMDG)
- Unique identifier (PAN)
- Associated crops
- Associated pests
Why this matters
- Enables users to discover relevant PMDGs before accessing full content
- Provides lightweight results suitable for paging and preview displays
Key characteristics
- Country selection is mandatory to ensure relevance
- Supports pagination to manage large result sets
- Supports customer-specific restrictions (e.g. limited countries or PMDG sets)
Request Body
| Field | Type | Description |
|---|---|---|
countries |
Array[String] |
Mandatory. List of ISO-2 Country Codes (e.g.,
["IN", "BD"]).Send an empty array [] to retrieve data for all entitled
countries.
|
crops |
Array[Int] |
Mandatory. List of Crop IDs. Send an empty array [] to retrieve data for all entitled
crops.
|
pests |
Array[Int] |
Mandatory. List of Pest IDs. Send an empty array [] to retrieve data for all entitled
pests.
|
page |
Integer | Mandatory. Page number for pagination (0-indexed). |
rows |
Integer |
Mandatory. Number of results to return. Note: The backend enforces a maximum limit based on your entitlement. |
Example Request
curl -X POST "{{BASE_URL}}/search" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"countries": ["BD"],
"crops": [15395, 29222, 32949, 115072],
"pests": [12331, 66242, 77409, 99219],
"page": 0,
"rows": 20
}'
curl -X POST "{{BASE_URL}}/search" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"countries": ["BD"],
"crops": [15395, 29222],
"pests": [12331],
"page": 1, // Requesting the 2nd page (0-indexed)
"rows": 20
}'
curl -X POST "{{BASE_URL}}/search" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"countries": ["IN"],
"crops": [], // Empty array selects ALL entitled crops for India
"pests": [], // Empty array selects ALL entitled pests for India
"page": 0,
"rows": 50
}'
curl -X POST "{{BASE_URL}}/search" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"countries": [], // Search in ALL entitled countries
"crops": [], // Search in ALL entitled crops
"pests": [66242], // Specific Pest ID only
"page": 0,
"rows": 100
}'
POST /getpmdg
Retrieve Full PMDG by PAN
Business Purpose
This endpoint allows customers to retrieve the complete PMDG content for a specific guide, once it has been identified via search or other workflows.
What this endpoint provides
- Full PMDG content based on a unique PAN identifier
- Comprehensive data aligned with the Plantwise+ PMDG model
- A complete, structured representation suitable for display or downstream processing
Why this matters
- Enables direct access to authoritative guidance
- Supports detailed content views in customer applications
- Allows reuse of PMDG data in multiple delivery channels
Key characteristics
- Requires a valid PAN identifier
- Returns full PMDG detail in a consistent JSON structure
Request Body
| Field | Type | Description |
|---|---|---|
pan |
BigInt |
Mandatory. The unique PAN identifier. Note: The backend returns PMDG based on your entitlement. |
Example Request
curl -X POST "{{BASE_URL}}/getpmdg" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"pan": 20157801498
}'
API Principles
All PMDG Content API endpoints share the following characteristics:
Security
Access is controlled via API keys, with protections against malicious queries.
Consistency
Responses use a consistent JSON structure across all endpoints.
Performance
Designed for efficient response times, even with multiple filters applied.
Reliability
Intended for production use by external partners and platforms.
Typical Customer Journey
- Select country filters
- Retrieve valid crops and pests for those countries
- Search for PMDGs using selected filters
- Retrieve full PMDG content using PAN
Error Codes
| Status | Meaning |
|---|---|
400 |
Bad Request: Invalid request JSON or Missing required fields. |
403 |
Access Denied: API Key missing, invalid, or no entitlements found. |
404 |
Not Found: The requested resource or path does not exist. |
500 |
Internal Server Error: An error occurred on the server side. |
Appendix
CABI Thesaurus (CABT)
The CABI Thesaurus (CABT) is CABI’s authoritative source for indexing its data. It functions as a controlled vocabulary to ensure consistency across all CABI products. Each crop and pest is assigned a unique CABT identifier along with a preferred label, and this API provides access to those identifiers. More information about the CABI Thesaurus, including the ability to browse the full dataset, is available on the CABI Digital Library.