Update Event
PATCH /events/:eventId
You can update the following fields, described under Create Event: name, description, masterLanguage, translations, startDate, endDate, allDay, published, publishedAt, saleStartsAt, saleEndsAt, imageId, enableTickets, maxTickets. parentEventId can't be changed.
Fields you leave out stay as they are. null removes description, endDate, publishedAt, imageId and the overall limit maxTickets, and sets saleStartsAt and saleEndsAt back to the defaults: on sale from when the event is published until it ends. translations replaces all of the event's translations: send every language you want to keep, or [] to remove them all.
description, and the description of each translation, is rich text as under Rich text on Create Event: a string holding a JSON array of blocks, such as "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"Doors open at 18:30.\"}]}]". Plain text is refused.
Times are the museum's local time, written in ISO 8601 ending in Z as under Times on Create Event: 2026-07-01T14:00:00.000Z is 14:00 at the museum. endDate may not be before startDate, which is checked against the stored value when you send only one of them. An event sold from a seating map keeps maxTickets at null: its seats are its capacity.
The response is the updated Event, the same object Get Event returns.
To publish an event and start its sale on 1 May 2027 at 10:00 at the museum:
{ "published": true, "saleStartsAt": "2027-05-01T10:00:00.000Z" }
Series
A change to a main event is copied to all its dates, except what each date has of its own: startDate, endDate, published, publishedAt, saleStartsAt and saleEndsAt. So publishing a main event doesn't publish its dates.
A date only takes those six fields. Change anything else on its main event: any other field on a date gives SET_ON_MAIN_EVENT.
Errors
Errors are returned as { "errors": [{ "message": "EVENT_NOT_FOUND" }] }.
| Status | Message | When |
|---|---|---|
400 | EVENT_NAME_REQUIRED | name is blank |
400 | EVENT_END_BEFORE_START | endDate would be before startDate |
400 | EVENT_INVALID_MAX_TICKETS | maxTickets is below 1 |
400 | EVENT_INVALID_DESCRIPTION | description, or the description of a translation, isn't rich text as under Rich text on Create Event |
400 | SET_ON_MAIN_EVENT | The event is a date in a series and the body holds a field other than startDate, endDate, published, publishedAt, saleStartsAt and saleEndsAt |
400 | LANGUAGE_NOT_SUPPORTED | masterLanguage or the language of a translation isn't a language Loby supports |
400 | FIELD_NOT_ALLOWED: <field> | The body holds a field that isn't listed above, such as parentEventId. For a field in a translation, <field> is translations.<field> |
400 | INVALID_BODY | The body isn't a JSON object, a translation has no language, a field has the wrong JSON type, a field that may not be null is null, or a time isn't written as under Times on Create Event |
404 | EVENT_NOT_FOUND | The event doesn't exist, was deleted, belongs to another museum, or has the other mode (live or test) than your API key |