Appearance
Get event collection (storefront callers see active events only)
GET
/rest/v1/event/event
Storefront callers — guest (no token) and customer — receive only active events (events.active = 1): filter[active] is server-forced to 1 for them, so a supplied value is ignored rather than combined. Parity with the legacy storefront listing, which forces the same predicate (Adv_events.php:61 via Adv_events_model::getEvents()). events.active is NULLABLE, and = 1 is the comparison legacy compiles, so a NULL-active event is withheld too. ?sort=dateChanged is denied for storefront callers — it ordered the list by a column their payload withholds, with no forced filter making it constant. ?sort=active is NOT denied: under the forced filter it orders by a constant, so the denial would cost a caller a sort and close nothing. Backend callers are unaffected and may filter and sort by both freely to see inactive events. filter[datetimeStartGte] / filter[datetimeStartLt] / filter[datetimeEndGte] / filter[datetimeEndLt] are OPT-IN one-sided datetime bounds over events.datetime_start and events.datetime_end, available to EVERY caller including guests — they are what a headless storefront builds an upcoming-events widget or an events archive out of. The bounds are HALF-OPEN per column: inclusive lower (Gte), exclusive upper (Lt), so adjacent windows partition without double-counting an event on the boundary. They NARROW WITHIN the storefront forced filter[active]=1 rather than bypassing it. No date window is applied by default: with no bound supplied the listing returns past events too, which is parity with the legacy listing. SEND A WELL-FORMED DATETIME: a malformed bound is not rejected (this API has no 4xx path for a filter value) and is not dropped either — the database coerces it, so an unparseable Gte bound widens to "has a date at all" and an unparseable Lt bound matches nothing.
Parameters
Query Parameters
filter[id]
Filter by event IDs
Type
string
filter[active]
Filter by active status. Backend callers only — for storefront (guest/customer) callers this value is server-forced to 1 and any supplied value is ignored.
Type
string
filter[datetimeStartGte]
INCLUSIVE lower bound on the event start — matches events.datetime_start >= value, so an event starting exactly at the value IS returned. This is the "upcoming events" query: filter[datetimeStartGte]=NULL >= value is NULL, so an event saved with no start date is EXCLUDED as soon as this filter is supplied, while an unfiltered listing still returns it.
Type
string
Format
"date-time"filter[datetimeStartLt]
EXCLUSIVE upper bound on the event start — matches events.datetime_start < value, so an event starting exactly at the value is NOT returned. Paired with filter[datetimeStartGte] it forms a half-open [lower, upper) window, which is what lets two adjacent windows partition a calendar without either dropping or double-counting an event on the boundary. Same NULL semantics as filter[datetimeStartGte].
Type
string
Format
"date-time"filter[datetimeEndGte]
INCLUSIVE lower bound on the event end — matches events.datetime_end >= value. filter[datetimeStartLt]=X combined with filter[datetimeEndGte]=X expresses "events running on date X", so no dedicated parameter is offered for it. That composition APPROXIMATES the containment condition the legacy model applies (Adv_events_model::applyConditions()) rather than reproducing it exactly: legacy uses an INCLUSIVE lower side (datetime_start <= X), this composes to an EXCLUSIVE one (datetime_start < X), because the exclusive upper bound is what is exposed on that column. The two differ for exactly one case — an event starting EXACTLY at X, which legacy counts as running at X and this composition excludes. events.datetime_end is NULLABLE, with the same exclusion semantics as the start bounds.
Type
string
Format
"date-time"filter[datetimeEndLt]
EXCLUSIVE upper bound on the event end — matches events.datetime_end < value. This is the "past events / archive" query: filter[datetimeEndLt]=
Type
string
Format
"date-time"filter[title.el]
Filter by event title (Greek, partial)
Type
string
filter[title.en]
Filter by event title (English, partial)
Type
string
filter[slug.el]
Filter by event slug (Greek)
Type
string
filter[slug.en]
Filter by event slug (English)
Type
string
sort
Sort order
Type
string
page
Page number
Type
integer
limit
Pagination limit
Type
integer
with
With relations (e.g., translations,categories)
Type
string
Responses
Successful operation
application/json
JSON
"string"