Wine trip data has always been a gap for developers. Winery locations exist in Google Maps as an undifferentiated soup of business listings. Official regional bodies publish PDFs. Tourism boards have region-specific databases that don't talk to each other. If you're building a travel app, a wine recommendation engine, or an AI assistant that needs to handle wine travel queries, you've historically had two options: scrape unreliable sources, or apologise to your users.
We built the TheWineTrip API to close this gap.
What the API Contains
The API covers 18 wine regions with structured, typed data:
- 45,268 wineries with GPS coordinates, website URLs, and type classification - 18 regional guides with harvest calendars, climate data, accommodation tiers, and sub-regional breakdowns - Day-by-day itinerary generation across four travel styles (romantic, serious, budget, luxury) for 1–14 days - Affiliate URLs for Viator and GetYourGuide baked into every region response
Every field is consistent across regions. This matters when you're building software that has to handle the data programmatically — you're not normalising inconsistent sources or writing per-region parsing logic.
The Four Endpoints
All endpoints live under `https://thewinetrip.com/api/v1`. All return JSON. All have CORS headers. All are documented in an OpenAPI 3.0 spec at `/api-docs`.
**GET /api/v1/regions-list** — All 18 region slugs and names. Use this to populate a dropdown, seed a search index, or validate a region param before making further calls.
**GET /api/v1/regions/{slug}** — Full region guide: geography, wine styles, must-visit wineries with GPS, accommodation tiers, affiliate URLs, harvest calendar. One call returns everything needed to render a region page or populate an LLM context window.
**GET and POST /api/v1/plan** — Structured day-by-day itinerary for any region. The response includes a daily schedule, curated winery list, packing checklist, accommodation suggestions, and budget estimate. GET takes query params; POST takes a JSON body. Identical response shape.
**GET /api/v1/wineries** — GPS winery search within a region, with optional name filter (`q`) and limit (max 200).
Quick Start
No API key needed on the free tier:
```bash # All available regions curl "https://thewinetrip.com/api/v1/regions-list"
# Full Bordeaux region data curl "https://thewinetrip.com/api/v1/regions/bordeaux"
# 4-day luxury Barossa itinerary curl "https://thewinetrip.com/api/v1/plan?region=barossa&days=4&style=luxury" ```
In Python:
```python import requests
BASE = "https://thewinetrip.com/api/v1"
# Region data region = requests.get(f"{BASE}/regions/napa").json() print(region["name"], "—", region["tagline"])
# Generate itinerary plan = requests.post(f"{BASE}/plan", json={ "region": "napa", "days": 3, "style": "romantic", "interests": ["tasting rooms", "scenic drives"] }).json()
for day in plan["plan"]["itinerary"]: print(f"Day {day['day']}: {day['morning']}") ```
What a Winery Record Looks Like
```json { "id": "winery_napa_001", "name": "Opus One Winery", "region": "napa-valley", "area": "Napa Valley", "type": "Estate Winery", "website": "https://opusonewinery.com", "latitude": 38.4285, "longitude": -122.4080, "affiliate_url": "https://thewinetrip.com/go/viator?dest=napa" } ```
Every winery has GPS. Every region response includes affiliate URLs for Viator and GetYourGuide where available.
Use Cases
**Travel app itinerary builder.** The `/plan` endpoint returns a full trip structure in one call: daily schedule, wineries with GPS, accommodation tiers by budget, packing list, getting-there notes, and a budget estimate. Build the rendering layer; we handle the data.
**Wine chatbot or AI assistant.** Pass a `/regions/{slug}` response into an LLM context window. The structured JSON — harvest calendar, appointment culture notes, sub-regional breakdown, real winery names with coordinates — gives the model specific, accurate context instead of training-data guesses. We have a worked example of this in our post on [building an AI wine trip recommender](/blog/build-ai-wine-trip-recommender).
**Recommendation engine.** Pull all 18 regions via `/regions-list`, then load attributes for each via `/regions/{slug}`. Build a scoring function against user preferences: budget tier, climate type, flight origin, wine style. The consistent data structure across regions means you're querying a unified schema.
**Embeddable widget.** The itinerary output can drive an embeddable trip planner for travel blogs or wine education sites. Render it in your own front end, distribute the widget, use the API to keep it current.
Rate Limits and Pricing
Free tier: 100 requests per day, no key required. Every response includes `X-RateLimit-Limit` and `X-RateLimit-Reset` headers. The reset is at UTC midnight.
Pro tier: 10,000 requests per day at $29/month. Commercial license included. Start at [/developers](/developers).
MCP Server
If you're building with Claude, `thewinetrip-mcp-server` on npm connects Claude Desktop directly to the same data via Model Context Protocol — no API calls to wire manually. See [/developers](/developers) for the one-line config.