Developer Documentation
Integrate VinoFYI data into your applications. Access wines, grape varieties, regions, wineries, and guides through our JSON APIs and machine-readable endpoints.
API Endpoints
All API endpoints return JSON responses with Content-Type: application/json.
No authentication is required. Free to use.
| Endpoint | Description | Cache |
|---|---|---|
GET /api/wine/{slug}/ |
Full wine detail with grapes and food pairings | 1h |
GET /api/grape/{slug}/ |
Grape variety with sensory profile and aromas | 1h |
GET /api/region/{slug}/ |
Wine region with terroir and classification | 1h |
GET /api/winery/{slug}/ |
Winery detail with top-rated wines | 1h |
GET /api/search/?q= |
Search across 6 entity types (grapes, regions, wines, wineries, countries, glossary) | 5m |
GET /api/term/{slug}/ |
Glossary term tooltip (definition, pronunciation) | 1h |
GET /api/compare/?slug_a=&slug_b= |
Compare two grape varieties (sensory profiles, key differences) | 1h |
GET /api/pairing/?food= |
Food pairing recommendations (wine styles for a food category) | 1h |
GET /api/vintage/?region= |
Vintage chart for a wine region (quality scores by year) | 1h |
GET /api/openapi.json |
OpenAPI 3.1.0 spec (CORS enabled) | none |
Search API
/api/search/?q={query}
curl "https://vinofyi.com/api/search/?q=cabernet"
{
"results": [
{"name": "Cabernet Sauvignon", "slug": "cabernet-sauvignon", "type": "grape", "url": "/grape/cabernet-sauvignon/"},
{"name": "Cabernet Franc", "slug": "cabernet-franc", "type": "grape", "url": "/grape/cabernet-franc/"}
],
"total": 2
}
Wine Detail
/api/wine/{slug}/
{
"name": "Opus One 2019",
"slug": "opus-one-2019",
"wine_type": "Red",
"abv": 14.5,
"body": "Full",
"acidity": "Medium",
"region": "Napa Valley",
"winery": {"name": "Opus One", "slug": "opus-one"},
"grapes": [
{"name": "Cabernet Sauvignon", "slug": "cabernet-sauvignon", "percentage": 84.0, "is_primary": true},
{"name": "Petit Verdot", "slug": "petit-verdot", "percentage": 7.0, "is_primary": false}
],
"food_pairings": [
{"name": "Beef", "slug": "beef", "affinity_score": 95}
]
}
Food Pairing
Get wine style recommendations for a food category.
/api/pairing/?food={slug}
curl "https://vinofyi.com/api/pairing/?food=beef"
{
"food": {"name": "Beef", "slug": "beef"},
"pairings": [
{"style": {"name": "Bordeaux Red", "slug": "bordeaux-red"}, "affinity_score": 95, "explanation": "..."}
]
}
Glossary Term
/api/term/{slug}/
curl "https://vinofyi.com/api/term/terroir/"
{
"term": "Terroir",
"slug": "terroir",
"definition": "The complete natural environment in which wine is produced.",
"pronunciation": "teh-RWAHR",
"category": "Viticulture",
"difficulty_level": "intermediate",
"url": "/glossary/terroir/"
}
AI / LLM Integration
VinoFYI provides machine-readable content summaries following the llms.txt standard. These endpoints help AI models understand and reference our content.
A concise summary of VinoFYI's content structure and key pages. Designed for AI models to quickly understand what the site offers and how it is organized.
Extended version with complete URL patterns, i18n language codes, and page-level structure.
AI Crawler Policy: Our robots.txt explicitly allows GPTBot, ClaudeBot, and Google-Extended crawlers.
SEO & Standards
| Endpoint | Standard | Description |
|---|---|---|
| /sitemap.xml | Sitemaps 0.9 | Sitemap index with 20 per-section sitemaps covering all content types |
| /robots.txt | REP | Crawler directives with explicit AI bot permissions |
| /.well-known/security.txt | RFC 9116 | Security vulnerability reporting contact information |
Structured Data
- BreadcrumbList — navigation breadcrumbs on all pages
- WebSite — with SearchAction for sitelinks search box
- Article — guide pages with author, dates, and word count
- DefinedTerm — glossary terms with definitions
- Place — wine regions with coordinates
- Organization — winery profiles
Internationalization
All content pages include hreflang
alternate links for 15 languages: English (default), Korean, Japanese, Chinese (Simplified),
Spanish, French, German, Portuguese, Russian, Arabic, Hindi, Thai, Vietnamese, Indonesian, and Turkish.
OpenAPI Specification
A machine-readable OpenAPI 3.1.0 specification is available for our JSON APIs. Use it with tools like Swagger UI, Postman, or code generators.
Download openapi.jsonFetch via command line
# Download the OpenAPI spec
curl "https://vinofyi.com/api/openapi.json" -o openapi.json
# Pretty-print
curl -s "https://vinofyi.com/api/openapi.json" | python -m json.tool
Rate Limits & Usage
Our APIs are free to use with no authentication required. To ensure fair access for everyone, please follow these guidelines:
- Keep requests under 60 requests per minute per IP address
- Include a descriptive
User-Agentheader identifying your application - Cache responses locally when possible — our API responses include
Cache-Controlheaders - For bulk data access, use the sitemap to discover all URLs
If you need higher-volume access or have integration questions, reach out via the contact in our security.txt.
Quick Reference
/api/wine/{slug}/
/api/grape/{slug}/
/api/region/{slug}/
/api/winery/{slug}/
/api/search/?q=...
/api/term/{slug}/
/api/compare/?slug_a=&slug_b=
/api/pairing/?food=...
/api/vintage/?region=...
/api/openapi.json
/llms.txt