{"openapi":"3.1.0","info":{"title":"Tixvio public catalog API","version":"1.0.0","summary":"Read-only catalog of upcoming public events, venues and artists on Tixvio.","description":"Free, read-only and keyless. Only real, published, publicly listed events are included: demo and test content, link-only (unlisted) events and \"coming soon\" events whose sale has not opened are excluded. Hidden and door-only ticket types never appear. Prices are integers in the minor unit (kuruş / cent) of `currency`. Times are ISO 8601 in UTC; events take place in Europe/Istanbul. Responses may be cached for up to 5 minutes, so availability can be slightly stale; always link users to the event `url` to buy. No ads, no personal data. Rate limit: 120 requests per minute per IP.","contact":{"name":"Tixvio","url":"https://tixvio.com/contact?topic=business"},"termsOfService":"https://tixvio.com/legal/terms"},"servers":[{"url":"https://tixvio.com/api/public/v1"}],"externalDocs":{"description":"Human-readable documentation","url":"https://tixvio.com/developers"},"paths":{"/events":{"get":{"operationId":"listEvents","summary":"List upcoming events","description":"Upcoming public events sorted by start time. Events stay listed until 6 hours after they start.","parameters":[{"name":"q","in":"query","required":false,"description":"Search text (title, venue, artist, organizer, city, genre); Turkish characters optional.","schema":{"type":"string"}},{"name":"city","in":"query","required":false,"description":"Exact city name, e.g. \"İstanbul\" (max 40 characters).","schema":{"type":"string"}},{"name":"genre","in":"query","required":false,"description":"Genre key, e.g. \"Techno\".","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"First day (YYYY-MM-DD, Europe/Istanbul). Defaults to now; earlier dates are treated as now.","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"description":"Last day, inclusive (YYYY-MM-DD, Europe/Istanbul).","schema":{"type":"string","format":"date"}},{"name":"free","in":"query","required":false,"description":"Set to 1 for free events only (RSVP or a free ticket type on sale).","schema":{"type":"string","enum":["1"]}},{"name":"page","in":"query","required":false,"description":"1-based page number.","schema":{"type":"integer","minimum":1,"maximum":200,"default":1}},{"name":"limit","in":"query","required":false,"description":"Page size (1-50). Larger values are clamped to 50.","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}}],"responses":{"200":{"description":"A page of events.","content":{"application/json":{"schema":{"type":"object","required":["page","hasMore","events"],"properties":{"page":{"type":"integer","description":"Current page."},"hasMore":{"type":"boolean","description":"Whether another page exists."},"events":{"type":"array","items":{"$ref":"#/components/schemas/Event"}}}}}}},"400":{"description":"Invalid parameter (e.g. unknown genre or malformed date).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (120 requests per minute per IP). Retry after the number of seconds in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/events/{slug}":{"get":{"operationId":"getEvent","summary":"Event details with ticket offers","parameters":[{"name":"slug","in":"path","required":true,"description":"Event slug (as in the page URL).","schema":{"type":"string"}}],"responses":{"200":{"description":"The event.","content":{"application/json":{"schema":{"type":"object","required":["event"],"properties":{"event":{"$ref":"#/components/schemas/EventDetail"}}}}}},"404":{"description":"Not found, not public, or demo content.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (120 requests per minute per IP). Retry after the number of seconds in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/venues":{"get":{"operationId":"listVenues","summary":"List venues with upcoming events","parameters":[{"name":"q","in":"query","required":false,"description":"Search text (name, district, city).","schema":{"type":"string"}},{"name":"city","in":"query","required":false,"description":"Exact city name.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"1-based page number.","schema":{"type":"integer","minimum":1,"maximum":200,"default":1}},{"name":"limit","in":"query","required":false,"description":"Page size (1-50). Larger values are clamped to 50.","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}}],"responses":{"200":{"description":"A page of venues.","content":{"application/json":{"schema":{"type":"object","required":["page","hasMore","venues"],"properties":{"page":{"type":"integer","description":"Current page."},"hasMore":{"type":"boolean"},"venues":{"type":"array","items":{"$ref":"#/components/schemas/Venue"}}}}}}},"429":{"description":"Rate limit exceeded (120 requests per minute per IP). Retry after the number of seconds in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/venues/{slug}":{"get":{"operationId":"getVenue","summary":"Venue details and its upcoming events","parameters":[{"name":"slug","in":"path","required":true,"description":"Venue slug (as in the page URL).","schema":{"type":"string"}}],"responses":{"200":{"description":"The venue.","content":{"application/json":{"schema":{"type":"object","required":["venue","events"],"properties":{"venue":{"$ref":"#/components/schemas/VenueDetail"},"events":{"type":"array","items":{"$ref":"#/components/schemas/Event"}}}}}}},"404":{"description":"Not found, not public, or demo content.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (120 requests per minute per IP). Retry after the number of seconds in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/artists":{"get":{"operationId":"listArtists","summary":"List artists with upcoming events","parameters":[{"name":"q","in":"query","required":false,"description":"Search text (artist name).","schema":{"type":"string"}},{"name":"genre","in":"query","required":false,"description":"Genre key, e.g. \"Techno\".","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"1-based page number.","schema":{"type":"integer","minimum":1,"maximum":200,"default":1}},{"name":"limit","in":"query","required":false,"description":"Page size (1-50). Larger values are clamped to 50.","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}}],"responses":{"200":{"description":"A page of artists.","content":{"application/json":{"schema":{"type":"object","required":["page","hasMore","artists"],"properties":{"page":{"type":"integer","description":"Current page."},"hasMore":{"type":"boolean"},"artists":{"type":"array","items":{"$ref":"#/components/schemas/Artist"}}}}}}},"429":{"description":"Rate limit exceeded (120 requests per minute per IP). Retry after the number of seconds in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/artists/{slug}":{"get":{"operationId":"getArtist","summary":"Artist details and upcoming events","parameters":[{"name":"slug","in":"path","required":true,"description":"Artist slug (as in the page URL).","schema":{"type":"string"}}],"responses":{"200":{"description":"The artist.","content":{"application/json":{"schema":{"type":"object","required":["artist","events"],"properties":{"artist":{"$ref":"#/components/schemas/ArtistDetail"},"events":{"type":"array","items":{"$ref":"#/components/schemas/Event"}}}}}}},"404":{"description":"Not found, not public, or demo content.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (120 requests per minute per IP). Retry after the number of seconds in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/feed.json":{"get":{"operationId":"eventFeed","summary":"Full feed of upcoming events with offers","description":"All upcoming public events (max 1000) with ticket offers, refreshed every 10 minutes. Descriptions are left out to keep the feed small; use /events/{slug} for them.","responses":{"200":{"description":"The feed.","content":{"application/json":{"schema":{"type":"object","required":["generatedAt","count","events"],"properties":{"generatedAt":{"type":"string","description":"Generation time (ISO 8601).","format":"date-time"},"count":{"type":"integer","description":"Number of events."},"events":{"type":"array","items":{"$ref":"#/components/schemas/EventDetail"}}}}}}},"429":{"description":"Rate limit exceeded (120 requests per minute per IP). Retry after the number of seconds in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/openapi.json":{"get":{"operationId":"openapi","summary":"This OpenAPI document","responses":{"200":{"description":"OpenAPI 3.1 document.","content":{"application/json":{"schema":{"type":"object"}}}},"429":{"description":"Rate limit exceeded (120 requests per minute per IP). Retry after the number of seconds in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Error code: not_found | invalid_genre | invalid_date | rate_limited | server_error."}}},"VenueRef":{"type":["object","null"],"properties":{"slug":{"type":"string","description":"Venue slug."},"name":{"type":"string","description":"Venue name."},"city":{"type":"string","description":"City."},"district":{"type":["string","null"],"description":"District."},"url":{"type":["string","null"],"description":"Venue page URL (null for demo venues).","format":"uri"}}},"ArtistRef":{"type":"object","properties":{"slug":{"type":"string","description":"Artist slug."},"name":{"type":"string","description":"Artist name."},"url":{"type":["string","null"],"description":"Artist page URL.","format":"uri"}}},"Event":{"type":"object","required":["id","slug","url","title","startsAt","timezone","city","status","currency"],"properties":{"id":{"type":"string","description":"Stable event id."},"slug":{"type":"string","description":"Event slug."},"url":{"type":"string","description":"Event page URL (buy tickets here).","format":"uri"},"title":{"type":"string","description":"Event title."},"startsAt":{"type":"string","description":"Start time (ISO 8601, UTC).","format":"date-time"},"endsAt":{"type":["string","null"],"description":"End time (ISO 8601, UTC).","format":"date-time"},"updatedAt":{"type":["string","null"],"description":"Last change of the event record.","format":"date-time"},"timezone":{"type":"string","description":"Local time zone of the event.","const":"Europe/Istanbul"},"city":{"type":"string","description":"City."},"genres":{"type":"array","items":{"type":"string"},"description":"Genre keys."},"status":{"type":"string","description":"Event status.","enum":["PUBLISHED","POSTPONED","CANCELLED"]},"saleMode":{"type":"string","description":"ON_SALE, RSVP (free registration), WAITLIST, or COMING_SOON (sale opening time in saleOpensAt).","enum":["ON_SALE","RSVP","WAITLIST","COMING_SOON"]},"isFestival":{"type":"boolean"},"isFree":{"type":"boolean","description":"RSVP event or all public ticket types are free."},"currency":{"type":"string","description":"ISO 4217 currency of all prices (TRY, EUR, USD)."},"priceFrom":{"type":["integer","null"],"description":"Lowest price on sale, in minor units; null when nothing is on sale."},"soldOut":{"type":"boolean","description":"No public ticket type is on sale or upcoming."},"image":{"type":["string","null"],"description":"Poster image URL.","format":"uri"},"venue":{"$ref":"#/components/schemas/VenueRef"},"artists":{"type":"array","items":{"$ref":"#/components/schemas/ArtistRef"}}}},"Offer":{"type":"object","required":["id","name","price","currency","availability"],"properties":{"id":{"type":"string","description":"Ticket type id."},"name":{"type":"string","description":"Ticket type name."},"description":{"type":["string","null"],"description":"Ticket type description."},"price":{"type":"integer","description":"Price in minor units (kuruş / cent)."},"currency":{"type":"string","description":"ISO 4217 currency."},"availability":{"type":"string","description":"schema.org availability.","enum":["InStock","LimitedAvailability","PreOrder","SoldOut"]},"salesStart":{"type":["string","null"],"description":"Sales window start.","format":"date-time"},"salesEnd":{"type":["string","null"],"description":"Sales window end.","format":"date-time"}}},"EventDetail":{"allOf":[{"$ref":"#/components/schemas/Event"},{"type":"object","properties":{"description":{"type":["string","null"],"description":"Event description (plain text)."},"ageLimit":{"type":"integer","description":"Minimum age (0 = none)."},"saleOpensAt":{"type":["string","null"],"description":"Sale opening time for COMING_SOON events.","format":"date-time"},"venue":{"type":["object","null"],"properties":{"slug":{"type":"string","description":"Venue slug."},"name":{"type":"string","description":"Venue name."},"city":{"type":"string","description":"City."},"district":{"type":["string","null"],"description":"District."},"url":{"type":["string","null"],"description":"Venue page URL.","format":"uri"},"address":{"type":["string","null"],"description":"Street address."},"lat":{"type":["number","null"]},"lng":{"type":["number","null"]}}},"organizer":{"type":["object","null"],"properties":{"slug":{"type":"string","description":"Organizer slug."},"name":{"type":"string","description":"Organizer name."},"url":{"type":["string","null"],"description":"Organizer page URL.","format":"uri"}}},"offers":{"type":"array","items":{"$ref":"#/components/schemas/Offer"}}}}]},"Venue":{"type":"object","required":["slug","name","city","url","upcoming"],"properties":{"slug":{"type":"string","description":"Venue slug."},"name":{"type":"string","description":"Venue name."},"city":{"type":"string","description":"City."},"district":{"type":["string","null"],"description":"District."},"type":{"type":["string","null"],"description":"Venue type key (CLUB, BAR, CONCERT_HALL, ...)."},"url":{"type":"string","description":"Venue page URL.","format":"uri"},"image":{"type":["string","null"],"description":"Photo URL.","format":"uri"},"upcoming":{"type":"integer","description":"Number of upcoming public events."}}},"VenueDetail":{"allOf":[{"$ref":"#/components/schemas/Venue"},{"type":"object","properties":{"address":{"type":["string","null"],"description":"Street address."},"lat":{"type":["number","null"]},"lng":{"type":["number","null"]},"capacity":{"type":["integer","null"]},"description":{"type":["string","null"],"description":"Venue description."}}}]},"Artist":{"type":"object","required":["slug","name","url","upcoming"],"properties":{"slug":{"type":"string","description":"Artist slug."},"name":{"type":"string","description":"Artist name."},"url":{"type":"string","description":"Artist page URL.","format":"uri"},"image":{"type":["string","null"],"description":"Image URL.","format":"uri"},"genres":{"type":"array","items":{"type":"string"}},"upcoming":{"type":"integer","description":"Number of upcoming public events."}}},"ArtistDetail":{"allOf":[{"$ref":"#/components/schemas/Artist"},{"type":"object","properties":{"bio":{"type":["string","null"],"description":"Short biography."},"links":{"type":"object","additionalProperties":{"type":"string","format":"uri"},"description":"Official links by key (spotify, instagram, soundcloud, youtube, website, ...)."}}}]}}}}