{"openapi":"3.0.3","info":{"title":"Tsnobari","version":"0.1.0","description":"Read-only guide to events in Tbilisi. Facts (title, time, venue, price, source URL) come from public listings. Descriptions, tags, and occasion notes are written by Tsnobari. Tickets are sold only at sourceUrl."},"servers":[{"url":"https://tsnobari.ge"}],"paths":{"/api/events":{"get":{"operationId":"listEvents","summary":"List events","parameters":[{"name":"from","in":"query","schema":{"type":"string","format":"date"},"description":"Inclusive start date in Asia/Tbilisi (YYYY-MM-DD)."},{"name":"to","in":"query","schema":{"type":"string","format":"date"},"description":"Inclusive end date in Asia/Tbilisi (YYYY-MM-DD)."},{"name":"category","in":"query","schema":{"type":"string","enum":["concerts","nightlife","theatre","exhibitions","tech","business","food","sports","film"]}},{"name":"tag","in":"query","schema":{"type":"string"},"description":"Tag slug from /api/tags."},{"name":"occasion","in":"query","schema":{"type":"string"},"description":"Good-for slug, such as first-date or with-kids."},{"name":"goodFor","in":"query","schema":{"type":"string"},"description":"Alias of occasion."},{"name":"priceMax","in":"query","schema":{"type":"number"},"description":"Keep events whose lowest listed price is at most this many GEL. Events with no price are left out."},{"name":"venue","in":"query","schema":{"type":"string"},"description":"Venue slug."},{"name":"q","in":"query","schema":{"type":"string"},"description":"Search title, venue, or performer."},{"name":"lang","in":"query","schema":{"type":"string","enum":["ka","en"],"default":"ka"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}}],"responses":{"200":{"description":"A page of events","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/events/{slug}":{"get":{"operationId":"getEvent","summary":"One event","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"lang","in":"query","schema":{"type":"string","enum":["ka","en"]}}],"responses":{"200":{"description":"The event","content":{"application/json":{"schema":{"type":"object","required":["slug","title","startsAt","timezone","sourceUrl","venue"],"properties":{"slug":{"type":"string"},"title":{"type":"string"},"category":{"type":"string","enum":["concerts","nightlife","theatre","exhibitions","tech","business","food","sports","film"]},"startsAt":{"type":"string","description":"ISO 8601 with Asia/Tbilisi offset, for example 2026-11-16T22:00:00+04:00"},"endsAt":{"type":"string","nullable":true},"timeLabel":{"type":"string"},"timezone":{"type":"string","enum":["Asia/Tbilisi"]},"ongoing":{"type":"boolean"},"soldOut":{"type":"boolean"},"price":{"type":"object"},"venue":{"type":"object"},"occasions":{"type":"array","items":{"type":"object"}},"tags":{"type":"array","items":{"type":"object"}},"sourceUrl":{"type":"string","nullable":true,"description":"Original listing. Tickets live here."},"sources":{"type":"array","items":{"type":"object"}},"description":{"type":"string","nullable":true,"description":"Tsnobari's own note in the requested lang."},"descriptionKa":{"type":"string","nullable":true},"descriptionEn":{"type":"string","nullable":true},"pageUrl":{"type":"string"},"jsonUrl":{"type":"string"}}}}}}}}},"/api/venues":{"get":{"operationId":"listVenues","summary":"List venues","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Search title, venue, or performer."},{"name":"lang","in":"query","schema":{"type":"string","enum":["ka","en"],"default":"ka"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}}],"responses":{"200":{"description":"Venues"}}}},"/api/venues/{slug}":{"get":{"operationId":"getVenue","summary":"One venue","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Venue"}}}},"/api/organizers":{"get":{"operationId":"listOrganizers","summary":"List organizers","responses":{"200":{"description":"Organizers"}}}},"/api/organizers/{slug}":{"get":{"operationId":"getOrganizer","summary":"One organizer","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Organizer"}}}},"/api/performers":{"get":{"operationId":"listPerformers","summary":"List performers","responses":{"200":{"description":"Performers"}}}},"/api/performers/{slug}":{"get":{"operationId":"getPerformer","summary":"One performer","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Performer"}}}},"/api/tags":{"get":{"operationId":"listTags","summary":"Tags and good-for occasions","responses":{"200":{"description":"Tags and occasions"}}}},"/api/openapi.json":{"get":{"operationId":"openApi","summary":"This document","responses":{"200":{"description":"OpenAPI"}}}},"/api/mcp":{"post":{"operationId":"mcp","summary":"Read-only MCP endpoint (streamable HTTP, JSON-RPC 2.0)","responses":{"200":{"description":"JSON-RPC response"}}}}}}