Skip to content

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.