Winevery API / Version 1

A good first call.

Wine discovery and structured reference data for your application. Access up to 2 million wines through a REST API with JSON responses.

Quick start

  1. Create a free account and open the developer dashboard.
  2. Create an API key. Copy the full key immediately; Winevery stores only its hash.
  3. Make a request from your server.
curl 'https://www.winevery.com/api/v1/wines?q=rioja&limit=3' \
  -H 'Authorization: Bearer YOUR_API_KEY'

The Sandbox includes 250 credits per calendar month, with no payment card. The dashboard shows your quota, keys and recent usage.

Authentication

Send Authorization: Bearer YOUR_API_KEY with every request. Keys begin with wv_live_. Store them in server environment variables. Never put them in URLs, frontend bundles, analytics events or public repositories.

API keys only authorize the public data endpoints below. They do not grant access to your account, cellar, journal or Passport. Your website session is used separately to manage keys and billing.

Rotate or revoke keys from the dashboard. Rotation immediately revokes the old key and shows a replacement once. Requests with revoked or expired keys return 401. Browser cross-origin API calls are not enabled; call the API through your backend.

Endpoint reference

Base URL: https://www.winevery.com/api/v1

GET /catalogue

Catalogue count, countries, wine types and field coverage. 1 credit.

Returns the actual available wine-record count, import timestamp, countries, types and recorded field coverage. This operational count can differ from the public catalogue’s upper-bound description.

GET /wines

Search names, producers, grapes and regions. Up to 48 results per page. 1 credit.

Optional parameters: q (2–120 characters), country (exact recorded country), type, page (1–100) and limit (1–48, default 24). Results include pagination.hasNext. Supported types: Red wine, White wine, Rosé wine, Sparkling wine, Dessert wine and Fortified Wine.

GET /wines/{id}

A wine profile by stable Winevery ID or slug. 1 credit.

Use the stable ID or slug returned by search. Missing wine IDs return 404.

GET /wines/{id}/similar

Up to 12 alternatives, with recorded matching reasons. 3 credits.

Use the stable ID or slug returned by search. Optional limit: 1–12, default 6. Matches include recorded reasons.

POST /pairings

Up to 12 wine suggestions for an English dish description. 5 credits.

JSON body: required dish (English, 2–500 characters), optional limit (1–12, default 6) and heat (as-described, mild, medium or hot). An unrecognised dish returns recognised: false with an empty shortlist and a suggestion to clarify it.

Request examples

JavaScript / Node.js

const response = await fetch(
  'https://www.winevery.com/api/v1/wines?q=rioja&limit=3',
  { headers: { Authorization: 'Bearer ' + process.env.WINEVERY_API_KEY } }
);
const result = await response.json();
if (!response.ok) throw new Error(result.error.message);
console.log(result.data.wines);

Python

import os
import requests

response = requests.get(
    "https://www.winevery.com/api/v1/wines",
    params={"q": "rioja", "limit": 3},
    headers={"Authorization": "Bearer " + os.environ["WINEVERY_API_KEY"]},
    timeout=20,
)
response.raise_for_status()
print(response.json()["data"]["wines"])

Food pairing

curl 'https://www.winevery.com/api/v1/pairings' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"dish":"roast lamb with rosemary","limit":3}'

Response envelope

{
  "data": { "wines": [], "pagination": { "page": 1, "limit": 3, "hasNext": false } },
  "meta": {
    "requestId": "a UUID for support",
    "creditsUsed": 1,
    "creditsRemaining": 249,
    "quotaResetsAt": "2026-12-01T00:00:00.000Z"
  }
}

This envelope is illustrative. Endpoint data and reset dates depend on your request and subscription.

Credits and limits

Quotas and request rates are shared across every key on your account. A paginated search is one request, up to 48 results. Similarity costs 3 credits and food pairing costs 5 credits. Credits are deducted only for successful 2xx responses; validation and server errors are refunded.

Sandbox quotas reset at the start of each calendar month in UTC. Paid quotas reset with the Stripe monthly billing period. Unused credits expire. There are no automatic overage charges.

Successful responses include X-Credits-Limit, X-Credits-Remaining, X-Quota-Reset (Unix seconds), X-RateLimit-Limit (requests per minute) and X-Request-Id. A 429 response includes Retry-After in seconds. Check the error code to distinguish a short rate-limit wait from an exhausted monthly quota.

POST bodies must be JSON and at most 8 KB. Bulk enumeration and exports are not included in self-service plans.

Errors and retries

StatusMeaningNext step
400Invalid inputCorrect the parameters or JSON.
401Missing, expired or revoked keyCheck the Authorization header.
404Wine or endpoint not foundSearch for a valid wine ID.
413 / 415Body too large / wrong content typeSend JSON smaller than 8 KB.
429Rate or monthly quota exceededRead error.code and Retry-After.
503Temporary service errorRetry with exponential backoff and jitter.
{"error":{"code":"invalid_api_key","message":"…","requestId":"…"}}

Contact hello@winevery.com with the request ID, endpoint and approximate time. Do not include your key.

Data, caching and use

Wine profiles use stable Winevery IDs. Taste axes run from 0 to 100. Missing values are unknown; do not turn null into zero. Similarity and pairing use the available recorded attributes, and can return fewer matches when coverage is limited. This release does not provide live retail prices, stock, label recognition or generated tasting notes.

Paid plans allow use and caching of metadata inside the subscribed application, with visible Winevery attribution where practical. Self-service plans do not include raw-data resale, standalone data feeds, bulk exports or model-training rights. Contact us for a separate agreement. See the API terms and API privacy notice.

The public MCP connector remains a separate read-only interface with its existing access model.

For adults of legal drinking age. Enjoy responsibly.

Wine API Documentation | Winevery