{
  "service": "event.clinic public directory",
  "version": "v1",
  "documentation": "https://event.clinic/developers",
  "endpoints": [
    "/directory/v1/artists?q=&limit=&offset=",
    "/directory/v1/artists/detail?slug=",
    "/directory/v1/artists/photo?slug=",
    "/directory/v1/venues?q=&country=&city=&type=&limit=&offset=",
    "/directory/v1/venue-type-counts?country=",
    "/directory/v1/venues/detail?id=",
    "/directory/v1/venues/detail?slug=",
    "/directory/v1/venues/sitemap",
    "/directory/v1/companies?q=&country=&limit=&offset=",
    "/directory/v1/companies/detail?id=",
    "/directory/v1/companies/removal-request",
    "/directory/v1/products?q=&category=&locale=&limit=&offset=",
    "/directory/v1/categories?q=&level=&locale=&limit=&offset=",
    "/directory/v1/categories/tree?locale=",
    "/directory/v1/countries?q=&limit=&offset=",
    "/directory/v1/countries?cca2=",
    "/directory/v1/venue-types?q=&locale=",
    "/directory/v1/glossary?q=&initial=&slug=&locale=&related_limit=&limit=&offset=",
    "/directory/v1/glossary?of_the_day=1&locale=&related_limit=",
    "/directory/v1/glossary?random&exclude=&locale=&related_limit=",
    "/directory/v1/glossary/initials?locale="
  ],
  "locales": {
    "supported": [
      "en",
      "hu"
    ],
    "resolution": "exact tag, then base language, then en, per row",
    "note": "hu is partial and grows batch by batch. An untranslated term, definition or cross-reference renders in English, so a page may mix languages. A translated row also carries name_en."
  },
  "search": {
    "semantic_endpoints": [
      "/directory/v1/venues",
      "/directory/v1/companies"
    ],
    "note": "On these two endpoints `q` matches BY MEANING as well as by substring. A query of three characters or more that contains a letter is embedded and compared against the row's own description, so a venue can be found by what it is and a company by what it does, without the words typed appearing in either name. Every other endpoint's `q` is a substring match and nothing more.",
    "ordering": "A substring match on the name (or, for venues, the city) always outranks a match found by meaning. Semantic results follow, nearest first.",
    "filters": "country, city and type are unchanged and still AND with q. Searching by meaning widens WHAT MATCHES; it never widens a filter.",
    "degrades_to": "substring. A query under three characters, or one made only of digits and punctuation, is never embedded; and if the model is unavailable this endpoint answers from the substring match rather than failing. A caller cannot tell the two apart, by design: a degraded search is better than a 500 on a public directory.",
    "multilingual": "The model is multilingual, so a question in Hungarian, Dutch or German reaches rows described in another language.",
    "semantic_result_cap": 300,
    "semantic_result_cap_note": "A question is answered from the 300 nearest rows, so paging a semantic search ends there. Substring matches are NOT capped this way and continue past it. An empty page at offset 300 is this bound, not the end of the directory."
  },
  "field_notes": {
    "computed_fields_carry_no_provenance": {
      "note": "provenance and confidence are keyed by column name. These fields are computed by this API rather than stored, so they can never appear in either map. Their absence says nothing about how far to trust them.",
      "fields": [
        "photo",
        "photos",
        "confidence",
        "banquet_max_pax",
        "seated_max_pax"
      ]
    },
    "deprecated": {
      "seated_max_pax": {
        "replaced_by": "banquet_max_pax",
        "since": "2026-08-30",
        "still_served": true,
        "same_value": true,
        "note": "Identical value under a name that says which layout it measures. It is the maximum BANQUET capacity across the venue's spaces, per venue and not per room. It is not a cross-layout maximum: a venue whose theatre capacity is larger still reports its banquet figure here, which is the point. Do not compare it against a theatre or standing capacity. capacity_max_pax is the cross-layout column and is currently empty on every published venue."
      }
    }
  },
  "page_limit_max": 100,
  "contains_personal_data": false,
  "notes": "Published rows only. Products carry no price and no stock: those belong to the tenant that owns them. No personal contact data is served here."
}