{"openapi":"3.0.0","info":{"title":"Ingolstadt_live Events API","version":"1.0.2","description":"\n## Allgemeines\n\nMit dieser API können Sie alle Events von Ingolstadt_live abrufen.\n\n- Diese API ist frei zur Verfügung und kann **ohne Authentifizierung** genutzt werden\n- Es gibt ein Rate-Limit von **100 Requests pro Stunde**\n- Diese API ist **paginated**, das bedeutet, dass nur **maximal 25 Events pro Seite** zurückgegeben werden.\n- Die API-Daten stehen unter der Lizenz **[CC0-1.0](https://creativecommons.org/public-domain/cc0/)** und können frei verwendet werden.\n- Die von der API zurückgegebenen Bilder, die von Veranstaltern hochgeladen werden, bleiben urheberrechtlich beim jeweiligen Veranstalter. Veranstalter bestätigen beim Upload, dass sie über die notwendigen Nutzungsrechte verfügen und dass die Bilder unter der Lizenz CC0 1.0 Universal (CC0-1.0) auf Open-Data-Plattformen oder vergleichbaren Diensten veröffentlicht werden dürfen (siehe AGB §4). Lizenz- und Rechteinhaberinformationen werden pro Bild in den Feldern imageCopyrightOwner / additionalImageCopyrightOwner* ausgegeben. Wenn keine Angabe gemacht wurde, gilt: „Veranstalter (AGB §4, CC0-1.0)“.\n\n---\n\n## Wichtige Informationen\nAufgrund von Performance Gründen und dem Aufbau unseres Systems **werden Filter nur auf die jetzige Page angewendet**. Das bedeutet, wenn Sie nach z.B. Events mit einer bestimmten Kategorie suchen, werden nur die Events auf der aktuellen Seite der pagination gefiltert. Das kann zu folge haben, dass die API ein leeres Array zurückgibt, obwohl es Events gibt, die dem Filter entsprechen. Um zu garantieren, dass Sie alle Events filtern, sollten Sie die API mit der nächsten Seite der pagination aufrufen und sich Ihr eigenes Array zusammenbauen. **Im \"meta\" Objekt finden Sie die Anzahl der Seiten, die Sie durchlaufen müssen.**\n\n\n## Beispielcode in Typescript\n```ts\n\n/* example typescript code */\n\nconst BASE_URL = 'https://ingolstadt.live'\n\nexport async function fetchEvents(searchparams?: URLSearchParams) {\n  try {\n    const res = await fetch(`${BASE_URL}/api/v1/events?${searchparams?.toString() ?? ''}`)\n\n    if (!res.ok) {\n      throw new Error('Failed to fetch events')\n    }\n\n    return res.json()\n  } catch (error) {\n    console.error('Error fetching events:', error)\n    return []\n  }\n}\n\n/* example function to go through all pages */\n\nexport async function fetchAllEvents(searchparams?: URLSearchParams) {\n  const events = []\n  const firstBatch = await fetchEvents(searchparams)\n  events.push(...firstBatch.data)\n\n  const remainingPages = Array.from({ length: firstBatch.meta.pageCount - 1 }, (_, i) => i + 2)\n\n  const pageResults = await Promise.all(\n    remainingPages.map((pageNum) => {\n      const params = new URLSearchParams(searchparams?.toString() ?? '')\n      params.set('page', pageNum.toString())\n      return fetchEvents(params)\n    }),\n  )\n\n  pageResults.forEach((page) => events.push(...page.data))\n\n  return events\n}\n\n```\n\n## Weitere Infos\n- [Event Management System](https://ems.ingolstadt.live)\n- [Support](mailto:emsi-support@komma-d.de)\n      ","contact":{"name":"Support","email":"emsi-support@komma-d.de"}},"paths":{"/api/v1/categories":{"get":{"tags":["Categories"],"summary":"List available event categories","responses":{"200":{"description":"List of categories","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":200},"data":{"type":"array","items":{"type":"object","properties":{"categories":{"type":"array","items":{"type":"string"}}}}},"meta":{"type":"object","properties":{"page":{"type":"integer","example":1},"maxEntriesPerPage":{"type":"integer","example":1},"license":{"type":"string","example":"CC0-1.0"}}}}}}}},"500":{"description":"Server error"}}}},"/api/v1/events/{id}":{"get":{"tags":["Events"],"summary":"Get a single published event by ID","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"Event ID"},{"in":"query","name":"type","schema":{"type":"string","enum":["json","ics"],"default":"json"},"description":"Optional response type. json returns a flattened event (default); ics returns an ICS file."}],"responses":{"200":{"description":"Event details","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":200},"data":{"type":"object","properties":{"id":{"type":"string"},"eventURL":{"type":"string"},"name":{"type":"string"},"subtitle":{"type":"string"},"description":{"type":"string"},"isCancelled":{"type":"boolean"},"isAccessible":{"type":"boolean"},"hasAiGeneratedContent":{"type":"boolean","description":"Whether the event uses AI-generated content. Defaults to false for legacy events."},"mainImageIsAiGenerated":{"type":"boolean","description":"Whether the event's main image is AI-generated. Defaults to false for legacy events."},"accessibility":{"type":"string"},"isPartOfSeries":{"type":"boolean"},"categories":{"type":"array","items":{"type":"string"}},"targetGroups":{"type":"array","items":{"type":"string"}},"onlineLink":{"type":"string","nullable":true,"description":"URL used to join an online event"},"rruleString":{"type":"string","nullable":true},"rruleHumanReadableString":{"type":"string","nullable":true},"nextDate":{"type":"string","nullable":true},"additionalDates":{"type":"array","items":{"type":"object","properties":{"startDate":{"type":"string"},"endDate":{"type":"string"},"startTime":{"type":"string"},"endTime":{"type":"string"},"entryTime":{"type":"string","nullable":true}}}},"imageURL":{"type":"string"},"imageLicense":{"type":"string","description":"SPDX license identifier for the image"},"imageCopyrightOwner":{"type":"string"},"additionalImageURL1":{"type":"string","nullable":true},"additionalImageCopyrightOwner1":{"type":"string","nullable":true},"additionalImageURL2":{"type":"string","nullable":true},"additionalImageCopyrightOwner2":{"type":"string","nullable":true},"startDate":{"type":"string"},"endDate":{"type":"string","nullable":true},"startTime":{"type":"string"},"endTime":{"type":"string"},"entryTime":{"type":"string","nullable":true},"isRepeating":{"type":"boolean"},"repeatFrequency":{"type":"string","enum":["none","daily","weekly","monthly"]},"isPermanent":{"type":"boolean"},"tickets":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quantity":{"type":"integer"},"price":{"type":"number"},"isFree":{"type":"boolean"},"description":{"type":"string"},"shopURL":{"type":"string"}},"required":["name","quantity","price","isFree"]}},"contacts":{"type":"array","nullable":true,"items":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"type":{"type":"string"},"links":{"type":"array","items":{"type":"string"}}},"required":["name","email","phone","type"]}},"highlightTag":{"type":"string","nullable":true},"sideTag":{"type":"string","nullable":true},"eventbriteURL":{"type":"string","nullable":true},"seriesId":{"type":"string","nullable":true},"venueId":{"type":"string","description":"Referenced venue ID; empty for custom and online venues"},"custom-venue":{"type":"object","description":"Inline venue details for custom and online venues","properties":{"name":{"type":"string"},"street":{"type":"string"},"streetNumber":{"type":"string"},"postalCode":{"type":"string"},"city":{"type":"string"},"additionalInfo":{"type":"string"},"isOnline":{"type":"boolean","description":"Whether the event takes place online"}},"required":["name","street","streetNumber","postalCode","city","additionalInfo"]},"creatorEmail":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"publishedAt":{"type":"string","nullable":true}},"required":["id","name","subtitle","description","isCancelled","isAccessible","hasAiGeneratedContent","mainImageIsAiGenerated","accessibility","isPartOfSeries","categories","targetGroups","imageURL","imageCopyrightOwner","startDate","startTime","endTime","isRepeating","repeatFrequency","isPermanent","tickets","venueId","creatorEmail","createdAt","updatedAt"]},"meta":{"type":"object","properties":{"license":{"type":"string","example":"CC0-1.0"}},"required":["license"]}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":400},"error":{"type":"string"}},"required":["statusCode","error"]}}}},"404":{"description":"Event not found","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":404},"error":{"type":"string"}},"required":["statusCode","error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":500},"error":{"type":"string"}},"required":["statusCode","error"]}}}}}}},"/api/v1/events":{"get":{"tags":["Events"],"summary":"List published events","parameters":[{"in":"query","name":"page","schema":{"type":"integer","minimum":1,"default":1},"description":"Omitting the page parameter will return the first page. If the page number is not a positive integer, the request will return a 400 error. If the page number is greater than the number of pages, the request will succeed but return an empty array in the data field."},{"in":"query","name":"categories","schema":{"type":"string"},"description":"Optional comma-separated list of categories to filter by (OR logic)"},{"in":"query","name":"targetGroups","schema":{"type":"string"},"description":"Optional comma-separated list of target groups to filter by (OR logic)"},{"in":"query","name":"maxPrice","schema":{"type":"number","minimum":0},"description":"Optional maximum ticket price. Matches events with any ticket priced at or below this value (free counts as 0)"},{"in":"query","name":"hasFreeTicket","schema":{"type":"boolean"},"description":"Optional boolean to filter events. true = only free events, false = exclude free events"},{"in":"query","name":"recurrance","schema":{"type":"string","enum":["none","daily","weekly","monthly"]},"description":"Optional recurrence filter matching event repeat frequency"},{"in":"query","name":"venueId","schema":{"type":"string"},"description":"Optional venue documentId to filter events by exact match"},{"in":"query","name":"akteurEmail","schema":{"type":"string"},"description":"Optional creator email to filter events (case-insensitive exact match)"},{"in":"query","name":"type","schema":{"type":"string","enum":["json","ics"],"default":"json"},"description":"Optional response type. json returns event objects (default); ics returns an array of ICS strings. Its highly recommended to use json because some events cant be converted to ICS and will be skipped in the process. The ics string will need to be parsed on your end first because the string contains new lines as `\\n` and wont be a valid ICS string until these are parsed correctly."},{"in":"query","name":"startDate","schema":{"type":"string","format":"date-time"},"description":"Optional ISO date-time string to filter events starting from this date. Repeating events are included if atleast one date of a range or a repeat is after the startDate (or within endDate range)"},{"in":"query","name":"includeInactive","schema":{"type":"boolean"},"description":"Optional boolean to include inactive events. Inactive events are events that have already happened and have ended. true = include inactive events, false = only active events - aka the events visible on the website (default)"},{"in":"query","name":"removePermanentEvents","schema":{"type":"boolean"},"description":"Optional boolean to exclude permanent exhibitions from the results. true = remove permanent exhibitions, false = keep them (default)"},{"in":"query","name":"endDate","schema":{"type":"string","format":"date-time"},"description":"Optional ISO date-time string to filter events up to (inclusive); combined with startDate range"},{"in":"query","name":"createdSince","schema":{"type":"string","format":"date-time"},"description":"Return events created at or after this ISO 8601 timestamp"},{"in":"query","name":"updatedSince","schema":{"type":"string","format":"date-time"},"description":"Return events updated at or after this ISO 8601 timestamp"},{"in":"query","name":"publishedSince","schema":{"type":"string","format":"date-time"},"description":"Return events published at or after this ISO 8601 timestamp"}],"responses":{"200":{"description":"List of events","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":200},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"eventURL":{"type":"string"},"name":{"type":"string"},"subtitle":{"type":"string"},"description":{"type":"string"},"isCancelled":{"type":"boolean"},"isAccessible":{"type":"boolean"},"hasAiGeneratedContent":{"type":"boolean","description":"Whether the event uses AI-generated content. Defaults to false for legacy events."},"mainImageIsAiGenerated":{"type":"boolean","description":"Whether the event's main image is AI-generated. Defaults to false for legacy events."},"accessibility":{"type":"string"},"isPartOfSeries":{"type":"boolean"},"categories":{"type":"array","items":{"type":"string"}},"targetGroups":{"type":"array","items":{"type":"string"}},"onlineLink":{"type":"string","nullable":true,"description":"URL used to join an online event"},"imageURL":{"type":"string"},"imageLicense":{"type":"string","description":"SPDX license identifier for the image"},"imageCopyrightOwner":{"type":"string"},"additionalImageURL1":{"type":"string","nullable":true},"additionalImageCopyrightOwner1":{"type":"string","nullable":true},"additionalImageURL2":{"type":"string","nullable":true},"additionalImageCopyrightOwner2":{"type":"string","nullable":true},"startDate":{"type":"string"},"endDate":{"type":"string","nullable":true},"startTime":{"type":"string"},"endTime":{"type":"string"},"entryTime":{"type":"string","nullable":true},"rruleString":{"type":"string","nullable":true},"rruleHumanReadableString":{"type":"string","nullable":true},"nextDate":{"type":"string","format":"date-time","nullable":true},"isRepeating":{"type":"boolean"},"additionalDates":{"type":"array","items":{"type":"object","properties":{"startDate":{"type":"string"},"endDate":{"type":"string"},"startTime":{"type":"string"},"endTime":{"type":"string"},"entryTime":{"type":"string","nullable":true}}}},"repeatFrequency":{"type":"string","enum":["none","daily","weekly","monthly"]},"isPermanent":{"type":"boolean"},"tickets":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quantity":{"type":"integer"},"price":{"type":"number"},"isFree":{"type":"boolean"},"description":{"type":"string"},"shopURL":{"type":"string"}},"required":["name","quantity","price","isFree"]}},"contacts":{"type":"array","nullable":true,"items":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"type":{"type":"string"},"links":{"type":"array","items":{"type":"string"}}},"required":["name","email","phone","type"]}},"highlightTag":{"type":"string","nullable":true},"sideTag":{"type":"string","nullable":true},"eventbriteURL":{"type":"string","nullable":true},"seriesId":{"type":"string","nullable":true},"venueId":{"type":"string","description":"Referenced venue ID; empty for custom and online venues"},"custom-venue":{"type":"object","description":"Inline venue details for custom and online venues","properties":{"name":{"type":"string"},"street":{"type":"string"},"streetNumber":{"type":"string"},"postalCode":{"type":"string"},"city":{"type":"string"},"additionalInfo":{"type":"string"},"isOnline":{"type":"boolean","description":"Whether the event takes place online"}},"required":["name","street","streetNumber","postalCode","city","additionalInfo"]},"creatorEmail":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"publishedAt":{"type":"string","nullable":true}},"required":["id","name","subtitle","description","isCancelled","isAccessible","hasAiGeneratedContent","mainImageIsAiGenerated","accessibility","isPartOfSeries","categories","targetGroups","imageURL","imageCopyrightOwner","startDate","startTime","endTime","isRepeating","repeatFrequency","isPermanent","tickets","venueId","creatorEmail","createdAt","updatedAt"]}},"meta":{"type":"object","properties":{"page":{"type":"integer","example":1},"maxEntriesPerPage":{"type":"integer","example":25},"eventCount":{"type":"integer","example":250},"pageCount":{"type":"integer","example":10},"license":{"type":"string","example":"CC0-1.0"}},"required":["page","maxEntriesPerPage","eventCount","pageCount","license"]}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":400},"error":{"type":"string"}},"required":["statusCode","error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":500},"error":{"type":"string"}},"required":["statusCode","error"]}}}}}}},"/api/v1/getAllEvents":{"get":{"tags":["Events"],"summary":"List all published events (type=ics -> 1 ics file)","description":"Returns every published event with the same filtering capabilities as `/api/v1/events`. When `type=ics`, a single aggregated ICS file is returned containing all matching events; otherwise the response is JSON.","parameters":[{"in":"query","name":"categories","schema":{"type":"string"},"description":"Optional comma-separated list of categories to filter by (OR logic)"},{"in":"query","name":"targetGroups","schema":{"type":"string"},"description":"Optional comma-separated list of target groups to filter by (OR logic)"},{"in":"query","name":"maxPrice","schema":{"type":"number","minimum":0},"description":"Optional maximum ticket price. Matches events with any ticket priced at or below this value (free counts as 0)"},{"in":"query","name":"hasFreeTicket","schema":{"type":"boolean"},"description":"Optional boolean to filter events. true = only free events, false = exclude free events"},{"in":"query","name":"recurrance","schema":{"type":"string","enum":["none","daily","weekly","monthly"]},"description":"Optional recurrence filter matching event repeat frequency"},{"in":"query","name":"venueId","schema":{"type":"string"},"description":"Optional venue documentId to filter events by exact match"},{"in":"query","name":"akteurEmail","schema":{"type":"string"},"description":"Optional creator email to filter events (case-insensitive exact match)"},{"in":"query","name":"type","schema":{"type":"string","enum":["json","ics"],"default":"json"},"description":"Optional response type. json returns event objects (default); ics returns a single ICS file containing all matching events."},{"in":"query","name":"startDate","schema":{"type":"string","format":"date-time"},"description":"Optional ISO date-time string to filter events starting from this date. Repeating events are included if at least one occurrence matches the range."},{"in":"query","name":"includeInactive","schema":{"type":"boolean"},"description":"Optional boolean to include inactive events. Inactive events are events that have already happened and have ended. true = include inactive events, false = only active events - aka the events visible on the website (default)"},{"in":"query","name":"removePermanentEvents","schema":{"type":"boolean"},"description":"Optional boolean to exclude permanent exhibitions from the results. true = remove permanent exhibitions, false = keep them (default)"},{"in":"query","name":"endDate","schema":{"type":"string","format":"date-time"},"description":"Optional ISO date-time string to filter events up to (inclusive); combined with startDate range"},{"in":"query","name":"createdSince","schema":{"type":"string","format":"date-time"},"description":"Return events created at or after this ISO 8601 timestamp"},{"in":"query","name":"updatedSince","schema":{"type":"string","format":"date-time"},"description":"Return events updated at or after this ISO 8601 timestamp"},{"in":"query","name":"publishedSince","schema":{"type":"string","format":"date-time"},"description":"Return events published at or after this ISO 8601 timestamp"}],"responses":{"200":{"description":"List of events or an ICS file depending on the requested type","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":200},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"eventURL":{"type":"string"},"name":{"type":"string"},"subtitle":{"type":"string"},"description":{"type":"string"},"isCancelled":{"type":"boolean"},"isAccessible":{"type":"boolean"},"hasAiGeneratedContent":{"type":"boolean","description":"Whether the event uses AI-generated content. Defaults to false for legacy events."},"mainImageIsAiGenerated":{"type":"boolean","description":"Whether the event's main image is AI-generated. Defaults to false for legacy events."},"accessibility":{"type":"string"},"isPartOfSeries":{"type":"boolean"},"categories":{"type":"array","items":{"type":"string"}},"targetGroups":{"type":"array","items":{"type":"string"}},"onlineLink":{"type":"string","nullable":true,"description":"URL used to join an online event"},"venueId":{"type":"string","description":"Referenced venue ID; empty for custom and online venues"},"custom-venue":{"type":"object","description":"Inline venue details for custom and online venues","properties":{"name":{"type":"string"},"street":{"type":"string"},"streetNumber":{"type":"string"},"postalCode":{"type":"string"},"city":{"type":"string"},"additionalInfo":{"type":"string"},"isOnline":{"type":"boolean","description":"Whether the event takes place online"}},"required":["name","street","streetNumber","postalCode","city","additionalInfo"]},"imageURL":{"type":"string"},"imageLicense":{"type":"string","description":"SPDX license identifier for the image"},"imageCopyrightOwner":{"type":"string"},"additionalImageURL1":{"type":"string","nullable":true},"additionalImageCopyrightOwner1":{"type":"string","nullable":true},"additionalImageURL2":{"type":"string","nullable":true},"additionalImageCopyrightOwner2":{"type":"string","nullable":true},"startDate":{"type":"string"},"endDate":{"type":"string","nullable":true},"startTime":{"type":"string"},"endTime":{"type":"string"},"entryTime":{"type":"string","nullable":true},"isRepeating":{"type":"boolean"},"nextDate":{"type":"string","nullable":true},"additionalDates":{"type":"array","items":{"type":"object","properties":{"startDate":{"type":"string"},"endDate":{"type":"string"},"startTime":{"type":"string"},"endTime":{"type":"string"},"entryTime":{"type":"string","nullable":true}}}},"repeatFrequency":{"type":"string","enum":["none","daily","weekly","monthly"]},"isPermanent":{"type":"boolean"},"tickets":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quantity":{"type":"integer"},"price":{"type":"number"},"isFree":{"type":"boolean"},"description":{"type":"string"},"shopURL":{"type":"string"}},"required":["name","quantity","price","isFree"]}},"contacts":{"type":"array","nullable":true,"items":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"type":{"type":"string"},"links":{"type":"array","items":{"type":"string"}}},"required":["name","email","phone","type"]}},"highlightTag":{"type":"string","nullable":true},"sideTag":{"type":"string","nullable":true},"rruleString":{"type":"string","nullable":true},"rruleHumanReadableString":{"type":"string","nullable":true}},"required":["id","name","subtitle","description","isCancelled","isAccessible","hasAiGeneratedContent","mainImageIsAiGenerated","accessibility","isPartOfSeries","categories","targetGroups","imageURL","imageCopyrightOwner","startDate","startTime","endTime","isRepeating","repeatFrequency","isPermanent","tickets","venueId","creatorEmail","createdAt","updatedAt"]}},"meta":{"type":"object","properties":{"eventCount":{"type":"integer","example":42},"license":{"type":"string","example":"CC0-1.0"}},"required":["eventCount","license"]}},"required":["statusCode","data","meta"]}},"text/calendar":{"schema":{"type":"string"},"example":"BEGIN:VCALENDAR\\r\\nVERSION:2.0\\r\\nPRODID:-//IFG Plattform//Events//DE\\r\\n...\n"}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":400},"error":{"type":"string"}},"required":["statusCode","error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":500},"error":{"type":"string"}},"required":["statusCode","error"]}}}}}}},"/api/v1/getAllEventsVictor":{"get":{"tags":["Events"],"summary":"List all active published events for Victor","parameters":[{"in":"query","name":"categories","schema":{"type":"string"},"description":"Optional comma-separated list of categories to filter by (OR logic)"},{"in":"query","name":"targetGroups","schema":{"type":"string"},"description":"Optional comma-separated list of target groups to filter by (OR logic)"},{"in":"query","name":"maxPrice","schema":{"type":"number","minimum":0},"description":"Optional maximum ticket price"},{"in":"query","name":"hasFreeTicket","schema":{"type":"boolean"},"description":"true returns only free events; false excludes free events"},{"in":"query","name":"recurrance","schema":{"type":"string","enum":["none","daily","weekly","monthly"]},"description":"Optional recurrence filter"},{"in":"query","name":"venueId","schema":{"type":"string"},"description":"Optional venue documentId"},{"in":"query","name":"akteurEmail","schema":{"type":"string"},"description":"Optional creator email"},{"in":"query","name":"type","schema":{"type":"string","enum":["json","ics"],"default":"json"},"description":"Optional response type"},{"in":"query","name":"startDate","schema":{"type":"string","format":"date-time"},"description":"Optional event occurrence range start"},{"in":"query","name":"endDate","schema":{"type":"string","format":"date-time"},"description":"Optional event occurrence range end"},{"in":"query","name":"createdSince","schema":{"type":"string","format":"date-time"},"description":"Return events created at or after this ISO 8601 timestamp"},{"in":"query","name":"updatedSince","schema":{"type":"string","format":"date-time"},"description":"Return events updated at or after this ISO 8601 timestamp"},{"in":"query","name":"publishedSince","schema":{"type":"string","format":"date-time"},"description":"Return events published at or after this ISO 8601 timestamp"}],"responses":{"200":{"description":"List of active published events"},"400":{"description":"Invalid request"},"500":{"description":"Server error"}}}},"/api/v1/series/{id}":{"get":{"tags":["Series"],"summary":"Get a single event series by ID","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"Series ID"}],"responses":{"200":{"description":"Series details","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":200},"data":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"imageURL":{"type":"string"},"imageCopyrightOwner":{"type":"string"},"imageLicense":{"type":"string","description":"SPDX license identifier for the image"},"startDate":{"type":"string"},"endDate":{"type":"string"},"isCancelled":{"type":"boolean"},"isGlobal":{"type":"boolean","description":"Whether the series can be assigned by other event organizers; false for legacy series"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"publishedAt":{"type":"string"}},"required":["id","name","imageURL","imageCopyrightOwner","startDate","endDate","isCancelled","isGlobal","createdAt","updatedAt","publishedAt"]},"meta":{"type":"object","properties":{"page":{"type":"integer","example":1},"maxEntriesPerPage":{"type":"integer","example":1},"license":{"type":"string","example":"CC0-1.0"}}}}}}}},"404":{"description":"Series not found","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":404},"error":{"type":"string"}},"required":["statusCode","error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":500},"error":{"type":"string"}},"required":["statusCode","error"]}}}}}}},"/api/v1/series":{"get":{"tags":["Series"],"summary":"List published event series","parameters":[{"in":"query","name":"page","schema":{"type":"integer","minimum":1,"default":1},"description":"Page number (>= 1)"}],"responses":{"200":{"description":"List of event series","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":200},"data":{"type":"object","properties":{"series":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"imageURL":{"type":"string"},"imageCopyrightOwner":{"type":"string"},"imageLicense":{"type":"string","description":"SPDX license identifier for the image"},"startDate":{"type":"string"},"endDate":{"type":"string"},"isCancelled":{"type":"boolean"},"isGlobal":{"type":"boolean","description":"Whether the series can be assigned by other event organizers; false for legacy series"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"publishedAt":{"type":"string"}},"required":["id","name","imageURL","imageCopyrightOwner","startDate","endDate","isCancelled","isGlobal","createdAt","updatedAt","publishedAt"]}}}},"meta":{"type":"object","properties":{"page":{"type":"integer","example":1},"maxEntriesPerPage":{"type":"integer","example":25},"license":{"type":"string","example":"CC0-1.0"}}}}}}}},"400":{"description":"Invalid page number"},"500":{"description":"Server error"}}}},"/api/v1/targetGroups":{"get":{"tags":["TargetGroups"],"summary":"List available target groups","responses":{"200":{"description":"List of target groups","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":200},"data":{"type":"object","properties":{"targetGroups":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","properties":{"page":{"type":"integer","example":1},"maxEntriesPerPage":{"type":"integer","example":1},"license":{"type":"string","example":"CC0-1.0"}}}}}}}},"500":{"description":"Server error"}}}},"/api/v1/venues/{id}":{"get":{"tags":["Venues"],"summary":"Get a single venue by ID","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"Venue ID"}],"responses":{"200":{"description":"Venue details","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":200},"data":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"imageURL":{"type":"string","nullable":true},"imageCopyrightOwner":{"type":"string","nullable":true},"imageLicense":{"type":"string","nullable":true,"description":"SPDX license identifier for the image"},"city":{"type":"string","nullable":true},"street":{"type":"string","nullable":true},"houseNumber":{"type":"string","nullable":true},"postalCode":{"type":"string","nullable":true},"country":{"type":"string","nullable":true},"venueType":{"type":"string"},"publishedAt":{"type":"string","nullable":true},"updatedAt":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true}},"required":["id","name","description","venueType"]},"meta":{"type":"object","properties":{"page":{"type":"integer","example":1},"maxEntriesPerPage":{"type":"integer","example":1},"license":{"type":"string","example":"CC0-1.0"}}}}}}}},"404":{"description":"Venue not found","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":404},"error":{"type":"string"}},"required":["statusCode","error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":500},"error":{"type":"string"}},"required":["statusCode","error"]}}}}}}},"/api/v1/venues":{"get":{"tags":["Venues"],"summary":"List venues","parameters":[{"in":"query","name":"page","schema":{"type":"integer","minimum":1,"default":1},"description":"Page number (>= 1)"}],"responses":{"200":{"description":"List of venues","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":200},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"imageURL":{"type":"string","nullable":true},"imageCopyrightOwner":{"type":"string","nullable":true},"imageLicense":{"type":"string","nullable":true,"description":"SPDX license identifier for the image"},"city":{"type":"string","nullable":true},"street":{"type":"string","nullable":true},"houseNumber":{"type":"string","nullable":true},"postalCode":{"type":"string","nullable":true},"country":{"type":"string","nullable":true},"venueType":{"type":"string"},"publishedAt":{"type":"string","nullable":true},"updatedAt":{"type":"string","nullable":true},"createdAt":{"type":"string","nullable":true}},"required":["id","name","description","venueType"]}},"meta":{"type":"object","properties":{"page":{"type":"integer","example":1},"maxEntriesPerPage":{"type":"integer","example":25},"license":{"type":"string","example":"CC0-1.0"}}}}}}}},"400":{"description":"Invalid page number"},"500":{"description":"Server error"}}}}},"components":{},"tags":[]}