API Documentation
This document provides an overview of the OlioWise API endpoints for accessing olive oil data.
Base URL
All API endpoints are available at: https://www.oliowise.com/api/
API Versions
Version 1 (v1)
Returns data in JSON object format with named fields.
Version 2 (v2)
Returns data in optimised array format for better performance and smaller payload sizes.
Available Endpoints
API v1 Endpoints
GET /api/v1/oils.json
Returns a list of all olive oils with detailed information.
Response Format: Array of objects Fields:
title- Oil nameurl- Relative URL to oil pagecountry- Country of originyear- Latest recorded release year; not necessarily a producer-disclosed harvest yearproducer_harvest_year- Newest release year with recorded producer-site provenance, ornull; may be older thanyear. Historical disclosure, not current stock or a guarantee of the vintage supplied.region- Production regionphenols- Phenolic content (mg/kg)estimated_phenols- Estimated phenolic contentprice_per_litre- Price per litrecurrency- Currency codeimage- Image URLoverall_score- Overall score (0-100)trust_level- Trust level (Low/Medium/High)availability- Stock availabilityrelease_date- Release daterelease_date_confidence- Confidence in release date
GET /api/v1/producers.json
Returns a list of all olive oil producers.
Response Format: Array of objects Fields:
name- Producer nameslug- URL slugurl- Relative URL to producer pagecountry- Country of operationregion- Production regionstate- State/provinceoil_count- Number of oils producedvarieties- Array of olive varieties usedlatest_year- Most recent harvest yearoverall_score- Producer overall scoreimage- Producer image URLdescription- Producer descriptionwebsite- Producer website URL
GET /api/v1/regions.json
Returns a list of all production regions.
Response Format: Array of objects Fields:
name- Region nameslug- URL slugurl- Relative URL to region pagecountry- Countrystate- State/provinceoil_count- Number of oils from regionproducer_count- Number of producers in regionvarieties- Array of varieties grown in regionavg_polyphenols- Average polyphenol content
GET /api/v1/varieties.json
Returns a list of all olive varieties.
Response Format: Array of objects Fields:
name- Variety nameurl- Relative URL to variety pageoil_count- Number of oils using this varietyintensity- Flavour intensity (1-10)profile- Flavour profile (Mild/Medium/Robust)bitterness- Bitterness levelpungency- Pungency levelfruitiness- Fruitiness levelpolyphenol_content- Typical polyphenol contentprimary_notes- Array of primary flavour notes
API v2 Endpoints
GET /api/v2/oils.json
Returns olive oil data in optimised array format for better performance.
Response Format: Object with fields and data arrays
fields- Array of field namesdata- Array of arrays, each containing values in the same order as fields
v2 oils fields include the v1 oil fields plus producer, state, composition, varieties, producer_responsiveness, tags, certifications, ffa (latest-release free fatty acids, %) and harvest_date (ISO date when known).
Example Response Structure:
{
"fields": ["title", "url", "country", "year", "region", "phenols", ...],
"data": [
["Oil Name 1", "/oils/oil-1/", "Australia", 2024, "Region 1", 250, ...],
["Oil Name 2", "/oils/oil-2/", "New Zealand", 2024, "Region 2", 300, ...]
]
}
GET /api/v2/oils-by-competition/<competition-key>.json
Returns only the catalogue oils with recorded awards at the named competition, plus their award history at that competition. For example: /api/v2/oils-by-competition/olive-japan.json.
Response format: fields and data describe unique oil rows; awardFields and awards describe award rows in the same compact field-order format. Each award's oil_index refers to its oil's zero-based position in data.
Oil rows describe current catalogue information. Award rows preserve competition year, release year, original award label, medal group and category separately. Current oil prices or availability do not describe the historical winning release.
Filters apply to matching awards, then return distinct oils. An oil with Gold and Silver wins in different years can appear in both medal groups; group totals therefore need not sum to the all-oils total. Year filtering uses competition year. Gold is an exact medal group; higher honours and other recognition remain separate.
The endpoint is a static file: query parameters do not filter its response. Competition pages such as /competitions/olive-japan/?year=2025&tier=gold filter locally after loading that competition's JSON. They load it when a visitor searches, filters, sorts or requests more oils. They do not fetch the full site catalogue or create separate HTML pages for each year and medal. Page requests include a payload version in the URL to invalidate cached data when the underlying catalogue changes.
Usage Examples
Fetching All Oils (v1)
fetch('/api/v1/oils.json')
.then(response => response.json())
.then(oils => {
oils.forEach(oil => {
console.log(`${oil.title} - ${oil.trust_level} trust`);
});
});
Fetching All Oils (v2 - Optimised)
fetch('/api/v2/oils.json')
.then(response => response.json())
.then(result => {
const { fields, data } = result;
const titleIndex = fields.indexOf('title');
const trustIndex = fields.indexOf('trust_level');
data.forEach(oil => {
console.log(`${oil[titleIndex]} - ${oil[trustIndex]} trust`);
});
});
Fetching Producers
fetch('/api/v1/producers.json')
.then(response => response.json())
.then(producers => {
producers.forEach(producer => {
console.log(`${producer.name} - ${producer.oil_count} oils`);
});
});
Data Notes
- All endpoints return JSON data
- Dates are in ISO format where applicable
- Phenolic content is measured in mg/kg
- Trust scores range from 0-100
- Currency codes follow ISO 4217 standard
- Images are relative URLs from the site root
nullvalues indicate missing or unavailable data
Rate Limiting
Currently, no rate limiting is applied to these endpoints. However, please be respectful with your usage.
Support
For questions about the API or to report issues, please contact us.