Use Atlas data.

The Atlas API lets applications search and retrieve public wine e-label records. Public reads are free and open, with no key required for the standard rate limit.

Quick start

Set the base URL once, then run any example below.

ATLAS_API=https://www.elabel-atlas.eu/api/v1

Authentication

Anonymous requests can use every public read endpoint. A key raises the rate limit and is required for provider write operations. Provider workspace owners and administrators can create a key in the signed-in workspace under API keys. If you need a read key without a provider workspace or need bulk access, email david@essentialcode.eu.

curl --fail --silent --show-error \
  -H "Authorization: Bearer $ATLAS_API_KEY" \
  "$ATLAS_API/public-records?limit=1"

Rate limits

Each public operation allows 60 anonymous requests per minute per address, or 600 per minute per read key. Responses include limit, remaining, and reset headers. A request over the limit returns HTTP 429:

HTTP/1.1 429 Too Many Requests
retry-after: 60
x-ratelimit-limit: 60
x-ratelimit-remaining: 0

{"error":{"code":"rate_limited","message":"The public API rate limit was exceeded."}}

Public read endpoints

Search records

curl --fail --silent --show-error \
  "$ATLAS_API/search?q=Veltliner&limit=1"

Sample output

{
  "query": "Veltliner",
  "records": [{
    "atlas_record_id": "QXSvIVqvHcRW-LjHtG88I",
    "name": "Grüner Veltliner 2025",
    "provider": { "name": "Demo Wine Cooperative" },
    "gtin": "4006381333931"
  }]
}

List public records

curl --fail --silent --show-error \
  "$ATLAS_API/public-records?limit=1"

Sample output

{
  "records": [{
    "atlas_record_id": "ovPcoHyHMEbzdcGC_Zkm_",
    "name": "Grüner Veltliner Ried Steinberg 2024",
    "provider": { "name": "Glasswise" }
  }],
  "next_cursor": "eyJ1cGRhdGVkQXQiOjE3ODk1MDIxMjQ3MDcsImlkIjoib3ZQY29IeUhNRWJ6ZGNHQ19aa21fIn0"
}

Look up a GTIN

curl --fail --silent --show-error \
  "$ATLAS_API/public-records/4006381333931"

Sample output

{
  "gtin": "4006381333931",
  "records": [{
    "atlas_record_id": "QXSvIVqvHcRW-LjHtG88I",
    "name": "Grüner Veltliner 2025",
    "provider": { "name": "Demo Wine Cooperative" }
  }]
}

Get one record by Atlas ID

RECORD_ID=$(curl --fail --silent --show-error \
  "$ATLAS_API/public-records?limit=1" | jq -r '.records[0].atlas_record_id')
curl --fail --silent --show-error \
  "$ATLAS_API/public-records/by-id/$RECORD_ID"

Sample output

{
  "atlas_record_id": "ovPcoHyHMEbzdcGC_Zkm_",
  "name": "Grüner Veltliner Ried Steinberg 2024",
  "provider": { "name": "Glasswise" },
  "atlas_updated_at": "2026-09-15T19:55:24.707Z"
}

Pagination

The public record list returns next_cursor when another page exists. Send that exact opaque value with the same filters. Do not decode or edit it.

CURSOR=$(curl --fail --silent --show-error \
  "$ATLAS_API/public-records?limit=1" | jq -r '.next_cursor')
curl --fail --silent --show-error \
  "$ATLAS_API/public-records?limit=1&cursor=$CURSOR"

MCP

Model Context Protocol, or MCP, is a standard way for an AI client to call external tools. Atlas provides an anonymous Streamable HTTP server at https://www.elabel-atlas.eu/mcp.

Add it to Claude Code:

claude mcp add --transport http --scope project e-label-atlas https://www.elabel-atlas.eu/mcp

For another MCP client, use this server entry:

{
  "mcpServers": {
    "e-label-atlas": {
      "type": "http",
      "url": "https://www.elabel-atlas.eu/mcp"
    }
  }
}

The server exposes search_elabels, lookup_elabel_by_gtin, get_elabel, and list_elabels_updated_since.