Categories¶
The problem with raw category strings¶
Eventim's public API filters product_groups results by a categories query parameter. The values accepted by that parameter are plain strings — but those strings are not consistent across markets. The same type of event is labelled differently depending on the country:
| Market | Raw API string for "concerts" |
|---|---|
| Germany | "Concerts" |
| France | "Concerts & Festivals" |
| Italy | "Music" |
| Israel | "Music- Live Concerts" |
| UK | "Music" |
If you queried the API with raw strings you would have to know the correct label for every market you wanted to support. Switching markets would silently return no results rather than an error.
English only
The Eventim public API is always queried with language=en. All category strings are therefore
English-language values. Markets that display a different language to end users still return
English facet labels when language=en is present.
The EventimCategory enum¶
EventimCategory normalises all market-specific strings into 9 canonical names. Each enum member's value is a dict mapping Eventim web_id strings to the list of top-level category strings that market uses for this canonical category:
class EventimCategory(Enum):
CONCERTS = {
"web__eventim-de": ["Concerts"],
"web__eventim-fr": ["Concerts & Festivals"],
"web__ticketone-it": ["Concerts"],
"web__lippu-fi": ["Gigs & Concerts"],
"web__eventim-hun": ["Concert"],
# … one entry per supported market
}
When you pass a category to product_groups(), pyventim looks up the current market's web_id in the dict and sends only the strings that market recognises. If a market has no entry for a given canonical category, an empty iterator is returned immediately — no network request is made.
This design prevents the API from returning HTTP 400 errors that occur when unknown category strings are included in the request.
from pyventim import EventimClient, EventimMarket, EventimCategory
# Works for Germany, France, Italy, and every other market —
# no need to know the local string.
client = EventimClient(EventimMarket.FRANCE)
for product_group in client.product_groups(
categories=[EventimCategory.CONCERTS],
page_limit=5,
):
print(product_group.name)
Combining categories¶
Pass multiple members to receive the union of both:
for product_group in client.product_groups(
categories=[EventimCategory.CONCERTS, EventimCategory.FESTIVALS],
page_limit=5,
):
print(product_group.name)
The OTHER category¶
EventimCategory.OTHER is a catch-all for raw strings that exist in some markets but do not map cleanly to any canonical group — including market-specific promotions, regional labels, and language-specific entries. Querying OTHER is rarely useful in practice; it exists so no known API value is left unreachable.
All supported categories¶
| Enum member | Covers |
|---|---|
EventimCategory.CONCERTS |
Live music, gigs, music festivals |
EventimCategory.THEATRE_AND_SHOWS |
Musicals, theatre, comedy, entertainment |
EventimCategory.SPORTS |
Sporting events |
EventimCategory.FESTIVALS |
Multi-act festivals |
EventimCategory.CULTURE |
Classical music, dance, exhibitions, museums |
EventimCategory.FAMILY |
Family shows, theme parks, children's events |
EventimCategory.LEISURE |
Cinema, nightlife, dining, lectures |
EventimCategory.GIFTS_AND_SPECIALS |
Gift vouchers, VIP hospitality |
EventimCategory.OTHER |
Catch-all for market-specific categories |
See the Categories reference for the full list of raw API strings behind each member.